diff options
| author | William Hergès <william@herges.fr> | 2025-09-04 16:30:54 +0200 |
|---|---|---|
| committer | William Hergès <william@herges.fr> | 2025-09-04 16:30:54 +0200 |
| commit | fa9b7767ab81471d15c29d77a85968e505b3b433 (patch) | |
| tree | 481f2ac867a7709e263802e842b9e12835f6ac0c /commands/config.go | |
| parent | 7508627d86a4f2ef9b3caebd88d92fe8be854816 (diff) | |
| parent | 30ecd60b041398390f11fccdf46444fa28690bd8 (diff) | |
Merge branch 'main' into feat/xp-boost
Diffstat (limited to 'commands/config.go')
| -rw-r--r-- | commands/config.go | 397 |
1 files changed, 79 insertions, 318 deletions
diff --git a/commands/config.go b/commands/config.go index 48d7ab8..c4644bc 100644 --- a/commands/config.go +++ b/commands/config.go @@ -2,15 +2,21 @@ package commands import ( "fmt" - "github.com/anhgelus/gokord" - "github.com/anhgelus/gokord/utils" - "github.com/anhgelus/les-copaings-bot/config" - "github.com/anhgelus/les-copaings-bot/exp" - "github.com/bwmarrin/discordgo" "strings" + + "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/component" + "github.com/anhgelus/gokord/logger" + discordgo "github.com/nyttikord/gokord" +) + +const ( + ConfigModify = "config_modify" ) -func ConfigShow(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +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 +49,73 @@ 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: "⌛"}), + // ), + // )) + comp := component.New(). + 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: "⌛"}), + ), + )) + msg := fmt.Sprintf( + "# Config\n**Salon par défaut**\n%s\n\n**Rôles liés aux niveaux**\n%s\n\n**Salons désactivés**\n%s\n\n**Jours avant la réduction**\n%d", + defaultChan, + roles, + chans, + cfg.DaysXPRemains, + ) + err := resp.SetComponents(comp).SetMessage(msg).IsEphemeral().Send() if err != nil { - utils.SendAlert("commands/config.go - Days saved message", err.Error()) + logger.Alert("config/guild.go - Sending config", err.Error()) } } |
