From b4408674c901d03da72f9471cf1a19762f03b03a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 30 Jul 2025 21:57:05 +0200 Subject: refactor(command): use message component to edit config --- commands/config.go | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index 48d7ab8..472a4ea 100644 --- a/commands/config.go +++ b/commands/config.go @@ -10,7 +10,15 @@ import ( "strings" ) -func ConfigShow(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +const ( + SelectConfigModify = "config_modify" + SelectOptConfigXpRole = "xp_role" + SelectOptConfigDisChannel = "disabled_channel" + SelectOptConfigFallbackChannel = "fallback_channel" + SelectOptConfigTimeReduce = "time_reduce" +) + +func Config(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { cfg := config.GetGuildConfig(i.GuildID) roles := "" l := len(cfg.XpRoles) - 1 @@ -69,13 +77,46 @@ func ConfigShow(s *discordgo.Session, i *discordgo.InteractionCreate, optMap uti Inline: false, }, }, - }).Send() + }).AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{ + discordgo.SelectMenu{ + MenuType: discordgo.StringSelectMenu, + CustomID: SelectConfigModify, + Placeholder: "Modifier...", + Options: []discordgo.SelectMenuOption{ + { + Label: "Rôles liés à l'XP", + Value: SelectOptConfigXpRole, + Description: "Gère les rôles liés à l'XP", + Emoji: &discordgo.ComponentEmoji{Name: "🏅"}, + }, + { + Label: "Salons désactivés", + Value: SelectOptConfigDisChannel, + Description: "Gère les salons désactivés", + Emoji: &discordgo.ComponentEmoji{Name: "❌"}, + }, + { + Label: "Salons de repli", // I don't have a better idea for this... + Value: SelectOptConfigFallbackChannel, + Description: "Spécifie le salon de repli", + Emoji: &discordgo.ComponentEmoji{Name: "💾"}, + }, + { + Label: "Temps avec la réduction", + Value: SelectOptConfigTimeReduce, + Description: "Gère le temps avant la réduction d'XP", + Emoji: &discordgo.ComponentEmoji{Name: "⌛"}, + }, + }, + Disabled: false, + }, + }}).IsEphemeral().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) { +func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { resp.IsEphemeral() // verify every args t, ok := optMap["type"] -- cgit v1.2.3 From 30992e873cc5d68f7e231e5ea920e5fec748836d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 30 Jul 2025 22:39:31 +0200 Subject: refactor(command): modify xp role with message component --- commands/config.go | 273 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 185 insertions(+), 88 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index 472a4ea..0f9a6d6 100644 --- a/commands/config.go +++ b/commands/config.go @@ -7,15 +7,30 @@ import ( "github.com/anhgelus/les-copaings-bot/config" "github.com/anhgelus/les-copaings-bot/exp" "github.com/bwmarrin/discordgo" + "strconv" "strings" + "time" ) const ( - SelectConfigModify = "config_modify" - SelectOptConfigXpRole = "xp_role" - SelectOptConfigDisChannel = "disabled_channel" - SelectOptConfigFallbackChannel = "fallback_channel" - SelectOptConfigTimeReduce = "time_reduce" + ConfigModify = "config_modify" + ConfigModifyXpRole = "xp_role" + ConfigModifyDisChannel = "disabled_channel" + ConfigModifyFallbackChannel = "fallback_channel" + ConfigModifyTimeReduce = "time_reduce" + // xp role related + XpRoleAdd = "xp_role_add" + XpRoleAddLevel = "xp_role_add_level" + XpRoleAddRole = "xp_role_add_role" + XpRoleDel = "xp_role_del" + XpRoleDelRole = "xp_role_del_role" + XpRoleEdit = "xp_role_edit" + XpRoleEditLevel = "xp_role_edit_level" + XpRoleEditRole = "xp_role_edit_role" +) + +var ( + configModifyMap = map[string]uint{} ) func Config(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { @@ -80,30 +95,30 @@ func Config(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.O }).AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{ discordgo.SelectMenu{ MenuType: discordgo.StringSelectMenu, - CustomID: SelectConfigModify, + CustomID: ConfigModify, Placeholder: "Modifier...", Options: []discordgo.SelectMenuOption{ { Label: "Rôles liés à l'XP", - Value: SelectOptConfigXpRole, + Value: ConfigModifyXpRole, Description: "Gère les rôles liés à l'XP", Emoji: &discordgo.ComponentEmoji{Name: "🏅"}, }, { Label: "Salons désactivés", - Value: SelectOptConfigDisChannel, + Value: ConfigModifyDisChannel, Description: "Gère les salons désactivés", Emoji: &discordgo.ComponentEmoji{Name: "❌"}, }, { Label: "Salons de repli", // I don't have a better idea for this... - Value: SelectOptConfigFallbackChannel, + Value: ConfigModifyFallbackChannel, Description: "Spécifie le salon de repli", Emoji: &discordgo.ComponentEmoji{Name: "💾"}, }, { Label: "Temps avec la réduction", - Value: SelectOptConfigTimeReduce, + Value: ConfigModifyTimeReduce, Description: "Gère le temps avant la réduction d'XP", Emoji: &discordgo.ComponentEmoji{Name: "⌛"}, }, @@ -117,52 +132,76 @@ func Config(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.O } func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { - 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()) - } + if i.Type != discordgo.InteractionMessageComponent { return } - ts := t.StringValue() - lvl, ok := optMap["level"] - if !ok { - err := resp.SetMessage("Le niveau n'a pas été renseigné.").Send() + + cfg := config.GetGuildConfig(i.GuildID) + + resp := utils.NewResponseBuilder(s, i) + + msgData := i.MessageComponentData() + switch msgData.CustomID { + case ConfigModifyXpRole: + err := resp.IsEphemeral(). + SetMessage("Action à réaliser"). + AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{ + discordgo.SelectMenu{ + MenuType: discordgo.StringSelectMenu, + CustomID: ConfigModify, + Placeholder: "Action", + Options: []discordgo.SelectMenuOption{ + { + Label: "Ajouter", + Value: XpRoleAdd, + Description: "Ajouter un rôle à XP", + Emoji: &discordgo.ComponentEmoji{Name: "⬆️"}, + }, + { + Label: "Supprimer", + Value: XpRoleDel, + Description: "Supprimer un rôle à XP", + Emoji: &discordgo.ComponentEmoji{Name: "❌"}, + }, + { + Label: "Modifier", + Value: XpRoleEdit, + Description: "Modifier un rôle à XP", + Emoji: &discordgo.ComponentEmoji{Name: "📝"}, + }, + }, + }, + }}).Send() if err != nil { - utils.SendAlert("commands/config.go - Level not set", err.Error()) + utils.SendAlert("config/guild.go - Sending config", 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()) + case XpRoleAdd, XpRoleEdit: + cID := XpRoleAddLevel + if msgData.CustomID == XpRoleEdit { + cID = XpRoleEditLevel } - return - } - xp := exp.LevelXP(uint(level)) - r, ok := optMap["role"] - if !ok { - err := resp.SetMessage("Le rôle n'a pas été renseigné.").Send() + err := resp.IsModal(). + SetTitle("Role"). + AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{ + discordgo.TextInput{ + CustomID: cID, + Label: "Niveau", + Style: discordgo.TextInputShort, + Placeholder: "5", + Required: true, + MinLength: 0, + MaxLength: 5, + }, + }}). + Send() if err != nil { - utils.SendAlert("commands/config.go - Role not set", err.Error()) + utils.SendAlert("config/guild.go - Sending modal to add", 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": + case XpRoleAddRole: + roleId := msgData.Values[0] 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 r.RoleID == roleId { + 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()) } @@ -170,84 +209,142 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { } } cfg.XpRoles = append(cfg.XpRoles, config.XpRole{ - XP: xp, - RoleID: role.ID, + XP: configModifyMap[getKeyConfigRole(i)], + RoleID: roleId, }) - err = cfg.Save() + 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", + "guild_id", i.GuildID, + "role_id", roleId, + "type", "add", ) } - case "del": - _, r := cfg.FindXpRole(role.ID) + if err = resp.IsEphemeral().SetMessage("Rôle ajouté.").Send(); err != nil { + utils.SendAlert("commands/config.go - Sending success", err.Error()) + } + case XpRoleEditRole: + roleId := msgData.Values[0] + _, r := cfg.FindXpRole(roleId) if r == nil { - err = resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() + 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()) + utils.SendAlert("commands/config.go - Role not found (edit)", err.Error()) } return } - err = gokord.DB.Delete(r).Error + r.XP = configModifyMap[getKeyConfigRole(i)] + err := gokord.DB.Save(r).Error if err != nil { utils.SendAlert( - "commands/config.go - Deleting entry", + "commands/config.go - Saving config", err.Error(), - "guild_id", - i.GuildID, - "role_id", - role.ID, - "type", - "del", + "guild_id", i.GuildID, + "role_id", roleId, + "type", "edit", ) } - case "edit": - _, r := cfg.FindXpRole(role.ID) + if err = resp.IsEphemeral().SetMessage("Rôle modifié.").Send(); err != nil { + utils.SendAlert("commands/config.go - Sending success", err.Error()) + } + case XpRoleDel: + err := resp.IsEphemeral(). + SetMessage("Rôle à supprimer"). + AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{discordgo.SelectMenu{ + MenuType: discordgo.RoleSelectMenu, + CustomID: XpRoleDelRole, + }}}). + Send() + if err != nil { + utils.SendAlert("config/guild.go - Sending response to del", err.Error()) + } + case XpRoleDelRole: + roleId := msgData.Values[0] + _, r := cfg.FindXpRole(roleId) if r == nil { - err = resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() + 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()) + utils.SendAlert("commands/config.go - Role not found (del)", err.Error()) } return } - r.XP = xp - err = gokord.DB.Save(r).Error + err := gokord.DB.Delete(r).Error if err != nil { utils.SendAlert( - "commands/config.go - Saving config", + "commands/config.go - Deleting entry", err.Error(), - "guild_id", - i.GuildID, - "role_id", - role.ID, - "type", - "edit", + "guild_id", i.GuildID, + "role_id", roleId, + "type", "del", ) } + if err = resp.IsEphemeral().SetMessage("Rôle supprimé.").Send(); err != nil { + utils.SendAlert("commands/config.go - Sending success", err.Error()) + } default: - err = resp.SetMessage("Le type d'action n'est pas valide.").Send() + 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() +} + +func ConfigXPModal(s *discordgo.Session, i *discordgo.InteractionCreate) { + if i.Type != discordgo.InteractionModalSubmit { + return + } + resp := utils.NewResponseBuilder(s, i) + + modalData := i.ModalSubmitData() + + if modalData.CustomID != XpRoleAddLevel && modalData.CustomID != XpRoleEditLevel { + return + } + + input := modalData.Components[0].(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput) + + k := getKeyConfigRole(i) + in, err := strconv.Atoi(input.Value) + if err != nil || in < 0 { + if err = resp.IsEphemeral(). + SetMessage("Impossible de lire le nombre. Il doit s'agit d'un nombre entier positif."). + Send(); err != nil { + utils.SendAlert("command/config.go - Sending bad number", err.Error()) + } + return + } + configModifyMap[k] = uint(in) + go func(i *discordgo.InteractionCreate, k string) { + time.Sleep(5 * time.Minute) + delete(configModifyMap, k) + }(i, k) + + cID := XpRoleAddRole + resp.SetMessage("Rôle à ajouter") + if modalData.CustomID == XpRoleEditLevel { + cID = XpRoleEditLevel + resp.SetMessage("Rôle à modifier") } + + err = resp.IsEphemeral(). + SetMessage("Rôle à supprimer"). + AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{discordgo.SelectMenu{ + MenuType: discordgo.RoleSelectMenu, + CustomID: cID, + }}}). + Send() if err != nil { - utils.SendAlert("commands/config.go - Config updated message", err.Error()) + utils.SendAlert("config/guild.go - Sending response to add/edit", err.Error()) } } +func getKeyConfigRole(i *discordgo.InteractionCreate) string { + return fmt.Sprintf("r:%s:%s", i.GuildID, i.User.ID) +} + func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { resp.IsEphemeral() // verify every args -- cgit v1.2.3 From 5a8da1eaeb9434a18e553a5c50490d06b54a6a1d Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Wed, 6 Aug 2025 02:22:06 +0200 Subject: build(gokord): upgrade to latest version --- commands/config.go | 79 +++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 39 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index 0f9a6d6..c6eca0d 100644 --- a/commands/config.go +++ b/commands/config.go @@ -3,7 +3,8 @@ package commands import ( "fmt" "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/config" "github.com/anhgelus/les-copaings-bot/exp" "github.com/bwmarrin/discordgo" @@ -33,7 +34,7 @@ var ( configModifyMap = map[string]uint{} ) -func Config(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.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 @@ -69,7 +70,7 @@ func Config(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.O err := resp.AddEmbed(&discordgo.MessageEmbed{ Type: discordgo.EmbedTypeRich, Title: "Config", - Color: utils.Success, + Color: 0x10E6AD, Fields: []*discordgo.MessageEmbedField{ { Name: "Salon par défaut", @@ -127,7 +128,7 @@ func Config(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.O }, }}).IsEphemeral().Send() if err != nil { - utils.SendAlert("config/guild.go - Sending config", err.Error()) + logger.Alert("config/guild.go - Sending config", err.Error()) } } @@ -138,7 +139,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { cfg := config.GetGuildConfig(i.GuildID) - resp := utils.NewResponseBuilder(s, i) + resp := cmd.NewResponseBuilder(s, i) msgData := i.MessageComponentData() switch msgData.CustomID { @@ -173,7 +174,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { }, }}).Send() if err != nil { - utils.SendAlert("config/guild.go - Sending config", err.Error()) + logger.Alert("config/guild.go - Sending config", err.Error()) } case XpRoleAdd, XpRoleEdit: cID := XpRoleAddLevel @@ -195,7 +196,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { }}). Send() if err != nil { - utils.SendAlert("config/guild.go - Sending modal to add", err.Error()) + logger.Alert("config/guild.go - Sending modal to add", err.Error()) } case XpRoleAddRole: roleId := msgData.Values[0] @@ -203,7 +204,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { if r.RoleID == roleId { 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()) + logger.Alert("commands/config.go - Role already in config", err.Error()) } return } @@ -214,7 +215,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { }) err := cfg.Save() if err != nil { - utils.SendAlert( + logger.Alert( "commands/config.go - Saving config", err.Error(), "guild_id", i.GuildID, @@ -223,7 +224,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { ) } if err = resp.IsEphemeral().SetMessage("Rôle ajouté.").Send(); err != nil { - utils.SendAlert("commands/config.go - Sending success", err.Error()) + logger.Alert("commands/config.go - Sending success", err.Error()) } case XpRoleEditRole: roleId := msgData.Values[0] @@ -231,14 +232,14 @@ func ConfigXP(s *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 { - utils.SendAlert("commands/config.go - Role not found (edit)", err.Error()) + logger.Alert("commands/config.go - Role not found (edit)", err.Error()) } return } r.XP = configModifyMap[getKeyConfigRole(i)] err := gokord.DB.Save(r).Error if err != nil { - utils.SendAlert( + logger.Alert( "commands/config.go - Saving config", err.Error(), "guild_id", i.GuildID, @@ -247,7 +248,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { ) } if err = resp.IsEphemeral().SetMessage("Rôle modifié.").Send(); err != nil { - utils.SendAlert("commands/config.go - Sending success", err.Error()) + logger.Alert("commands/config.go - Sending success", err.Error()) } case XpRoleDel: err := resp.IsEphemeral(). @@ -258,7 +259,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { }}}). Send() if err != nil { - utils.SendAlert("config/guild.go - Sending response to del", err.Error()) + logger.Alert("config/guild.go - Sending response to del", err.Error()) } case XpRoleDelRole: roleId := msgData.Values[0] @@ -266,13 +267,13 @@ func ConfigXP(s *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 { - utils.SendAlert("commands/config.go - Role not found (del)", err.Error()) + logger.Alert("commands/config.go - Role not found (del)", err.Error()) } return } err := gokord.DB.Delete(r).Error if err != nil { - utils.SendAlert( + logger.Alert( "commands/config.go - Deleting entry", err.Error(), "guild_id", i.GuildID, @@ -281,12 +282,12 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { ) } if err = resp.IsEphemeral().SetMessage("Rôle supprimé.").Send(); err != nil { - utils.SendAlert("commands/config.go - Sending success", err.Error()) + logger.Alert("commands/config.go - Sending success", err.Error()) } 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()) + logger.Alert("commands/config.go - Invalid action type", err.Error()) } return } @@ -296,7 +297,7 @@ func ConfigXPModal(s *discordgo.Session, i *discordgo.InteractionCreate) { if i.Type != discordgo.InteractionModalSubmit { return } - resp := utils.NewResponseBuilder(s, i) + resp := cmd.NewResponseBuilder(s, i) modalData := i.ModalSubmitData() @@ -312,7 +313,7 @@ func ConfigXPModal(s *discordgo.Session, i *discordgo.InteractionCreate) { if err = resp.IsEphemeral(). SetMessage("Impossible de lire le nombre. Il doit s'agit d'un nombre entier positif."). Send(); err != nil { - utils.SendAlert("command/config.go - Sending bad number", err.Error()) + logger.Alert("command/config.go - Sending bad number", err.Error()) } return } @@ -337,7 +338,7 @@ func ConfigXPModal(s *discordgo.Session, i *discordgo.InteractionCreate) { }}}). Send() if err != nil { - utils.SendAlert("config/guild.go - Sending response to add/edit", err.Error()) + logger.Alert("config/guild.go - Sending response to add/edit", err.Error()) } } @@ -345,14 +346,14 @@ func getKeyConfigRole(i *discordgo.InteractionCreate) string { return fmt.Sprintf("r:%s:%s", i.GuildID, i.User.ID) } -func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.OptionMap, resp *cmd.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()) + logger.Alert("commands/config.go - Action type not set", err.Error()) } return } @@ -361,7 +362,7 @@ func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap 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()) + logger.Alert("commands/config.go - Channel not set (disabled)", err.Error()) } return } @@ -372,7 +373,7 @@ func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap 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()) + logger.Alert("commands/config.go - Channel already disabled", err.Error()) } return } @@ -381,7 +382,7 @@ func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap 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()) + logger.Alert("commands/config.go - Channel not disabled", err.Error()) } return } @@ -389,14 +390,14 @@ func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap 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()) + logger.Alert("commands/config.go - Invalid action type", err.Error()) } return } // save err := cfg.Save() if err != nil { - utils.SendAlert( + logger.Alert( "commands/config.go - Saving config", err.Error(), "guild_id", @@ -411,18 +412,18 @@ func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap err = resp.SetMessage("Modification sauvegardé.").Send() } if err != nil { - utils.SendAlert("commands/config.go - Modification saved message", err.Error()) + logger.Alert("commands/config.go - Modification saved message", err.Error()) } } -func ConfigFallbackChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +func ConfigFallbackChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.OptionMap, resp *cmd.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()) + logger.Alert("commands/config.go - Channel not set (fallback)", err.Error()) } return } @@ -430,7 +431,7 @@ func ConfigFallbackChannel(s *discordgo.Session, i *discordgo.InteractionCreate, 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()) + logger.Alert("commands/config.go - Invalid channel type", err.Error()) } return } @@ -439,7 +440,7 @@ func ConfigFallbackChannel(s *discordgo.Session, i *discordgo.InteractionCreate, // save err := cfg.Save() if err != nil { - utils.SendAlert( + logger.Alert( "commands/config.go - Saving config", err.Error(), "guild_id", @@ -452,18 +453,18 @@ func ConfigFallbackChannel(s *discordgo.Session, i *discordgo.InteractionCreate, err = resp.SetMessage("Salon enregistré.").Send() } if err != nil { - utils.SendAlert("commands/config.go - Channel saved message", err.Error()) + logger.Alert("commands/config.go - Channel saved message", err.Error()) } } -func ConfigPeriodBeforeReduce(s *discordgo.Session, i *discordgo.InteractionCreate, optMap utils.OptionMap, resp *utils.ResponseBuilder) { +func ConfigPeriodBeforeReduce(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.OptionMap, resp *cmd.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()) + logger.Alert("commands/config.go - Days not set (fallback)", err.Error()) } return } @@ -471,7 +472,7 @@ func ConfigPeriodBeforeReduce(s *discordgo.Session, i *discordgo.InteractionCrea 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()) + logger.Alert("commands/config.go - Days < 30 (fallback)", err.Error()) } return } @@ -480,7 +481,7 @@ func ConfigPeriodBeforeReduce(s *discordgo.Session, i *discordgo.InteractionCrea cfg.DaysXPRemains = uint(d) err := cfg.Save() if err != nil { - utils.SendAlert( + logger.Alert( "commands/config.go - Saving config", err.Error(), "guild_id", @@ -493,6 +494,6 @@ func ConfigPeriodBeforeReduce(s *discordgo.Session, i *discordgo.InteractionCrea err = resp.SetMessage("Nombre de jours enregistré.").Send() } if err != nil { - utils.SendAlert("commands/config.go - Days saved message", err.Error()) + logger.Alert("commands/config.go - Days saved message", err.Error()) } } -- cgit v1.2.3 From 0cd725108c998aedcf647ce39cd80a325b33cfa0 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Wed, 6 Aug 2025 02:47:41 +0200 Subject: feat(gokord): use new component lib --- commands/config.go | 148 ++++++++++++++++++++++++----------------------------- 1 file changed, 67 insertions(+), 81 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index c6eca0d..3084056 100644 --- a/commands/config.go +++ b/commands/config.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/anhgelus/gokord" "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" @@ -34,7 +35,7 @@ var ( configModifyMap = map[string]uint{} ) -func Config(s *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { +func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { cfg := config.GetGuildConfig(i.GuildID) roles := "" l := len(cfg.XpRoles) - 1 @@ -93,40 +94,30 @@ func Config(s *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa Inline: false, }, }, - }).AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{ - discordgo.SelectMenu{ - MenuType: discordgo.StringSelectMenu, - CustomID: ConfigModify, - Placeholder: "Modifier...", - Options: []discordgo.SelectMenuOption{ - { - Label: "Rôles liés à l'XP", - Value: ConfigModifyXpRole, - Description: "Gère les rôles liés à l'XP", - Emoji: &discordgo.ComponentEmoji{Name: "🏅"}, - }, - { - Label: "Salons désactivés", - Value: ConfigModifyDisChannel, - Description: "Gère les salons désactivés", - Emoji: &discordgo.ComponentEmoji{Name: "❌"}, - }, - { - Label: "Salons de repli", // I don't have a better idea for this... - Value: ConfigModifyFallbackChannel, - Description: "Spécifie le salon de repli", - Emoji: &discordgo.ComponentEmoji{Name: "💾"}, - }, - { - Label: "Temps avec la réduction", - Value: ConfigModifyTimeReduce, - Description: "Gère le temps avant la réduction d'XP", - Emoji: &discordgo.ComponentEmoji{Name: "⌛"}, - }, - }, - Disabled: false, - }, - }}).IsEphemeral().Send() + }).SetComponents(component.New().Add(new(component.ActionRow).Add( + new(component.StringSelect).SetPlaceholder("Modifier..."). + AddOption( + component.NewSelectOption("Rôles liés à l'XP", ConfigModifyXpRole). + SetDescription("Gère les rôles liés à l'XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "🏅"}), + ). + AddOption( + component.NewSelectOption("Salons désactivés", ConfigModifyDisChannel). + SetDescription("Gère les salons désactivés"). + SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}), + ). + AddOption( + component.NewSelectOption("Salons de repli", ConfigModifyFallbackChannel). // I don't have a better idea for this... + SetDescription("Spécifie le salon de repli"). + SetEmoji(&discordgo.ComponentEmoji{Name: "💾"}), + ). + AddOption( + component.NewSelectOption("Temps avec la réduction", ConfigModifyTimeReduce). + SetDescription("Gère le temps avant la réduction d'XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "⌛"}), + ). + SetCustomID(ConfigModify), + ))).IsEphemeral().Send() if err != nil { logger.Alert("config/guild.go - Sending config", err.Error()) } @@ -146,33 +137,25 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { case ConfigModifyXpRole: err := resp.IsEphemeral(). SetMessage("Action à réaliser"). - AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{ - discordgo.SelectMenu{ - MenuType: discordgo.StringSelectMenu, - CustomID: ConfigModify, - Placeholder: "Action", - Options: []discordgo.SelectMenuOption{ - { - Label: "Ajouter", - Value: XpRoleAdd, - Description: "Ajouter un rôle à XP", - Emoji: &discordgo.ComponentEmoji{Name: "⬆️"}, - }, - { - Label: "Supprimer", - Value: XpRoleDel, - Description: "Supprimer un rôle à XP", - Emoji: &discordgo.ComponentEmoji{Name: "❌"}, - }, - { - Label: "Modifier", - Value: XpRoleEdit, - Description: "Modifier un rôle à XP", - Emoji: &discordgo.ComponentEmoji{Name: "📝"}, - }, - }, - }, - }}).Send() + SetComponents(component.New().Add(new(component.ActionRow).Add( + new(component.StringSelect).SetPlaceholder("Action"). + AddOption( + component.NewSelectOption("Ajouter", XpRoleAdd). + SetDescription("Ajouter un rôle à XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "⬆️"}), + ). + AddOption( + component.NewSelectOption("Modifier", XpRoleEdit). + SetDescription("Modifier un rôle à XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "📝"}), + ). + AddOption( + component.NewSelectOption("Supprimer", XpRoleDel). + SetDescription("Supprimer un rôle à XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}), + ). + SetCustomID(ConfigModify), + ))).Send() if err != nil { logger.Alert("config/guild.go - Sending config", err.Error()) } @@ -181,19 +164,28 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { if msgData.CustomID == XpRoleEdit { cID = XpRoleEditLevel } + component.New().ForModal().Add(new(component.ActionRow).Add( + new(component.TextInput). + SetLabel("Niveau"). + SetPlaceholder("5"). + IsRequired(). + SetMinLength(0). + SetMaxLength(5). + SetStyle(discordgo.TextInputShort). + SetCustomID(cID), + )) err := resp.IsModal(). SetTitle("Role"). - AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{ - discordgo.TextInput{ - CustomID: cID, - Label: "Niveau", - Style: discordgo.TextInputShort, - Placeholder: "5", - Required: true, - MinLength: 0, - MaxLength: 5, - }, - }}). + SetComponents(component.New().ForModal().Add(new(component.ActionRow).Add( + new(component.TextInput). + SetLabel("Niveau"). + SetPlaceholder("5"). + IsRequired(). + SetMinLength(0). + SetMaxLength(5). + SetStyle(discordgo.TextInputShort). + SetCustomID(cID), + ))). Send() if err != nil { logger.Alert("config/guild.go - Sending modal to add", err.Error()) @@ -253,10 +245,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { case XpRoleDel: err := resp.IsEphemeral(). SetMessage("Rôle à supprimer"). - AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{discordgo.SelectMenu{ - MenuType: discordgo.RoleSelectMenu, - CustomID: XpRoleDelRole, - }}}). + SetComponents(component.New().Add(new(component.ActionRow).Add(new(component.RoleSelect).SetCustomID(XpRoleDelRole)))). Send() if err != nil { logger.Alert("config/guild.go - Sending response to del", err.Error()) @@ -332,10 +321,7 @@ func ConfigXPModal(s *discordgo.Session, i *discordgo.InteractionCreate) { err = resp.IsEphemeral(). SetMessage("Rôle à supprimer"). - AddComponent(discordgo.ActionsRow{Components: []discordgo.MessageComponent{discordgo.SelectMenu{ - MenuType: discordgo.RoleSelectMenu, - CustomID: cID, - }}}). + SetComponents(component.New().Add(new(component.ActionRow).Add(new(component.RoleSelect).SetCustomID(cID)))). Send() if err != nil { logger.Alert("config/guild.go - Sending response to add/edit", err.Error()) -- cgit v1.2.3 From 376b3ec29600c9661cea4899ddf94f8515fc7bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 6 Aug 2025 14:39:36 +0200 Subject: feat(command): use gokord function to create components --- commands/config.go | 40 +++++++++++++--------------------------- 1 file changed, 13 insertions(+), 27 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index 3084056..deb006c 100644 --- a/commands/config.go +++ b/commands/config.go @@ -94,8 +94,8 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa Inline: false, }, }, - }).SetComponents(component.New().Add(new(component.ActionRow).Add( - new(component.StringSelect).SetPlaceholder("Modifier..."). + }).SetComponents(component.New().Add(component.NewActionRow().Add( + component.NewStringSelect(ConfigModify).SetPlaceholder("Modifier..."). AddOption( component.NewSelectOption("Rôles liés à l'XP", ConfigModifyXpRole). SetDescription("Gère les rôles liés à l'XP"). @@ -107,7 +107,8 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}), ). AddOption( - component.NewSelectOption("Salons de repli", ConfigModifyFallbackChannel). // I don't have a better idea for this... + // I don't have a better idea for this... + component.NewSelectOption("Salons de repli", ConfigModifyFallbackChannel). SetDescription("Spécifie le salon de repli"). SetEmoji(&discordgo.ComponentEmoji{Name: "💾"}), ). @@ -115,8 +116,7 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa component.NewSelectOption("Temps avec la réduction", ConfigModifyTimeReduce). SetDescription("Gère le temps avant la réduction d'XP"). SetEmoji(&discordgo.ComponentEmoji{Name: "⌛"}), - ). - SetCustomID(ConfigModify), + ), ))).IsEphemeral().Send() if err != nil { logger.Alert("config/guild.go - Sending config", err.Error()) @@ -137,8 +137,8 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { case ConfigModifyXpRole: err := resp.IsEphemeral(). SetMessage("Action à réaliser"). - SetComponents(component.New().Add(new(component.ActionRow).Add( - new(component.StringSelect).SetPlaceholder("Action"). + SetComponents(component.New().Add(component.NewActionRow().Add( + component.NewStringSelect(ConfigModify).SetPlaceholder("Action"). AddOption( component.NewSelectOption("Ajouter", XpRoleAdd). SetDescription("Ajouter un rôle à XP"). @@ -153,8 +153,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { component.NewSelectOption("Supprimer", XpRoleDel). SetDescription("Supprimer un rôle à XP"). SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}), - ). - SetCustomID(ConfigModify), + ), ))).Send() if err != nil { logger.Alert("config/guild.go - Sending config", err.Error()) @@ -164,27 +163,14 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { if msgData.CustomID == XpRoleEdit { cID = XpRoleEditLevel } - component.New().ForModal().Add(new(component.ActionRow).Add( - new(component.TextInput). - SetLabel("Niveau"). - SetPlaceholder("5"). - IsRequired(). - SetMinLength(0). - SetMaxLength(5). - SetStyle(discordgo.TextInputShort). - SetCustomID(cID), - )) err := resp.IsModal(). SetTitle("Role"). - SetComponents(component.New().ForModal().Add(new(component.ActionRow).Add( - new(component.TextInput). - SetLabel("Niveau"). + SetComponents(component.New().ForModal().Add(component.NewActionRow().Add( + component.NewTextInput(cID, "Niveau", discordgo.TextInputShort). SetPlaceholder("5"). IsRequired(). SetMinLength(0). - SetMaxLength(5). - SetStyle(discordgo.TextInputShort). - SetCustomID(cID), + SetMaxLength(5), ))). Send() if err != nil { @@ -245,7 +231,7 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { case XpRoleDel: err := resp.IsEphemeral(). SetMessage("Rôle à supprimer"). - SetComponents(component.New().Add(new(component.ActionRow).Add(new(component.RoleSelect).SetCustomID(XpRoleDelRole)))). + SetComponents(component.New().Add(component.NewActionRow().Add(component.NewRoleSelect(XpRoleDelRole)))). Send() if err != nil { logger.Alert("config/guild.go - Sending response to del", err.Error()) @@ -321,7 +307,7 @@ func ConfigXPModal(s *discordgo.Session, i *discordgo.InteractionCreate) { err = resp.IsEphemeral(). SetMessage("Rôle à supprimer"). - SetComponents(component.New().Add(new(component.ActionRow).Add(new(component.RoleSelect).SetCustomID(cID)))). + SetComponents(component.New().Add(component.NewActionRow().Add(component.NewRoleSelect(cID)))). Send() if err != nil { logger.Alert("config/guild.go - Sending response to add/edit", err.Error()) -- cgit v1.2.3 From 3d89f9c3543b8898ae5c29281e9007fbdb003c5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 6 Aug 2025 14:54:47 +0200 Subject: feat(command): use gokord new handle for config --- commands/config.go | 266 +++++++++++++++++++++++++---------------------------- 1 file changed, 125 insertions(+), 141 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index deb006c..b29cfdd 100644 --- a/commands/config.go +++ b/commands/config.go @@ -123,164 +123,148 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa } } -func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) { - if i.Type != discordgo.InteractionMessageComponent { - return +func ConfigModifyXPRole(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { + err := resp.IsEphemeral(). + SetMessage("Action à réaliser"). + SetComponents(component.New().Add(component.NewActionRow().Add( + component.NewStringSelect(ConfigModify).SetPlaceholder("Action"). + AddOption( + component.NewSelectOption("Ajouter", XpRoleAdd). + SetDescription("Ajouter un rôle à XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "⬆️"}), + ). + AddOption( + component.NewSelectOption("Modifier", XpRoleEdit). + SetDescription("Modifier un rôle à XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "📝"}), + ). + AddOption( + component.NewSelectOption("Supprimer", XpRoleDel). + SetDescription("Supprimer un rôle à XP"). + SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}), + ), + ))).Send() + if err != nil { + logger.Alert("config/guild.go - Sending config", err.Error()) } +} - cfg := config.GetGuildConfig(i.GuildID) - - resp := cmd.NewResponseBuilder(s, i) +func ConfigXPRoleAddEdit(_ *discordgo.Session, _ *discordgo.InteractionCreate, data discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { + cID := XpRoleAddLevel + if data.CustomID == XpRoleEdit { + cID = XpRoleEditLevel + } + err := resp.IsModal(). + SetTitle("Role"). + SetComponents(component.New().ForModal().Add(component.NewActionRow().Add( + component.NewTextInput(cID, "Niveau", discordgo.TextInputShort). + SetPlaceholder("5"). + IsRequired(). + SetMinLength(0). + SetMaxLength(5), + ))). + Send() + if err != nil { + logger.Alert("config/guild.go - Sending modal to add/edit", err.Error()) + } +} - msgData := i.MessageComponentData() - switch msgData.CustomID { - case ConfigModifyXpRole: - err := resp.IsEphemeral(). - SetMessage("Action à réaliser"). - SetComponents(component.New().Add(component.NewActionRow().Add( - component.NewStringSelect(ConfigModify).SetPlaceholder("Action"). - AddOption( - component.NewSelectOption("Ajouter", XpRoleAdd). - SetDescription("Ajouter un rôle à XP"). - SetEmoji(&discordgo.ComponentEmoji{Name: "⬆️"}), - ). - AddOption( - component.NewSelectOption("Modifier", XpRoleEdit). - SetDescription("Modifier un rôle à XP"). - SetEmoji(&discordgo.ComponentEmoji{Name: "📝"}), - ). - AddOption( - component.NewSelectOption("Supprimer", XpRoleDel). - SetDescription("Supprimer un rôle à XP"). - SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}), - ), - ))).Send() - if err != nil { - logger.Alert("config/guild.go - Sending config", err.Error()) - } - case XpRoleAdd, XpRoleEdit: - cID := XpRoleAddLevel - if msgData.CustomID == XpRoleEdit { - cID = XpRoleEditLevel - } - err := resp.IsModal(). - SetTitle("Role"). - SetComponents(component.New().ForModal().Add(component.NewActionRow().Add( - component.NewTextInput(cID, "Niveau", discordgo.TextInputShort). - SetPlaceholder("5"). - IsRequired(). - SetMinLength(0). - SetMaxLength(5), - ))). - Send() - if err != nil { - logger.Alert("config/guild.go - Sending modal to add", err.Error()) - } - case XpRoleAddRole: - roleId := msgData.Values[0] - for _, r := range cfg.XpRoles { - if r.RoleID == roleId { - err := resp.SetMessage("Le rôle est déjà présent dans la config").Send() - if err != nil { - logger.Alert("commands/config.go - Role already in config", err.Error()) - } - return - } - } - cfg.XpRoles = append(cfg.XpRoles, config.XpRole{ - XP: configModifyMap[getKeyConfigRole(i)], - RoleID: roleId, - }) - err := cfg.Save() - if err != nil { - logger.Alert( - "commands/config.go - Saving config", - err.Error(), - "guild_id", i.GuildID, - "role_id", roleId, - "type", "add", - ) - } - if err = resp.IsEphemeral().SetMessage("Rôle ajouté.").Send(); err != nil { - logger.Alert("commands/config.go - Sending success", err.Error()) - } - case XpRoleEditRole: - roleId := msgData.Values[0] - _, r := cfg.FindXpRole(roleId) - if r == nil { - err := resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() - if err != nil { - logger.Alert("commands/config.go - Role not found (edit)", err.Error()) - } - return - } - r.XP = configModifyMap[getKeyConfigRole(i)] - err := gokord.DB.Save(r).Error - if err != nil { - logger.Alert( - "commands/config.go - Saving config", - err.Error(), - "guild_id", i.GuildID, - "role_id", roleId, - "type", "edit", - ) - } - if err = resp.IsEphemeral().SetMessage("Rôle modifié.").Send(); err != nil { - logger.Alert("commands/config.go - Sending success", err.Error()) - } - case XpRoleDel: - err := resp.IsEphemeral(). - SetMessage("Rôle à supprimer"). - SetComponents(component.New().Add(component.NewActionRow().Add(component.NewRoleSelect(XpRoleDelRole)))). - Send() - if err != nil { - logger.Alert("config/guild.go - Sending response to del", err.Error()) - } - case XpRoleDelRole: - roleId := msgData.Values[0] - _, r := cfg.FindXpRole(roleId) - if r == nil { - err := resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() +func ConfigXPRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, data discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { + cfg := config.GetGuildConfig(i.GuildID) + roleId := data.Values[0] + for _, r := range cfg.XpRoles { + if r.RoleID == roleId { + err := resp.SetMessage("Le rôle est déjà présent dans la config").Send() if err != nil { - logger.Alert("commands/config.go - Role not found (del)", err.Error()) + logger.Alert("commands/config.go - Role already in config", err.Error()) } return } - err := gokord.DB.Delete(r).Error - if err != nil { - logger.Alert( - "commands/config.go - Deleting entry", - err.Error(), - "guild_id", i.GuildID, - "role_id", roleId, - "type", "del", - ) - } - if err = resp.IsEphemeral().SetMessage("Rôle supprimé.").Send(); err != nil { - logger.Alert("commands/config.go - Sending success", err.Error()) - } - default: - err := resp.SetMessage("Le type d'action n'est pas valide.").Send() + } + cfg.XpRoles = append(cfg.XpRoles, config.XpRole{ + XP: configModifyMap[getKeyConfigRole(i)], + RoleID: roleId, + }) + err := cfg.Save() + if err != nil { + logger.Alert( + "commands/config.go - Saving config", + err.Error(), + "guild_id", i.GuildID, + "role_id", roleId, + "type", "add", + ) + } + if err = resp.IsEphemeral().SetMessage("Rôle ajouté.").Send(); err != nil { + logger.Alert("commands/config.go - Sending success", err.Error()) + } +} + +func ConfigXPRoleEditRole(_ *discordgo.Session, i *discordgo.InteractionCreate, data discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { + cfg := config.GetGuildConfig(i.GuildID) + roleId := data.Values[0] + _, r := cfg.FindXpRole(roleId) + if r == nil { + err := resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() if err != nil { - logger.Alert("commands/config.go - Invalid action type", err.Error()) + logger.Alert("commands/config.go - Role not found (edit)", err.Error()) } return } + r.XP = configModifyMap[getKeyConfigRole(i)] + err := gokord.DB.Save(r).Error + if err != nil { + logger.Alert( + "commands/config.go - Saving config", + err.Error(), + "guild_id", i.GuildID, + "role_id", roleId, + "type", "edit", + ) + } + if err = resp.IsEphemeral().SetMessage("Rôle modifié.").Send(); err != nil { + logger.Alert("commands/config.go - Sending success", err.Error()) + } } -func ConfigXPModal(s *discordgo.Session, i *discordgo.InteractionCreate) { - if i.Type != discordgo.InteractionModalSubmit { - return +func ConfigXPRoleDel(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { + err := resp.IsEphemeral(). + SetMessage("Rôle à supprimer"). + SetComponents(component.New().Add(component.NewActionRow().Add(component.NewRoleSelect(XpRoleDelRole)))). + Send() + if err != nil { + logger.Alert("config/guild.go - Sending response to del", err.Error()) } - resp := cmd.NewResponseBuilder(s, i) - - modalData := i.ModalSubmitData() +} - if modalData.CustomID != XpRoleAddLevel && modalData.CustomID != XpRoleEditLevel { +func ConfigXPRoleDelRole(_ *discordgo.Session, i *discordgo.InteractionCreate, data discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { + cfg := config.GetGuildConfig(i.GuildID) + roleId := data.Values[0] + _, r := cfg.FindXpRole(roleId) + if r == nil { + err := resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() + if err != nil { + logger.Alert("commands/config.go - Sending role not found (del)", err.Error()) + } return } + err := gokord.DB.Delete(r).Error + if err != nil { + logger.Alert( + "commands/config.go - Deleting entry", + err.Error(), + "guild_id", i.GuildID, + "role_id", roleId, + "type", "del", + ) + } + if err = resp.IsEphemeral().SetMessage("Rôle supprimé.").Send(); err != nil { + logger.Alert("commands/config.go - Sending success", err.Error()) + } +} - input := modalData.Components[0].(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput) +func ConfigXPRoleLevel(_ *discordgo.Session, i *discordgo.InteractionCreate, data discordgo.ModalSubmitInteractionData, resp *cmd.ResponseBuilder) { + input := data.Components[0].(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput) k := getKeyConfigRole(i) in, err := strconv.Atoi(input.Value) @@ -300,7 +284,7 @@ func ConfigXPModal(s *discordgo.Session, i *discordgo.InteractionCreate) { cID := XpRoleAddRole resp.SetMessage("Rôle à ajouter") - if modalData.CustomID == XpRoleEditLevel { + if data.CustomID == XpRoleEditLevel { cID = XpRoleEditLevel resp.SetMessage("Rôle à modifier") } -- cgit v1.2.3 From 0968c18b15c5fe58c0220fa20ef6a87000bd1a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 6 Aug 2025 15:02:51 +0200 Subject: style(config): move everything related to modify xp role in package config --- commands/config.go | 198 +---------------------------------------------------- 1 file changed, 1 insertion(+), 197 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index b29cfdd..9aa4682 100644 --- a/commands/config.go +++ b/commands/config.go @@ -2,37 +2,20 @@ package commands import ( "fmt" - "github.com/anhgelus/gokord" "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" - "strconv" "strings" - "time" ) const ( ConfigModify = "config_modify" - ConfigModifyXpRole = "xp_role" ConfigModifyDisChannel = "disabled_channel" ConfigModifyFallbackChannel = "fallback_channel" ConfigModifyTimeReduce = "time_reduce" - // xp role related - XpRoleAdd = "xp_role_add" - XpRoleAddLevel = "xp_role_add_level" - XpRoleAddRole = "xp_role_add_role" - XpRoleDel = "xp_role_del" - XpRoleDelRole = "xp_role_del_role" - XpRoleEdit = "xp_role_edit" - XpRoleEditLevel = "xp_role_edit_level" - XpRoleEditRole = "xp_role_edit_role" -) - -var ( - configModifyMap = map[string]uint{} ) func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { @@ -97,7 +80,7 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa }).SetComponents(component.New().Add(component.NewActionRow().Add( component.NewStringSelect(ConfigModify).SetPlaceholder("Modifier..."). AddOption( - component.NewSelectOption("Rôles liés à l'XP", ConfigModifyXpRole). + component.NewSelectOption("Rôles liés à l'XP", config.ModifyXpRole). SetDescription("Gère les rôles liés à l'XP"). SetEmoji(&discordgo.ComponentEmoji{Name: "🏅"}), ). @@ -123,185 +106,6 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa } } -func ConfigModifyXPRole(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { - err := resp.IsEphemeral(). - SetMessage("Action à réaliser"). - SetComponents(component.New().Add(component.NewActionRow().Add( - component.NewStringSelect(ConfigModify).SetPlaceholder("Action"). - AddOption( - component.NewSelectOption("Ajouter", XpRoleAdd). - SetDescription("Ajouter un rôle à XP"). - SetEmoji(&discordgo.ComponentEmoji{Name: "⬆️"}), - ). - AddOption( - component.NewSelectOption("Modifier", XpRoleEdit). - SetDescription("Modifier un rôle à XP"). - SetEmoji(&discordgo.ComponentEmoji{Name: "📝"}), - ). - AddOption( - component.NewSelectOption("Supprimer", XpRoleDel). - SetDescription("Supprimer un rôle à XP"). - SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}), - ), - ))).Send() - if err != nil { - logger.Alert("config/guild.go - Sending config", err.Error()) - } -} - -func ConfigXPRoleAddEdit(_ *discordgo.Session, _ *discordgo.InteractionCreate, data discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { - cID := XpRoleAddLevel - if data.CustomID == XpRoleEdit { - cID = XpRoleEditLevel - } - err := resp.IsModal(). - SetTitle("Role"). - SetComponents(component.New().ForModal().Add(component.NewActionRow().Add( - component.NewTextInput(cID, "Niveau", discordgo.TextInputShort). - SetPlaceholder("5"). - IsRequired(). - SetMinLength(0). - SetMaxLength(5), - ))). - Send() - if err != nil { - logger.Alert("config/guild.go - Sending modal to add/edit", err.Error()) - } -} - -func ConfigXPRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, data discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { - cfg := config.GetGuildConfig(i.GuildID) - roleId := data.Values[0] - for _, r := range cfg.XpRoles { - if r.RoleID == roleId { - err := resp.SetMessage("Le rôle est déjà présent dans la config").Send() - if err != nil { - logger.Alert("commands/config.go - Role already in config", err.Error()) - } - return - } - } - cfg.XpRoles = append(cfg.XpRoles, config.XpRole{ - XP: configModifyMap[getKeyConfigRole(i)], - RoleID: roleId, - }) - err := cfg.Save() - if err != nil { - logger.Alert( - "commands/config.go - Saving config", - err.Error(), - "guild_id", i.GuildID, - "role_id", roleId, - "type", "add", - ) - } - if err = resp.IsEphemeral().SetMessage("Rôle ajouté.").Send(); err != nil { - logger.Alert("commands/config.go - Sending success", err.Error()) - } -} - -func ConfigXPRoleEditRole(_ *discordgo.Session, i *discordgo.InteractionCreate, data discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { - cfg := config.GetGuildConfig(i.GuildID) - roleId := data.Values[0] - _, r := cfg.FindXpRole(roleId) - if r == nil { - err := resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() - if err != nil { - logger.Alert("commands/config.go - Role not found (edit)", err.Error()) - } - return - } - r.XP = configModifyMap[getKeyConfigRole(i)] - err := gokord.DB.Save(r).Error - if err != nil { - logger.Alert( - "commands/config.go - Saving config", - err.Error(), - "guild_id", i.GuildID, - "role_id", roleId, - "type", "edit", - ) - } - if err = resp.IsEphemeral().SetMessage("Rôle modifié.").Send(); err != nil { - logger.Alert("commands/config.go - Sending success", err.Error()) - } -} - -func ConfigXPRoleDel(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { - err := resp.IsEphemeral(). - SetMessage("Rôle à supprimer"). - SetComponents(component.New().Add(component.NewActionRow().Add(component.NewRoleSelect(XpRoleDelRole)))). - Send() - if err != nil { - logger.Alert("config/guild.go - Sending response to del", err.Error()) - } -} - -func ConfigXPRoleDelRole(_ *discordgo.Session, i *discordgo.InteractionCreate, data discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { - cfg := config.GetGuildConfig(i.GuildID) - roleId := data.Values[0] - _, r := cfg.FindXpRole(roleId) - if r == nil { - err := resp.SetMessage("Le rôle n'a pas été trouvé dans la config.").Send() - if err != nil { - logger.Alert("commands/config.go - Sending role not found (del)", err.Error()) - } - return - } - err := gokord.DB.Delete(r).Error - if err != nil { - logger.Alert( - "commands/config.go - Deleting entry", - err.Error(), - "guild_id", i.GuildID, - "role_id", roleId, - "type", "del", - ) - } - if err = resp.IsEphemeral().SetMessage("Rôle supprimé.").Send(); err != nil { - logger.Alert("commands/config.go - Sending success", err.Error()) - } -} - -func ConfigXPRoleLevel(_ *discordgo.Session, i *discordgo.InteractionCreate, data discordgo.ModalSubmitInteractionData, resp *cmd.ResponseBuilder) { - input := data.Components[0].(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput) - - k := getKeyConfigRole(i) - in, err := strconv.Atoi(input.Value) - if err != nil || in < 0 { - if err = resp.IsEphemeral(). - SetMessage("Impossible de lire le nombre. Il doit s'agit d'un nombre entier positif."). - Send(); err != nil { - logger.Alert("command/config.go - Sending bad number", err.Error()) - } - return - } - configModifyMap[k] = uint(in) - go func(i *discordgo.InteractionCreate, k string) { - time.Sleep(5 * time.Minute) - delete(configModifyMap, k) - }(i, k) - - cID := XpRoleAddRole - resp.SetMessage("Rôle à ajouter") - if data.CustomID == XpRoleEditLevel { - cID = XpRoleEditLevel - resp.SetMessage("Rôle à modifier") - } - - err = resp.IsEphemeral(). - SetMessage("Rôle à supprimer"). - SetComponents(component.New().Add(component.NewActionRow().Add(component.NewRoleSelect(cID)))). - Send() - if err != nil { - logger.Alert("config/guild.go - Sending response to add/edit", err.Error()) - } -} - -func getKeyConfigRole(i *discordgo.InteractionCreate) string { - return fmt.Sprintf("r:%s:%s", i.GuildID, i.User.ID) -} - func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.OptionMap, resp *cmd.ResponseBuilder) { resp.IsEphemeral() // verify every args -- cgit v1.2.3 From 6d19ef42c4135dac57c23bf6d00041423255598d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 6 Aug 2025 15:13:19 +0200 Subject: refactor(config): handle fallback channel --- commands/config.go | 51 ++++----------------------------------------------- 1 file changed, 4 insertions(+), 47 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index 9aa4682..18c5aa9 100644 --- a/commands/config.go +++ b/commands/config.go @@ -12,10 +12,8 @@ import ( ) const ( - ConfigModify = "config_modify" - ConfigModifyDisChannel = "disabled_channel" - ConfigModifyFallbackChannel = "fallback_channel" - ConfigModifyTimeReduce = "time_reduce" + ConfigModify = "config_modify" + ConfigModifyTimeReduce = "time_reduce" ) func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { @@ -85,13 +83,13 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa SetEmoji(&discordgo.ComponentEmoji{Name: "🏅"}), ). AddOption( - component.NewSelectOption("Salons désactivés", ConfigModifyDisChannel). + 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 de repli", ConfigModifyFallbackChannel). + component.NewSelectOption("Salons de repli", config.ModifyFallbackChannel). SetDescription("Spécifie le salon de repli"). SetEmoji(&discordgo.ComponentEmoji{Name: "💾"}), ). @@ -176,47 +174,6 @@ func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap } } -func ConfigFallbackChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.OptionMap, resp *cmd.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 { - logger.Alert("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 { - logger.Alert("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 { - logger.Alert( - "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 { - logger.Alert("commands/config.go - Channel saved message", err.Error()) - } -} - func ConfigPeriodBeforeReduce(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.OptionMap, resp *cmd.ResponseBuilder) { resp.IsEphemeral() // verify every args -- cgit v1.2.3 From 0b93ea5daaee317a45291df188af13a6fab0c481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 6 Aug 2025 15:35:10 +0200 Subject: refactor(config): handle xp reduce --- commands/config.go | 46 ++-------------------------------------------- 1 file changed, 2 insertions(+), 44 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index 18c5aa9..14e4691 100644 --- a/commands/config.go +++ b/commands/config.go @@ -12,8 +12,7 @@ import ( ) const ( - ConfigModify = "config_modify" - ConfigModifyTimeReduce = "time_reduce" + ConfigModify = "config_modify" ) func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMap, resp *cmd.ResponseBuilder) { @@ -94,7 +93,7 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa SetEmoji(&discordgo.ComponentEmoji{Name: "💾"}), ). AddOption( - component.NewSelectOption("Temps avec la réduction", ConfigModifyTimeReduce). + component.NewSelectOption("Temps avec la réduction", config.ModifyTimeReduce). SetDescription("Gère le temps avant la réduction d'XP"). SetEmoji(&discordgo.ComponentEmoji{Name: "⌛"}), ), @@ -173,44 +172,3 @@ func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap logger.Alert("commands/config.go - Modification saved message", err.Error()) } } - -func ConfigPeriodBeforeReduce(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.OptionMap, resp *cmd.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 { - logger.Alert("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 { - logger.Alert("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 { - logger.Alert( - "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() - } - if err != nil { - logger.Alert("commands/config.go - Days saved message", err.Error()) - } -} -- cgit v1.2.3 From b9466f812284bb6feb793de6229cf7266dc24361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 6 Aug 2025 15:51:17 +0200 Subject: refactor(config): handle disabled channels --- commands/config.go | 70 ------------------------------------------------------ 1 file changed, 70 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index 14e4691..23a0add 100644 --- a/commands/config.go +++ b/commands/config.go @@ -102,73 +102,3 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa logger.Alert("config/guild.go - Sending config", err.Error()) } } - -func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.OptionMap, resp *cmd.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 { - logger.Alert("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 { - logger.Alert("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 { - logger.Alert("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 { - logger.Alert("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 { - logger.Alert("commands/config.go - Invalid action type", err.Error()) - } - return - } - // save - err := cfg.Save() - if err != nil { - logger.Alert( - "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 { - logger.Alert("commands/config.go - Modification saved message", err.Error()) - } -} -- cgit v1.2.3 From caa3b338a39d8b682d84ea3a3b5e12a04bd82fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 6 Aug 2025 16:06:56 +0200 Subject: refactor(config): use component to show config --- commands/config.go | 88 +++++++++++++++++++++++------------------------------- 1 file changed, 38 insertions(+), 50 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index 23a0add..d6cbfc2 100644 --- a/commands/config.go +++ b/commands/config.go @@ -48,56 +48,44 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa } else { defaultChan = fmt.Sprintf("<#%s>", cfg.FallbackChannel) } - err := resp.AddEmbed(&discordgo.MessageEmbed{ - Type: discordgo.EmbedTypeRich, - Title: "Config", - Color: 0x10E6AD, - 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, - }, - }, - }).SetComponents(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 de repli", config.ModifyFallbackChannel). - SetDescription("Spécifie le salon de repli"). - 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: "⌛"}), - ), - ))).IsEphemeral().Send() + comp := component.New().Add(component.NewSection(). + Add(component.NewTextDisplay("# Config")). + Add(component.NewTextDisplay("**Salon par défaut**")). + Add(component.NewTextDisplay(defaultChan)), + ).Add(component.NewSeparator()).Add(component.NewSection(). + Add(component.NewTextDisplay("**Rôles liés aux niveaux**")). + Add(component.NewTextDisplay(roles)), + ).Add(component.NewSeparator()).Add(component.NewSection(). + Add(component.NewTextDisplay("**Salons désactivés**")). + Add(component.NewTextDisplay(chans)), + ).Add(component.NewSeparator()).Add(component.NewSection(). + Add(component.NewTextDisplay("**Jours avant la réduction**")). + Add(component.NewTextDisplay(fmt.Sprintf("%d", 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 de repli", config.ModifyFallbackChannel). + SetDescription("Spécifie le salon de repli"). + 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 { logger.Alert("config/guild.go - Sending config", err.Error()) } -- cgit v1.2.3 From 7c9d6571fd6179837ca9fb9d30bf2ea82dc81197 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Wed, 6 Aug 2025 16:14:30 +0200 Subject: fix(config): not all interaction were ephemeral --- commands/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index d6cbfc2..f0c17eb 100644 --- a/commands/config.go +++ b/commands/config.go @@ -75,8 +75,8 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa ). AddOption( // I don't have a better idea for this... - component.NewSelectOption("Salons de repli", config.ModifyFallbackChannel). - SetDescription("Spécifie le salon de repli"). + component.NewSelectOption("Salons par défaut", config.ModifyFallbackChannel). + SetDescription("Spécifie le salon par défaut"). SetEmoji(&discordgo.ComponentEmoji{Name: "💾"}), ). AddOption( -- cgit v1.2.3 From bda9a5fa8f4af9218bd59364ad6dda2ca26ffc58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Thu, 7 Aug 2025 12:52:31 +0200 Subject: feat(command): remove section in /config --- commands/config.go | 68 +++++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 36 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index f0c17eb..b6e6854 100644 --- a/commands/config.go +++ b/commands/config.go @@ -48,43 +48,39 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa } else { defaultChan = fmt.Sprintf("<#%s>", cfg.FallbackChannel) } - comp := component.New().Add(component.NewSection(). + comp := component.New(). Add(component.NewTextDisplay("# Config")). - Add(component.NewTextDisplay("**Salon par défaut**")). - Add(component.NewTextDisplay(defaultChan)), - ).Add(component.NewSeparator()).Add(component.NewSection(). - Add(component.NewTextDisplay("**Rôles liés aux niveaux**")). - Add(component.NewTextDisplay(roles)), - ).Add(component.NewSeparator()).Add(component.NewSection(). - Add(component.NewTextDisplay("**Salons désactivés**")). - Add(component.NewTextDisplay(chans)), - ).Add(component.NewSeparator()).Add(component.NewSection(). - Add(component.NewTextDisplay("**Jours avant la réduction**")). - Add(component.NewTextDisplay(fmt.Sprintf("%d", 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: "⌛"}), - ), - )) + 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 { logger.Alert("config/guild.go - Sending config", err.Error()) -- cgit v1.2.3 From ebab5cd09f73cd68089f59a68431bbc283fba30b Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Thu, 21 Aug 2025 13:33:17 +0200 Subject: feat(command): do not use new components --- commands/config.go | 53 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 10 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index b6e6854..b62d413 100644 --- a/commands/config.go +++ b/commands/config.go @@ -2,13 +2,14 @@ package commands import ( "fmt" + "strings" + "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" ) const ( @@ -48,15 +49,40 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa } else { defaultChan = fmt.Sprintf("<#%s>", cfg.FallbackChannel) } + //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.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( @@ -81,7 +107,14 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa SetEmoji(&discordgo.ComponentEmoji{Name: "⌛"}), ), )) - err := resp.SetComponents(comp).IsEphemeral().Send() + 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 { logger.Alert("config/guild.go - Sending config", err.Error()) } -- cgit v1.2.3 From c04f4d9fff2e753f0477a07a9f8f43fbcba8969e Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Thu, 21 Aug 2025 14:59:23 +0200 Subject: build(go): rename module to use git.anhgelus.world instead of github --- commands/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index b62d413..41fb60e 100644 --- a/commands/config.go +++ b/commands/config.go @@ -4,11 +4,11 @@ import ( "fmt" "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" - "github.com/anhgelus/les-copaings-bot/config" - "github.com/anhgelus/les-copaings-bot/exp" "github.com/bwmarrin/discordgo" ) -- cgit v1.2.3 From 30ecd60b041398390f11fccdf46444fa28690bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Thu, 4 Sep 2025 16:25:59 +0200 Subject: build(gokord): upgrade to latest nightly still use discordgo name before merging anhgelus/gokord with nyttikord/gokord --- commands/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'commands/config.go') diff --git a/commands/config.go b/commands/config.go index 41fb60e..c4644bc 100644 --- a/commands/config.go +++ b/commands/config.go @@ -9,7 +9,7 @@ import ( "github.com/anhgelus/gokord/cmd" "github.com/anhgelus/gokord/component" "github.com/anhgelus/gokord/logger" - "github.com/bwmarrin/discordgo" + discordgo "github.com/nyttikord/gokord" ) const ( -- cgit v1.2.3