diff options
Diffstat (limited to 'commands')
| -rw-r--r-- | commands/rank.go | 75 | ||||
| -rw-r--r-- | commands/reset.go | 48 | ||||
| -rw-r--r-- | commands/stats.go | 97 |
3 files changed, 111 insertions, 109 deletions
diff --git a/commands/rank.go b/commands/rank.go index 4080864..c65c758 100644 --- a/commands/rank.go +++ b/commands/rank.go @@ -1,6 +1,7 @@ package commands import ( + "context" "fmt" "git.anhgelus.world/anhgelus/les-copaings-bot/exp" @@ -10,51 +11,45 @@ import ( "github.com/nyttikord/gokord/event" ) -func Rank(s bot.Session, i *event.InteractionCreate, optMap cmd.OptionMap, resp *cmd.ResponseBuilder) { - c := user.GetCopaing(i.Member.User.ID, i.GuildID) // current user = member who used /rank - msg := "Votre niveau" - m := i.Member - var err error - if v, ok := optMap["copaing"]; ok { - u := v.UserValue(s.UserAPI()) - if u.Bot { - err = resp.SetMessage("Imagine si les bots avaient un niveau :rolling_eyes:").IsEphemeral().Send() - if err != nil { - s.Logger().Error("reply error user is a bot", "error", err) +func Rank(ctx context.Context) func(s bot.Session, i *event.InteractionCreate, optMap cmd.OptionMap, resp *cmd.ResponseBuilder) { + return func(s bot.Session, i *event.InteractionCreate, optMap cmd.OptionMap, resp *cmd.ResponseBuilder) { + c := user.GetCopaing(ctx, i.Member.User.ID, i.GuildID) // current user = member who used /rank + msg := "Votre niveau" + m := i.Member + var err error + if v, ok := optMap["copaing"]; ok { + u := v.UserValue(s.UserAPI()) + if u.Bot { + err = resp.SetMessage("Imagine si les bots avaient un niveau :rolling_eyes:").IsEphemeral().Send() + if err != nil { + s.Logger().Error("reply error user is a bot", "error", err) + } + return } - return - } - m, err = s.GuildAPI().Member(i.GuildID, u.ID) - if err != nil { - s.Logger().Error("fetching guild member", "error", err, "user", u.Username, "guild", i.GuildID) - err = resp.SetMessage("Erreur : impossible de récupérer le membre").IsEphemeral().Send() + m, err = s.GuildAPI().Member(i.GuildID, u.ID) if err != nil { - s.Logger().Error("reply error fetching guild member", "error", err) + s.Logger().Error("fetching guild member", "error", err, "user", u.Username, "guild", i.GuildID) + err = resp.SetMessage("Erreur : impossible de récupérer le membre").IsEphemeral().Send() + if err != nil { + s.Logger().Error("reply error fetching guild member", "error", err) + } + return } - return + c = user.GetCopaing(ctx, u.ID, i.GuildID) // current user = member targeted by member who wrote /rank + msg = fmt.Sprintf("Le niveau de %s", m.DisplayName()) } - c = user.GetCopaing(u.ID, i.GuildID) // current user = member targeted by member who wrote /rank - msg = fmt.Sprintf("Le niveau de %s", m.DisplayName()) - } - xp, err := c.GetXP(s.Logger()) - if err != nil { - s.Logger().Error("fetching xp", "error", err, "copaing", c.ID, "guild", i.GuildID) - err = resp.SetMessage("Erreur : impossible de récupérer l'XP").IsEphemeral().Send() + xp := c.XPs + lvl := exp.Level(xp) + nxtLvlXP := exp.LevelXP(lvl + 1) + err = resp.SetMessage(fmt.Sprintf( + "%s : **%d**\n> XP : %d\n> Prochain niveau dans %d XP", + msg, + lvl, + xp, + nxtLvlXP-xp, + )).Send() if err != nil { - s.Logger().Error("reply error fetching xp", "error", err) + s.Logger().Error("sending rank", "error", err) } - return - } - lvl := exp.Level(xp) - nxtLvlXP := exp.LevelXP(lvl + 1) - err = resp.SetMessage(fmt.Sprintf( - "%s : **%d**\n> XP : %d\n> Prochain niveau dans %d XP", - msg, - lvl, - xp, - nxtLvlXP-xp, - )).Send() - if err != nil { - s.Logger().Error("sending rank", "error", err) } } diff --git a/commands/reset.go b/commands/reset.go index 21bfeb7..56d3e44 100644 --- a/commands/reset.go +++ b/commands/reset.go @@ -1,6 +1,8 @@ package commands import ( + "context" + "git.anhgelus.world/anhgelus/les-copaings-bot/user" "github.com/anhgelus/gokord" "github.com/anhgelus/gokord/cmd" @@ -16,31 +18,33 @@ func Reset(s bot.Session, i *event.InteractionCreate, _ cmd.OptionMap, resp *cmd } } -func ResetUser(s bot.Session, i *event.InteractionCreate, optMap cmd.OptionMap, resp *cmd.ResponseBuilder) { - resp.IsEphemeral() - v, ok := optMap["user"] - if !ok { - if err := resp.SetMessage("Le user n'a pas été renseigné.").Send(); err != nil { - s.Logger().Error("sending error copaing not set", "error", err) +func ResetUser(ctx context.Context) func(s bot.Session, i *event.InteractionCreate, optMap cmd.OptionMap, resp *cmd.ResponseBuilder) { + return func(s bot.Session, i *event.InteractionCreate, optMap cmd.OptionMap, resp *cmd.ResponseBuilder) { + resp.IsEphemeral() + v, ok := optMap["user"] + if !ok { + if err := resp.SetMessage("Le user n'a pas été renseigné.").Send(); err != nil { + s.Logger().Error("sending error copaing not set", "error", err) + } + return } - 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 { - s.Logger().Error("sending error bot does not have xp", "error", err) + m := v.UserValue(s.UserAPI()) + if m.Bot { + if err := resp.SetMessage("Les bots n'ont pas de niveau :upside_down:").Send(); err != nil { + s.Logger().Error("sending error bot does not have xp", "error", err) + } + return } - return - } - err := user.GetCopaing(m.ID, i.GuildID).Delete() - if err != nil { - s.Logger().Error("deleting copaing", "error", err, "user", m.Username, "guild", i.GuildID) - err = resp.SetMessage("Erreur : impossible de reset l'utilisateur").Send() + err := user.GetCopaing(ctx, m.ID, i.GuildID).Copaing(ctx).Delete(ctx) if err != nil { - s.Logger().Error("sending error while deleting", "error", err) + s.Logger().Error("deleting copaing", "error", err, "user", m.Username, "guild", i.GuildID) + err = resp.SetMessage("Erreur : impossible de reset l'utilisateur").Send() + if err != nil { + s.Logger().Error("sending error while deleting", "error", err) + } + } + if err = resp.SetMessage("Le user bien été reset.").Send(); err != nil { + s.Logger().Error("sending reset success", "error", err) } - } - if err = resp.SetMessage("Le user bien été reset.").Send(); err != nil { - s.Logger().Error("sending reset success", "error", err) } } diff --git a/commands/stats.go b/commands/stats.go index 4fc35ae..716616d 100644 --- a/commands/stats.go +++ b/commands/stats.go @@ -2,6 +2,7 @@ package commands import ( "bytes" + "context" "errors" "fmt" "image/color" @@ -46,56 +47,58 @@ var colors = []color.RGBA{ {193, 18, 31, 255}, } -func Stats(s bot.Session, i *event.InteractionCreate, opt cmd.OptionMap, resp *cmd.ResponseBuilder) { - cfg := config.GetGuildConfig(i.GuildID) - days := 15 - if gokord.Debug { - days = 90 - } - if v, ok := opt["days"]; ok { - in := v.IntValue() - 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 { - s.Logger().Error("sending error invalid days", "error", err) - } - return +func Stats(ctx context.Context) func(s bot.Session, i *event.InteractionCreate, opt cmd.OptionMap, resp *cmd.ResponseBuilder) { + return func(s bot.Session, i *event.InteractionCreate, opt cmd.OptionMap, resp *cmd.ResponseBuilder) { + cfg := config.GetGuildConfig(i.GuildID) + days := 15 + if gokord.Debug { + days = 90 } - days = int(in) - } - err := resp.IsDeferred().Send() - if err != nil { - s.Logger().Error("sending deferred", "error", err) - return - } - go func() { - var w io.WriterTo - if v, ok := opt["user"]; ok { - w, err = statsMember(s, i, days, v.UserValue(s.UserAPI()).ID) - } else { - w, err = statsAll(s, i, days) - } - if err != nil { - s.Logger().Error("generating stats", "error", err, "guild", i.GuildID) - if err = resp.IsEphemeral().SetMessage("Il y a eu une erreur...").Send(); err != nil { - s.Logger().Error("sending error occurred", "error", err) + if v, ok := opt["days"]; ok { + in := v.IntValue() + 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 { + s.Logger().Error("sending error invalid days", "error", err) + } + return } - return - } - b := new(bytes.Buffer) - _, err = w.WriteTo(b) - if err != nil { - s.Logger().Error("writing png", "error", err) + days = int(in) } - err = resp.AddFile(&channel.File{ - Name: "plot.png", - ContentType: "image/png", - Reader: b, - }).Send() + err := resp.IsDeferred().Send() if err != nil { - s.Logger().Error("sending stats", "error", err) + s.Logger().Error("sending deferred", "error", err) + return } - }() + go func() { + var w io.WriterTo + if v, ok := opt["user"]; ok { + w, err = statsMember(ctx, s, i, days, v.UserValue(s.UserAPI()).ID) + } else { + w, err = statsAll(s, i, days) + } + if err != nil { + s.Logger().Error("generating stats", "error", err, "guild", i.GuildID) + if err = resp.IsEphemeral().SetMessage("Il y a eu une erreur...").Send(); err != nil { + s.Logger().Error("sending error occurred", "error", err) + } + return + } + b := new(bytes.Buffer) + _, err = w.WriteTo(b) + if err != nil { + s.Logger().Error("writing png", "error", err) + } + err = resp.AddFile(&channel.File{ + Name: "plot.png", + ContentType: "image/png", + Reader: b, + }).Send() + if err != nil { + s.Logger().Error("sending stats", "error", err) + } + }() + } } func statsAll(s bot.Session, i *event.InteractionCreate, days int) (io.WriterTo, error) { @@ -104,7 +107,7 @@ func statsAll(s bot.Session, i *event.InteractionCreate, days int) (io.WriterTo, }) } -func statsMember(s bot.Session, i *event.InteractionCreate, days int, discordID string) (io.WriterTo, error) { +func statsMember(ctx context.Context, s bot.Session, i *event.InteractionCreate, days int, discordID string) (io.WriterTo, error) { _, err := s.GuildAPI().Member(i.GuildID, discordID) if err != nil { return nil, err @@ -112,7 +115,7 @@ func statsMember(s bot.Session, i *event.InteractionCreate, days int, discordID return stats(s, i, days, func(before, after string) *gorm.DB { return gokord.DB.Raw( before+"WHERE guild_id = ? and created_at > ? and copaing_id = ?"+after, - i.GuildID, exp.TimeStampNDaysBefore(uint(days)), user.GetCopaing(discordID, i.GuildID).ID, + i.GuildID, exp.TimeStampNDaysBefore(uint(days)), user.GetCopaing(ctx, discordID, i.GuildID).ID, ) }) } |
