diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d721385 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.go -text diff=golang \ No newline at end of file diff --git a/bot.go b/bot.go index d83f892..07109ff 100644 --- a/bot.go +++ b/bot.go @@ -78,12 +78,42 @@ func memberHasRole(session *discordgo.Session, guildID string, userID string, al } func totalEntries(ctx context.Context, database *sql.DB) (string, error) { - total, err := getCount(ctx, database) + players, err := getPlayers(ctx, database) if err != nil { return "", fmt.Errorf("failed to get count: %w", err) } + totalPlayers := 5 + totals := map[string]int{} + for _, player := range players { + totalPlayers++ + + for _, attr := range player.Attributes { + if _, ok := totals[attr]; !ok { + totals[attr] = 0 + } + totals[attr]++ + } + } + + maxLen := 0 + var keys []string //nolint:prealloc + for key := range totals { + keys = append(keys, key) + if len(key) > maxLen { + maxLen = len(key) + } + } + slices.Sort(keys) + + var builder strings.Builder + builder.WriteString("```") + builder.WriteString(fmt.Sprintf("total%s: %d\n", strings.Repeat(" ", maxLen-5), totalPlayers)) + for _, key := range keys { + builder.WriteString(fmt.Sprintf("%s%s: %d\n", key, strings.Repeat(" ", maxLen-len(key)), totals[key])) + } + builder.WriteString("```") - return fmt.Sprintf("Total steamids tracked: %d", total), nil + return builder.String(), nil } func addEntry(ctx context.Context, database *sql.DB, sid steamid.SteamID, msg []string, author int64) (string, error) { diff --git a/db.go b/db.go index 4fc0931..ec87e77 100644 --- a/db.go +++ b/db.go @@ -129,16 +129,6 @@ func getPlayers(ctx context.Context, db *sql.DB) ([]Player, error) { return players, nil } -func getCount(ctx context.Context, db *sql.DB) (int, error) { - var total int - - if err := db.QueryRowContext(ctx, "select count(*) from player").Scan(&total); err != nil { - return -1, err - } - - return total, nil -} - func addPlayer(ctx context.Context, db *sql.DB, player Player, author int64) error { const query = ` INSERT INTO player (steamid, attributes, last_seen, last_name, author, created_on)