-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathhandlers.go
57 lines (48 loc) · 1.9 KB
/
handlers.go
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
package main
import (
"fmt"
"github.com/bwmarrin/discordgo"
"github.com/gompus/snowflake"
"log"
)
// registerHandlers registers all needed handlers for the current session.
func (a *app) registerHandlers() {
a.session.AddHandler(a.handleReady)
a.session.AddHandler(a.handleGuildJoin)
a.session.AddHandler(a.handleVoiceServerUpdate)
a.session.AddHandler(a.cmds.handle)
}
// handleReady handles incoming discordgo.Ready events. It creates all necessary
// components to interact with the lavalink server and registers the slash-commands
// on all guilds.
func (a *app) handleReady(s *discordgo.Session, evt *discordgo.Ready) {
a.sessionID = evt.SessionID
if err := a.createClient(); err != nil {
log.Fatalln("Failed to create waterlink client:", err)
}
if err := a.createConnection(); err != nil {
log.Fatalln("Failed to create waterlink connection:", err)
}
a.registerCommands()
for _, guild := range a.session.State.Guilds {
if err := a.cmds.create(a.session, guild.ID); err != nil {
fmt.Printf("Failed to create slash-commands on guild %q: %s\n", guild.ID, err)
}
}
log.Printf("Bot %s#%s is ready to serve %d guilds!\n", evt.User.Username, evt.User.Discriminator, len(evt.Guilds))
}
// handleGuildJoin handles incoming discordgo.GuildCreate events. It registers
// the slash-commands on the new guild.
func (a *app) handleGuildJoin(s *discordgo.Session, evt *discordgo.GuildCreate) {
if err := a.cmds.create(s, evt.ID); err != nil {
log.Printf("Failed to create slash-commands on guild %q: %s\n", evt.ID, err)
}
}
// handleVoiceServerUpdate handles incoming discordgo.VoiceServerUpdate events.
func (a *app) handleVoiceServerUpdate(_ *discordgo.Session, evt *discordgo.VoiceServerUpdate) {
g := a.conn.Guild(snowflake.MustParse(evt.GuildID))
err := g.UpdateVoice(a.sessionID, evt.Token, evt.Endpoint)
if err != nil {
log.Printf("Failed to update voice server for guild %q: %s\n", evt.GuildID, err)
}
}