refactor(reducer): iterate over users in database
and possible fix of 'shadow' users
This commit is contained in:
parent
f15c0678b7
commit
50256de970
2 changed files with 63 additions and 4 deletions
|
@ -168,5 +168,5 @@ func onDisconnect(s *discordgo.Session, e *discordgo.VoiceStateUpdate, client *r
|
||||||
func OnLeave(_ *discordgo.Session, e *discordgo.GuildMemberRemove) {
|
func OnLeave(_ *discordgo.Session, e *discordgo.GuildMemberRemove) {
|
||||||
utils.SendDebug("Leave event", "user_id", e.User.ID)
|
utils.SendDebug("Leave event", "user_id", e.User.ID)
|
||||||
c := GetCopaing(e.User.ID, e.GuildID)
|
c := GetCopaing(e.User.ID, e.GuildID)
|
||||||
gokord.DB.Delete(c)
|
gokord.DB.Where("guild_id = ?", e.GuildID).Delete(c)
|
||||||
}
|
}
|
||||||
|
|
65
xp/level.go
65
xp/level.go
|
@ -1,6 +1,7 @@
|
||||||
package xp
|
package xp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/anhgelus/gokord"
|
||||||
"github.com/anhgelus/gokord/utils"
|
"github.com/anhgelus/gokord/utils"
|
||||||
"github.com/anhgelus/les-copaings-bot/config"
|
"github.com/anhgelus/les-copaings-bot/config"
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
|
@ -165,16 +166,74 @@ func XPUpdate(s *discordgo.Session, c *Copaing) {
|
||||||
func PeriodicReducer(s *discordgo.Session) {
|
func PeriodicReducer(s *discordgo.Session) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
for _, g := range s.State.Guilds {
|
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 {
|
if i%50 == 49 {
|
||||||
time.Sleep(15 * time.Second) // sleep prevents from spamming the Discord API and the database
|
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
|
continue
|
||||||
}
|
}
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
c := GetCopaing(m.User.ID, g.ID)
|
|
||||||
XPUpdate(s, c)
|
XPUpdate(s, c)
|
||||||
wg.Done()
|
wg.Done()
|
||||||
}()
|
}()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue