diff options
Diffstat (limited to 'config')
| -rw-r--r-- | config/channel.go | 113 | ||||
| -rw-r--r-- | config/guild.go | 27 | ||||
| -rw-r--r-- | config/xp_reduce.go | 101 | ||||
| -rw-r--r-- | config/xp_role.go | 107 |
4 files changed, 158 insertions, 190 deletions
diff --git a/config/channel.go b/config/channel.go index c918810..8b45382 100644 --- a/config/channel.go +++ b/config/channel.go @@ -5,12 +5,13 @@ import ( "github.com/anhgelus/gokord/cmd" discordgo "github.com/nyttikord/gokord" + + // "github.com/nyttikord/gokord/component" "github.com/nyttikord/gokord/interaction" ) const ( ModifyFallbackChannel = "fallback_channel" - FallbackChannelSet = "fallback_channel_set" ModifyDisChannel = "disabled_channel" DisChannelAdd = "disabled_channel_add" @@ -19,108 +20,28 @@ const ( DisChannelDelSet = "disabled_channel_del_set" ) -func HandleModifyFallbackChannel(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ *interaction.MessageComponentData, _ *cmd.ResponseBuilder) { - //err := resp.IsEphemeral().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 for fallback", err.Error()) - //} -} - -func HandleFallbackChannelSet(s *discordgo.Session, i *discordgo.InteractionCreate, data *interaction.MessageComponentData, resp *cmd.ResponseBuilder) { - resp.IsEphemeral() - +func HandleModifyFallbackChannel(s *discordgo.Session, i *discordgo.InteractionCreate, data *interaction.MessageComponentData, resp *cmd.ResponseBuilder) bool { cfg := GetGuildConfig(i.GuildID) - channelID := data.Values[0] - + var channelID string + if len(data.Values) > 0 { + channelID = data.Values[0] + } cfg.FallbackChannel = channelID err := cfg.Save() if err != nil { - s.LogError(err, "saving fallback channel") - if err = resp.SetMessage("Erreur lors de la sauvegarde du salon").Send(); err != nil { - s.LogError(err, "sending error while saving channel") - } - return - } - if err = resp.SetMessage("Salon sauvegardé.").Send(); err != nil { - s.LogError(err, "sending channel saved") + s.LogError(err, "Saving fallback channel") + return false } + return true } -func HandleModifyDisChannel(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ *interaction.MessageComponentData, _ *cmd.ResponseBuilder) { - //err := resp.IsEphemeral().SetComponents(component.New().Add(component.NewActionRow(). - // Add( - // component.NewButton(DisChannelAdd, discordgo.PrimaryButton). - // SetLabel("Désactiver un salon"). - // SetEmoji(&discordgo.ComponentEmoji{Name: "⬇️"}), - // ). - // Add( - // component.NewButton(DisChannelDel, discordgo.DangerButton). - // SetLabel("Réactiver un salon"). - // SetEmoji(&discordgo.ComponentEmoji{Name: "⬆️"}), - // ), - //)).Send() - //if err != nil { - // logger.Alert("config/channel.go - Sending action type", err.Error()) - //} -} - -func HandleDisChannel(_ *discordgo.Session, _ *discordgo.InteractionCreate, data *interaction.MessageComponentData, resp *cmd.ResponseBuilder) { - //resp.IsEphemeral().SetMessage("Salon à désactiver...") - //cID := DisChannelAddSet - //if data.CustomID == DisChannelDel { - // resp.SetMessage("Salon à réactiver...") - // cID = DisChannelDelSet - //} - //err := resp.SetComponents(component.New().Add(component.NewActionRow().Add(component.NewChannelSelect(cID)))).Send() - //if err != nil { - // logger.Alert("config/channel.go - Sending channel list for disable", err.Error()) - //} -} - -func HandleDisChannelAddSet(_ *discordgo.Session, i *discordgo.InteractionCreate, data *interaction.MessageComponentData, resp *cmd.ResponseBuilder) { - //resp.IsEphemeral() - //cfg := GetGuildConfig(i.GuildID) - //id := data.Values[0] - //if strings.Contains(cfg.DisabledChannels, 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 += id + ";" - //if err := cfg.Save(); err != nil { - // logger.Alert("commands/config.go - Saving config disable add", err.Error()) - // if err = resp.SetMessage("Il y a eu une erreur lors de la modification de de la base de données.").Send(); err != nil { - // logger.Alert("config/channel.go - Sending error while saving config", err.Error()) - // } - //} - //if err := resp.SetMessage("Modification sauvegardé.").Send(); err != nil { - // logger.Alert("commands/config.go - Modification saved message disable add", err.Error()) - //} -} - -func HandleDisChannelDelSet(s *discordgo.Session, i *discordgo.InteractionCreate, data *interaction.MessageComponentData, resp *cmd.ResponseBuilder) { - resp.IsEphemeral() +func HandleModifyDisChannel(s *discordgo.Session, i *discordgo.InteractionCreate, data *interaction.MessageComponentData, resp *cmd.ResponseBuilder) bool { cfg := GetGuildConfig(i.GuildID) - id := data.Values[0] - if !strings.Contains(cfg.DisabledChannels, id) { - err := resp.SetMessage("Le salon n'est pas désactivé").Send() - if err != nil { - s.LogError(err, "sending channel not disabled") - } - return - } - cfg.DisabledChannels = strings.ReplaceAll(cfg.DisabledChannels, id+";", "") - if err := cfg.Save(); err != nil { - s.LogError(err, "saving config disable del") - if err = resp.SetMessage("Il y a eu une erreur lors de la modification de la base de données.").Send(); err != nil { - s.LogError(err, "sending error while saving config") - } - } - if err := resp.SetMessage("Modification sauvegardé.").Send(); err != nil { - s.LogError(err, "modification saved message disable del") + cfg.DisabledChannels = strings.Join(data.Values, ";") + err := cfg.Save() + if err != nil { + s.LogError(err, "Unable to save disabled channel") + return false } + return true } diff --git a/config/guild.go b/config/guild.go index 6310fa4..8096096 100644 --- a/config/guild.go +++ b/config/guild.go @@ -4,6 +4,7 @@ import ( "strings" "github.com/anhgelus/gokord" + discordgo "github.com/nyttikord/gokord" ) type GuildConfig struct { @@ -31,8 +32,30 @@ func (cfg *GuildConfig) Save() error { return gokord.DB.Save(cfg).Error } -func (cfg *GuildConfig) IsDisabled(channelID string) bool { - return strings.Contains(cfg.DisabledChannels, channelID) +func (cfg *GuildConfig) IsDisabled(s *discordgo.Session, channelID string) bool { + ok := true + s.LogInfo("Configuration: %s", cfg.DisabledChannels) + s.LogInfo("Channel %s, ok %t", channelID, ok) + for channelID != "" && ok { + s.LogInfo("Channel %s, ok %t", channelID, ok) + ok = !strings.Contains(cfg.DisabledChannels, channelID) + c, err := s.State.Channel(channelID) + if err != nil { + s.LogError(err, "Unable to find channel %s in state", c) + c, err = s.ChannelAPI().Channel(channelID) + if err == nil { + s.State.ChannelAdd(c) + } else { + s.LogError(err, "Unable to fetch channel %s", s) + return false + } + } + if err != nil { + return false + } + channelID = c.ParentID + } + return !ok } func (cfg *GuildConfig) FindXpRole(roleID string) (int, *XpRole) { diff --git a/config/xp_reduce.go b/config/xp_reduce.go index a61ef1a..bf04bf0 100644 --- a/config/xp_reduce.go +++ b/config/xp_reduce.go @@ -1,8 +1,13 @@ package config import ( + "fmt" + "strconv" + "github.com/anhgelus/gokord/cmd" discordgo "github.com/nyttikord/gokord" + "github.com/nyttikord/gokord/component" + "github.com/nyttikord/gokord/discord/types" "github.com/nyttikord/gokord/interaction" ) @@ -11,47 +16,61 @@ const ( TimeReduceSet = "time_reduce_set" ) -func HandleModifyPeriodicReduce(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ *interaction.MessageComponentData, resp *cmd.ResponseBuilder) { - //err := resp.IsModal(). - // SetCustomID(TimeReduceSet). - // SetComponents(component.New().ForModal().Add(component.NewActionRow().ForModal().Add( - // component.NewTextInput(TimeReduceSet, "Jours avant la réduction", discordgo.TextInputShort). - // SetMinLength(1). - // SetMaxLength(3), - // ))).Send() - //if err != nil { - // logger.Alert("config/xp_reduce.go - Sending modal for periodic reduce", err.Error()) - //} +func HandleModifyPeriodicReduceCommand(s *discordgo.Session, i *discordgo.InteractionCreate, _ *interaction.MessageComponentData, resp *cmd.ResponseBuilder) { + cfg := GetGuildConfig(i.GuildID) + response := interaction.Response{ + Type: types.InteractionResponseModal, + Data: &interaction.ResponseData{ + CustomID: TimeReduceSet, + Title: "Modifier la durée de l'expérience", + Components: []component.Component{ + // TODO: When gokord supports it, enable this description again + // &component.TextDisplay{ + // Content: "Seul l'expérience gagnée sur cette période sera comptabilisée dans le niveau par défaut", + // }, + &component.Label{ + Label: "Durée en jours", + Component: &component.TextInput{ + CustomID: TimeReduceSet, + MinLength: 1, + MaxLength: 3, + Style: component.TextInputShort, + Placeholder: "Durée en jours", + Value: fmt.Sprintf("%d", cfg.DaysXPRemains), + }, + }, + }, + }, + } + err := s.InteractionAPI().Respond(i.Interaction, &response) + if err != nil { + s.LogError(err, "Sending xp reduce modal") + } } -func HandleTimeReduceSet(_ *discordgo.Session, _ *discordgo.InteractionCreate, _ *interaction.ModalSubmitData, _ *cmd.ResponseBuilder) { - //resp.IsEphemeral() - //v := data.Components[0].(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput).Value - //days, err := strconv.Atoi(v) - //if err != nil { - // logger.Debug(err.Error()) - // if err = resp.SetMessage("Nombres de jours invalides. Merci de mettre un entier.").Send(); err != nil { - // logger.Alert("config/xp_reduce.go - Sending bad input", err.Error()) - // } - // return - //} - //if days < 30 { - // err = resp.SetMessage("Le nombre de jours est inférieur à 30.").Send() - // if err != nil { - // logger.Alert("config/xp_reduce.go - Days < 30 (fallback)", err.Error()) - // } - // return - //} - //cfg := GetGuildConfig(i.GuildID) - //cfg.DaysXPRemains = uint(days) - //if err = cfg.Save(); err != nil { - // logger.Alert("config/channel.go - Saving days xp remains", err.Error()) - // if err = resp.SetMessage("Erreur lors de la sauvegarde du salon").Send(); err != nil { - // logger.Alert("config/xp_reduce.go - Sending error while saving days xp remains", err.Error()) - // } - // return - //} - //if err = resp.SetMessage("Modification sauvegardée.").Send(); err != nil { - // logger.Alert("config/xp_reduce.go - Sending days saved", err.Error()) - //} +func HandleTimeReduceSet(s *discordgo.Session, i *discordgo.InteractionCreate, data *interaction.ModalSubmitData, resp *cmd.ResponseBuilder) bool { + v := data.Components[0].(*component.Label).Component.(*component.TextInput).Value + days, err := strconv.Atoi(v) + if err != nil { + err = resp.IsEphemeral().SetMessage(fmt.Sprintf("La valeur indiquée, `%s`, c'est pas un entier.", v)).Send() + if err != nil { + s.LogError(err, "Sending bad input message") + } + return false + } + if days < 30 { + err = resp.IsEphemeral().SetMessage("Le nombre de jours doit être suppérieur à 30.").Send() + if err != nil { + s.LogError(err, "Sending less than 30 days message") + } + return false + } + cfg := GetGuildConfig(i.GuildID) + cfg.DaysXPRemains = uint(days) + err = cfg.Save() + if err != nil { + s.LogError(err, "Saving DaysXPRemains configuration") + return false + } + return true } diff --git a/config/xp_role.go b/config/xp_role.go index 72af42b..8939dd6 100644 --- a/config/xp_role.go +++ b/config/xp_role.go @@ -2,6 +2,7 @@ package config import ( "fmt" + "sort" "strconv" "git.anhgelus.world/anhgelus/les-copaings-bot/exp" @@ -33,7 +34,7 @@ const ( ) func HandleXpRole( - session *discordgo.Session, + s *discordgo.Session, i *discordgo.InteractionCreate, _ *interaction.MessageComponentData, _ *cmd.ResponseBuilder, @@ -42,9 +43,13 @@ func HandleXpRole( container := component.Container{ Components: []component.Message{ &component.TextDisplay{Content: "## Configuration / Rôles de niveaux"}, + &component.TextDisplay{Content: "Ces rôles seront donnés et retirés en fonction du niveau de chacun"}, &component.Separator{}, }, } + sort.Slice(cfg.XpRoles, func(i, j int) bool { + return cfg.XpRoles[i].XP > cfg.XpRoles[j].XP + }) for _, r := range cfg.XpRoles { container.Components = append(container.Components, &component.Section{ Components: []component.Message{ @@ -84,14 +89,14 @@ func HandleXpRole( Flags: channel.MessageFlagsIsComponentsV2, }, } - err := session.InteractionAPI().Respond(i.Interaction, response) + err := s.InteractionAPI().Respond(i.Interaction, response) if err != nil { - session.LogError(err, "Sending config") + s.LogError(err, "Sending config") } } func HandleXpRoleNew( - session *discordgo.Session, + s *discordgo.Session, i *discordgo.InteractionCreate, _ *interaction.MessageComponentData, _ *cmd.ResponseBuilder, @@ -126,14 +131,14 @@ func HandleXpRoleNew( }, }, } - err := session.InteractionAPI().Respond(i.Interaction, response) + err := s.InteractionAPI().Respond(i.Interaction, response) if err != nil { - session.LogError(err, "Sending modal to add") + s.LogError(err, "Sending modal to add") } } func HandleXpRoleEdit( - session *discordgo.Session, + s *discordgo.Session, i *discordgo.InteractionCreate, _ *interaction.MessageComponentData, parameters []string, resp *cmd.ResponseBuilder, @@ -141,12 +146,12 @@ func HandleXpRoleEdit( config := GetGuildConfig(i.GuildID) id, err := getRoleLevelID(parameters) if err != nil { - session.LogError(err, "Reading dynamic CustomID") + s.LogError(err, "Reading dynamic CustomID") return } _, role := config.FindXpRoleID(id) if role == nil { - HandleXpRole(session, i, &interaction.MessageComponentData{}, resp) + HandleXpRole(s, i, &interaction.MessageComponentData{}, resp) return } @@ -191,28 +196,28 @@ func HandleXpRoleEdit( }, } - err = session.InteractionAPI().Respond(i.Interaction, response) + err = s.InteractionAPI().Respond(i.Interaction, response) if err != nil { - session.LogError(err, "Sending xp_role config") + s.LogError(err, "Sending xp_role config") } } func HandleXpRoleEditRole( - session *discordgo.Session, + s *discordgo.Session, i *discordgo.InteractionCreate, data *interaction.MessageComponentData, parameters []string, resp *cmd.ResponseBuilder, ) { id, err := getRoleLevelID(parameters) if err != nil { - session.LogError(err, "Reading dynamic CustomID") + s.LogError(err, "Reading dynamic CustomID") return } role := data.Values[0] cfg := GetGuildConfig(i.GuildID) - _, xprole := cfg.FindXpRoleID(id) - if xprole == nil { - err = session.InteractionAPI().Respond(i.Interaction, &interaction.Response{ + _, xpRole := cfg.FindXpRoleID(id) + if xpRole == nil { + err = s.InteractionAPI().Respond(i.Interaction, &interaction.Response{ Type: types.InteractionResponseChannelMessageWithSource, Data: &interaction.ResponseData{ Flags: channel.MessageFlagsEphemeral, @@ -220,20 +225,20 @@ func HandleXpRoleEditRole( }, }) if err != nil { - session.LogError(err, "Sending unable to get role message") + s.LogError(err, "Sending unable to get role message") } return } - xprole.RoleID = role - err = gokord.DB.Save(xprole).Error + xpRole.RoleID = role + err = gokord.DB.Save(xpRole).Error if err != nil { - session.LogError(err, "Saving config guild_id %s, id %d, type add", i.GuildID, id) + s.LogError(err, "Saving config guild_id %s, id %d, type add", i.GuildID, id) } - HandleXpRoleEdit(session, i, &interaction.MessageComponentData{}, parameters, resp) + HandleXpRoleEdit(s, i, &interaction.MessageComponentData{}, parameters, resp) } func HandleXpRoleEditLevelStart( - session *discordgo.Session, + s *discordgo.Session, i *discordgo.InteractionCreate, _ *interaction.MessageComponentData, parameters []string, @@ -241,13 +246,13 @@ func HandleXpRoleEditLevelStart( ) { id, err := getRoleLevelID(parameters) if err != nil { - session.LogError(err, "Reading dynamic CustomID") + s.LogError(err, "Reading dynamic CustomID") return } cfg := GetGuildConfig(i.GuildID) - _, role := cfg.FindXpRoleID(id) - if role == nil { - err = session.InteractionAPI().Respond(i.Interaction, &interaction.Response{ + _, xpRole := cfg.FindXpRoleID(id) + if xpRole == nil { + err = s.InteractionAPI().Respond(i.Interaction, &interaction.Response{ Type: types.InteractionResponseChannelMessageWithSource, Data: &interaction.ResponseData{ Flags: channel.MessageFlagsEphemeral, @@ -255,7 +260,7 @@ func HandleXpRoleEditLevelStart( }, }) if err != nil { - session.LogError(err, "Sending Unable to get role message") + s.LogError(err, "Sending Unable to get role message") } return } @@ -274,20 +279,20 @@ func HandleXpRoleEditLevelStart( MinLength: 1, MaxLength: 5, Placeholder: "5", - Value: strconv.FormatUint(uint64(exp.Level(role.XP)), 10), + Value: strconv.FormatUint(uint64(exp.Level(xpRole.XP)), 10), }, }, }, }, } - err = session.InteractionAPI().Respond(i.Interaction, response) + err = s.InteractionAPI().Respond(i.Interaction, response) if err != nil { - session.LogError(err, "Sending Edit level modal") + s.LogError(err, "Sending Edit level modal") } } func HandleXpRoleEditLevel( - session *discordgo.Session, + s *discordgo.Session, i *discordgo.InteractionCreate, data *interaction.ModalSubmitData, parameters []string, @@ -295,7 +300,7 @@ func HandleXpRoleEditLevel( ) { id, err := getRoleLevelID(parameters) if err != nil { - session.LogError(err, "Reading dynamic CustomID") + s.LogError(err, "Reading dynamic CustomID") return } @@ -309,16 +314,16 @@ func HandleXpRoleEditLevel( ). Send() if err != nil { - session.LogError(err, "Sending bad number warning message") + s.LogError(err, "Sending bad number warning message") } return } xp := exp.LevelXP(uint(level)) cfg := GetGuildConfig(i.GuildID) - _, xprole := cfg.FindXpRoleID(id) - if xprole == nil { - err = session.InteractionAPI().Respond(i.Interaction, &interaction.Response{ + _, xpRole := cfg.FindXpRoleID(id) + if xpRole == nil { + err = s.InteractionAPI().Respond(i.Interaction, &interaction.Response{ Type: types.InteractionResponseChannelMessageWithSource, Data: &interaction.ResponseData{ Flags: channel.MessageFlagsEphemeral, @@ -326,20 +331,20 @@ func HandleXpRoleEditLevel( }, }) if err != nil { - session.LogError(err, "Sending unable to modify role message") + s.LogError(err, "Sending unable to modify role message") } return } - xprole.XP = xp - err = gokord.DB.Save(xprole).Error + xpRole.XP = xp + err = gokord.DB.Save(xpRole).Error if err != nil { - session.LogError(err, "Saving config guild_id %s, id %d, type add", i.GuildID, id) + s.LogError(err, "Saving config guild_id %s, id %d, type add", i.GuildID, id) } - HandleXpRoleEdit(session, i, &interaction.MessageComponentData{}, parameters, resp) + HandleXpRoleEdit(s, i, &interaction.MessageComponentData{}, parameters, resp) } func HandleXpRoleDel( - session *discordgo.Session, + s *discordgo.Session, i *discordgo.InteractionCreate, _ *interaction.MessageComponentData, dynamicValues []string, @@ -347,13 +352,13 @@ func HandleXpRoleDel( ) { id, err := getRoleLevelID(dynamicValues) if err != nil { - session.LogError(err, "reading dynamic CustomID") + s.LogError(err, "reading dynamic CustomID") return } cfg := GetGuildConfig(i.GuildID) _, role := cfg.FindXpRoleID(id) if role == nil { - err := session.InteractionAPI().Respond(i.Interaction, &interaction.Response{ + err := s.InteractionAPI().Respond(i.Interaction, &interaction.Response{ Type: types.InteractionResponseChannelMessageWithSource, Data: &interaction.ResponseData{ Content: "Rôle introuvable. Peut-être a-t-il déjà été supprimé ?", @@ -361,20 +366,20 @@ func HandleXpRoleDel( }, }) if err != nil { - session.LogError(err, "Sending role not found message") + s.LogError(err, "Sending role not found message") } return } err = gokord.DB.Delete(role).Error if err != nil { - session.LogError(err, "Deleting entry guild_id %s, id %d, type del", i.GuildID, id) + s.LogError(err, "Deleting entry guild_id %s, id %d, type del", i.GuildID, id) } - HandleXpRole(session, i, &interaction.MessageComponentData{}, resp) + HandleXpRole(s, i, &interaction.MessageComponentData{}, resp) } func HandleXpRoleAdd( - session *discordgo.Session, + s *discordgo.Session, i *discordgo.InteractionCreate, data *interaction.ModalSubmitData, resp *cmd.ResponseBuilder, @@ -389,7 +394,7 @@ func HandleXpRoleAdd( ). Send() if err != nil { - session.LogError(err, "sending bad number warning message") + s.LogError(err, "sending bad number warning message") } return } @@ -404,11 +409,11 @@ func HandleXpRoleAdd( }) err = cfg.Save() if err != nil { - session.LogError(err, "saving config for role %s in %s", roleId, i.GuildID) + s.LogError(err, "saving config for role %s in %s", roleId, i.GuildID) return } - HandleXpRole(session, i, &interaction.MessageComponentData{}, resp) + HandleXpRole(s, i, &interaction.MessageComponentData{}, resp) } func getRoleLevelID(dynamic []string) (uint, error) { |
