diff options
Diffstat (limited to 'user')
| -rw-r--r-- | user/level.go | 36 | ||||
| -rw-r--r-- | user/member.go | 19 | ||||
| -rw-r--r-- | user/state.go | 27 | ||||
| -rw-r--r-- | user/xp.go | 4 |
4 files changed, 43 insertions, 43 deletions
diff --git a/user/level.go b/user/level.go index feec35b..0b839d1 100644 --- a/user/level.go +++ b/user/level.go @@ -6,20 +6,20 @@ import ( "sync" "time" + "git.anhgelus.world/anhgelus/les-copaings-bot/common" "git.anhgelus.world/anhgelus/les-copaings-bot/config" "git.anhgelus.world/anhgelus/les-copaings-bot/exp" - "github.com/anhgelus/gokord" "github.com/nyttikord/gokord/bot" "github.com/nyttikord/gokord/user" ) -func onNewLevel(ctx context.Context, s bot.Session, m *user.Member, level uint) { - cfg := config.GetGuildConfig(m.GuildID) +func onNewLevel(ctx context.Context, dg bot.Session, m *user.Member, level uint) { + cfg := config.GetGuildConfig(ctx, m.GuildID) xpForLevel := exp.LevelXP(level) for _, role := range cfg.XpRoles { if role.XP <= xpForLevel && !slices.Contains(m.Roles, role.RoleID) { bot.Logger(ctx).Debug("add role", "role", role.RoleID, "user", m.DisplayName(), "guild", m.GuildID) - err := s.GuildAPI().MemberRoleAdd(m.GuildID, m.User.ID, role.RoleID) + err := dg.GuildAPI().MemberRoleAdd(m.GuildID, m.User.ID, role.RoleID).Do(ctx) if err != nil { bot.Logger(ctx).Error( "adding role", @@ -28,7 +28,7 @@ func onNewLevel(ctx context.Context, s bot.Session, m *user.Member, level uint) } } else if role.XP > xpForLevel && slices.Contains(m.Roles, role.RoleID) { bot.Logger(ctx).Debug("remove role", "role", role.RoleID, "user", m.DisplayName(), "guild", m.GuildID) - err := s.GuildAPI().MemberRoleRemove(m.GuildID, m.User.ID, role.RoleID) + err := dg.GuildAPI().MemberRoleRemove(m.GuildID, m.User.ID, role.RoleID).Do(ctx) if err != nil { bot.Logger(ctx).Error( "removing role", @@ -39,17 +39,17 @@ func onNewLevel(ctx context.Context, s bot.Session, m *user.Member, level uint) } } -func (c *CopaingCached) onNewLevel(ctx context.Context, s bot.Session, level uint) { - m, err := s.GuildAPI().Member(c.GuildID, c.DiscordID).Do(ctx) +func (c *CopaingCached) onNewLevel(ctx context.Context, dg bot.Session, level uint) { + m, err := dg.GuildAPI().Member(c.GuildID, c.DiscordID).Do(ctx) if err != nil { bot.Logger(ctx).Error("getting member for new level", "error", err, "user", c.DiscordID, "guild", c.GuildID) return } - onNewLevel(ctx, s, m, level) + onNewLevel(ctx, dg, m, level) } -func PeriodicReducer(ctx context.Context, s bot.Session) { - PeriodicSaver(ctx, s) +func PeriodicReducer(ctx context.Context, dg bot.Session) { + PeriodicSaver(ctx, dg) logger := bot.Logger(ctx) logger.Debug("periodic reducer") @@ -58,12 +58,12 @@ func PeriodicReducer(ctx context.Context, s bot.Session) { n := 0 var wg sync.WaitGroup - for _, g := range s.GuildAPI().State.Guilds() { + for _, g := range dg.GuildAPI().State.Guilds() { n++ - cfg := config.GetGuildConfig(g) - res := gokord.DB. + cfg := config.GetGuildConfig(ctx, g) + res := common.GetDB(ctx). Model(&CopaingXP{}). - Where("guild_id = ? and created_at < ?", g, exp.TimeStampNDaysBefore(cfg.DaysXPRemains)). + Where("guild_id = ? and created_at < ?", g, exp.TimeStampNDaysBefore(ctx, cfg.DaysXPRemains)). Delete(&CopaingXP{}) if res.Error != nil { logger.Error("removing old xp", "error", res.Error, "guild", g) @@ -72,7 +72,7 @@ func PeriodicReducer(ctx context.Context, s bot.Session) { logger.Debug("guild cleaned", "guild", g, "rows affected", res.RowsAffected) wg.Go(func() { - syncCopaings(ctx, s, state.Copaings(g)) + syncCopaings(ctx, dg, state.Copaings(g)) }) } @@ -81,7 +81,7 @@ func PeriodicReducer(ctx context.Context, s bot.Session) { logger.Debug("periodic reduce finished", "guilds affected", n) } -func syncCopaings(ctx context.Context, s bot.Session, ccs []CopaingCached) { +func syncCopaings(ctx context.Context, dg bot.Session, ccs []CopaingCached) { logger := bot.Logger(ctx) for i, cc := range ccs { if i%50 == 49 { @@ -96,12 +96,12 @@ func syncCopaings(ctx context.Context, s bot.Session, ccs []CopaingCached) { } xp := cc.XP if exp.Level(oldXp) != exp.Level(xp) { - cc.onNewLevel(ctx, s, exp.Level(xp)) + cc.onNewLevel(ctx, dg, exp.Level(xp)) } } } -func PeriodicSaver(ctx context.Context, s bot.Session) { +func PeriodicSaver(ctx context.Context, dg bot.Session) { logger := bot.Logger(ctx) logger.Debug("saving state in DB") err := saveStateInDB(ctx) diff --git a/user/member.go b/user/member.go index 4969f8a..e3a1d30 100644 --- a/user/member.go +++ b/user/member.go @@ -4,7 +4,7 @@ import ( "context" "time" - "github.com/anhgelus/gokord" + "git.anhgelus.world/anhgelus/les-copaings-bot/common" ) type Copaing struct { @@ -32,7 +32,7 @@ func GetCopaing(ctx context.Context, discordID string, guildID string) *CopaingC cc, err := state.Copaing(guildID, discordID) if err != nil { c := Copaing{DiscordID: discordID, GuildID: guildID} - if err := c.load(); err != nil { + if err := c.load(ctx); err != nil { panic(err) } cc = FromCopaing(&c) @@ -40,8 +40,8 @@ func GetCopaing(ctx context.Context, discordID string, guildID string) *CopaingC return cc } -func (c *Copaing) load() error { - err := gokord.DB. +func (c *Copaing) load(ctx context.Context) error { + err := common.GetDB(ctx). Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID). Preload("CopaingXPs"). FirstOrCreate(c). @@ -52,17 +52,18 @@ func (c *Copaing) load() error { return err } -func (c *Copaing) Save() error { - return gokord.DB.Save(c).Error +func (c *Copaing) Save(ctx context.Context) error { + return common.GetDB(ctx).Save(c).Error } -func (c *Copaing) Delete() error { - err := gokord.DB. +func (c *Copaing) Delete(ctx context.Context) error { + db := common.GetDB(ctx) + err := db. Where("copaing_id = ? and guild_id = ?", c.ID, c.GuildID). Delete(&CopaingXP{}). Error if err != nil { return err } - return gokord.DB.Where("guild_id = ? AND discord_id = ?", c.GuildID, c.DiscordID).Delete(c).Error + return db.Where("guild_id = ? AND discord_id = ?", c.GuildID, c.DiscordID).Delete(c).Error } diff --git a/user/state.go b/user/state.go index 2c27fef..12b1de3 100644 --- a/user/state.go +++ b/user/state.go @@ -7,8 +7,9 @@ import ( "sync" "time" - "github.com/anhgelus/gokord" + "git.anhgelus.world/anhgelus/les-copaings-bot/common" "github.com/nyttikord/gokord/state" + "gorm.io/gorm" ) var ErrSyncingUnsavedData = errors.New("trying to sync unsaved data") @@ -33,9 +34,9 @@ type CopaingCached struct { // - save the copaing in the database, use CopaingCached.SaveInDB for that; // - sync the copaing cached, use CopaingCached.Sync for that. // TL;DR: don't use this method, unless you know what are you doing. -func (cc *CopaingCached) copaing() *Copaing { +func (cc *CopaingCached) copaing(ctx context.Context) *Copaing { c := &Copaing{DiscordID: cc.DiscordID, GuildID: cc.GuildID} - if err := c.load(); err != nil { + if err := c.load(ctx); err != nil { panic(err) } return c @@ -45,7 +46,7 @@ func (cc *CopaingCached) Sync(ctx context.Context) error { if cc.mustSave() { return ErrSyncingUnsavedData } - synced := FromCopaing(cc.copaing()) + synced := FromCopaing(cc.copaing(ctx)) synced.XP += cc.XPToAdd synced.XPToAdd = cc.XPToAdd err := synced.Save(ctx) @@ -66,9 +67,9 @@ func (cc *CopaingCached) Save(ctx context.Context) error { } func (cc *CopaingCached) SaveInDB(ctx context.Context) error { - c := cc.copaing() + c := cc.copaing(ctx) c.CopaingXPs = append(c.CopaingXPs, CopaingXP{CopaingID: c.ID, XP: cc.XPToAdd, GuildID: c.GuildID}) - err := c.Save() + err := c.Save(ctx) if err != nil { return err } @@ -77,8 +78,8 @@ func (cc *CopaingCached) SaveInDB(ctx context.Context) error { } func (cc *CopaingCached) Delete(ctx context.Context) error { - c := cc.copaing() - err := c.Delete() + c := cc.copaing(ctx) + err := c.Delete(ctx) if err != nil { return err } @@ -138,12 +139,12 @@ type State struct { storage state.MapStorage[CopaingCached] } -func NewState() *State { +func NewState(db *gorm.DB) *State { state := &State{ storage: state.MapStorage[CopaingCached]{}, } var cs []*Copaing - err := gokord.DB.Find(&cs).Error + err := db.Find(&cs).Error if err != nil { panic(err) } @@ -153,14 +154,12 @@ func NewState() *State { return state } -const ContextKeyState = "state" - func GetState(ctx context.Context) *State { - return ctx.Value(ContextKeyState).(*State) + return ctx.Value(common.KeyCopaingState).(*State) } func SetState(ctx context.Context, state *State) context.Context { - return context.WithValue(ctx, ContextKeyState, state) + return context.WithValue(ctx, common.KeyCopaingState, state) } func deepCopy(src CopaingCached) CopaingCached { @@ -23,7 +23,7 @@ func (c *cXP) GetXP() uint { return c.Cxp } -func (cc *CopaingCached) AddXP(ctx context.Context, s bot.Session, m *user.Member, xp uint, fn func(uint, uint)) { +func (cc *CopaingCached) AddXP(ctx context.Context, dg bot.Session, m *user.Member, xp uint, fn func(uint, uint)) { old := cc.XP pastLevel := exp.Level(old) bot.Logger(ctx).Debug("adding xp", "user", m.DisplayName(), "old", old, "to add", xp) @@ -39,7 +39,7 @@ func (cc *CopaingCached) AddXP(ctx context.Context, s bot.Session, m *user.Membe newLevel := exp.Level(old + xp) if newLevel > pastLevel { fn(old+xp, newLevel) - onNewLevel(ctx, s, m, newLevel) + onNewLevel(ctx, dg, m, newLevel) } } |
