From 2aaeb2115b25952b71113a683b466c00cb92e690 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Mon, 15 Apr 2024 18:47:52 +0200 Subject: [PATCH] feat(xp): basic reducer --- xp/events.go | 2 ++ xp/level.go | 7 +++++++ xp/member.go | 5 ++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/xp/events.go b/xp/events.go index 4940c0b..c3b843c 100644 --- a/xp/events.go +++ b/xp/events.go @@ -30,6 +30,7 @@ func OnMessage(s *discordgo.Session, m *discordgo.MessageCreate) { return } c := GetCopaing(m.Author.ID, m.GuildID) + onLastEventUpdate(c) // add xp trimmed := utils.TrimMessage(strings.ToLower(m.Content)) m.Member.User = m.Author @@ -62,6 +63,7 @@ func OnVoiceUpdate(s *discordgo.Session, e *discordgo.VoiceStateUpdate) { if e.Member.User.Bot { return } + onLastEventUpdate(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 671bf2e..574a127 100644 --- a/xp/level.go +++ b/xp/level.go @@ -42,3 +42,10 @@ func onNewLevel(s *discordgo.Session, m *discordgo.Member, level uint) { } } } + +func onLastEventUpdate(c *Copaing) { + h := c.HourSinceLastEvent() + c.XP -= Lose(h, c.XP) + c.Save() + c.SetLastEvent() +} diff --git a/xp/member.go b/xp/member.go index bcfcedf..fc01ec0 100644 --- a/xp/member.go +++ b/xp/member.go @@ -2,6 +2,7 @@ package xp import ( "context" + "errors" "fmt" "github.com/anhgelus/gokord" "github.com/anhgelus/gokord/utils" @@ -77,7 +78,9 @@ func (c *Copaing) HourSinceLastEvent() uint { } u := c.GetUserBase() res := client.Get(context.Background(), fmt.Sprintf("%s:%s", u.GenKey(), LastEvent)) - if res.Err() != nil { + if errors.Is(res.Err(), redis.Nil) { + return 0 + } else if res.Err() != nil { utils.SendAlert("xp/member.go - Getting last event", res.Err().Error(), "base_key", u.GenKey()) return 0 }