feat(bot,events): new event handling

This commit is contained in:
Gustavo "Guz" L. de Mello
2024-08-14 23:26:11 -03:00
parent 85e278d245
commit 899eb9bc4a
5 changed files with 93 additions and 35 deletions

View File

@@ -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

View 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)
}
}

View 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))
}
}
}

View 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) {
}

View File

@@ -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)
}
}