From 64dfe4ed79022c6a7a00991db7ba679f2dcb3495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Sat, 17 Jan 2026 17:06:38 +0100 Subject: refactor(member): better distinction between cached and from database --- commands/top.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'commands/top.go') diff --git a/commands/top.go b/commands/top.go index bb08144..bd92a28 100644 --- a/commands/top.go +++ b/commands/top.go @@ -68,7 +68,7 @@ func Top(s bot.Session, i *event.InteractionCreate, _ cmd.OptionMap, resp *cmd.R func genTopsMessage(tops []user.CopaingAccess) string { msg := "" for i, c := range tops { - msg += fmt.Sprintf("%d. **<@%s>** - niveau %d", i+1, c.ToCopaing().DiscordID, exp.Level(c.GetXP())) + msg += fmt.Sprintf("%d. **<@%s>** - niveau %d", i+1, c.Copaing().DiscordID, exp.Level(c.GetXP())) if i != len(tops)-1 { msg += "\n" } -- cgit v1.2.3 From ec5cfa632eeb607351f67bad6686ec872291bd61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Sat, 17 Jan 2026 19:57:28 +0100 Subject: perf(command): top now partially uses state --- commands/top.go | 93 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 48 insertions(+), 45 deletions(-) (limited to 'commands/top.go') diff --git a/commands/top.go b/commands/top.go index bd92a28..fa12a66 100644 --- a/commands/top.go +++ b/commands/top.go @@ -1,6 +1,7 @@ package commands import ( + "context" "fmt" "sync" @@ -13,62 +14,64 @@ import ( "github.com/nyttikord/gokord/event" ) -func Top(s bot.Session, i *event.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { - err := resp.IsDeferred().Send() - if err != nil { - s.Logger().Error("sending deferred", "error", err) - return - } - embeds := make([]*channel.MessageEmbed, 3) - wg := sync.WaitGroup{} - - fn := func(str string, n uint, d int, id int) { - defer wg.Done() - tops, err := user.GetBestXP(s.Logger(), i.GuildID, n, d) +func Top(ctx context.Context) func(s bot.Session, i *event.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { + return func(s bot.Session, i *event.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { + err := resp.IsDeferred().Send() if err != nil { - s.Logger().Error("fetching best xp", "error", err, "n", n, "d", d, "id", id, "guild", i.GuildID) + s.Logger().Error("sending deferred", "error", err) + return + } + embeds := make([]*channel.MessageEmbed, 3) + wg := sync.WaitGroup{} + + fn := func(str string, n uint, d int, id int) { + defer wg.Done() + tops, err := user.GetBestXP(ctx, s.Logger(), i.GuildID, n, d) + if err != nil { + s.Logger().Error("fetching best xp", "error", err, "n", n, "d", d, "id", id, "guild", i.GuildID) + embeds[id] = &channel.MessageEmbed{ + Title: str, + Description: "Erreur : impossible de récupérer la liste", + Color: 0x831010, + } + return + } embeds[id] = &channel.MessageEmbed{ Title: str, - Description: "Erreur : impossible de récupérer la liste", - Color: 0x831010, + Description: genTopsMessage(tops), + Color: 0x10E6AD, } - return - } - embeds[id] = &channel.MessageEmbed{ - Title: str, - Description: genTopsMessage(tops), - Color: 0x10E6AD, } - } - cfg := config.GetGuildConfig(i.GuildID) - if cfg.DaysXPRemains > 30 { - wg.Add(1) - go fn(fmt.Sprintf("Top %d jours", cfg.DaysXPRemains), 10, -1, 0) - } - wg.Add(2) - go fn("Top 30 jours", 5, 30, 1) - go fn("Top 7 jours", 5, 7, 2) - go func() { - wg.Wait() + cfg := config.GetGuildConfig(i.GuildID) if cfg.DaysXPRemains > 30 { - resp.AddEmbed(embeds[0]). - AddEmbed(embeds[1]). - AddEmbed(embeds[2]) - } else { - resp.AddEmbed(embeds[1]). - AddEmbed(embeds[2]) - } - err = resp.Send() - if err != nil { - s.Logger().Error("sending response top", "error", err) + wg.Add(1) + go fn(fmt.Sprintf("Top %d jours", cfg.DaysXPRemains), 10, -1, 0) } - }() + wg.Add(2) + go fn("Top 30 jours", 5, 30, 1) + go fn("Top 7 jours", 5, 7, 2) + go func() { + wg.Wait() + if cfg.DaysXPRemains > 30 { + resp.AddEmbed(embeds[0]). + AddEmbed(embeds[1]). + AddEmbed(embeds[2]) + } else { + resp.AddEmbed(embeds[1]). + AddEmbed(embeds[2]) + } + err = resp.Send() + if err != nil { + s.Logger().Error("sending response top", "error", err) + } + }() + } } -func genTopsMessage(tops []user.CopaingAccess) string { +func genTopsMessage(tops []user.CopaingCached) string { msg := "" for i, c := range tops { - msg += fmt.Sprintf("%d. **<@%s>** - niveau %d", i+1, c.Copaing().DiscordID, exp.Level(c.GetXP())) + msg += fmt.Sprintf("%d. **<@%s>** - niveau %d", i+1, c.DiscordID, exp.Level(c.XPs)) if i != len(tops)-1 { msg += "\n" } -- cgit v1.2.3 From c661541e45dddd6a082af66fcf7df7ba7dfdc6a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Sat, 17 Jan 2026 21:50:54 +0100 Subject: perf(command): store data used by top in state --- commands/top.go | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'commands/top.go') diff --git a/commands/top.go b/commands/top.go index fa12a66..99c8f16 100644 --- a/commands/top.go +++ b/commands/top.go @@ -16,17 +16,12 @@ import ( func Top(ctx context.Context) func(s bot.Session, i *event.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { return func(s bot.Session, i *event.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { - err := resp.IsDeferred().Send() - if err != nil { - s.Logger().Error("sending deferred", "error", err) - return - } embeds := make([]*channel.MessageEmbed, 3) wg := sync.WaitGroup{} fn := func(str string, n uint, d int, id int) { defer wg.Done() - tops, err := user.GetBestXP(ctx, s.Logger(), i.GuildID, n, d) + tops, err := user.GetBestXP(ctx, i.GuildID, n, d) if err != nil { s.Logger().Error("fetching best xp", "error", err, "n", n, "d", d, "id", id, "guild", i.GuildID) embeds[id] = &channel.MessageEmbed{ @@ -60,7 +55,7 @@ func Top(ctx context.Context) func(s bot.Session, i *event.InteractionCreate, _ resp.AddEmbed(embeds[1]). AddEmbed(embeds[2]) } - err = resp.Send() + err := resp.Send() if err != nil { s.Logger().Error("sending response top", "error", err) } @@ -71,7 +66,7 @@ func Top(ctx context.Context) func(s bot.Session, i *event.InteractionCreate, _ func genTopsMessage(tops []user.CopaingCached) string { msg := "" for i, c := range tops { - msg += fmt.Sprintf("%d. **<@%s>** - niveau %d", i+1, c.DiscordID, exp.Level(c.XPs)) + msg += fmt.Sprintf("%d. **<@%s>** - niveau %d", i+1, c.DiscordID, exp.Level(c.XP)) if i != len(tops)-1 { msg += "\n" } -- cgit v1.2.3