From ef39c156f94b854796bb1c2adddfd40a5acaeca8 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Tue, 16 Apr 2024 15:23:15 +0200 Subject: feat(reducer): role update on new level --- xp/events.go | 4 ++-- xp/level.go | 30 +++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) (limited to 'xp') diff --git a/xp/events.go b/xp/events.go index 655e9fd..ebb7f40 100644 --- a/xp/events.go +++ b/xp/events.go @@ -30,7 +30,7 @@ func OnMessage(s *discordgo.Session, m *discordgo.MessageCreate) { return } c := GetCopaing(m.Author.ID, m.GuildID) - LastEventUpdate(c) + LastEventUpdate(s, c) // add xp trimmed := utils.TrimMessage(strings.ToLower(m.Content)) m.Member.User = m.Author @@ -63,7 +63,7 @@ func OnVoiceUpdate(s *discordgo.Session, e *discordgo.VoiceStateUpdate) { if e.Member.User.Bot { return } - LastEventUpdate(GetCopaing(e.UserID, e.GuildID)) + LastEventUpdate(s, GetCopaing(e.UserID, e.GuildID)) cfg := config.GetGuildConfig(e.GuildID) if cfg.IsDisabled(e.ChannelID) { return diff --git a/xp/level.go b/xp/level.go index bbcc71f..12e5a28 100644 --- a/xp/level.go +++ b/xp/level.go @@ -43,7 +43,23 @@ func onNewLevel(s *discordgo.Session, m *discordgo.Member, level uint) { } } -func LastEventUpdate(c *Copaing) { +func (c *Copaing) OnNewLevel(s *discordgo.Session, level uint) { + m, err := s.GuildMember(c.GuildID, c.DiscordID) + if err != nil { + utils.SendAlert( + "xp/level.go - Getting member for new level", + err.Error(), + "discord_id", + c.DiscordID, + "guild_id", + c.GuildID, + ) + return + } + onNewLevel(s, m, level) +} + +func LastEventUpdate(s *discordgo.Session, c *Copaing) { h := c.HourSinceLastEvent() l := Lose(h, c.XP) xp := c.XPAlreadyRemoved() @@ -61,11 +77,15 @@ func LastEventUpdate(c *Copaing) { } if oldXP != c.XP { c.Save() + lvl := Level(c.XP) + if Level(oldXP) != Level(c.XP) { + c.OnNewLevel(s, lvl) + } } c.SetLastEvent() } -func XPUpdate(c *Copaing) { +func XPUpdate(s *discordgo.Session, c *Copaing) { oldXP := c.XP if oldXP == 0 { return @@ -89,6 +109,10 @@ func XPUpdate(c *Copaing) { if oldXP != c.XP { utils.SendDebug("Save XP", "old", oldXP, "new", c.XP, "user", c.DiscordID) c.Save() + lvl := Level(c.XP) + if Level(oldXP) != Level(c.XP) { + c.OnNewLevel(s, lvl) + } } } @@ -103,7 +127,7 @@ func XPUpdate(c *Copaing) { // go func() { // utils.SendDebug("Async reducer", "user", m.DisplayName(), "guild", g.Name) // c := GetCopaing(m.User.ID, g.ID) -// XPUpdate(c) +// XPUpdate(s, c) // wg.Done() // }() // } -- cgit v1.2.3