diff options
Diffstat (limited to 'commands')
| -rw-r--r-- | commands/config.go | 358 | ||||
| -rw-r--r-- | commands/credits.go | 9 | ||||
| -rw-r--r-- | commands/rank.go | 17 | ||||
| -rw-r--r-- | commands/reset.go | 19 | ||||
| -rw-r--r-- | commands/top.go | 15 |
5 files changed, 75 insertions, 343 deletions
diff --git a/commands/config.go b/commands/config.go index 48d7ab8..b6e6854 100644 --- a/commands/config.go +++ b/commands/config.go @@ -2,15 +2,20 @@ package commands import ( "fmt" - "github.com/anhgelus/gokord" - "github.com/anhgelus/gokord/utils" + "github.com/anhgelus/gokord/cmd" + "github.com/anhgelus/gokord/component" + "github.com/anhgelus/gokord/logger" "github.com/anhgelus/les-copaings-bot/config" "github.com/anhgelus/les-copaings-bot/exp" "github.com/bwmarrin/discordgo" "strings" ) -func ConfigShow(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +const ( + ConfigModify = "config_modify" +) + +func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { cfg := config.GetGuildConfig(i.GuildID) roles := "" l := len(cfg.XpRoles) - 1 @@ -43,318 +48,41 @@ func ConfigShow(s *discordgo.Session, i *discordgo.InteractionCreate, optMap uti } else { defaultChan = fmt.Sprintf("<#%s>", cfg.FallbackChannel) } - err := resp.AddEmbed(&discordgo.MessageEmbed{ - Type: discordgo.EmbedTypeRich, - Title: "Config", - Color: utils.Success, - Fields: []*discordgo.MessageEmbedField{ - { - Name: "Salon par défaut", - Value: defaultChan, - Inline: false, - }, - { - Name: "Rôles liés aux niveaux", - Value: roles, - Inline: false, - }, - { - Name: "Salons désactivés", - Value: chans, - Inline: false, - }, - { - Name: "Jours avant la réduction", - Value: fmt.Sprintf("%d", cfg.DaysXPRemains), - Inline: false, - }, - }, - }).Send() - if err != nil { - utils.SendAlert("config/guild.go - Sending config", err.Error()) - } -} - -func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { - resp.IsEphemeral() - // verify every args - t, ok := optMap["type"] - if !ok { - err := resp.SetMessage("Le type d'action n'a pas été renseigné.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Action type not set", err.Error()) - } - return - } - ts := t.StringValue() - lvl, ok := optMap["level"] - if !ok { - err := resp.SetMessage("Le niveau n'a pas été renseigné.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Level not set", err.Error()) - } - return - } - level := lvl.IntValue() - if level < 1 { - err := resp.SetMessage("Le niveau doit forcément être supérieur à 0.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Invalid level", err.Error()) - } - return - } - xp := exp.LevelXP(uint(level)) - r, ok := optMap["role"] - if !ok { - err := resp.SetMessage("Le rôle n'a pas été renseigné.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Role not set", err.Error()) - } - return - } - role := r.RoleValue(s, i.GuildID) - cfg := config.GetGuildConfig(i.GuildID) - - // add or delete or edit - var err error - switch ts { - case "add": - for _, r := range cfg.XpRoles { - if r.RoleID == role.ID { - err = resp.SetMessage("Le rôle est déjà présent dans la config").Send() - if err != nil { - utils.SendAlert("commands/config.go - Role already in config", err.Error()) - } - return - } - } - cfg.XpRoles = append(cfg.XpRoles, config.XpRole{ - XP: xp, - RoleID: role.ID, - }) - err = cfg.Save() - if err != nil { - utils.SendAlert( - "commands/config.go - Saving config", - err.Error(), - "guild_id", - i.GuildID, - "role_id", - role.ID, - "type", - "add", - ) - } - case "del": - _, r := cfg.FindXpRole(role.ID) - if r == nil { - err = resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Role not found (del)", err.Error()) - } - return - } - err = gokord.DB.Delete(r).Error - if err != nil { - utils.SendAlert( - "commands/config.go - Deleting entry", - err.Error(), - "guild_id", - i.GuildID, - "role_id", - role.ID, - "type", - "del", - ) - } - case "edit": - _, r := cfg.FindXpRole(role.ID) - if r == nil { - err = resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Role not found (edit)", err.Error()) - } - return - } - r.XP = xp - err = gokord.DB.Save(r).Error - if err != nil { - utils.SendAlert( - "commands/config.go - Saving config", - err.Error(), - "guild_id", - i.GuildID, - "role_id", - role.ID, - "type", - "edit", - ) - } - default: - err = resp.SetMessage("Le type d'action n'est pas valide.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Invalid action type", err.Error()) - } - return - } - if err != nil { - err = resp.SetMessage("Il y a eu une erreur lors de la modification de de la base de données.").Send() - } else { - err = resp.SetMessage("La configuration a bien été mise à jour.").Send() - } - if err != nil { - utils.SendAlert("commands/config.go - Config updated message", err.Error()) - } -} - -func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { - resp.IsEphemeral() - // verify every args - t, ok := optMap["type"] - if !ok { - err := resp.SetMessage("Le type d'action n'a pas été renseigné.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Action type not set", err.Error()) - } - return - } - ts := t.StringValue() - salon, ok := optMap["channel"] - if !ok { - err := resp.SetMessage("Le salon n'a pas été renseigné.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Channel not set (disabled)", err.Error()) - } - return - } - channel := salon.ChannelValue(s) - cfg := config.GetGuildConfig(i.GuildID) - switch ts { - case "add": - if strings.Contains(cfg.DisabledChannels, channel.ID) { - err := resp.SetMessage("Le salon est déjà dans la liste des salons désactivés").Send() - if err != nil { - utils.SendAlert("commands/config.go - Channel already disabled", err.Error()) - } - return - } - cfg.DisabledChannels += channel.ID + ";" - case "del": - if !strings.Contains(cfg.DisabledChannels, channel.ID) { - err := resp.SetMessage("Le salon n'est pas désactivé").Send() - if err != nil { - utils.SendAlert("commands/config.go - Channel not disabled", err.Error()) - } - return - } - cfg.DisabledChannels = strings.ReplaceAll(cfg.DisabledChannels, channel.ID+";", "") - default: - err := resp.SetMessage("Le type d'action n'est pas valide.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Invalid action type", err.Error()) - } - return - } - // save - err := cfg.Save() - if err != nil { - utils.SendAlert( - "commands/config.go - Saving config", - err.Error(), - "guild_id", - i.GuildID, - "type", - ts, - "channel_id", - channel.ID, - ) - err = resp.SetMessage("Il y a eu une erreur lors de la modification de de la base de données.").Send() - } else { - err = resp.SetMessage("Modification sauvegardé.").Send() - } - if err != nil { - utils.SendAlert("commands/config.go - Modification saved message", err.Error()) - } -} - -func ConfigFallbackChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { - resp.IsEphemeral() - // verify every args - salon, ok := optMap["channel"] - if !ok { - err := resp.SetMessage("Le salon n'a pas été renseigné.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Channel not set (fallback)", err.Error()) - } - return - } - channel := salon.ChannelValue(s) - if channel.Type != discordgo.ChannelTypeGuildText { - err := resp.SetMessage("Le salon n'est pas un salon textuel.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Invalid channel type", err.Error()) - } - return - } - cfg := config.GetGuildConfig(i.GuildID) - cfg.FallbackChannel = channel.ID - // save - err := cfg.Save() - if err != nil { - utils.SendAlert( - "commands/config.go - Saving config", - err.Error(), - "guild_id", - i.GuildID, - "channel_id", - channel.ID, - ) - err = resp.SetMessage("Il y a eu une erreur lors de la modification de de la base de données.").Send() - } else { - err = resp.SetMessage("Salon enregistré.").Send() - } - if err != nil { - utils.SendAlert("commands/config.go - Channel saved message", err.Error()) - } -} - -func ConfigPeriodBeforeReduce(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { - resp.IsEphemeral() - // verify every args - days, ok := optMap["days"] - if !ok { - err := resp.SetMessage("Le nombre de jours n'a pas été renseigné.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Days not set (fallback)", err.Error()) - } - return - } - d := days.IntValue() - if d < 30 { - err := resp.SetMessage("Le nombre de jours est inférieur à 30.").Send() - if err != nil { - utils.SendAlert("commands/config.go - Days < 30 (fallback)", err.Error()) - } - return - } - // save - cfg := config.GetGuildConfig(i.GuildID) - cfg.DaysXPRemains = uint(d) - err := cfg.Save() - if err != nil { - utils.SendAlert( - "commands/config.go - Saving config", - err.Error(), - "guild_id", - i.GuildID, - "days", - d, - ) - err = resp.SetMessage("Il y a eu une erreur lors de la modification de de la base de données.").Send() - } else { - err = resp.SetMessage("Nombre de jours enregistré.").Send() - } + comp := component.New(). + Add(component.NewTextDisplay("# Config")). + Add(component.NewTextDisplay("**Salon par défaut**\n" + defaultChan)). + Add(component.NewSeparator()). + Add(component.NewTextDisplay("**Rôles liés aux niveaux**\n" + roles)). + Add(component.NewSeparator()). + Add(component.NewTextDisplay("**Salons désactivés**\n" + chans)). + Add(component.NewSeparator()). + Add(component.NewTextDisplay(fmt.Sprintf("**%s**\n%d", "Jours avant la réduction", cfg.DaysXPRemains))). + Add(component.NewActionRow().Add(component.NewStringSelect(ConfigModify). + SetPlaceholder("Modifier..."). + AddOption( + component.NewSelectOption("Rôles liés à l'XP", config.ModifyXpRole). + SetDescription("Gère les rôles liés à l'XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "🏅"}), + ). + AddOption( + component.NewSelectOption("Salons désactivés", config.ModifyDisChannel). + SetDescription("Gère les salons désactivés"). + SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}), + ). + AddOption( + // I don't have a better idea for this... + component.NewSelectOption("Salons par défaut", config.ModifyFallbackChannel). + SetDescription("Spécifie le salon par défaut"). + SetEmoji(&discordgo.ComponentEmoji{Name: "💾"}), + ). + AddOption( + component.NewSelectOption("Temps avec la réduction", config.ModifyTimeReduce). + SetDescription("Gère le temps avant la réduction d'XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "⌛"}), + ), + )) + err := resp.SetComponents(comp).IsEphemeral().Send() if err != nil { - utils.SendAlert("commands/config.go - Days saved message", err.Error()) + logger.Alert("config/guild.go - Sending config", err.Error()) } } diff --git a/commands/credits.go b/commands/credits.go index 0943761..cdcfe6e 100644 --- a/commands/credits.go +++ b/commands/credits.go @@ -1,17 +1,18 @@ package commands import ( - "github.com/anhgelus/gokord/utils" + "github.com/anhgelus/gokord/cmd" + "github.com/anhgelus/gokord/logger" "github.com/bwmarrin/discordgo" ) -func Credits(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +func Credits(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { err := resp.AddEmbed(&discordgo.MessageEmbed{ Type: discordgo.EmbedTypeRich, Title: "Crédits", Description: "Auteur du bot : @anhgelus (https://github.com/anhgelus)\nLangage : Go 1.24\nLicence : AGPLv3", - Color: utils.Success, + Color: 0x10E6AD, Fields: []*discordgo.MessageEmbedField{ { Name: "anhgelus/gokord", @@ -31,6 +32,6 @@ func Credits(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils. }, }).Send() if err != nil { - utils.SendAlert("commands/credits.go - Sending credits", err.Error(), "guild_id", i.GuildID) + logger.Alert("commands/credits.go - Sending credits", err.Error(), "guild_id", i.GuildID) } } diff --git a/commands/rank.go b/commands/rank.go index dd5859a..9673089 100644 --- a/commands/rank.go +++ b/commands/rank.go @@ -2,13 +2,14 @@ package commands import ( "fmt" - "github.com/anhgelus/gokord/utils" + "github.com/anhgelus/gokord/cmd" + "github.com/anhgelus/gokord/logger" "github.com/anhgelus/les-copaings-bot/exp" "github.com/anhgelus/les-copaings-bot/user" "github.com/bwmarrin/discordgo" ) -func Rank(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +func Rank(s *discordgo.Session, i *discordgo.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 @@ -18,12 +19,12 @@ func Rank(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.Opt if u.Bot { err = resp.SetMessage("Imagine si les bots avaient un niveau :rolling_eyes:").IsEphemeral().Send() if err != nil { - utils.SendAlert("commands/rank.go - Reply error user is a bot", err.Error()) + logger.Alert("commands/rank.go - Reply error user is a bot", err.Error()) } } m, err = s.GuildMember(i.GuildID, u.ID) if err != nil { - utils.SendAlert( + logger.Alert( "commands/rank.go - Fetching guild member", err.Error(), "discord_id", @@ -33,7 +34,7 @@ func Rank(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.Opt ) err = resp.SetMessage("Erreur : impossible de récupérer le membre").IsEphemeral().Send() if err != nil { - utils.SendAlert("commands/rank.go - Reply error fetching guild member", err.Error()) + logger.Alert("commands/rank.go - Reply error fetching guild member", err.Error()) } return } @@ -42,7 +43,7 @@ func Rank(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.Opt } xp, err := c.GetXP() if err != nil { - utils.SendAlert( + logger.Alert( "commands/rank.go - Fetching xp", err.Error(), "discord_id", @@ -52,7 +53,7 @@ func Rank(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.Opt ) err = resp.SetMessage("Erreur : impossible de récupérer l'XP").IsEphemeral().Send() if err != nil { - utils.SendAlert("commands/rank.go - Reply error fetching xp", err.Error()) + logger.Alert("commands/rank.go - Reply error fetching xp", err.Error()) } return } @@ -66,6 +67,6 @@ func Rank(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.Opt nxtLvlXP-xp, )).Send() if err != nil { - utils.SendAlert("commands/rank.go - Sending rank", err.Error()) + logger.Alert("commands/rank.go - Sending rank", err.Error()) } } diff --git a/commands/reset.go b/commands/reset.go index c4275a0..653a1d9 100644 --- a/commands/reset.go +++ b/commands/reset.go @@ -2,44 +2,45 @@ package commands import ( "github.com/anhgelus/gokord" - "github.com/anhgelus/gokord/utils" + "github.com/anhgelus/gokord/cmd" + "github.com/anhgelus/gokord/logger" "github.com/anhgelus/les-copaings-bot/user" "github.com/bwmarrin/discordgo" ) -func Reset(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +func Reset(_ *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 { - utils.SendAlert("commands/reset.go - Sending success (all)", err.Error()) + logger.Alert("commands/reset.go - Sending success (all)", err.Error()) } } -func ResetUser(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +func ResetUser(s *discordgo.Session, i *discordgo.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 { - utils.SendAlert("commands/reset.go - Copaing not set", err.Error()) + logger.Alert("commands/reset.go - Copaing not set", err.Error()) } return } m := v.UserValue(s) if m.Bot { if err := resp.SetMessage("Les bots n'ont pas de niveau :upside_down:").Send(); err != nil { - utils.SendAlert("commands/reset.go - Copaing not set", err.Error()) + logger.Alert("commands/reset.go - Copaing not set", err.Error()) } return } err := user.GetCopaing(m.ID, i.GuildID).Delete() if err != nil { - utils.SendAlert("commands/reset.go - Copaing not deleted", err.Error(), "discord_id", m.ID, "guild_id", i.GuildID) + logger.Alert("commands/reset.go - Copaing not deleted", err.Error(), "discord_id", m.ID, "guild_id", i.GuildID) err = resp.SetMessage("Erreur : impossible de reset l'utilisateur").Send() if err != nil { - utils.SendAlert("commands/reset.go - Error deleting", err.Error()) + logger.Alert("commands/reset.go - Error deleting", err.Error()) } } if err = resp.SetMessage("Le user bien été reset.").Send(); err != nil { - utils.SendAlert("commands/reset.go - Sending success (user)", err.Error()) + logger.Alert("commands/reset.go - Sending success (user)", err.Error()) } } diff --git a/commands/top.go b/commands/top.go index daa1ccb..09fa91f 100644 --- a/commands/top.go +++ b/commands/top.go @@ -2,7 +2,8 @@ package commands import ( "fmt" - "github.com/anhgelus/gokord/utils" + "github.com/anhgelus/gokord/cmd" + "github.com/anhgelus/gokord/logger" "github.com/anhgelus/les-copaings-bot/config" "github.com/anhgelus/les-copaings-bot/exp" "github.com/anhgelus/les-copaings-bot/user" @@ -10,10 +11,10 @@ import ( "sync" ) -func Top(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +func Top(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { err := resp.IsDeferred().Send() if err != nil { - utils.SendAlert("commands/top.go - Sending deferred", err.Error()) + logger.Alert("commands/top.go - Sending deferred", err.Error()) return } embeds := make([]*discordgo.MessageEmbed, 3) @@ -23,18 +24,18 @@ func Top(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.Opti defer wg.Done() tops, err := user.GetBestXP(i.GuildID, n, d) if err != nil { - utils.SendAlert("commands/top.go - Fetching best xp", err.Error(), "n", n, "d", d, "id", id, "guild_id", i.GuildID) + logger.Alert("commands/top.go - Fetching best xp", err.Error(), "n", n, "d", d, "id", id, "guild_id", i.GuildID) embeds[id] = &discordgo.MessageEmbed{ Title: s, Description: "Erreur : impossible de récupérer la liste", - Color: utils.Error, + Color: 0x831010, } return } embeds[id] = &discordgo.MessageEmbed{ Title: s, Description: genTopsMessage(tops), - Color: utils.Success, + Color: 0x10E6AD, } } cfg := config.GetGuildConfig(i.GuildID) @@ -57,7 +58,7 @@ func Top(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.Opti } err = resp.Send() if err != nil { - utils.SendAlert("commands/top.go - Sending response top", err.Error()) + logger.Alert("commands/top.go - Sending response top", err.Error()) } }() } |
