aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <anhgelus.morhtuuzh@proton.me>2024-04-15 16:44:46 +0200
committerAnhgelus Morhtuuzh <anhgelus.morhtuuzh@proton.me>2024-04-15 16:44:46 +0200
commitf97df035c36c546afd665a1ec7da04cad35d869a (patch)
tree066f47b5b31323e7a88010c0f5a274c6bea6e524
parent5451dd0e817294c5d53b4e6f6621982bff964d40 (diff)
feat(config): disable channel for xp
-rw-r--r--commands/config.go78
-rw-r--r--config/guild.go5
-rw-r--r--main.go18
-rw-r--r--xp/member.go14
4 files changed, 106 insertions, 9 deletions
diff --git a/commands/config.go b/commands/config.go
index 539c6f9..e663b40 100644
--- a/commands/config.go
+++ b/commands/config.go
@@ -7,6 +7,7 @@ import (
"github.com/anhgelus/les-copaings-bot/config"
"github.com/anhgelus/les-copaings-bot/xp"
"github.com/bwmarrin/discordgo"
+ "strings"
)
func ConfigShow(s *discordgo.Session, i *discordgo.InteractionCreate) {
@@ -21,6 +22,20 @@ func ConfigShow(s *discordgo.Session, i *discordgo.InteractionCreate) {
roles += fmt.Sprintf("> Niveau %d - <@&%s>\n", xp.Level(r.XP), r.RoleID)
}
}
+ if len(roles) == 0 {
+ roles = "Aucun rôle configuré :("
+ }
+ disChans := strings.Split(cfg.DisabledChannels, ";")
+ l = len(disChans) - 1
+ chans := ""
+ for i, c := range disChans {
+ if i != l {
+ chans += fmt.Sprintf("> <#%s>", c)
+ }
+ }
+ if len(chans) == 0 {
+ chans = "Aucun salon désactivé :)"
+ }
err := resp.Embeds([]*discordgo.MessageEmbed{
{
Type: discordgo.EmbedTypeRich,
@@ -33,6 +48,11 @@ func ConfigShow(s *discordgo.Session, i *discordgo.InteractionCreate) {
Value: roles,
Inline: false,
},
+ {
+ Name: "Salons désactivés",
+ Value: chans,
+ Inline: false,
+ },
},
},
}).Send()
@@ -133,3 +153,61 @@ func ConfigXP(s *discordgo.Session, i *discordgo.InteractionCreate) {
utils.SendAlert("commands/config.go - Config updated", err.Error())
}
}
+
+func ConfigChannel(s *discordgo.Session, i *discordgo.InteractionCreate) {
+ optMap := utils.GenerateOptionMapForSubcommand(i)
+ resp := utils.ResponseBuilder{C: s, I: i}
+ resp.IsEphemeral()
+ // verify every args
+ t, ok := optMap["type"]
+ if !ok {
+ err := resp.Message("Le type d'action n'a pas été renseigné.").Send()
+ if err != nil {
+ utils.SendAlert("commands/config.go - Action type not set", err.Error())
+ }
+ return
+ }
+ ts := t.StringValue()
+ salon, ok := optMap["channel"]
+ if !ok {
+ err := resp.Message("Le salon n'a pas été renseigné.").Send()
+ if err != nil {
+ utils.SendAlert("commands/config.go - Channel not set", err.Error())
+ }
+ return
+ }
+ channel := salon.ChannelValue(s)
+ cfg := config.GetGuildConfig(i.GuildID)
+ switch ts {
+ case "add":
+ if strings.Contains(cfg.DisabledChannels, channel.ID) {
+ err := resp.Message("Le salon est déjà dans la liste des salons désactivés").Send()
+ if err != nil {
+ utils.SendAlert("commands/config.go - Channel already disabled", err.Error())
+ }
+ return
+ }
+ cfg.DisabledChannels += channel.ID + ";"
+ case "del":
+ if !strings.Contains(cfg.DisabledChannels, channel.ID) {
+ err := resp.Message("Le salon n'est pas désactivé").Send()
+ if err != nil {
+ utils.SendAlert("commands/config.go - Channel not disabled", err.Error())
+ }
+ return
+ }
+ cfg.DisabledChannels = strings.ReplaceAll(cfg.DisabledChannels, channel.ID+";", "")
+ default:
+ err := resp.Message("Le type d'action n'est pas valide.").Send()
+ if err != nil {
+ utils.SendAlert("commands/config.go - Invalid action type", err.Error())
+ }
+ return
+ }
+ // save
+ cfg.Save()
+ err := resp.Message("Modification sauvegardé.").Send()
+ if err != nil {
+ utils.SendAlert("commands/config.go - Modification saved message", err.Error())
+ }
+}
diff --git a/config/guild.go b/config/guild.go
index df78406..5728759 100644
--- a/config/guild.go
+++ b/config/guild.go
@@ -7,8 +7,9 @@ import (
type GuildConfig struct {
gorm.Model
- GuildID string `gorm:"not null"`
- XpRoles []XpRole
+ GuildID string `gorm:"not null"`
+ XpRoles []XpRole
+ DisabledChannels string
}
type XpRole struct {
diff --git a/main.go b/main.go
index ac725e4..2529b8f 100644
--- a/main.go
+++ b/main.go
@@ -64,6 +64,24 @@ func main() {
"Rôle",
).IsRequired()).
SetHandler(commands.ConfigXP),
+ ).
+ AddSub(
+ gokord.NewCommand("disabled-channels", "Modifie les salons désactivés").
+ HasOption().
+ AddOption(gokord.NewOption(
+ discordgo.ApplicationCommandOptionString,
+ "type",
+ "Type d'action à effectuer",
+ ).
+ AddChoice(gokord.NewChoice("Désactiver", "add")).
+ AddChoice(gokord.NewChoice("Activer", "del")).IsRequired(),
+ ).
+ AddOption(gokord.NewOption(
+ discordgo.ApplicationCommandOptionChannel,
+ "channel",
+ "Salon à modifier",
+ ).IsRequired()).
+ SetHandler(commands.ConfigChannel),
)
bot := gokord.Bot{
diff --git a/xp/member.go b/xp/member.go
index 5599192..4f1e6ee 100644
--- a/xp/member.go
+++ b/xp/member.go
@@ -15,7 +15,7 @@ type Copaing struct {
GuildID string `gorm:"not null"`
}
-var r *redis.Client
+var redisClient *redis.Client
func GetCopaing(discordID string, guildID string) *Copaing {
c := Copaing{DiscordID: discordID, GuildID: guildID}
@@ -43,19 +43,19 @@ func (c *Copaing) AddXP(s *discordgo.Session, m *discordgo.Member, xp uint, fn f
}
func getRedisClient() (*redis.Client, error) {
- if r == nil {
+ if redisClient == nil {
var err error
- r, err = gokord.BaseCfg.Redis.Get()
- return r, err
+ redisClient, err = gokord.BaseCfg.Redis.Get()
+ return redisClient, err
}
- return r, nil
+ return redisClient, nil
}
func CloseRedisClient() {
- if r == nil {
+ if redisClient == nil {
return
}
- err := r.Close()
+ err := redisClient.Close()
if err != nil {
utils.SendAlert("xp/member.go - Closing redis client", err.Error())
}