forked from syntaxbullet/AuroraBot-discord
chore: add additional stats to terminal
This commit is contained in:
@@ -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>`)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user