From 899eb9bc4a435b7ba5bedbcb5244e17a2e4ec26a Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L. de Mello" Date: Wed, 14 Aug 2024 23:26:11 -0300 Subject: [PATCH] feat(bot,events): new event handling --- internals/discord/bot/bot.go | 2 +- internals/discord/bot/events.go | 14 +++++++ internals/discord/bot/events/guild.go | 53 ++++++++++++++++++++++++ internals/discord/bot/events/messages.go | 25 +++++++++++ internals/discord/bot/handlers.go | 34 --------------- 5 files changed, 93 insertions(+), 35 deletions(-) create mode 100644 internals/discord/bot/events.go create mode 100644 internals/discord/bot/events/guild.go create mode 100644 internals/discord/bot/events/messages.go delete mode 100644 internals/discord/bot/handlers.go diff --git a/internals/discord/bot/bot.go b/internals/discord/bot/bot.go index 46d55e3..f4fb408 100644 --- a/internals/discord/bot/bot.go +++ b/internals/discord/bot/bot.go @@ -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 diff --git a/internals/discord/bot/events.go b/internals/discord/bot/events.go new file mode 100644 index 0000000..eb43d76 --- /dev/null +++ b/internals/discord/bot/events.go @@ -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) + } +} diff --git a/internals/discord/bot/events/guild.go b/internals/discord/bot/events/guild.go new file mode 100644 index 0000000..fd35edf --- /dev/null +++ b/internals/discord/bot/events/guild.go @@ -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)) + } + } +} diff --git a/internals/discord/bot/events/messages.go b/internals/discord/bot/events/messages.go new file mode 100644 index 0000000..e1462f1 --- /dev/null +++ b/internals/discord/bot/events/messages.go @@ -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) { + +} diff --git a/internals/discord/bot/handlers.go b/internals/discord/bot/handlers.go deleted file mode 100644 index a8c20a4..0000000 --- a/internals/discord/bot/handlers.go +++ /dev/null @@ -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) - } -}