aboutsummaryrefslogtreecommitdiff
path: root/messagectx.go
blob: 75d6ce6c3acce0efa0be7324941a44206b0a9eeb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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 := ""

	log.Debugf("matches: %v", matches)

	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 !tts {
		ctx.ChannelMessageSend(ctx.ChannelID, str)
		return
	}

	ctx.ChannelMessageSendTTS(ctx.ChannelID, str)
}