From c6e5779f22b18b971f82ddd2c5de81015ac9740c Mon Sep 17 00:00:00 2001 From: Nathan Perry Date: Wed, 26 Jul 2017 21:39:49 -0400 Subject: move messagectx to its own file --- messagectx.go | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 messagectx.go (limited to 'messagectx.go') diff --git a/messagectx.go b/messagectx.go new file mode 100644 index 0000000..ee38f5f --- /dev/null +++ b/messagectx.go @@ -0,0 +1,84 @@ +package thulani + +import ( + "strings" + "sync" + + "github.com/bwmarrin/discordgo" +) + +type messageCtx struct { + sync.Mutex + + *discordgo.Session + *discordgo.MessageCreate + + Command string + Matched bool + + Channel *discordgo.Channel + Member *discordgo.Member + Guild *discordgo.Guild +} + +func newCtx(s *discordgo.Session, m *discordgo.MessageCreate) (*messageCtx, error) { + matches := regex.FindStringSubmatch(m.Content) + command := "" + + if len(matches) != 0 { + command = strings.Split(matches[1], " ")[0] + } + + channel, err := s.State.Channel(m.ChannelID) + if err != nil { + return nil, err + } + + var ( + wg sync.WaitGroup + guild *discordgo.Guild + member *discordgo.Member + gErr, mErr error + ) + + wg.Add(2) + go func() { + guild, gErr = s.State.Guild(channel.GuildID) + defer wg.Done() + }() + + go func() { + member, mErr = s.GuildMember(channel.GuildID, m.Author.ID) + defer wg.Done() + }() + wg.Wait() + + if gErr != nil { + return nil, gErr + } + + if mErr != nil { + return nil, mErr + } + + return &messageCtx{ + Session: s, + MessageCreate: m, + + Command: command, + Matched: len(matches) == 0, + + Channel: channel, + Guild: guild, + Member: member, + }, nil +} + +func (ctx *messageCtx) sendMessage(str string, tts bool) { + if !ctx.Tts { + ctx.ChannelMessageSend(ctx.ChannelID, str) + return + } + + ctx.ChannelMessageSendTTS(ctx.ChannelID, str) +} -- cgit v1.3.1