diff --git a/main.go b/main.go index 1a9693a..d8cdbc2 100644 --- a/main.go +++ b/main.go @@ -3,10 +3,12 @@ package main import ( "flag" "github.com/anhgelus/gokord" + "github.com/anhgelus/gokord/utils" "github.com/anhgelus/les-copaings-bot/commands" "github.com/anhgelus/les-copaings-bot/config" "github.com/anhgelus/les-copaings-bot/xp" "github.com/bwmarrin/discordgo" + "time" ) var token string @@ -126,12 +128,12 @@ func afterInit(dg *discordgo.Session) { dg.AddHandler(xp.OnLeave) // setup timer for periodic reducer - //d := 24 * time.Hour - //if gokord.Debug { - // // reduce for debug - // d = time.Minute - //} - //utils.NewTimer(d, func(stop chan struct{}) { - // xp.PeriodicReducer(dg) - //}) + d := 24 * time.Hour + if gokord.Debug { + // reduce time for debug + d = time.Minute + } + utils.NewTimer(d, func(stop chan struct{}) { + xp.PeriodicReducer(dg) + }) } diff --git a/xp/level.go b/xp/level.go index 12e5a28..bbe11a4 100644 --- a/xp/level.go +++ b/xp/level.go @@ -5,6 +5,8 @@ import ( "github.com/anhgelus/les-copaings-bot/config" "github.com/bwmarrin/discordgo" "slices" + "sync" + "time" ) func onNewLevel(s *discordgo.Session, m *discordgo.Member, level uint) { @@ -116,24 +118,24 @@ func XPUpdate(s *discordgo.Session, c *Copaing) { } } -//func PeriodicReducer(s *discordgo.Session) { -// var wg sync.WaitGroup -// for _, g := range s.State.Guilds { -// for _, m := range utils.FetchGuildUser(s, g.ID) { -// if m.User.Bot { -// continue -// } -// wg.Add(1) -// go func() { -// utils.SendDebug("Async reducer", "user", m.DisplayName(), "guild", g.Name) -// c := GetCopaing(m.User.ID, g.ID) -// XPUpdate(s, c) -// wg.Done() -// }() -// } -// wg.Wait() // finish the entire guild before starting another -// utils.SendDebug("Guild finished", "guild", g.Name) -// time.Sleep(10 * time.Second) // sleep prevents from spamming the Discord API -// } -// utils.SendDebug("Periodic reduce finished", "len(guilds)", len(s.State.Guilds)) -//} +func PeriodicReducer(s *discordgo.Session) { + var wg sync.WaitGroup + for _, g := range s.State.Guilds { + for _, m := range utils.FetchGuildUser(s, g.ID) { + if m.User.Bot { + continue + } + wg.Add(1) + go func() { + utils.SendDebug("Async reducer", "user", m.DisplayName(), "guild", g.Name) + c := GetCopaing(m.User.ID, g.ID) + XPUpdate(s, c) + wg.Done() + }() + } + wg.Wait() // finish the entire guild before starting another + utils.SendDebug("Guild finished", "guild", g.Name) + time.Sleep(10 * time.Second) // sleep prevents from spamming the Discord API + } + utils.SendDebug("Periodic reduce finished", "len(guilds)", len(s.State.Guilds)) +}