From e42ecdd7154d740800ef392c6318220944b55a39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Sat, 13 Sep 2025 21:31:16 +0200 Subject: build(gokord): use latest version --- commands/config.go | 5 ++--- commands/credits.go | 5 ++--- commands/rank.go | 28 +++++++------------------- commands/reset.go | 15 +++++++------- commands/stats.go | 26 ++++++++++++------------ commands/top.go | 15 +++++++------- config/channel.go | 19 +++++++++--------- config/xp_role.go | 46 ++++++++++++++---------------------------- go.mod | 4 ++-- go.sum | 8 ++++++++ main.go | 10 +++++----- user/level.go | 57 ++++++++++++++++++++--------------------------------- user/xp.go | 23 +++++++-------------- 13 files changed, 105 insertions(+), 156 deletions(-) diff --git a/commands/config.go b/commands/config.go index 838f7e9..cc1e942 100644 --- a/commands/config.go +++ b/commands/config.go @@ -7,7 +7,6 @@ import ( "git.anhgelus.world/anhgelus/les-copaings-bot/config" "git.anhgelus.world/anhgelus/les-copaings-bot/exp" "github.com/anhgelus/gokord/cmd" - "github.com/anhgelus/gokord/logger" discordgo "github.com/nyttikord/gokord" ) @@ -15,7 +14,7 @@ const ( ConfigModify = "config_modify" ) -func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { +func Config(s *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { cfg := config.GetGuildConfig(i.GuildID) roles := "" l := len(cfg.XpRoles) - 1 @@ -82,6 +81,6 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa ) err := resp.SetMessage(msg).IsEphemeral().Send() if err != nil { - logger.Alert("config/guild.go - Sending config", err.Error()) + s.LogError(err, "sending config") } } diff --git a/commands/credits.go b/commands/credits.go index d58547e..e5fd711 100644 --- a/commands/credits.go +++ b/commands/credits.go @@ -3,11 +3,10 @@ package commands import ( "github.com/anhgelus/gokord" "github.com/anhgelus/gokord/cmd" - "github.com/anhgelus/gokord/logger" discordgo "github.com/nyttikord/gokord" ) -func Credits(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { +func Credits(s *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { msg := "**Les Copaings**, le bot gérant les serveurs privés de [anhgelus]().\n" msg += "Code source : \n\n" msg += "Host du bot : " + gokord.BaseCfg.GetAuthor() + ".\n\n" @@ -15,6 +14,6 @@ func Credits(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionM msg += "- [Inter]()" err := resp.SetMessage(msg).Send() if err != nil { - logger.Alert("commands/credits.go - Sending credits", err.Error(), "guild_id", i.GuildID) + s.LogError(err, "sending credits") } } diff --git a/commands/rank.go b/commands/rank.go index 0adfde6..d3a9f70 100644 --- a/commands/rank.go +++ b/commands/rank.go @@ -6,7 +6,6 @@ import ( "git.anhgelus.world/anhgelus/les-copaings-bot/exp" "git.anhgelus.world/anhgelus/les-copaings-bot/user" "github.com/anhgelus/gokord/cmd" - "github.com/anhgelus/gokord/logger" discordgo "github.com/nyttikord/gokord" ) @@ -20,22 +19,16 @@ func Rank(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.Optio if u.Bot { err = resp.SetMessage("Imagine si les bots avaient un niveau :rolling_eyes:").IsEphemeral().Send() if err != nil { - logger.Alert("commands/rank.go - Reply error user is a bot", err.Error()) + s.LogError(err, "reply error user is a bot") } + return } m, err = s.GuildAPI().Member(i.GuildID, u.ID) if err != nil { - logger.Alert( - "commands/rank.go - Fetching guild member", - err.Error(), - "discord_id", - u.ID, - "guild_id", - i.GuildID, - ) + s.LogError(err, "Fetching guild member %s in %s", u.Username, i.GuildID) err = resp.SetMessage("Erreur : impossible de récupérer le membre").IsEphemeral().Send() if err != nil { - logger.Alert("commands/rank.go - Reply error fetching guild member", err.Error()) + s.LogError(err, "reply error fetching guild member") } return } @@ -44,17 +37,10 @@ func Rank(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.Optio } xp, err := c.GetXP() if err != nil { - logger.Alert( - "commands/rank.go - Fetching xp", - err.Error(), - "discord_id", - c.ID, - "guild_id", - i.GuildID, - ) + s.LogError(err, "fetching xp for copaing %s in %s", c.ID, i.GuildID) err = resp.SetMessage("Erreur : impossible de récupérer l'XP").IsEphemeral().Send() if err != nil { - logger.Alert("commands/rank.go - Reply error fetching xp", err.Error()) + s.LogError(err, "reply error fetching xp") } return } @@ -68,6 +54,6 @@ func Rank(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.Optio nxtLvlXP-xp, )).Send() if err != nil { - logger.Alert("commands/rank.go - Sending rank", err.Error()) + s.LogError(err, "sending rank") } } diff --git a/commands/reset.go b/commands/reset.go index f50bb21..77561c1 100644 --- a/commands/reset.go +++ b/commands/reset.go @@ -4,15 +4,14 @@ import ( "git.anhgelus.world/anhgelus/les-copaings-bot/user" "github.com/anhgelus/gokord" "github.com/anhgelus/gokord/cmd" - "github.com/anhgelus/gokord/logger" discordgo "github.com/nyttikord/gokord" ) -func Reset(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { +func Reset(s *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { var copaings []*user.Copaing gokord.DB.Where("guild_id = ?", i.GuildID).Delete(&copaings) if err := resp.IsEphemeral().SetMessage("L'XP a été reset.").Send(); err != nil { - logger.Alert("commands/reset.go - Sending success (all)", err.Error()) + s.LogError(err, "sending reset success") } } @@ -21,26 +20,26 @@ func ResetUser(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd. v, ok := optMap["user"] if !ok { if err := resp.SetMessage("Le user n'a pas été renseigné.").Send(); err != nil { - logger.Alert("commands/reset.go - Copaing not set", err.Error()) + s.LogError(err, "sending error copaing not set") } return } m := v.UserValue(s.UserAPI()) if m.Bot { if err := resp.SetMessage("Les bots n'ont pas de niveau :upside_down:").Send(); err != nil { - logger.Alert("commands/reset.go - Copaing not set", err.Error()) + s.LogError(err, "sending error bot does not have xp") } return } err := user.GetCopaing(m.ID, i.GuildID).Delete() if err != nil { - logger.Alert("commands/reset.go - Copaing not deleted", err.Error(), "discord_id", m.ID, "guild_id", i.GuildID) + s.LogError(err, "deleting copaings %s in %s", m.Username, i.GuildID) err = resp.SetMessage("Erreur : impossible de reset l'utilisateur").Send() if err != nil { - logger.Alert("commands/reset.go - Error deleting", err.Error()) + s.LogError(err, "sending error while deleting") } } if err = resp.SetMessage("Le user bien été reset.").Send(); err != nil { - logger.Alert("commands/reset.go - Sending success (user)", err.Error()) + s.LogError(err, "sending reset success") } } diff --git a/commands/stats.go b/commands/stats.go index 1a7a379..e2c2ba4 100644 --- a/commands/stats.go +++ b/commands/stats.go @@ -15,7 +15,6 @@ import ( "git.anhgelus.world/anhgelus/les-copaings-bot/user" "github.com/anhgelus/gokord" "github.com/anhgelus/gokord/cmd" - "github.com/anhgelus/gokord/logger" "github.com/jackc/pgx/v5/pgtype" discordgo "github.com/nyttikord/gokord" "github.com/nyttikord/gokord/channel" @@ -53,7 +52,7 @@ func Stats(s *discordgo.Session, i *discordgo.InteractionCreate, opt cmd.OptionM if in < 1 || uint(in) > cfg.DaysXPRemains { msg := fmt.Sprintf("Nombre de jours invalide. Il doit être strictement positif et inférieur à %d", cfg.DaysXPRemains) if err := resp.SetMessage(msg).IsEphemeral().Send(); err != nil { - logger.Alert("commands/stats.go - Sending invalid days", err.Error()) + s.LogError(err, "sending error invalid days") } return } @@ -61,7 +60,7 @@ func Stats(s *discordgo.Session, i *discordgo.InteractionCreate, opt cmd.OptionM } err := resp.IsDeferred().Send() if err != nil { - logger.Alert("commands/stats.go - Sending deferred", err.Error()) + s.LogError(err, "sending deferred") return } go func() { @@ -72,15 +71,16 @@ func Stats(s *discordgo.Session, i *discordgo.InteractionCreate, opt cmd.OptionM w, err = statsAll(s, i, days) } if err != nil { + s.LogError(err, "generating stats in %s", i.GuildID) if err = resp.IsEphemeral().SetMessage("Il y a eu une erreur...").Send(); err != nil { - logger.Alert("commands/stats.go - Sending error occurred", err.Error()) + s.LogError(err, "sending error occurred") } return } b := new(bytes.Buffer) _, err = w.WriteTo(b) if err != nil { - logger.Alert("commands/stats.go - Writing png", err.Error()) + s.LogError(err, "writing png") } err = resp.AddFile(&channel.File{ Name: "plot.png", @@ -88,7 +88,7 @@ func Stats(s *discordgo.Session, i *discordgo.InteractionCreate, opt cmd.OptionM Reader: b, }).Send() if err != nil { - logger.Alert("commands/stats.go - Sending response", err.Error()) + s.LogError(err, "sending stats") } }() } @@ -117,7 +117,7 @@ func stats(s *discordgo.Session, i *discordgo.InteractionCreate, days int, execS if gokord.Debug { var rawCopaingData []*user.CopaingXP if err := execSql("SELECT * FROM copaing_xps ", "").Scan(&rawCopaingData).Error; err != nil { - logger.Alert("commands/stats.go - Fetching result", err.Error()) + s.LogError(err, "fetching result") return nil, err } rawData = make([]*data, len(rawCopaingData)) @@ -133,7 +133,7 @@ func stats(s *discordgo.Session, i *discordgo.InteractionCreate, days int, execS if err := execSql( `SELECT "created_at"::date::text, sum("xp") as xp, "copaing_id" FROM copaing_xps `, ` GROUP BY "created_at"::date, "copaing_id"`, ).Scan(&rawDbData).Error; err != nil { - logger.Alert("commands/stats.go - Fetching result", err.Error()) + s.LogError(err, "fetching result") return nil, err } rawData = make([]*data, len(rawDbData)) @@ -155,10 +155,10 @@ func stats(s *discordgo.Session, i *discordgo.InteractionCreate, days int, execS var cp user.Copaing if err := gokord.DB.First(&cp, raw.CopaingID).Error; err != nil { if !errors.Is(err, gorm.ErrRecordNotFound) { - logger.Alert("commands/stats.go - Finding copaing", err.Error(), "id", raw.CopaingID) + s.LogError(err, "finding copaing %d", raw.CopaingID) return nil, err } - logger.Warn("Copaing not found, skipping entry", "old_id", raw.CopaingID) + s.LogWarn("Copaing %d not found, skipping", raw.CopaingID) continue } copaings[raw.CopaingID] = &cp @@ -202,7 +202,7 @@ func generatePlot(s *discordgo.Session, i *discordgo.InteractionCreate, copaings for in, c := range copaings { m, err := s.GuildAPI().Member(i.GuildID, c.DiscordID) if err != nil { - logger.Alert("commands/stats.go - Fetching guild member", err.Error()) + s.LogError(err, "fetching guild member") return nil, err } slices.SortFunc(stats[in], func(a, b plotter.XY) int { @@ -216,7 +216,7 @@ func generatePlot(s *discordgo.Session, i *discordgo.InteractionCreate, copaings }) l, _, err := plotter.NewLinePoints(plotter.XYs(stats[in])) if err != nil { - logger.Alert("commands/stats.go - Adding line points", err.Error()) + s.LogError(err, "adding line points") return nil, err } l.Color = colors[cnt%len(colors)] @@ -226,7 +226,7 @@ func generatePlot(s *discordgo.Session, i *discordgo.InteractionCreate, copaings } w, err := p.WriterTo(8*vg.Inch, 6*vg.Inch, "png") if err != nil { - logger.Alert("commands/stats.go - Generating png", err.Error()) + s.LogError(err, "generating png") return nil, err } return w, nil diff --git a/commands/top.go b/commands/top.go index 21a1456..195ee9b 100644 --- a/commands/top.go +++ b/commands/top.go @@ -8,34 +8,33 @@ import ( "git.anhgelus.world/anhgelus/les-copaings-bot/exp" "git.anhgelus.world/anhgelus/les-copaings-bot/user" "github.com/anhgelus/gokord/cmd" - "github.com/anhgelus/gokord/logger" discordgo "github.com/nyttikord/gokord" "github.com/nyttikord/gokord/channel" ) -func Top(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { +func Top(s *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { err := resp.IsDeferred().Send() if err != nil { - logger.Alert("commands/top.go - Sending deferred", err.Error()) + s.LogError(err, "sending deferred") return } embeds := make([]*channel.MessageEmbed, 3) wg := sync.WaitGroup{} - fn := func(s string, n uint, d int, id int) { + fn := func(str string, n uint, d int, id int) { defer wg.Done() tops, err := user.GetBestXP(i.GuildID, n, d) if err != nil { - logger.Alert("commands/top.go - Fetching best xp", err.Error(), "n", n, "d", d, "id", id, "guild_id", i.GuildID) + s.LogError(err, "fetching best xp, n: %d, d: %d, id: %d, guild: %s", n, d, id, i.GuildID) embeds[id] = &channel.MessageEmbed{ - Title: s, + Title: str, Description: "Erreur : impossible de récupérer la liste", Color: 0x831010, } return } embeds[id] = &channel.MessageEmbed{ - Title: s, + Title: str, Description: genTopsMessage(tops), Color: 0x10E6AD, } @@ -60,7 +59,7 @@ func Top(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, } err = resp.Send() if err != nil { - logger.Alert("commands/top.go - Sending response top", err.Error()) + s.LogError(err, "sending response top") } }() } diff --git a/config/channel.go b/config/channel.go index c09061f..918af6d 100644 --- a/config/channel.go +++ b/config/channel.go @@ -4,7 +4,6 @@ import ( "strings" "github.com/anhgelus/gokord/cmd" - "github.com/anhgelus/gokord/logger" discordgo "github.com/nyttikord/gokord" "github.com/nyttikord/gokord/interaction" ) @@ -29,7 +28,7 @@ func HandleModifyFallbackChannel(_ *discordgo.Session, _ *discordgo.InteractionC //} } -func HandleFallbackChannelSet(_ *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { +func HandleFallbackChannelSet(s *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { resp.IsEphemeral() cfg := GetGuildConfig(i.GuildID) @@ -38,14 +37,14 @@ func HandleFallbackChannelSet(_ *discordgo.Session, i *discordgo.InteractionCrea cfg.FallbackChannel = channelID err := cfg.Save() if err != nil { - logger.Alert("config/channel.go - Saving fallback channel", err.Error()) + s.LogError(err, "saving fallback channel") if err = resp.SetMessage("Erreur lors de la sauvegarde du salon").Send(); err != nil { - logger.Alert("config/channel.go - Sending error while saving channel", err.Error()) + s.LogError(err, "sending error while saving channel") } return } if err = resp.SetMessage("Salon sauvegardé.").Send(); err != nil { - logger.Alert("config/channel.go - Sending channel saved", err.Error()) + s.LogError(err, "sending channel saved") } } @@ -103,25 +102,25 @@ func HandleDisChannelAddSet(_ *discordgo.Session, i *discordgo.InteractionCreate //} } -func HandleDisChannelDelSet(_ *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { +func HandleDisChannelDelSet(s *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { resp.IsEphemeral() cfg := GetGuildConfig(i.GuildID) id := data.Values[0] if !strings.Contains(cfg.DisabledChannels, id) { err := resp.SetMessage("Le salon n'est pas désactivé").Send() if err != nil { - logger.Alert("commands/config.go - Channel not disabled", err.Error()) + s.LogError(err, "sending channel not disabled") } return } cfg.DisabledChannels = strings.ReplaceAll(cfg.DisabledChannels, id+";", "") if err := cfg.Save(); err != nil { - logger.Alert("commands/config.go - Saving config disable del", err.Error()) + s.LogError(err, "saving config disable del") if err = resp.SetMessage("Il y a eu une erreur lors de la modification de de la base de données.").Send(); err != nil { - logger.Alert("config/channel.go - Sending error while saving config", err.Error()) + s.LogError(err, "sending error while saving config") } } if err := resp.SetMessage("Modification sauvegardé.").Send(); err != nil { - logger.Alert("commands/config.go - Modification saved message disable del", err.Error()) + s.LogError(err, "modification saved message disable del") } } diff --git a/config/xp_role.go b/config/xp_role.go index 39e48f6..1a8fa8a 100644 --- a/config/xp_role.go +++ b/config/xp_role.go @@ -5,7 +5,6 @@ import ( "github.com/anhgelus/gokord" "github.com/anhgelus/gokord/cmd" - "github.com/anhgelus/gokord/logger" discordgo "github.com/nyttikord/gokord" "github.com/nyttikord/gokord/interaction" ) @@ -76,7 +75,7 @@ func HandleXpRoleAddEdit(_ *discordgo.Session, _ *discordgo.InteractionCreate, d //} } -func HandleXpRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { +func HandleXpRoleAddRole(s *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { resp.IsEphemeral() cfg := GetGuildConfig(i.GuildID) roleId := data.Values[0] @@ -84,7 +83,7 @@ func HandleXpRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d if r.RoleID == roleId { err := resp.SetMessage("Le rôle est déjà présent dans la config").Send() if err != nil { - logger.Alert("config/xp_role.go - Role already in config", err.Error()) + s.LogError(err, "sending role already in config") } return } @@ -95,20 +94,15 @@ func HandleXpRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d }) err := cfg.Save() if err != nil { - logger.Alert( - "config/xp_role.go - Saving config", - err.Error(), - "guild_id", i.GuildID, - "role_id", roleId, - "type", "add", - ) + s.LogError(err, "saving config for role %s in %s", roleId, i.GuildID) + return } if err = resp.SetMessage("Rôle ajouté.").Send(); err != nil { - logger.Alert("config/xp_role.go - Sending success", err.Error()) + s.LogError(err, "Sending role saved") } } -func HandleXpRoleEditRole(_ *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { +func HandleXpRoleEditRole(s *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { resp.IsEphemeral() cfg := GetGuildConfig(i.GuildID) roleId := data.Values[0] @@ -116,23 +110,18 @@ func HandleXpRoleEditRole(_ *discordgo.Session, i *discordgo.InteractionCreate, if r == nil { err := resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() if err != nil { - logger.Alert("config/xp_role.go - Role not found (edit)", err.Error()) + s.LogError(err, "role not found") } return } r.XP = configModifyMap[getKeyConfigRole(i)] err := gokord.DB.Save(r).Error if err != nil { - logger.Alert( - "config/xp_role.go - Saving config", - err.Error(), - "guild_id", i.GuildID, - "role_id", roleId, - "type", "edit", - ) + s.LogError(err, "saving config for role %s in %s", roleId, i.GuildID) + return } if err = resp.SetMessage("Rôle modifié.").Send(); err != nil { - logger.Alert("config/xp_role.go - Sending success", err.Error()) + s.LogError(err, "sending role saved") } } @@ -146,7 +135,7 @@ func HandleXpRoleDel(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ int //} } -func HandleXpRoleDelRole(_ *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { +func HandleXpRoleDelRole(s *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { resp.IsEphemeral() cfg := GetGuildConfig(i.GuildID) roleId := data.Values[0] @@ -154,22 +143,17 @@ func HandleXpRoleDelRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d if r == nil { err := resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() if err != nil { - logger.Alert("config/xp_role.go - Sending role not found (del)", err.Error()) + s.LogError(err, "sending role not found") } return } err := gokord.DB.Delete(r).Error if err != nil { - logger.Alert( - "config/xp_role.go - Deleting entry", - err.Error(), - "guild_id", i.GuildID, - "role_id", roleId, - "type", "del", - ) + s.LogError(err, "saving config for role %s in %s", roleId, i.GuildID) + return } if err = resp.SetMessage("Rôle supprimé.").Send(); err != nil { - logger.Alert("config/xp_role.go - Sending success", err.Error()) + s.LogError(err, "sending role deleted") } } diff --git a/go.mod b/go.mod index ea40184..506cb86 100644 --- a/go.mod +++ b/go.mod @@ -5,9 +5,9 @@ go 1.24.0 toolchain go1.24.6 require ( - github.com/anhgelus/gokord v0.11.1-0.20250913111909-19135e5d37be + github.com/anhgelus/gokord v0.11.1-0.20250913175430-bf95758b4d3b github.com/joho/godotenv v1.5.1 - github.com/nyttikord/gokord v0.30.1-0.20250913111646-475b917cccfb + github.com/nyttikord/gokord v0.30.1-0.20250913173431-8e43619c03fa github.com/pelletier/go-toml/v2 v2.2.4 gorm.io/driver/postgres v1.6.0 gorm.io/gorm v1.31.0 diff --git a/go.sum b/go.sum index f4ede94..055023e 100644 --- a/go.sum +++ b/go.sum @@ -35,6 +35,10 @@ github.com/anhgelus/gokord v0.11.1-0.20250911112818-b436d35950ae h1:7UFLx1EybWFZ github.com/anhgelus/gokord v0.11.1-0.20250911112818-b436d35950ae/go.mod h1:Tw1djmUOTFCIRhEUI7eG2onnreJbVGA40EWYQgj20bE= github.com/anhgelus/gokord v0.11.1-0.20250913111909-19135e5d37be h1:D7bFu20Qr2P+hLgv/bWVhscuQ2tt0y0km8fTVZ5ThmY= github.com/anhgelus/gokord v0.11.1-0.20250913111909-19135e5d37be/go.mod h1:J/Ja3EIKFOxxy5lx09kjsxyrwv4ardc015cMtmM8XPg= +github.com/anhgelus/gokord v0.11.1-0.20250913150335-4bcccc1dab83 h1:LyaYwAVoULEXib96M8YlJF7So2srAZktGN6Y6xiOBxs= +github.com/anhgelus/gokord v0.11.1-0.20250913150335-4bcccc1dab83/go.mod h1:MKTSrPK2w9VCDYHPQ8KwSAVFEFYF0LU8FaBEhNq4VoU= +github.com/anhgelus/gokord v0.11.1-0.20250913175430-bf95758b4d3b h1:p9XoghqPoBwj2GDR4SNyirKZVm6UI4KNPBa387G8LKM= +github.com/anhgelus/gokord v0.11.1-0.20250913175430-bf95758b4d3b/go.mod h1:MKTSrPK2w9VCDYHPQ8KwSAVFEFYF0LU8FaBEhNq4VoU= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -74,6 +78,10 @@ github.com/nyttikord/gokord v0.30.0 h1:O4LhpCMyfWcgLqziPXQgMCopb9VO7kwcZG3phblOa github.com/nyttikord/gokord v0.30.0/go.mod h1:Lhk268VlZ1W6Pb3kYnlU9bIuTCioaumedjHdtw1sxck= github.com/nyttikord/gokord v0.30.1-0.20250913111646-475b917cccfb h1:HUL4CikIHguqjKrAqzXYghkzlaZi8+54BBObxBUgeos= github.com/nyttikord/gokord v0.30.1-0.20250913111646-475b917cccfb/go.mod h1:Lhk268VlZ1W6Pb3kYnlU9bIuTCioaumedjHdtw1sxck= +github.com/nyttikord/gokord v0.30.1-0.20250913143152-425cd430dee0 h1:bvSFyK1JXTupt67Y78pzbFPg/5tBaouK0BxAfvpwZBw= +github.com/nyttikord/gokord v0.30.1-0.20250913143152-425cd430dee0/go.mod h1:Lhk268VlZ1W6Pb3kYnlU9bIuTCioaumedjHdtw1sxck= +github.com/nyttikord/gokord v0.30.1-0.20250913173431-8e43619c03fa h1:P9zaVyRF0bDnmhUg6PaNfmyUqDZ+EvHpBnCdH0/0T3s= +github.com/nyttikord/gokord v0.30.1-0.20250913173431-8e43619c03fa/go.mod h1:Lhk268VlZ1W6Pb3kYnlU9bIuTCioaumedjHdtw1sxck= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/main.go b/main.go index 7db4893..7be2e68 100644 --- a/main.go +++ b/main.go @@ -12,12 +12,12 @@ import ( "git.anhgelus.world/anhgelus/les-copaings-bot/user" "github.com/anhgelus/gokord" "github.com/anhgelus/gokord/cmd" - "github.com/anhgelus/gokord/logger" "github.com/joho/godotenv" discordgo "github.com/nyttikord/gokord" "github.com/nyttikord/gokord/discord" "github.com/nyttikord/gokord/discord/types" "github.com/nyttikord/gokord/interaction" + "github.com/nyttikord/gokord/logger" "golang.org/x/image/font/opentype" "gonum.org/v1/plot" "gonum.org/v1/plot/font" @@ -42,7 +42,7 @@ var interTTF []byte func init() { err := godotenv.Load() if err != nil && !errors.Is(err, os.ErrNotExist) { - logger.Warn("Error while loading .env file", "error", err.Error()) + logger.Log(logger.LevelError, 0, "Error while loading .env file: %v", err.Error()) } flag.StringVar(&token, "token", os.Getenv("TOKEN"), "token of the bot") @@ -165,7 +165,7 @@ func main() { user.PeriodicReducer(dg) stopPeriodicReducer = gokord.NewTimer(d, func(stop chan<- interface{}) { - logger.Debug("Periodic reducer") + dg.LogDebug("Periodic reducer") user.PeriodicReducer(dg) }) }, @@ -179,7 +179,7 @@ func main() { // interaction: /config bot.HandleMessageComponent(func(s *discordgo.Session, i *discordgo.InteractionCreate, data interaction.MessageComponentData, resp *cmd.ResponseBuilder) { if len(data.Values) != 1 { - logger.Alert("main.go - Handle config modify", "invalid data values", "values", data.Values) + bot.LogError(errors.New("invalid data values"), "handle config modify, values: %#v", data.Values) return } switch data.Values[0] { @@ -192,7 +192,7 @@ func main() { case config.ModifyTimeReduce: config.HandleModifyPeriodicReduce(s, i, data, resp) default: - logger.Alert("main.go - Detecting value", "unkown value", "value", data.Values[0]) + bot.LogError(errors.New("unknown value"), "detecting value %s", data.Values[0]) return } }, commands.ConfigModify) diff --git a/user/level.go b/user/level.go index 6f92ce7..e11ac03 100644 --- a/user/level.go +++ b/user/level.go @@ -8,59 +8,44 @@ import ( "git.anhgelus.world/anhgelus/les-copaings-bot/config" "git.anhgelus.world/anhgelus/les-copaings-bot/exp" "github.com/anhgelus/gokord" - "github.com/anhgelus/gokord/logger" discordgo "github.com/nyttikord/gokord" "github.com/nyttikord/gokord/user" ) -func onNewLevel(dg *discordgo.Session, m *user.Member, level uint) { +func onNewLevel(s *discordgo.Session, m *user.Member, level uint) { cfg := config.GetGuildConfig(m.GuildID) xpForLevel := exp.LevelXP(level) for _, role := range cfg.XpRoles { if role.XP <= xpForLevel && !slices.Contains(m.Roles, role.RoleID) { - logger.Debug( - "Add role", - "role_id", role.RoleID, - "user_id", m.User.ID, - "guild_id", m.GuildID, - ) - err := dg.GuildAPI().MemberRoleAdd(m.GuildID, m.User.ID, role.RoleID) + s.LogDebug("add role %s to %s in %s", role.RoleID, m.DisplayName(), m.GuildID) + err := s.GuildAPI().MemberRoleAdd(m.GuildID, m.User.ID, role.RoleID) if err != nil { - logger.Alert("user/level.go - Adding role", err.Error(), "role_id", role.RoleID) + s.LogError(err, "adding role %s to %s in %s", role.RoleID, m.DisplayName(), m.GuildID) } } else if role.XP > xpForLevel && slices.Contains(m.Roles, role.RoleID) { - logger.Debug( - "Remove role", - "role_id", role.RoleID, - "user_id", m.User.ID, - "guild_id", m.GuildID, - ) - err := dg.GuildAPI().MemberRoleRemove(m.GuildID, m.User.ID, role.RoleID) + s.LogDebug("remove role %s to %s in %s", role.RoleID, m.DisplayName(), m.GuildID) + err := s.GuildAPI().MemberRoleRemove(m.GuildID, m.User.ID, role.RoleID) if err != nil { - logger.Alert("user/level.go - Removing role", err.Error(), "role_id", role.RoleID) + s.LogError(err, "removing role s to %s in %s", role.RoleID, m.DisplayName(), m.GuildID) } } } } -func (c *Copaing) OnNewLevel(dg *discordgo.Session, level uint) { - m, err := dg.GuildAPI().Member(c.GuildID, c.DiscordID) +func (c *Copaing) OnNewLevel(s *discordgo.Session, level uint) { + m, err := s.GuildAPI().Member(c.GuildID, c.DiscordID) if err != nil { - logger.Alert( - "user/level.go - Getting member for new level", err.Error(), - "discord_id", c.DiscordID, - "guild_id", c.GuildID, - ) + s.LogError(err, "getting member %s in %s for new level", c.DiscordID, c.GuildID) return } - onNewLevel(dg, m, level) + onNewLevel(s, m, level) } -func PeriodicReducer(dg *discordgo.Session) { +func PeriodicReducer(s *discordgo.Session) { wg := &sync.WaitGroup{} var cs []*Copaing if err := gokord.DB.Find(&cs).Error; err != nil { - logger.Alert("user/level.go - Fetching all copaings", err.Error()) + s.LogError(err, "fetching all copaings") return } cxps := make([]*cXP, len(cs)) @@ -73,7 +58,7 @@ func PeriodicReducer(dg *discordgo.Session) { defer wg.Done() xp, err := c.GetXP() if err != nil { - logger.Alert("user/level.go - Getting XP", err.Error(), "copaing_id", c.ID, "guild_id", c.GuildID) + s.LogError(err, "getting xp of copaing %d in %s", c.ID, c.GuildID) xp = 0 } cxps[i] = &cXP{ @@ -83,7 +68,7 @@ func PeriodicReducer(dg *discordgo.Session) { }() } wg.Wait() - for _, g := range dg.State.Guilds { + for _, g := range s.State.Guilds { wg.Add(1) go func() { defer wg.Done() @@ -93,26 +78,26 @@ func PeriodicReducer(dg *discordgo.Session) { Where("guild_id = ? and created_at < ?", g.ID, exp.TimeStampNDaysBefore(cfg.DaysXPRemains)). Delete(&CopaingXP{}) if res.Error != nil { - logger.Alert("user/level.go - Removing old XP", res.Error.Error(), "guild_id", g.ID) + s.LogError(res.Error, "removing old xp in %s", g.ID) } - logger.Debug("Guild cleaned", "guild", g.Name, "rows affected", res.RowsAffected) + s.LogDebug("Guild cleaned %s, rows affected: %d", g.Name, res.RowsAffected) }() } wg.Wait() for i, c := range cxps { if i%50 == 49 { - logger.Debug("Sleeping...") + s.LogDebug("Sleeping...") time.Sleep(15 * time.Second) // prevents spamming the API } oldXp := c.GetXP() xp, err := c.ToCopaing().GetXP() if err != nil { - logger.Alert("user/level.go - Getting XP", err.Error(), "guild_id", c.ID, "discord_id", c.DiscordID) + s.LogError(err, "getting xp of copaing %s in %s", c.ID, c.GuildID) continue } if exp.Level(oldXp) != exp.Level(xp) { - c.OnNewLevel(dg, exp.Level(xp)) + c.OnNewLevel(s, exp.Level(xp)) } } - logger.Debug("Periodic reduce finished", "len(guilds)", len(dg.State.Guilds)) + s.LogDebug("Periodic reduce finished for %d guilds", len(s.State.Guilds)) } diff --git a/user/xp.go b/user/xp.go index 550f3bf..d130cae 100644 --- a/user/xp.go +++ b/user/xp.go @@ -7,8 +7,8 @@ import ( "git.anhgelus.world/anhgelus/les-copaings-bot/config" "git.anhgelus.world/anhgelus/les-copaings-bot/exp" "github.com/anhgelus/gokord" - "github.com/anhgelus/gokord/logger" discordgo "github.com/nyttikord/gokord" + "github.com/nyttikord/gokord/logger" "github.com/nyttikord/gokord/user" ) @@ -28,23 +28,14 @@ func (c *cXP) GetXP() uint { func (c *Copaing) AddXP(s *discordgo.Session, m *user.Member, xp uint, fn func(uint, uint)) { old, err := c.GetXP() if err != nil { - logger.Alert("user/xp.go - Getting xp", err.Error(), "discord_id", c.DiscordID, "guild_id", c.GuildID) + s.LogError(err, "getting xp for %s in %s", m.DisplayName(), c.GuildID) return } pastLevel := exp.Level(old) - logger.Debug("Adding xp", "member", m.DisplayName(), "old xp", old, "xp to add", xp, "old level", pastLevel) + s.LogDebug("Adding xp to %s, old: %d, to add: %d", m.DisplayName(), old, xp) c.CopaingXPs = append(c.CopaingXPs, CopaingXP{CopaingID: c.ID, XP: xp, GuildID: c.GuildID}) if err = c.Save(); err != nil { - logger.Alert( - "user/xp.go - Saving user", - err.Error(), - "xp", - c.CopaingXPs, - "discord_id", - c.DiscordID, - "guild_id", - c.GuildID, - ) + s.LogError(err, "saving user %s with xp %d in %s", m.DisplayName(), xp, c.GuildID) return } newLevel := exp.Level(old + xp) @@ -78,7 +69,7 @@ func (c *Copaing) GetXPForDays(n uint) (uint, error) { var cxp CopaingXP err = gokord.DB.ScanRows(rows, &cxp) if err != nil { - logger.Alert("user/xp.go - Scanning rows", err.Error(), "copaing_id", c.ID, "guild_id", c.GuildID) + logger.Log(logger.LevelError, 0, "scanning rows of copaing %d in %s: %#v", c.ID, c.GuildID, err.Error()) continue } xp += cxp.XP @@ -105,7 +96,7 @@ func GetBestXP(guildId string, n uint, d int) ([]CopaingAccess, error) { var c Copaing err = gokord.DB.ScanRows(rows, &c) if err != nil { - logger.Alert("user/xp.go - Scanning rows", err.Error(), "guild_id", guildId) + logger.Log(logger.LevelError, 0, "scanning rows of copaing %d in %s: %#v", c.ID, c.GuildID, err.Error()) continue } wg.Add(1) @@ -113,7 +104,7 @@ func GetBestXP(guildId string, n uint, d int) ([]CopaingAccess, error) { defer wg.Done() xp, err := c.GetXPForDays(uint(d)) if err != nil { - logger.Alert("user/xp.go - Fetching xp", err.Error(), "discord_id", c.DiscordID, "guild_id", guildId) + logger.Log(logger.LevelError, 0, "fetching xp of copaing %d in %s: %#v", c.ID, c.GuildID, err.Error()) return } l = append(l, &cXP{Cxp: xp, Copaing: &c}) -- cgit v1.2.3