Introduces a new server mode configuration system (Federation/Standalone) with associated command changes, dynamic status rotation for the bot, and adds new commands and features. Replit-Commit-Author: Agent Replit-Commit-Session-Id: aed2e46d-25bb-4b73-81a1-bb9e8437c261 Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Event-Id: b08e6ba5-7498-4b9f-b1c9-7dc11b362ddd Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3bdfff67-975a-46ad-9845-fbb6b4a4c4b5/aed2e46d-25bb-4b73-81a1-bb9e8437c261/R9PkDi8 Replit-Helium-Checkpoint-Created: true
94 lines
3.8 KiB
JavaScript
94 lines
3.8 KiB
JavaScript
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
|
|
const { getServerMode, getEmbedColor, getModeDisplayName, getModeEmoji } = require('../utils/modeHelper');
|
|
|
|
module.exports = {
|
|
data: new SlashCommandBuilder()
|
|
.setName('status')
|
|
.setDescription('View network status and bot health'),
|
|
|
|
async execute(interaction, supabase, client) {
|
|
const guildCount = client.guilds.cache.size;
|
|
const memberCount = client.guilds.cache.reduce((sum, g) => sum + g.memberCount, 0);
|
|
const uptime = Math.floor(process.uptime());
|
|
const hours = Math.floor(uptime / 3600);
|
|
const minutes = Math.floor((uptime % 3600) / 60);
|
|
const seconds = uptime % 60;
|
|
|
|
const serverMode = supabase ? await getServerMode(supabase, interaction.guildId) : 'standalone';
|
|
const embedColor = getEmbedColor(serverMode);
|
|
|
|
let federatedCount = 0;
|
|
let standaloneCount = 0;
|
|
|
|
if (supabase) {
|
|
try {
|
|
const { data: configs } = await supabase
|
|
.from('server_config')
|
|
.select('mode');
|
|
|
|
if (configs) {
|
|
federatedCount = configs.filter(c => c.mode === 'federated' || !c.mode).length;
|
|
standaloneCount = configs.filter(c => c.mode === 'standalone').length;
|
|
}
|
|
} catch (e) {
|
|
federatedCount = guildCount;
|
|
}
|
|
}
|
|
|
|
const realmStatus = [];
|
|
const REALM_GUILDS = client.REALM_GUILDS || {};
|
|
|
|
for (const [realm, guildId] of Object.entries(REALM_GUILDS)) {
|
|
if (!guildId) {
|
|
realmStatus.push({ name: realm.charAt(0).toUpperCase() + realm.slice(1), status: 'Not configured', members: 0 });
|
|
continue;
|
|
}
|
|
|
|
const guild = client.guilds.cache.get(guildId);
|
|
if (guild) {
|
|
realmStatus.push({ name: realm.charAt(0).toUpperCase() + realm.slice(1), status: 'Online', members: guild.memberCount });
|
|
} else {
|
|
realmStatus.push({ name: realm.charAt(0).toUpperCase() + realm.slice(1), status: 'Offline', members: 0 });
|
|
}
|
|
}
|
|
|
|
const realmFields = realmStatus.map(r => ({
|
|
name: r.name,
|
|
value: `${r.status === 'Online' ? '🟢' : r.status === 'Offline' ? '🔴' : '⚪'} ${r.status}${r.members > 0 ? ` (${r.members.toLocaleString()})` : ''}`,
|
|
inline: true,
|
|
}));
|
|
|
|
const embed = new EmbedBuilder()
|
|
.setColor(embedColor)
|
|
.setTitle('⚔️ Warden Status')
|
|
.setDescription(`${getModeEmoji(serverMode)} This server is running in **${getModeDisplayName(serverMode)}** mode`)
|
|
.addFields(
|
|
{ name: 'Total Servers', value: `${guildCount}`, inline: true },
|
|
{ name: 'Total Members', value: `${memberCount.toLocaleString()}`, inline: true },
|
|
{ name: 'Uptime', value: `${hours}h ${minutes}m ${seconds}s`, inline: true },
|
|
{ name: 'Federated Servers', value: `🌐 ${federatedCount}`, inline: true },
|
|
{ name: 'Standalone Servers', value: `🏠 ${standaloneCount}`, inline: true },
|
|
{ name: '\u200b', value: '\u200b', inline: true }
|
|
);
|
|
|
|
if (serverMode === 'federated' && realmFields.length > 0) {
|
|
embed.addFields(
|
|
{ name: '── Federation Realms ──', value: '\u200b', inline: false },
|
|
...realmFields
|
|
);
|
|
}
|
|
|
|
embed.addFields(
|
|
{ name: '── Security ──', value: '\u200b', inline: false },
|
|
{ name: 'Sentinel Status', value: client.heatMap?.size > 0 ? `⚠️ Monitoring ${client.heatMap.size} user(s)` : '🛡️ All Clear', inline: true },
|
|
{ name: 'Active Tickets', value: `${client.activeTickets?.size || 0}`, inline: true },
|
|
{ name: 'Federation Mappings', value: `${client.federationMappings?.size || 0}`, inline: true }
|
|
);
|
|
|
|
embed
|
|
.setFooter({ text: `Warden • ${getModeDisplayName(serverMode)} Mode` })
|
|
.setTimestamp();
|
|
|
|
await interaction.reply({ embeds: [embed] });
|
|
},
|
|
};
|