Advertisement
spiralvibes

Made By ZayDocs | Maverick Team

Oct 23rd, 2024
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
  2.  
  3. module.exports = {
  4.     data: new SlashCommandBuilder()
  5.         .setName('ping')
  6.         .setDescription('Return latency details and additional server info'),
  7.  
  8.     run: async (interaction) => {
  9.         try {
  10.             const updateLatencies = () => {
  11.                 const webLatency = Date.now() - interaction.createdTimestamp;
  12.                 const apiLatency = interaction.client.ws.ping;
  13.                 const uptime = interaction.client.uptime;
  14.                 return { webLatency, apiLatency, totalLatency: webLatency + apiLatency, uptime };
  15.             };
  16.  
  17.             const getColor = (latency) => {
  18.                 if (latency < 200) return 0x43B581; // Green
  19.                 else if (latency < 500) return 0xF3C35D; // Yellow
  20.                 return 0xF04747; // Red
  21.             };
  22.  
  23.             const formatUptime = (ms) => {
  24.                 const totalSeconds = Math.floor(ms / 1000);
  25.                 const days = Math.floor(totalSeconds / (3600 * 24));
  26.                 const hours = Math.floor((totalSeconds % (3600 * 24)) / 3600);
  27.                 const minutes = Math.floor((totalSeconds % 3600) / 60);
  28.                 const seconds = totalSeconds % 60;
  29.                 return `${days}d ${hours}h ${minutes}m ${seconds}s`;
  30.             };
  31.  
  32.             const { webLatency, apiLatency, totalLatency, uptime } = updateLatencies();
  33.             const botStartedAtTimestamp = Math.floor(interaction.client.readyTimestamp / 1000);
  34.             const botStartedAt = `<t:${botStartedAtTimestamp}:F>`;
  35.  
  36.             // Initial embed with additional information
  37.             const pingEmbed = new EmbedBuilder()
  38.                 .setTitle('Latency and Server Information')
  39.                 .setColor(getColor(totalLatency))
  40.                 .addFields(
  41.                     {
  42.                         name: '🌐 Websocket Latency:',
  43.                         value: `\`\`\`yml\n${webLatency}ms\`\`\``,
  44.                         inline: true,
  45.                     },
  46.                     {
  47.                         name: '🚀 API Latency:',
  48.                         value: `\`\`\`yml\n${apiLatency}ms\`\`\``,
  49.                         inline: true,
  50.                     },
  51.                     {
  52.                         name: '⏰ Bot Started At:',
  53.                         value: `${botStartedAt}`,
  54.                         inline: false,
  55.                     },
  56.                     {
  57.                         name: '🕒 Server Uptime:',
  58.                         value: `\`\`\`yml\n${formatUptime(uptime)}\`\`\``,
  59.                         inline: false,
  60.                     }
  61.                 )
  62.                 .setFooter({ text: 'Made by Rivvix Team' })
  63.                 .setTimestamp();
  64.  
  65.             const buttons = new ActionRowBuilder()
  66.                 .addComponents(
  67.                     new ButtonBuilder()
  68.                         .setCustomId('reload_ping')
  69.                         .setLabel('Reload Latency')
  70.                         .setStyle(ButtonStyle.Primary)
  71.                         .setEmoji('🔄'),
  72.                     new ButtonBuilder()
  73.                         .setLabel('Invite Rivvix')
  74.                         .setStyle(ButtonStyle.Link)
  75.                         .setEmoji('🔗')
  76.                         .setURL(`https://discord.com/oauth2/authorize?client_id=${interaction.client.user.id}&permissions=8&scope=bot%20applications.commands`)
  77.                 );
  78.  
  79.             const reply = await interaction.reply({ embeds: [pingEmbed], components: [buttons], fetchReply: true });
  80.  
  81.             const filter = i => i.customId === 'reload_ping' && i.user.id === interaction.user.id;
  82.             const collector = reply.createMessageComponentCollector({ filter, time: 30000 });
  83.  
  84.             collector.on('collect', async i => {
  85.                 const { webLatency, apiLatency, totalLatency, uptime } = updateLatencies();
  86.  
  87.                 pingEmbed.setColor(getColor(totalLatency))
  88.                     .fields = [
  89.                         {
  90.                             name: '🌐 Websocket Latency:',
  91.                             value: `\`\`\`yml\n${webLatency}ms\`\`\``,
  92.                             inline: true,
  93.                         },
  94.                         {
  95.                             name: '🚀 API Latency:',
  96.                             value: `\`\`\`yml\n${apiLatency}ms\`\`\``,
  97.                             inline: true,
  98.                         },
  99.                         {
  100.                             name: '⏰ Bot Started At:',
  101.                             value: `\`\`\`yml\n${botStartedAt}\`\`\``,
  102.                             inline: false,
  103.                         },
  104.                         {
  105.                             name: '🕒 Server Uptime:',
  106.                             value: `\`\`\`yml\n${formatUptime(uptime)}\`\`\``,
  107.                             inline: false,
  108.                         }
  109.                     ];
  110.  
  111.                 await i.update({ embeds: [pingEmbed], components: [buttons], ephemeral: true });
  112.             });
  113.  
  114.             collector.on('end', () => {
  115.                 buttons.components.forEach(button => button.setDisabled(true));
  116.                 interaction.followUp({ content: 'Button interaction ended. Click "Reload" to refresh latency', components: [buttons], ephemeral: true });
  117.             });
  118.         } catch (error) {
  119.             console.error(error);
  120.             await interaction.reply({ content: 'An error occurred while processing your command', ephemeral: true });
  121.         }
  122.     },
  123. };
  124.  
  125.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement