diff options
Diffstat (limited to 'events.go')
| -rw-r--r-- | events.go | 79 |
1 files changed, 39 insertions, 40 deletions
@@ -8,8 +8,9 @@ import ( "git.anhgelus.world/anhgelus/les-copaings-bot/config" "git.anhgelus.world/anhgelus/les-copaings-bot/exp" "git.anhgelus.world/anhgelus/les-copaings-bot/user" - "github.com/anhgelus/gokord/logger" - discordgo "github.com/nyttikord/gokord" + "github.com/anhgelus/gokord" + "github.com/nyttikord/gokord/bot" + "github.com/nyttikord/gokord/event" ) const ( @@ -22,12 +23,12 @@ var ( connectedSince = map[string]int64{} ) -func OnMessage(s *discordgo.Session, m *discordgo.MessageCreate) { +func OnMessage(s bot.Session, m *event.MessageCreate) { if m.Author.Bot { return } cfg := config.GetGuildConfig(m.GuildID) - if cfg.IsDisabled(m.ChannelID) { + if cfg.IsDisabled(s, m.ChannelID) { return } c := user.GetCopaing(m.Author.ID, m.GuildID) @@ -37,28 +38,29 @@ func OnMessage(s *discordgo.Session, m *discordgo.MessageCreate) { m.Member.GuildID = m.GuildID xp := min(exp.MessageXP(uint(len(trimmed)), exp.CalcDiversity(trimmed)), MaxXpPerMessage) c.AddXP(s, m.Member, xp, func(_ uint, _ uint) { - if err := s.MessageReactionAdd(m.ChannelID, m.Message.ID, "⬆"); err != nil { - logger.Alert( - "events.go - add reaction for new level", err.Error(), - "channel id", m.ChannelID, - "message id", m.Message.ID, + if err := s.ChannelAPI().MessageReactionAdd(m.ChannelID, m.Message.ID, "⬆"); err != nil { + s.Logger().Error( + "add reaction for new level", + "error", err, + "channel", m.ChannelID, + "message", m.Message.ID, ) } }) } -func OnVoiceUpdate(s *discordgo.Session, e *discordgo.VoiceStateUpdate) { +func OnVoiceUpdate(s bot.Session, e *event.VoiceStateUpdate) { if e.Member.User.Bot { return } cfg := config.GetGuildConfig(e.GuildID) - if (e.BeforeUpdate == nil || cfg.IsDisabled(e.BeforeUpdate.ChannelID)) && e.ChannelID != "" { - if cfg.IsDisabled(e.ChannelID) { + if (e.BeforeUpdate == nil || cfg.IsDisabled(s, e.BeforeUpdate.ChannelID)) && e.ChannelID != "" { + if cfg.IsDisabled(s, e.ChannelID) { return } onConnection(s, e) - } else if e.BeforeUpdate != nil && (e.ChannelID == "" || cfg.IsDisabled(e.ChannelID)) { - if cfg.IsDisabled(e.BeforeUpdate.ChannelID) { + } else if e.BeforeUpdate != nil && (e.ChannelID == "" || cfg.IsDisabled(s, e.ChannelID)) { + if cfg.IsDisabled(s, e.BeforeUpdate.ChannelID) { return } onDisconnect(s, e) @@ -69,64 +71,61 @@ func genMapKey(guildID string, userID string) string { return fmt.Sprintf("%s:%s", guildID, userID) } -func onConnection(_ *discordgo.Session, e *discordgo.VoiceStateUpdate) { - logger.Debug("User connected", "username", e.Member.DisplayName()) +func onConnection(s bot.Session, e *event.VoiceStateUpdate) { + s.Logger().Debug("user connected", "user", e.Member.DisplayName()) connectedSince[genMapKey(e.GuildID, e.UserID)] = time.Now().Unix() } -func onDisconnect(s *discordgo.Session, e *discordgo.VoiceStateUpdate) { +func onDisconnect(s bot.Session, e *event.VoiceStateUpdate) { now := time.Now().Unix() c := user.GetCopaing(e.UserID, e.GuildID) // check the validity of user con, ok := connectedSince[genMapKey(e.GuildID, e.UserID)] if !ok || con == NotConnected { - logger.Warn(fmt.Sprintf( - "User %s diconnect from a vocal but was registered as not connected", e.Member.DisplayName(), - )) + s.Logger().Warn( + "user disconnect from a vocal but was registered as not connected", + "user", e.Member.DisplayName(), + ) return } timeInVocal := now - con - logger.Debug("User disconnected", "username", e.Member.DisplayName(), "time in vocal", timeInVocal) + s.Logger().Debug("user disconnected", "user", e.Member.DisplayName(), "time in vocal", timeInVocal) connectedSince[genMapKey(e.GuildID, e.UserID)] = NotConnected // add exp if timeInVocal < 0 { - logger.Alert( - "events.go - Calculating time spent in vocal", "the time is negative", - "discord_id", e.UserID, - "guild_id", e.GuildID, - ) + s.Logger().Warn("time spent in vocal is negative", "user", e.Member.DisplayName(), "guild", e.GuildID) return } - if timeInVocal > MaxTimeInVocal { - logger.Warn(fmt.Sprintf("User %s spent more than 6 hours in vocal", e.Member.DisplayName())) - timeInVocal = MaxTimeInVocal - } + timeInVocal = min(timeInVocal, MaxTimeInVocal) e.Member.GuildID = e.GuildID c.AddXP(s, e.Member, exp.VocalXP(uint(timeInVocal)), func(_ uint, newLevel uint) { cfg := config.GetGuildConfig(e.GuildID) if len(cfg.FallbackChannel) == 0 { return } - _, err := s.ChannelMessageSend(cfg.FallbackChannel, fmt.Sprintf( + _, err := s.ChannelAPI().MessageSend(cfg.FallbackChannel, fmt.Sprintf( "%s est maintenant niveau %d", e.Member.Mention(), newLevel, )) if err != nil { - logger.Alert("events.go - Sending new level in fallback channel", err.Error()) + s.Logger().Error("sending new level in fallback channel", "error", err) } }) } -func OnLeave(_ *discordgo.Session, e *discordgo.GuildMemberRemove) { - logger.Debug("Leave event", "user_id", e.User.ID) +func OnLeave(s bot.Session, e *event.GuildMemberRemove) { + s.Logger().Debug("leave event", "user", e.User.Username) if e.User.Bot { return } c := user.GetCopaing(e.User.ID, e.GuildID) - if err := c.Delete(); err != nil { - logger.Alert( - "events.go - deleting user from db", err.Error(), - "user_id", e.User.ID, - "guild_id", e.GuildID, - ) + err := gokord.DB. + Where("copaing_id = ? and guild_id = ?", c.ID, e.GuildID). + Delete(&user.CopaingXP{}). + Error + if err != nil { + s.Logger().Error("deleting user xp from DB", "user", e.User.Username, "guild", e.GuildID) + } + if err = c.Delete(); err != nil { + s.Logger().Error("deleting user from DB", "user", e.User.Username, "guild", e.GuildID) } } |
