aboutsummaryrefslogtreecommitdiff
path: root/commands
diff options
context:
space:
mode:
Diffstat (limited to 'commands')
-rw-r--r--commands/stats.go46
1 files changed, 20 insertions, 26 deletions
diff --git a/commands/stats.go b/commands/stats.go
index 6900051..116e89f 100644
--- a/commands/stats.go
+++ b/commands/stats.go
@@ -11,6 +11,7 @@ import (
"github.com/anhgelus/gokord/cmd"
"github.com/anhgelus/gokord/logger"
"github.com/bwmarrin/discordgo"
+ "github.com/jackc/pgx/v5/pgtype"
"gonum.org/v1/plot"
"gonum.org/v1/plot/plotter"
"gonum.org/v1/plot/plotutil"
@@ -18,10 +19,9 @@ import (
)
type data struct {
- CreatedAt time.Time
+ CreatedAt *pgtype.Date
XP int
CopaingID int
- copaing *user.Copaing
}
func Stats(s *discordgo.Session, i *discordgo.InteractionCreate, opt cmd.OptionMap, resp *cmd.ResponseBuilder) {
@@ -39,47 +39,41 @@ func Stats(s *discordgo.Session, i *discordgo.InteractionCreate, opt cmd.OptionM
}
var rawData []*data
res := gokord.DB.Raw(
- `SELECT "created_at"::date::text, sum(xp) as xp, copaing_id FROM copaing_xps GROUP BY "created_at"::date `+
- ` WHERE guild_id = ? and created_at < ?`,
+ `SELECT "created_at"::date::text, sum("xp") as xp, "copaing_id" FROM copaing_xps WHERE "guild_id" = ? and "created_at" > ? GROUP BY "created_at"::date, "copaing_id"`,
i.GuildID, exp.TimeStampNDaysBefore(days),
)
- if res.Error != nil {
- logger.Alert("commands/stats.go - Fetching XP data", res.Error.Error(), "guild_id", i.GuildID)
- return
- }
if err := res.Scan(&rawData).Error; err != nil {
- logger.Alert("commands/stats.go - Scanning result", err.Error(), "res")
+ logger.Alert("commands/stats.go - Fetching result", err.Error())
return
}
copaings := map[int]*user.Copaing{}
- stats := map[int]*[]*plotter.XY{}
+ stats := map[int]*[]plotter.XY{}
- for _, s := range rawData {
- c, ok := copaings[s.CopaingID]
- if ok {
- s.copaing = c
- } else {
- if err := gokord.DB.First(s.copaing, s.CopaingID).Error; err != nil {
- logger.Alert("commands/stats.go - Finding copaing", err.Error(), "id", s.CopaingID)
+ for _, raw := range rawData {
+ _, ok := copaings[raw.CopaingID]
+ if !ok {
+ var cp user.Copaing
+ if err := gokord.DB.First(&cp, raw.CopaingID).Error; err != nil {
+ logger.Alert("commands/stats.go - Finding copaing", err.Error(), "id", raw.CopaingID)
return
}
- copaings[s.CopaingID] = s.copaing
+ copaings[raw.CopaingID] = &cp
}
- pts, ok := stats[s.CopaingID]
+ pts, ok := stats[raw.CopaingID]
if !ok {
- pts = &[]*plotter.XY{}
- stats[s.CopaingID] = pts
+ pts = &[]plotter.XY{}
+ stats[raw.CopaingID] = pts
}
- t := float64(s.CreatedAt.Unix()-time.Now().Unix()) / (24 * 60 * 60)
- *pts = append(*pts, &plotter.XY{
+ t := float64(raw.CreatedAt.Time.Unix()-time.Now().Unix()) / (24 * 60 * 60)
+ *pts = append(*pts, plotter.XY{
X: t,
- Y: float64(s.XP),
+ Y: float64(raw.XP),
})
}
p := plot.New()
- p.Title.Text = "XP"
+ p.Title.Text = "Évolution de l'XP"
p.X.Label.Text = "Jours"
p.Y.Label.Text = "XP"
@@ -89,7 +83,7 @@ func Stats(s *discordgo.Session, i *discordgo.InteractionCreate, opt cmd.OptionM
logger.Alert("commands/stats.go - Fetching guild member", err.Error())
return
}
- err = plotutil.AddLinePoints(p, m.DisplayName(), stats[in])
+ err = plotutil.AddLinePoints(p, m.DisplayName(), plotter.XYs(*stats[in]))
if err != nil {
logger.Alert("commands/stats.go - Adding line points", err.Error())
return