aboutsummaryrefslogtreecommitdiff
path: root/events.go
diff options
context:
space:
mode:
authorWilliam Hergès <william@herges.fr>2025-09-27 18:23:27 +0200
committerWilliam Hergès <william@herges.fr>2025-09-27 18:23:27 +0200
commitb1d3bca64702e66b5ecfe5c9ea5f43aa9dc1d1e6 (patch)
tree67474ed704f529fe4941c179b7697b54099cc326 /events.go
parentc46d1c34a29b10dac2a059b9d78e99a3d5d76f96 (diff)
parentcfdba5f417bb31aac564d13becc09874f17d075d (diff)
Merge branch 'main' into feat/xp-boostfeat/xp-boost
Diffstat (limited to 'events.go')
-rw-r--r--events.go79
1 files changed, 39 insertions, 40 deletions
diff --git a/events.go b/events.go
index 6f15fd8..9a3f508 100644
--- a/events.go
+++ b/events.go
@@ -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)
}
}