diff --git a/src/modules/terminal/terminal.service.ts b/src/modules/terminal/terminal.service.ts index e496a03..f8fbec9 100644 --- a/src/modules/terminal/terminal.service.ts +++ b/src/modules/terminal/terminal.service.ts @@ -10,8 +10,8 @@ import { } from "discord.js"; import { AuroraClient } from "@/lib/BotClient"; import { DrizzleClient } from "@/lib/DrizzleClient"; -import { users, transactions, lootdrops } from "@/db/schema"; -import { desc } from "drizzle-orm"; +import { users, transactions, lootdrops, inventory } from "@/db/schema"; +import { desc, sql } from "drizzle-orm"; import { config, saveConfig } from "@/lib/config"; // Color palette for containers (hex as decimal) @@ -98,6 +98,23 @@ export const terminalService = { const guild = AuroraClient.guilds.cache.first(); 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`COALESCE(SUM(${inventory.quantity}), 0)` }) + .from(inventory); + const totalItems = Number(itemsResult[0]?.total || 0); + + // Last command timestamp + const lastCmd = AuroraClient.lastCommandTimestamp + ? `` + : "*Never*"; + // Leaderboards const topLevels = [...allUsers] .sort((a, b) => (b.level || 0) - (a.level || 0)) @@ -170,12 +187,20 @@ export const terminalService = { `🪙 **Economy** ${totalWealth.toLocaleString()} AU` ].join(" • "); + const secondaryStats = [ + `📦 **Items** ${totalItems.toLocaleString()}`, + `📈 **Avg Lvl** ${avgLevel}`, + `🔥 **Top Streak** ${topStreak}d`, + `⚡ **Last Cmd** ${lastCmd}` + ].join(" • "); + const headerContainer = new ContainerBuilder() .setAccentColor(COLORS.HEADER) .addSectionComponents(headerSection) .addSeparatorComponents(new SeparatorBuilder().setSpacing(SeparatorSpacingSize.Small)) .addTextDisplayComponents( new TextDisplayBuilder().setContent(statsText), + new TextDisplayBuilder().setContent(secondaryStats), new TextDisplayBuilder().setContent(`-# Updated `) );