feat(bot,events): new event handling
This commit is contained in:
@@ -34,7 +34,7 @@ func NewBot(token string, db guilddb.GuildDB, translator translator.Translator,
|
||||
}
|
||||
|
||||
func (b *Bot) Start() error {
|
||||
b.registerHandlers()
|
||||
b.registerEventHandlers()
|
||||
|
||||
if err := b.session.Open(); err != nil {
|
||||
return err
|
||||
|
||||
14
internals/discord/bot/events.go
Normal file
14
internals/discord/bot/events.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package bot
|
||||
|
||||
import "dislate/internals/discord/bot/events"
|
||||
|
||||
func (b *Bot) registerEventHandlers() {
|
||||
ehs := []any{
|
||||
events.NewGuildCreate(b.logger, b.db).Serve,
|
||||
events.NewMessageCreate(b.logger, b.db).Serve,
|
||||
events.NewReady(b.logger, b.db).Serve,
|
||||
}
|
||||
for _, h := range ehs {
|
||||
b.session.AddHandler(h)
|
||||
}
|
||||
}
|
||||
53
internals/discord/bot/events/guild.go
Normal file
53
internals/discord/bot/events/guild.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package events
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
|
||||
"dislate/internals/guilddb"
|
||||
|
||||
dgo "github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
type GuildCreate struct {
|
||||
log *slog.Logger
|
||||
db guilddb.GuildDB
|
||||
}
|
||||
|
||||
func NewGuildCreate(log *slog.Logger, db guilddb.GuildDB) GuildCreate {
|
||||
return GuildCreate{log, db}
|
||||
}
|
||||
func (h GuildCreate) Serve(s *dgo.Session, e *dgo.GuildCreate) {
|
||||
err := h.db.GuildInsert(guilddb.Guild{ID: e.Guild.ID})
|
||||
|
||||
if err != nil {
|
||||
h.log.Warn("Failed to add guild to database",
|
||||
slog.String("id", e.Guild.ID),
|
||||
slog.String("err", err.Error()),
|
||||
)
|
||||
} else {
|
||||
h.log.Info("Added guild", slog.String("id", e.Guild.ID))
|
||||
}
|
||||
}
|
||||
|
||||
type Ready struct {
|
||||
log *slog.Logger
|
||||
db guilddb.GuildDB
|
||||
}
|
||||
|
||||
func NewReady(log *slog.Logger, db guilddb.GuildDB) EventHandler[*dgo.Ready] {
|
||||
return Ready{log, db}
|
||||
}
|
||||
func (h Ready) Serve(s *dgo.Session, e *dgo.Ready) {
|
||||
for _, g := range e.Guilds {
|
||||
err := h.db.GuildInsert(guilddb.Guild{ID: g.ID})
|
||||
|
||||
if err != nil {
|
||||
h.log.Warn("Failed to add guild to database",
|
||||
slog.String("id", g.ID),
|
||||
slog.String("err", err.Error()),
|
||||
)
|
||||
} else {
|
||||
h.log.Info("Added guild", slog.String("id", g.ID))
|
||||
}
|
||||
}
|
||||
}
|
||||
25
internals/discord/bot/events/messages.go
Normal file
25
internals/discord/bot/events/messages.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package events
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
|
||||
"dislate/internals/guilddb"
|
||||
|
||||
dgo "github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
type EventHandler[E any] interface {
|
||||
Serve(*dgo.Session, E)
|
||||
}
|
||||
|
||||
type MessageCreate struct {
|
||||
log *slog.Logger
|
||||
db guilddb.GuildDB
|
||||
}
|
||||
|
||||
func NewMessageCreate(log *slog.Logger, db guilddb.GuildDB) MessageCreate {
|
||||
return MessageCreate{log, db}
|
||||
}
|
||||
func (h MessageCreate) Serve(s *dgo.Session, e *dgo.MessageCreate) {
|
||||
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
package bot
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"dislate/internals/guilddb"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
type handler any
|
||||
|
||||
func (b *Bot) handlers() []handler {
|
||||
hs := []handler{
|
||||
func(s *discordgo.Session, r *discordgo.Ready) {
|
||||
for _, g := range r.Guilds {
|
||||
err := b.db.GuildInsert(guilddb.Guild{ID: g.ID})
|
||||
if err != nil {
|
||||
log.Printf("ERROR: Failed to add guild %s to database: %s", g.ID, err)
|
||||
} else {
|
||||
log.Printf("Added guild %s", g.ID)
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
return hs
|
||||
}
|
||||
|
||||
func (b *Bot) registerHandlers() {
|
||||
for _, h := range b.handlers() {
|
||||
b.session.AddHandler(h)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user