aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Hergès <william@herges.fr>2025-08-06 14:54:47 +0200
committerWilliam Hergès <william@herges.fr>2025-08-06 14:54:47 +0200
commit3d89f9c3543b8898ae5c29281e9007fbdb003c5d (patch)
tree39db59b39a2c13f84cab0d58a4e320c189ac3e20
parent376b3ec29600c9661cea4899ddf94f8515fc7bfd (diff)
feat(command): use gokord new handle for config
-rw-r--r--commands/config.go266
-rw-r--r--main.go38
2 files changed, 147 insertions, 157 deletions
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")
}
diff --git a/main.go b/main.go
index 0f70810..79ec452 100644
--- a/main.go
+++ b/main.go
@@ -116,31 +116,37 @@ func main() {
resetUserCmd,
creditsCmd,
},
- AfterInit: afterInit,
+ AfterInit: func(dg *discordgo.Session) {
+ stopPeriodicReducer = gokord.NewTimer(24*time.Hour, func(stop chan<- interface{}) {
+ user.PeriodicReducer(dg)
+ })
+ },
Innovations: innovations,
Version: &Version,
Intents: discordgo.IntentsAllWithoutPrivileged |
discordgo.IntentsMessageContent |
discordgo.IntentGuildMembers,
}
+
+ // interaction: /config
+ bot.HandleMessageComponent(commands.ConfigModifyXPRole, commands.ConfigModifyXpRole)
+ bot.HandleMessageComponent(commands.ConfigXPRoleAddEdit, commands.XpRoleAdd)
+ bot.HandleMessageComponent(commands.ConfigXPRoleAddEdit, commands.XpRoleEdit)
+ bot.HandleMessageComponent(commands.ConfigXPRoleAddRole, commands.XpRoleAddRole)
+ bot.HandleMessageComponent(commands.ConfigXPRoleEditRole, commands.XpRoleEditRole)
+ bot.HandleMessageComponent(commands.ConfigXPRoleDel, commands.XpRoleDel)
+ bot.HandleMessageComponent(commands.ConfigXPRoleDelRole, commands.XpRoleDelRole)
+ bot.HandleModal(commands.ConfigXPRoleLevel, commands.XpRoleAddLevel)
+ bot.HandleModal(commands.ConfigXPRoleLevel, commands.XpRoleEditLevel)
+
+ // xp handlers
+ bot.AddHandler(OnMessage)
+ bot.AddHandler(OnVoiceUpdate)
+ bot.AddHandler(OnLeave)
+
bot.Start()
if stopPeriodicReducer != nil {
stopPeriodicReducer <- true
}
}
-
-func afterInit(dg *discordgo.Session) {
- // handlers
- dg.AddHandler(OnMessage)
- dg.AddHandler(OnVoiceUpdate)
- dg.AddHandler(OnLeave)
-
- stopPeriodicReducer = gokord.NewTimer(24*time.Hour, func(stop chan<- interface{}) {
- user.PeriodicReducer(dg)
- })
-
- //interaction: /config
- dg.AddHandler(commands.ConfigXP)
- dg.AddHandler(commands.ConfigXPModal)
-}