const { SlashCommandBuilder, TextDisplayBuilder, MessageFlags, SeparatorBuilder, SeparatorSpacingSize, ContainerBuilder, } = require('discord.js'); const mongoose = require('mongoose'); const dbStatus = mongoose.connection.readyState; function getDbStatus(state) { switch (state) { case 0: return 'Disconnected'; case 1: return 'Connected'; default: return 'Unknown'; } } async function getDbPing() { const start = Date.now(); await mongoose.connection.db.admin().ping(); return Date.now() - start; } module.exports = { data: new SlashCommandBuilder() .setName('ping') .setDescription('Check the bot\'s latency.'), async execute(interaction, client) { const ping = Date.now() - interaction.createdTimestamp; const latency = Math.abs(ping); const latencyFormatted = `${latency.toString().substring(0, 2)}ms`; const dbState = mongoose.connection.readyState; const dbStatus = getDbStatus(dbState); let dbPing = 'N/A'; try { const pingValue = await mongoose.connection.db.admin().ping(); const start = Date.now(); await mongoose.connection.db.admin().ping(); dbPing = `${Date.now() - start}ms`; } catch (err) { dbPing = 'Error pinging database'; } // embed const container = new ContainerBuilder() const topText = new TextDisplayBuilder() .setContent(`# 🏓 Pong!\n**Latency:** \`${latencyFormatted}\``) container.addTextDisplayComponents(topText); const seperator = new SeparatorBuilder() .setSpacing(SeparatorSpacingSize.Small) container.addSeparatorComponents(seperator); const bottomText = new TextDisplayBuilder() .setContent(`**Database Status:** \`${dbStatus}\`\n**Database Latency** \`${dbPing}\``) container.addTextDisplayComponents(bottomText); await interaction.reply({ flags: MessageFlags.IsComponentsV2 | MessageFlags.Ephemeral, components: [container], }); } };