refactor(config): handle fallback channel

This commit is contained in:
Anhgelus Morhtuuzh 2025-08-06 15:13:19 +02:00
parent 0968c18b15
commit 6d19ef42c4
Signed by: anhgelus
GPG key ID: 617773CACE89052C
4 changed files with 60 additions and 56 deletions

View file

@ -13,8 +13,6 @@ import (
const ( const (
ConfigModify = "config_modify" ConfigModify = "config_modify"
ConfigModifyDisChannel = "disabled_channel"
ConfigModifyFallbackChannel = "fallback_channel"
ConfigModifyTimeReduce = "time_reduce" ConfigModifyTimeReduce = "time_reduce"
) )
@ -85,13 +83,13 @@ func Config(_ *discordgo.Session, i *discordgo.InteractionCreate, _ cmd.OptionMa
SetEmoji(&discordgo.ComponentEmoji{Name: "🏅"}), SetEmoji(&discordgo.ComponentEmoji{Name: "🏅"}),
). ).
AddOption( AddOption(
component.NewSelectOption("Salons désactivés", ConfigModifyDisChannel). component.NewSelectOption("Salons désactivés", config.ModifyDisChannel).
SetDescription("Gère les salons désactivés"). SetDescription("Gère les salons désactivés").
SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}), SetEmoji(&discordgo.ComponentEmoji{Name: "❌"}),
). ).
AddOption( AddOption(
// I don't have a better idea for this... // 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"). SetDescription("Spécifie le salon de repli").
SetEmoji(&discordgo.ComponentEmoji{Name: "💾"}), 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) { func ConfigPeriodBeforeReduce(s *discordgo.Session, i *discordgo.InteractionCreate, optMap cmd.OptionMap, resp *cmd.ResponseBuilder) {
resp.IsEphemeral() resp.IsEphemeral()
// verify every args // verify every args

43
config/channel.go Normal file
View file

@ -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())
}
}

View file

@ -87,7 +87,7 @@ func HandleXpRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d
if r.RoleID == roleId { if r.RoleID == roleId {
err := resp.SetMessage("Le rôle est déjà présent dans la config").Send() err := resp.SetMessage("Le rôle est déjà présent dans la config").Send()
if err != nil { 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 return
} }
@ -99,7 +99,7 @@ func HandleXpRoleAddRole(_ *discordgo.Session, i *discordgo.InteractionCreate, d
err := cfg.Save() err := cfg.Save()
if err != nil { if err != nil {
logger.Alert( logger.Alert(
"commands/config.go - Saving config", "config/xp_role.go - Saving config",
err.Error(), err.Error(),
"guild_id", i.GuildID, "guild_id", i.GuildID,
"role_id", roleId, "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 { 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 { 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 { 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 return
} }
@ -126,7 +126,7 @@ func HandleXpRoleEditRole(_ *discordgo.Session, i *discordgo.InteractionCreate,
err := gokord.DB.Save(r).Error err := gokord.DB.Save(r).Error
if err != nil { if err != nil {
logger.Alert( logger.Alert(
"commands/config.go - Saving config", "config/xp_role.go - Saving config",
err.Error(), err.Error(),
"guild_id", i.GuildID, "guild_id", i.GuildID,
"role_id", roleId, "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 { 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 { 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 { 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 return
} }
err := gokord.DB.Delete(r).Error err := gokord.DB.Delete(r).Error
if err != nil { if err != nil {
logger.Alert( logger.Alert(
"commands/config.go - Deleting entry", "config/xp_role.go - Deleting entry",
err.Error(), err.Error(),
"guild_id", i.GuildID, "guild_id", i.GuildID,
"role_id", roleId, "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 { 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())
} }
} }

View file

@ -129,6 +129,7 @@ func main() {
} }
// interaction: /config // interaction: /config
// xp related
bot.HandleMessageComponent(config.HandleModifyXpRole, config.ModifyXpRole) bot.HandleMessageComponent(config.HandleModifyXpRole, config.ModifyXpRole)
bot.HandleMessageComponent(config.HandleXpRoleAddEdit, config.XpRoleAdd) bot.HandleMessageComponent(config.HandleXpRoleAddEdit, config.XpRoleAdd)
bot.HandleMessageComponent(config.HandleXpRoleAddEdit, config.XpRoleEdit) bot.HandleMessageComponent(config.HandleXpRoleAddEdit, config.XpRoleEdit)
@ -138,6 +139,9 @@ func main() {
bot.HandleMessageComponent(config.HandleXpRoleDelRole, config.XpRoleDelRole) bot.HandleMessageComponent(config.HandleXpRoleDelRole, config.XpRoleDelRole)
bot.HandleModal(config.HandleXpRoleLevel, config.XpRoleAddLevel) bot.HandleModal(config.HandleXpRoleLevel, config.XpRoleAddLevel)
bot.HandleModal(config.HandleXpRoleLevel, config.XpRoleEditLevel) bot.HandleModal(config.HandleXpRoleLevel, config.XpRoleEditLevel)
// channel related
bot.HandleMessageComponent(config.HandleModifyFallbackChannel, config.ModifyFallbackChannel)
bot.HandleMessageComponent(config.HandleFallbackChannelSet, config.FallbackChannelSet)
// xp handlers // xp handlers
bot.AddHandler(OnMessage) bot.AddHandler(OnMessage)