aboutsummaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/channel.go113
-rw-r--r--config/guild.go27
-rw-r--r--config/xp_reduce.go101
-rw-r--r--config/xp_role.go107
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) {