-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdiscord.go
86 lines (73 loc) · 1.72 KB
/
discord.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
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 sm_report
import (
"github.com/bwmarrin/discordgo"
"github.com/go-co-op/gocron"
"github.com/r4g3baby/sm-report/config"
"time"
)
type handler struct {
f interface{}
once bool
}
var (
scheduler = gocron.NewScheduler(time.UTC)
session *discordgo.Session
handlers []handler
)
func StartBot() {
discordgo.Logger = func(msgL, caller int, format string, a ...interface{}) {
switch msgL {
case discordgo.LogError:
config.Logger.Errorf(format, a)
case discordgo.LogWarning:
config.Logger.Warnf(format, a)
case discordgo.LogInformational:
config.Logger.Infof(format, a)
case discordgo.LogDebug:
config.Logger.Debugf(format, a)
}
}
var err error
if session, err = discordgo.New("Bot " + config.Config.Bot.Token); err != nil {
config.Logger.Fatalw("failed to create bot session",
"error", err,
)
}
session.AddHandler(func(s *discordgo.Session, _ *discordgo.Ready) {
if err := s.UpdateStatusComplex(discordgo.UpdateStatusData{
Status: "dnd",
Activities: []*discordgo.Activity{{
Type: 3, // Watching
Name: "for reports (・-・)",
}},
}); err != nil {
config.Logger.Errorw("failed to update bot status",
"error", err,
)
}
})
for _, handler := range handlers {
if handler.once {
session.AddHandlerOnce(handler.f)
} else {
session.AddHandler(handler.f)
}
}
if err := session.Open(); err != nil {
config.Logger.Fatalw("failed to open bot connection",
"error", err,
)
}
scheduler.StartAsync()
config.Logger.Infow("bot is now running",
"username", session.State.User.Username,
)
}
func ShutdownBot() {
scheduler.Stop()
if err := session.Close(); err != nil {
config.Logger.Errorw("failed to close bot session",
"error", err,
)
}
}