aboutsummaryrefslogtreecommitdiff
path: root/user
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2026-01-22 21:53:29 +0100
committerAnhgelus Morhtuuzh <william@herges.fr>2026-01-22 21:53:29 +0100
commit3e65b4f6281ddc4039a27a62428db8a95ffc3677 (patch)
treeb1005f908be45aa47da48b604f3863ef23a3d7ea /user
parent8255a2e51454049f3ac1532f6e1125f528691c37 (diff)
refactor(): completely remove old gokord and finish to update everything to use contexts
Diffstat (limited to 'user')
-rw-r--r--user/level.go36
-rw-r--r--user/member.go19
-rw-r--r--user/state.go27
-rw-r--r--user/xp.go4
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 {
diff --git a/user/xp.go b/user/xp.go
index ca08258..d2b7ca6 100644
--- a/user/xp.go
+++ b/user/xp.go
@@ -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)
}
}