diff options
| author | Anhgelus Morhtuuzh <anhgelus@anhgelus.world> | 2025-05-13 14:11:11 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <anhgelus@anhgelus.world> | 2025-05-13 14:11:11 +0200 |
| commit | 799df74fcda5266fd295b49fc759c605c815cad9 (patch) | |
| tree | 27e5a2196877783f76fc9eef613a05125b1c773f /user | |
| parent | e0a8f6634424f10a22b0a0740e0bbc17534eaa0e (diff) | |
feat(xp): new add
Diffstat (limited to 'user')
| -rw-r--r-- | user/member.go | 34 | ||||
| -rw-r--r-- | user/xp.go | 13 |
2 files changed, 37 insertions, 10 deletions
diff --git a/user/member.go b/user/member.go index dc93979..b61aa76 100644 --- a/user/member.go +++ b/user/member.go @@ -4,6 +4,8 @@ import ( "fmt" "github.com/anhgelus/gokord" "github.com/anhgelus/gokord/utils" + "github.com/anhgelus/les-copaings-bot/config" + "time" ) type Copaing struct { @@ -14,9 +16,11 @@ type Copaing struct { } type CopaingXP struct { - ID uint `gorm:"primarykey"` - XP uint `gorm:"default:0"` - CopaingID uint `gorm:"not null;constraint:OnDelete:CASCADE;"` + ID uint `gorm:"primarykey"` + XP uint `gorm:"default:0"` + CopaingID uint `gorm:"not null;constraint:OnDelete:CASCADE;"` + GuildID string `gorm:"not null;"` + CreatedAt time.Time } const ( @@ -48,6 +52,30 @@ func (c *Copaing) Load() error { Error } +func (c *Copaing) GetXP() (uint, error) { + cfg := config.GetGuildConfig(c.GuildID) + xp := uint(0) + y, m, d := time.Unix(time.Now().Unix()-int64(cfg.DaysXPRemains*24*60*60), 0).Date() + rows, err := gokord.DB. + Model(&CopaingXP{}). + Where(fmt.Sprintf("created_at >= '%d-%d-%d' and guild_id = ? and discord_id = ?", y, m, d), c.GuildID, c.DiscordID). + Rows() + defer rows.Close() + if err != nil { + return 0, err + } + for rows.Next() { + var cXP CopaingXP + err = gokord.DB.ScanRows(rows, &cXP) + if err != nil { + utils.SendAlert("user/member.go - Scaning rows", err.Error(), "discord_id", c.DiscordID, "guild_id", c.GuildID) + continue + } + xp += cXP.XP + } + return xp, nil +} + func (c *Copaing) Save() error { return gokord.DB.Save(c).Error } @@ -7,10 +7,10 @@ import ( ) func (c *Copaing) AddXP(s *discordgo.Session, m *discordgo.Member, xp uint, fn func(uint, uint)) { - pastLevel := exp.Level(c.XP) - old := c.XP - c.XP += xp - if err := c.Save(); err != nil { + old, err := c.GetXP() + pastLevel := exp.Level(old) + c.XP = append(c.XP, CopaingXP{CopaingID: c.ID, XP: xp, GuildID: c.GuildID}) + if err = c.Save(); err != nil { utils.SendAlert( "user/xp.go - Saving user", err.Error(), @@ -21,12 +21,11 @@ func (c *Copaing) AddXP(s *discordgo.Session, m *discordgo.Member, xp uint, fn f "guild_id", c.GuildID, ) - c.XP = old return } - newLevel := exp.Level(c.XP) + newLevel := exp.Level(old + xp) if newLevel > pastLevel { - fn(c.XP, newLevel) + fn(old+xp, newLevel) onNewLevel(s, m, newLevel) } } |
