aethex-forge/client/lib/discord-bot-status.ts
Builder.io c360803223 completionId: cgen-5f1041150376469c83f2a68734dc4897
cgen-5f1041150376469c83f2a68734dc4897
2025-11-09 01:36:22 +00:00

65 lines
1.6 KiB
TypeScript

export interface BotHealthStatus {
status: "online" | "offline";
guilds: number;
commands: number;
uptime: number;
timestamp: string;
error?: string;
}
export async function checkBotHealth(): Promise<BotHealthStatus> {
try {
const response = await fetch("/api/discord/bot-health", {
method: "GET",
headers: {
"Content-Type": "application/json",
},
});
if (!response.ok) {
return {
status: "offline",
guilds: 0,
commands: 0,
uptime: 0,
timestamp: new Date().toISOString(),
error: `HTTP ${response.status}: Failed to reach bot`,
};
}
const data = await response.json();
return {
status: data.status || "online",
guilds: data.guilds || 0,
commands: data.commands || 0,
uptime: data.uptime || 0,
timestamp: data.timestamp || new Date().toISOString(),
};
} catch (error) {
console.error("[Discord Bot Status] Error checking health:", error);
return {
status: "offline",
guilds: 0,
commands: 0,
uptime: 0,
timestamp: new Date().toISOString(),
error:
error instanceof Error
? error.message
: "Failed to reach bot health endpoint",
};
}
}
export function formatUptime(seconds: number): string {
const days = Math.floor(seconds / 86400);
const hours = Math.floor((seconds % 86400) / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const parts = [];
if (days > 0) parts.push(`${days}d`);
if (hours > 0) parts.push(`${hours}h`);
if (minutes > 0) parts.push(`${minutes}m`);
return parts.length > 0 ? parts.join(" ") : "< 1m";
}