aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorWilliam Hergès <anhgelus.morhtuuzh@proton.me>2025-09-15 14:01:06 +0200
committerGitHub <noreply@github.com>2025-09-15 14:01:06 +0200
commit4104690079c47c1ad7981644bd07068cc9184ebf (patch)
treec34e8b074ef1553b100141c1b0615eee2a1b247e /main.go
parente42ecdd7154d740800ef392c6318220944b55a39 (diff)
parent200b8f763947c251661397db0ca973d27a9a6816 (diff)
Merge pull request #13 from ascpial/feat-config
[Feat] Improve /config look and xp_role usability
Diffstat (limited to 'main.go')
-rw-r--r--main.go78
1 files changed, 68 insertions, 10 deletions
diff --git a/main.go b/main.go
index 7be2e68..f6ccf5f 100644
--- a/main.go
+++ b/main.go
@@ -2,9 +2,11 @@ package main
import (
_ "embed"
+ "encoding/json"
"errors"
"flag"
"os"
+ "regexp"
"time"
"git.anhgelus.world/anhgelus/les-copaings-bot/commands"
@@ -63,6 +65,61 @@ func init() {
}
+func handleDynamicMessageComponent(
+ b *gokord.Bot,
+ handler func(
+ *discordgo.Session,
+ *discordgo.InteractionCreate,
+ interaction.MessageComponentData,
+ []string, *cmd.ResponseBuilder,
+ ),
+ pattern string,
+) {
+ compiledPattern := regexp.MustCompile(pattern)
+ b.AddHandler(func(s *discordgo.Session, i *discordgo.InteractionCreate) {
+ if i.Type != types.InteractionMessageComponent {
+ return
+ }
+
+ data := i.MessageComponentData()
+ parameters := compiledPattern.FindStringSubmatch(data.CustomID)
+ if parameters == nil {
+ return
+ }
+ parameters = parameters[1:]
+ handler(s, i, data, parameters, cmd.NewResponseBuilder(s, i))
+ })
+}
+
+func handleDynamicModalComponent(
+ b *gokord.Bot,
+ handler func(
+ *discordgo.Session,
+ *discordgo.InteractionCreate,
+ interaction.ModalSubmitData,
+ []string,
+ *cmd.ResponseBuilder,
+ ),
+ pattern string,
+) {
+ compiledPattern := regexp.MustCompile(pattern)
+ b.AddHandler(func(s *discordgo.Session, i *discordgo.InteractionCreate) {
+ if i.Type != types.InteractionModalSubmit {
+ return
+ }
+
+ data := i.ModalSubmitData()
+ content, _ := json.Marshal(data)
+ s.LogDebug(string(content))
+ parameters := compiledPattern.FindStringSubmatch(data.CustomID)
+ if parameters == nil {
+ return
+ }
+ parameters = parameters[1:]
+ handler(s, i, data, parameters, cmd.NewResponseBuilder(s, i))
+ })
+}
+
func main() {
flag.Parse()
gokord.UseRedis = false
@@ -88,7 +145,7 @@ func main() {
configCmd := cmd.New("config", "Modifie la config").
SetPermission(&adm).
- SetHandler(commands.Config)
+ SetHandler(commands.ConfigCommand)
topCmd := cmd.New("top", "Copaings les plus actifs").
SetHandler(commands.Top)
@@ -184,7 +241,7 @@ func main() {
}
switch data.Values[0] {
case config.ModifyXpRole:
- config.HandleModifyXpRole(s, i, data, resp)
+ config.HandleXpRole(s, i, data, resp)
case config.ModifyFallbackChannel:
config.HandleModifyFallbackChannel(s, i, data, resp)
case config.ModifyDisChannel:
@@ -196,15 +253,16 @@ func main() {
return
}
}, commands.ConfigModify)
+ bot.HandleMessageComponent(commands.ConfigMessageComponent, commands.OpenConfig)
// xp role related
- bot.HandleMessageComponent(config.HandleXpRoleAddEdit, config.XpRoleAdd)
- bot.HandleMessageComponent(config.HandleXpRoleAddEdit, config.XpRoleEdit)
- bot.HandleMessageComponent(config.HandleXpRoleAddRole, config.XpRoleAddRole)
- bot.HandleMessageComponent(config.HandleXpRoleEditRole, config.XpRoleEditRole)
- bot.HandleMessageComponent(config.HandleXpRoleDel, config.XpRoleDel)
- bot.HandleMessageComponent(config.HandleXpRoleDelRole, config.XpRoleDelRole)
- bot.HandleModal(config.HandleXpRoleLevel, config.XpRoleAddLevel)
- bot.HandleModal(config.HandleXpRoleLevel, config.XpRoleEditLevel)
+ bot.HandleMessageComponent(config.HandleXpRole, config.ModifyXpRole)
+ bot.HandleMessageComponent(config.HandleXpRoleNew, config.XpRoleNew)
+ bot.HandleModal(config.HandleXpRoleAdd, config.XpRoleAdd)
+ handleDynamicMessageComponent(&bot, config.HandleXpRoleEdit, config.XpRoleEditPattern)
+ handleDynamicMessageComponent(&bot, config.HandleXpRoleEditRole, config.XpRoleEditRolePattern)
+ handleDynamicMessageComponent(&bot, config.HandleXpRoleEditLevelStart, config.XpRoleEditLevelStartPattern)
+ handleDynamicModalComponent(&bot, config.HandleXpRoleEditLevel, config.XpRoleEditLevelPattern)
+ handleDynamicMessageComponent(&bot, config.HandleXpRoleDel, config.XpRoleDel)
// channel related
bot.HandleMessageComponent(config.HandleFallbackChannelSet, config.FallbackChannelSet)
bot.HandleMessageComponent(config.HandleDisChannel, config.DisChannelAdd)