aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <anhgelus@anhgelus.world>2025-05-13 16:52:04 +0200
committerAnhgelus Morhtuuzh <anhgelus@anhgelus.world>2025-05-13 16:52:04 +0200
commit61c7bf4567249da0d13c2f738e56754a2c181c99 (patch)
tree2a4f52d3c3e0b3d6f381882392743d07f65bbb5b
parent01bafe9bf1de5be4e770b9500480807d4973d8d6 (diff)
fix(db): wrong relation and bad where condition
-rw-r--r--Dockerfile1
-rw-r--r--README.md4
-rw-r--r--commands/rank.go2
-rw-r--r--main.go2
-rw-r--r--user/member.go16
-rw-r--r--user/xp.go20
6 files changed, 26 insertions, 19 deletions
diff --git a/Dockerfile b/Dockerfile
index 0d8aee4..7ebb090 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -9,5 +9,6 @@ COPY . .
RUN go mod tidy && go build -o app .
ENV TOKEN=""
+ENV TZ="Europe/Paris"
CMD ./app -token $TOKEN
diff --git a/README.md b/README.md
index fe7bc74..7fa11a5 100644
--- a/README.md
+++ b/README.md
@@ -4,11 +4,11 @@ Bot for the private server Discord "Les Copaings"
## Features
-- Levels & XP
+- Levels & CopaingXPs
- Roles management
- Purge command
-### XP
+### CopaingXPs
Functions:
- $xp-message(x;y) = 0.025 x^{1.25}\sqrt{y}+1$ where $x$ is the length of the message and $y$ is the diversity of the
diff --git a/commands/rank.go b/commands/rank.go
index 785b8c8..d079a84 100644
--- a/commands/rank.go
+++ b/commands/rank.go
@@ -45,7 +45,7 @@ func Rank(s *discordgo.Session, i *discordgo.InteractionCreate) {
xp, err := c.GetXP()
if err != nil {
utils.SendAlert(
- "commands/rank.go - Fetching XP",
+ "commands/rank.go - Fetching xp",
err.Error(),
"discord_id",
c.ID,
diff --git a/main.go b/main.go
index b1f137d..a1fc1af 100644
--- a/main.go
+++ b/main.go
@@ -36,7 +36,7 @@ func main() {
panic(err)
}
- err = gokord.DB.AutoMigrate(&user.Copaing{}, &config.GuildConfig{}, &config.XpRole{})
+ err = gokord.DB.AutoMigrate(&user.Copaing{}, &config.GuildConfig{}, &config.XpRole{}, &user.CopaingXP{})
if err != nil {
panic(err)
}
diff --git a/user/member.go b/user/member.go
index cf7c4a4..71a369b 100644
--- a/user/member.go
+++ b/user/member.go
@@ -8,16 +8,16 @@ import (
)
type Copaing struct {
- ID uint `gorm:"primarykey"`
- DiscordID string `gorm:"not null"`
- XP []CopaingXP `gorm:"constraint:OnDelete:SET NULL;"`
- GuildID string `gorm:"not null"`
+ ID uint `gorm:"primarykey"`
+ DiscordID string `gorm:"not null"`
+ CopaingXPs []CopaingXP `gorm:"constraint:OnDelete:SET NULL;"`
+ GuildID string `gorm:"not null"`
}
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
GuildID string `gorm:"not null;"`
CreatedAt time.Time
}
@@ -51,7 +51,7 @@ func GetCopaing(discordID string, guildID string) *Copaing {
func (c *Copaing) Load() error {
return gokord.DB.
Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID).
- Preload("XP").
+ Preload("CopaingXPs").
FirstOrCreate(c).
Error
}
diff --git a/user/xp.go b/user/xp.go
index c2e4d08..fca5754 100644
--- a/user/xp.go
+++ b/user/xp.go
@@ -28,13 +28,13 @@ func (c *cXP) GetXP() uint {
func (c *Copaing) AddXP(s *discordgo.Session, m *discordgo.Member, xp uint, fn func(uint, uint)) {
old, err := c.GetXP()
pastLevel := exp.Level(old)
- c.XP = append(c.XP, CopaingXP{CopaingID: c.ID, XP: xp, GuildID: c.GuildID})
+ c.CopaingXPs = append(c.CopaingXPs, CopaingXP{CopaingID: c.ID, XP: xp, GuildID: c.GuildID})
if err = c.Save(); err != nil {
utils.SendAlert(
"user/xp.go - Saving user",
err.Error(),
- "exp",
- c.XP,
+ "xp",
+ c.CopaingXPs,
"discord_id",
c.DiscordID,
"guild_id",
@@ -56,10 +56,16 @@ func (c *Copaing) GetXP() (uint, error) {
func (c *Copaing) GetXPForDays(n uint) (uint, error) {
xp := uint(0)
- y, m, d := time.Unix(time.Now().Unix()-int64(n*24*60*60), 0).Date()
+ var y, d int
+ var m time.Month
+ if gokord.Debug {
+ y, m, d = time.Unix(time.Now().Unix()-int64(n*24), 0).Date() // reduce time for debug
+ } else {
+ y, m, d = time.Unix(time.Now().Unix()-int64(n*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).
+ Where(fmt.Sprintf("created_at >= '%d-%d-%d' and guild_id = ? and copaing_id = ?", y, m, d), c.GuildID, c.DiscordID).
Rows()
defer rows.Close()
if err != nil {
@@ -69,7 +75,7 @@ func (c *Copaing) GetXPForDays(n uint) (uint, error) {
var cXP CopaingXP
err = gokord.DB.ScanRows(rows, &cXP)
if err != nil {
- utils.SendAlert("user/xp.go - Scanning rows", err.Error(), "discord_id", c.DiscordID, "guild_id", c.GuildID)
+ utils.SendAlert("user/xp.go - Scanning rows", err.Error(), "copaing_id", c.DiscordID, "guild_id", c.GuildID)
continue
}
xp += cXP.XP
@@ -96,7 +102,7 @@ func GetBestXP(guildId string, n uint, d int) ([]CopaingAccess, error) {
var c Copaing
err = gokord.DB.ScanRows(rows, &c)
if err != nil {
- utils.SendAlert("user/xp.go - Scanning rows", err.Error(), "discord_id", c.DiscordID, "guild_id", guildId)
+ utils.SendAlert("user/xp.go - Scanning rows", err.Error(), "guild_id", guildId)
continue
}
wg.Add(1)