From 49a142b076e1972c729fe720a13383d740cda75c Mon Sep 17 00:00:00 2001 From: bdnugget Date: Thu, 29 May 2025 01:00:44 +0200 Subject: [PATCH] Sort stats --- commands/admin.go | 36 ++++++++++++++++++++++++++++-------- metrics/metrics.json | 10 +++++----- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/commands/admin.go b/commands/admin.go index e5c6473..e135650 100644 --- a/commands/admin.go +++ b/commands/admin.go @@ -3,6 +3,7 @@ package commands import ( "fmt" "nignoggobot/metrics" + "sort" "strings" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" @@ -29,18 +30,37 @@ func (StatsCommand) Execute(update tgbotapi.Update, bot *tgbotapi.BotAPI) { } stats := metrics.GetStats() var sb strings.Builder - sb.WriteString("Command usage (all time):\n") - for name, stat := range stats.Commands { - sb.WriteString(fmt.Sprintf("/%s: %d\n", name, stat.AllTime)) + + type cmdStat struct { + Name string + AllTime int + Last30Sum int } - sb.WriteString("\nCommand usage (last 30 days):\n") + var statsList []cmdStat for name, stat := range stats.Commands { - total := 0 + sum := 0 for _, v := range stat.Last30 { - total += v + sum += v } - sb.WriteString(fmt.Sprintf("/%s: %d\n", name, total)) + statsList = append(statsList, cmdStat{Name: name, AllTime: stat.AllTime, Last30Sum: sum}) } + + sort.Slice(statsList, func(i, j int) bool { + return statsList[i].AllTime > statsList[j].AllTime + }) + sb.WriteString("Command usage (all time):\n") + for _, s := range statsList { + sb.WriteString(fmt.Sprintf("/%s: %d\n", s.Name, s.AllTime)) + } + + sort.Slice(statsList, func(i, j int) bool { + return statsList[i].Last30Sum > statsList[j].Last30Sum + }) + sb.WriteString("\nCommand usage (last 30 days):\n") + for _, s := range statsList { + sb.WriteString(fmt.Sprintf("/%s: %d\n", s.Name, s.Last30Sum)) + } + groups, privs, blocked := 0, 0, 0 for _, chat := range stats.Chats { if chat.IsGroup { @@ -61,7 +81,7 @@ type BroadcastCommand struct{} func (BroadcastCommand) Name() string { return "broadcast" } func (BroadcastCommand) Help() string { - return "Broadcast a message to all chats (admin only). Usage: /broadcast " + return "Broadcast a to all chats (admin only)." } func (BroadcastCommand) Execute(update tgbotapi.Update, bot *tgbotapi.BotAPI) { if !IsAdmin(update.Message.From.ID) { diff --git a/metrics/metrics.json b/metrics/metrics.json index 8269e4c..287767c 100644 --- a/metrics/metrics.json +++ b/metrics/metrics.json @@ -1,9 +1,9 @@ { "commands": { "bandname": { - "all_time": 2, + "all_time": 3, "last_30": [ - 2, + 3, 0, 0, 0, @@ -145,9 +145,9 @@ "last_30_day": 20236 }, "stats": { - "all_time": 3, + "all_time": 4, "last_30": [ - 3, + 4, 0, 0, 0, @@ -184,7 +184,7 @@ "chats": { "-1001327903329": { "is_group": true, - "last_active": 1748472713, + "last_active": 1748473223, "blocked": false }, "126131628": {