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 diff --git a/config/channel.go b/config/channel.go new file mode 100644 index 0000000..2ef8b48 --- /dev/null +++ b/config/channel.go @@ -0,0 +1,43 @@ +package config + +import ( + "github.com/anhgelus/gokord/cmd" + "github.com/anhgelus/gokord/component" + "github.com/anhgelus/gokord/logger" + "github.com/bwmarrin/discordgo" +) + +const ( + ModifyDisChannel = "disabled_channel" + ModifyFallbackChannel = "fallback_channel" + FallbackChannelSet = "fallback_channel_set" +) + +func HandleModifyFallbackChannel(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { + err := resp.SetMessage("Salon de repli...").SetComponents(component.New().Add(component.NewActionRow().Add( + component.NewChannelSelect(FallbackChannelSet).AddChannelType(discordgo.ChannelTypeGuildText), + ))).Send() + if err != nil { + logger.Alert("config/channel.go - Sending channel list", err.Error()) + } +} + +func HandleFallbackChannelSet(_ *discordgo.Session, i *discordgo.InteractionCreate, data discordgo.MessageComponentInteractionData, resp *cmd.ResponseBuilder) { + resp.IsEphemeral() + + cfg := GetGuildConfig(i.GuildID) + channelID := data.Values[0] + + cfg.FallbackChannel = channelID + err := cfg.Save() + if err != nil { + logger.Alert("config/channel.go - Saving fallback channel", err.Error()) + if err = resp.SetMessage("Erreur lors de la sauvegarde du salon").Send(); err != nil { + logger.Alert("config/channel.go - Sending error while saving channel", err.Error()) + } + return + } + if err = resp.SetMessage("Salon sauvegardé.").Send(); err != nil { + logger.Alert("config/channel.go - Sending channel saved", err.Error()) + } +} diff --git a/config/xp_role.go b/config/xp_role.go index bed5c57..8f98265 100644 --- a/config/xp_role.go +++ b/config/xp_role.go @@ -87,7 +87,7 @@ func HandleXpRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d 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()) + logger.Alert("config/xp_role.go - Role already in config", err.Error()) } return } @@ -99,7 +99,7 @@ func HandleXpRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d err := cfg.Save() if err != nil { logger.Alert( - "commands/config.go - Saving config", + "config/xp_role.go - Saving config", err.Error(), "guild_id", i.GuildID, "role_id", roleId, @@ -107,7 +107,7 @@ func HandleXpRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d ) } if err = resp.IsEphemeral().SetMessage("Rôle ajouté.").Send(); err != nil { - logger.Alert("commands/config.go - Sending success", err.Error()) + logger.Alert("config/xp_role.go - Sending success", err.Error()) } } @@ -118,7 +118,7 @@ func HandleXpRoleEditRole(_ *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 { - logger.Alert("commands/config.go - Role not found (edit)", err.Error()) + logger.Alert("config/xp_role.go - Role not found (edit)", err.Error()) } return } @@ -126,7 +126,7 @@ func HandleXpRoleEditRole(_ *discordgo.Session, i *discordgo.InteractionCreate, err := gokord.DB.Save(r).Error if err != nil { logger.Alert( - "commands/config.go - Saving config", + "config/xp_role.go - Saving config", err.Error(), "guild_id", i.GuildID, "role_id", roleId, @@ -134,7 +134,7 @@ func HandleXpRoleEditRole(_ *discordgo.Session, i *discordgo.InteractionCreate, ) } if err = resp.IsEphemeral().SetMessage("Rôle modifié.").Send(); err != nil { - logger.Alert("commands/config.go - Sending success", err.Error()) + logger.Alert("config/xp_role.go - Sending success", err.Error()) } } @@ -155,14 +155,14 @@ func HandleXpRoleDelRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d 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()) + logger.Alert("config/xp_role.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", + "config/xp_role.go - Deleting entry", err.Error(), "guild_id", i.GuildID, "role_id", roleId, @@ -170,7 +170,7 @@ func HandleXpRoleDelRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d ) } if err = resp.IsEphemeral().SetMessage("Rôle supprimé.").Send(); err != nil { - logger.Alert("commands/config.go - Sending success", err.Error()) + logger.Alert("config/xp_role.go - Sending success", err.Error()) } } diff --git a/main.go b/main.go index b57fcb5..d03283a 100644 --- a/main.go +++ b/main.go @@ -129,6 +129,7 @@ func main() { } // interaction: /config + // xp related bot.HandleMessageComponent(config.HandleModifyXpRole, config.ModifyXpRole) bot.HandleMessageComponent(config.HandleXpRoleAddEdit, config.XpRoleAdd) bot.HandleMessageComponent(config.HandleXpRoleAddEdit, config.XpRoleEdit) @@ -138,6 +139,9 @@ func main() { bot.HandleMessageComponent(config.HandleXpRoleDelRole, config.XpRoleDelRole) bot.HandleModal(config.HandleXpRoleLevel, config.XpRoleAddLevel) bot.HandleModal(config.HandleXpRoleLevel, config.XpRoleEditLevel) + // channel related + bot.HandleMessageComponent(config.HandleModifyFallbackChannel, config.ModifyFallbackChannel) + bot.HandleMessageComponent(config.HandleFallbackChannelSet, config.FallbackChannelSet) // xp handlers bot.AddHandler(OnMessage)