Sort stats

This commit is contained in:
bdnugget 2025-05-29 01:00:44 +02:00
parent af1080fb6a
commit 49a142b076
2 changed files with 33 additions and 13 deletions

View File

@ -3,6 +3,7 @@ package commands
import ( import (
"fmt" "fmt"
"nignoggobot/metrics" "nignoggobot/metrics"
"sort"
"strings" "strings"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" 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() stats := metrics.GetStats()
var sb strings.Builder var sb strings.Builder
sb.WriteString("Command usage (all time):\n")
for name, stat := range stats.Commands { type cmdStat struct {
sb.WriteString(fmt.Sprintf("/%s: %d\n", name, stat.AllTime)) Name string
AllTime int
Last30Sum int
} }
sb.WriteString("\nCommand usage (last 30 days):\n") var statsList []cmdStat
for name, stat := range stats.Commands { for name, stat := range stats.Commands {
total := 0 sum := 0
for _, v := range stat.Last30 { 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 groups, privs, blocked := 0, 0, 0
for _, chat := range stats.Chats { for _, chat := range stats.Chats {
if chat.IsGroup { if chat.IsGroup {
@ -61,7 +81,7 @@ type BroadcastCommand struct{}
func (BroadcastCommand) Name() string { return "broadcast" } func (BroadcastCommand) Name() string { return "broadcast" }
func (BroadcastCommand) Help() string { func (BroadcastCommand) Help() string {
return "Broadcast a message to all chats (admin only). Usage: /broadcast <message>" return "Broadcast a <message> to all chats (admin only)."
} }
func (BroadcastCommand) Execute(update tgbotapi.Update, bot *tgbotapi.BotAPI) { func (BroadcastCommand) Execute(update tgbotapi.Update, bot *tgbotapi.BotAPI) {
if !IsAdmin(update.Message.From.ID) { if !IsAdmin(update.Message.From.ID) {

View File

@ -1,9 +1,9 @@
{ {
"commands": { "commands": {
"bandname": { "bandname": {
"all_time": 2, "all_time": 3,
"last_30": [ "last_30": [
2, 3,
0, 0,
0, 0,
0, 0,
@ -145,9 +145,9 @@
"last_30_day": 20236 "last_30_day": 20236
}, },
"stats": { "stats": {
"all_time": 3, "all_time": 4,
"last_30": [ "last_30": [
3, 4,
0, 0,
0, 0,
0, 0,
@ -184,7 +184,7 @@
"chats": { "chats": {
"-1001327903329": { "-1001327903329": {
"is_group": true, "is_group": true,
"last_active": 1748472713, "last_active": 1748473223,
"blocked": false "blocked": false
}, },
"126131628": { "126131628": {