chore: add additional stats to terminal

This commit is contained in:
syntaxbullet
2026-01-06 21:05:51 +01:00
parent d29a1ec2b7
commit 4a1e72c5f3

View File

@@ -10,8 +10,8 @@ import {
} from "discord.js"; } from "discord.js";
import { AuroraClient } from "@/lib/BotClient"; import { AuroraClient } from "@/lib/BotClient";
import { DrizzleClient } from "@/lib/DrizzleClient"; import { DrizzleClient } from "@/lib/DrizzleClient";
import { users, transactions, lootdrops } from "@/db/schema"; import { users, transactions, lootdrops, inventory } from "@/db/schema";
import { desc } from "drizzle-orm"; import { desc, sql } from "drizzle-orm";
import { config, saveConfig } from "@/lib/config"; import { config, saveConfig } from "@/lib/config";
// Color palette for containers (hex as decimal) // Color palette for containers (hex as decimal)
@@ -98,6 +98,23 @@ export const terminalService = {
const guild = AuroraClient.guilds.cache.first(); const guild = AuroraClient.guilds.cache.first();
const memberCount = guild?.memberCount ?? totalUsers; const memberCount = guild?.memberCount ?? totalUsers;
// Additional metrics
const avgLevel = totalUsers > 0
? Math.round(allUsers.reduce((acc, u) => acc + (u.level || 1), 0) / totalUsers)
: 1;
const topStreak = allUsers.reduce((max, u) => Math.max(max, u.dailyStreak || 0), 0);
// Items in circulation
const itemsResult = await DrizzleClient
.select({ total: sql<string>`COALESCE(SUM(${inventory.quantity}), 0)` })
.from(inventory);
const totalItems = Number(itemsResult[0]?.total || 0);
// Last command timestamp
const lastCmd = AuroraClient.lastCommandTimestamp
? `<t:${Math.floor(AuroraClient.lastCommandTimestamp / 1000)}:R>`
: "*Never*";
// Leaderboards // Leaderboards
const topLevels = [...allUsers] const topLevels = [...allUsers]
.sort((a, b) => (b.level || 0) - (a.level || 0)) .sort((a, b) => (b.level || 0) - (a.level || 0))
@@ -170,12 +187,20 @@ export const terminalService = {
`🪙 **Economy** ${totalWealth.toLocaleString()} AU` `🪙 **Economy** ${totalWealth.toLocaleString()} AU`
].join(" • "); ].join(" • ");
const secondaryStats = [
`📦 **Items** ${totalItems.toLocaleString()}`,
`📈 **Avg Lvl** ${avgLevel}`,
`🔥 **Top Streak** ${topStreak}d`,
`⚡ **Last Cmd** ${lastCmd}`
].join(" • ");
const headerContainer = new ContainerBuilder() const headerContainer = new ContainerBuilder()
.setAccentColor(COLORS.HEADER) .setAccentColor(COLORS.HEADER)
.addSectionComponents(headerSection) .addSectionComponents(headerSection)
.addSeparatorComponents(new SeparatorBuilder().setSpacing(SeparatorSpacingSize.Small)) .addSeparatorComponents(new SeparatorBuilder().setSpacing(SeparatorSpacingSize.Small))
.addTextDisplayComponents( .addTextDisplayComponents(
new TextDisplayBuilder().setContent(statsText), new TextDisplayBuilder().setContent(statsText),
new TextDisplayBuilder().setContent(secondaryStats),
new TextDisplayBuilder().setContent(`-# Updated <t:${now}:R>`) new TextDisplayBuilder().setContent(`-# Updated <t:${now}:R>`)
); );