aboutsummaryrefslogtreecommitdiff
path: root/xp
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <anhgelus.morhtuuzh@proton.me>2024-11-25 09:35:44 +0100
committerAnhgelus Morhtuuzh <anhgelus.morhtuuzh@proton.me>2024-11-25 09:35:44 +0100
commit50256de97095f619c5a36da6e52eb149d6aceb0e (patch)
treea64af1449bfcc29ddbbcfa62cd941b676f998aa2 /xp
parentf15c0678b7e0cd3686b37f364cf4c8781a00fcd5 (diff)
refactor(reducer): iterate over users in database
and possible fix of 'shadow' users
Diffstat (limited to 'xp')
-rw-r--r--xp/events.go2
-rw-r--r--xp/level.go65
2 files changed, 63 insertions, 4 deletions
diff --git a/xp/events.go b/xp/events.go
index 90af121..23d4b4b 100644
--- a/xp/events.go
+++ b/xp/events.go
@@ -168,5 +168,5 @@ func onDisconnect(s *discordgo.Session, e *discordgo.VoiceStateUpdate, client *r
func OnLeave(_ *discordgo.Session, e *discordgo.GuildMemberRemove) {
utils.SendDebug("Leave event", "user_id", e.User.ID)
c := GetCopaing(e.User.ID, e.GuildID)
- gokord.DB.Delete(c)
+ gokord.DB.Where("guild_id = ?", e.GuildID).Delete(c)
}
diff --git a/xp/level.go b/xp/level.go
index e577920..7a01117 100644
--- a/xp/level.go
+++ b/xp/level.go
@@ -1,6 +1,7 @@
package xp
import (
+ "github.com/anhgelus/gokord"
"github.com/anhgelus/gokord/utils"
"github.com/anhgelus/les-copaings-bot/config"
"github.com/bwmarrin/discordgo"
@@ -165,16 +166,74 @@ func XPUpdate(s *discordgo.Session, c *Copaing) {
func PeriodicReducer(s *discordgo.Session) {
var wg sync.WaitGroup
for _, g := range s.State.Guilds {
- for i, m := range utils.FetchGuildUser(s, g.ID) {
+ var cs []*Copaing
+ err := gokord.DB.Where("guild_id = ?", g.ID).Find(&cs).Error
+ if err != nil {
+ utils.SendAlert("xp/level.go - Querying all copaings in Guild", err.Error(), "guild_id", g.ID)
+ continue
+ }
+ for i, c := range cs {
if i%50 == 49 {
time.Sleep(15 * time.Second) // sleep prevents from spamming the Discord API and the database
}
- if m.User.Bot {
+ var u *discordgo.User
+ u, err = s.User(c.DiscordID)
+ if err != nil {
+ utils.SendAlert(
+ "xp/level.go - Fetching user",
+ err.Error(),
+ "discord_id",
+ c.DiscordID,
+ "guild_id",
+ g.ID,
+ )
+ utils.SendWarn("Removing user from database", "discord_id", c.DiscordID)
+ if gokord.DB.Delete(c).Error != nil {
+ utils.SendAlert(
+ "xp/level.go - Removing user from database",
+ err.Error(),
+ "discord_id",
+ c.DiscordID,
+ "guild_id",
+ g.ID,
+ )
+ }
+ continue
+ }
+ if u.Bot {
+ continue
+ }
+ _, err = s.GuildMember(g.ID, c.DiscordID)
+ if err != nil {
+ utils.SendAlert(
+ "xp/level.go - Fetching member",
+ err.Error(),
+ "discord_id",
+ c.DiscordID,
+ "guild_id",
+ g.ID,
+ )
+ utils.SendWarn(
+ "Removing user from guild in database",
+ "discord_id",
+ c.DiscordID,
+ "guild_id",
+ g.ID,
+ )
+ if gokord.DB.Where("guild_id = ?", g.ID).Delete(c).Error != nil {
+ utils.SendAlert(
+ "xp/level.go - Removing user from guild in database",
+ err.Error(),
+ "discord_id",
+ c.DiscordID,
+ "guild_id",
+ g.ID,
+ )
+ }
continue
}
wg.Add(1)
go func() {
- c := GetCopaing(m.User.ID, g.ID)
XPUpdate(s, c)
wg.Done()
}()