diff options
| author | Anhgelus Morhtuuzh <anhgelus.morhtuuzh@proton.me> | 2024-04-15 16:12:19 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <anhgelus.morhtuuzh@proton.me> | 2024-04-15 16:12:19 +0200 |
| commit | 9e6a5ce1d37d07e22383e2f6507117cc8e6ff85c (patch) | |
| tree | 7fae4d58183da89f9f1517d5a1852d63043785c1 /xp/level.go | |
| parent | beb0ea0ca44c96083a2ba2f683accc68ad30f1b1 (diff) | |
feat(level): update roles on new level
Diffstat (limited to 'xp/level.go')
| -rw-r--r-- | xp/level.go | 39 |
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) + } + } + } } |
