aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xp/events.go2
-rw-r--r--xp/level.go7
-rw-r--r--xp/member.go5
3 files changed, 13 insertions, 1 deletions
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
}