aboutsummaryrefslogtreecommitdiff
path: root/xp/level.go
diff options
context:
space:
mode:
Diffstat (limited to 'xp/level.go')
-rw-r--r--xp/level.go39
1 files changed, 37 insertions, 2 deletions
diff --git a/xp/level.go b/xp/level.go
index 67ee5a5..671bf2e 100644
--- a/xp/level.go
+++ b/xp/level.go
@@ -1,9 +1,44 @@
package xp
import (
+ "github.com/anhgelus/gokord/utils"
+ "github.com/anhgelus/les-copaings-bot/config"
"github.com/bwmarrin/discordgo"
+ "slices"
)
-func onNewLevel(s *discordgo.Session, level uint) {
- // check roles
+func onNewLevel(s *discordgo.Session, m *discordgo.Member, level uint) {
+ cfg := config.GetGuildConfig(m.GuildID)
+ xpForLevel := XPForLevel(level)
+ for _, role := range cfg.XpRoles {
+ if role.XP <= xpForLevel && !slices.Contains(m.Roles, role.RoleID) {
+ utils.SendDebug(
+ "Add role",
+ "role_id",
+ role.RoleID,
+ "user_id",
+ m.User.ID,
+ "guild_id",
+ m.GuildID,
+ )
+ err := s.GuildMemberRoleAdd(m.GuildID, m.User.ID, role.RoleID)
+ if err != nil {
+ utils.SendAlert("xp/level.go - Adding role", err.Error(), "role_id", role.RoleID)
+ }
+ } else if role.XP > xpForLevel && slices.Contains(m.Roles, role.RoleID) {
+ utils.SendDebug(
+ "Remove role",
+ "role_id",
+ role.RoleID,
+ "user_id",
+ m.User.ID,
+ "guild_id",
+ m.GuildID,
+ )
+ err := s.GuildMemberRoleRemove(m.GuildID, m.User.ID, role.RoleID)
+ if err != nil {
+ utils.SendAlert("xp/level.go - Removing role", err.Error(), "role_id", role.RoleID)
+ }
+ }
+ }
}