all repos — disgord @ 585845a7da99f6478c85019d190eb7f9446c55e4

A simple Discord bot in Go.

main.go (view raw)

 1package main
 2
 3import (
 4	"os"
 5	"os/signal"
 6
 7	"github.com/birabittoh/disgord/src"
 8	g "github.com/birabittoh/disgord/src/globals"
 9	"github.com/birabittoh/disgord/src/music"
10	"github.com/birabittoh/disgord/src/myconfig"
11	"github.com/birabittoh/disgord/src/mylog"
12	"github.com/bwmarrin/discordgo"
13)
14
15var logger = mylog.NewLogger(os.Stdout, "init", mylog.DEBUG)
16
17func messageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
18	if m.Author.ID == s.State.User.ID {
19		// logger.Debugf("Ignoring own message: %s", m.Content)
20		return
21	}
22
23	logger.Debug("Got a message: " + m.Content)
24
25	response, ok, err := src.HandleCommand(s, m)
26	if err != nil {
27		logger.Errorf("could not handle command: %s", err)
28		return
29	}
30	if !ok {
31		return
32	}
33	if response == "" {
34		logger.Debug("got empty response")
35		return
36	}
37
38	_, err = s.ChannelMessageSend(m.ChannelID, response)
39	if err != nil {
40		logger.Errorf("could not send message: %s", err)
41	}
42}
43
44func readyHandler(s *discordgo.Session, r *discordgo.Ready) {
45	logger.Infof("Logged in as %s", r.User.String())
46}
47
48func vsuHandler(s *discordgo.Session, vsu *discordgo.VoiceStateUpdate) {
49	if vsu.UserID != s.State.User.ID {
50		// update is not from this bot
51		return
52	}
53
54	music.HandleBotVSU(vsu)
55}
56
57func main() {
58	logger.Info("Starting bot... Commit " + g.CommitID)
59	var err error
60	g.Config, err = myconfig.New[g.MyConfig]("config.json")
61	if err != nil {
62		logger.Errorf("could not load config: %s", err)
63	}
64
65	session, err := discordgo.New("Bot " + g.Config.Values.Token)
66	if err != nil {
67		logger.Fatalf("could not create bot session: %s", err)
68	}
69
70	src.InitHandlers()
71	session.AddHandler(messageHandler)
72	session.AddHandler(readyHandler)
73	session.AddHandler(vsuHandler)
74
75	err = session.Open()
76	if err != nil {
77		logger.Fatalf("could not open session: %s", err)
78	}
79
80	sigch := make(chan os.Signal, 1)
81	signal.Notify(sigch, os.Interrupt)
82	<-sigch
83
84	logger.Info("Stopping gracefully...")
85	err = session.Close()
86	if err != nil {
87		logger.Errorf("could not close session: %s", err)
88	}
89}