82 lines
3.4 KiB
JavaScript
82 lines
3.4 KiB
JavaScript
const { FetchServerSettings } = require('../util/NitradoAPI');
|
|
const { Missions } = require('../database/destinations');
|
|
const { EmbedBuilder } = require('discord.js');
|
|
|
|
module.exports = {
|
|
name: "player-list",
|
|
debug: false,
|
|
global: false,
|
|
description: "Get current online players",
|
|
usage: "",
|
|
permissions: {
|
|
channel: ["VIEW_CHANNEL", "SEND_MESSAGES", "EMBED_LINKS"],
|
|
member: [],
|
|
},
|
|
options: [],
|
|
SlashCommand: {
|
|
/**
|
|
*
|
|
* @param {require("../structures/DayzRBot")} client
|
|
* @param {import("discord.js").Message} message
|
|
* @param {string[]} args
|
|
* @param {*} param3
|
|
*/
|
|
run: async (client, interaction, args, { GuildDB }, start) => {
|
|
|
|
if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID) || !client.exists(GuildDB.Nitrado.UserID) || !client.exists(GuildDB.Nitrado.Auth)) {
|
|
const warnNitradoNotInitialized = new EmbedBuilder()
|
|
.setColor(client.config.Colors.Yellow)
|
|
.setDescription("**WARNING:** The DayZ Nitrado Server has not been configured for this guild yet. This command or feature is currently unavailable.");
|
|
|
|
return interaction.send({ embeds: [warnNitradoNotInitialized], flags: (1 << 6) });
|
|
}
|
|
|
|
await interaction.deferReply();
|
|
|
|
const data = await FetchServerSettings(GuildDB.Nitrado, client, 'commands/player-list.js'); // Fetch server status
|
|
const e = data && data !== 1; // Check if data exists
|
|
|
|
const hostname = e ? data.data.gameserver.settings.config.hostname : 'N/A';
|
|
const map = e ? Missions[data.data.gameserver.settings.config.mission] : 'N/A';
|
|
const status = e ? data.data.gameserver.status : 'N/A';
|
|
const slots = e ? data.data.gameserver.slots : 'N/A';
|
|
const playersOnline = e ? data.data.gameserver.query.player_current : 'N/A';
|
|
|
|
const Statuses = {
|
|
"started": {emoji: "🟢", text: "Active"},
|
|
"stopped": {emoji: "🔴", text: "Stopped"},
|
|
"restarting": {emoji: "↻", text: "Restarting"},
|
|
};
|
|
|
|
const emojiStatus = e ? Statuses[status].emoji : "❓";
|
|
const textStatus = e ? Statuses[status].text : "Unknown Status";
|
|
|
|
let activePlayers = await client.dbo.collection("players").find({"connected": true}).toArray();
|
|
|
|
let des = activePlayers.length > 0 ? `` : `**No Players Online**`;
|
|
for (let i = 0; i < activePlayers.length; i++) {
|
|
des += `**- ${activePlayers[i].gamertag}**\n`;
|
|
}
|
|
|
|
const nodes = activePlayers.length === 0;
|
|
const serverEmbed = new EmbedBuilder()
|
|
.setColor(client.config.Colors.Default)
|
|
.setTitle(`Online List - \` ${playersOnline === undefined ? activePlayers.length : playersOnline} \` Player${playersOnline !== 1 ? 's' : ''} Online`)
|
|
.addFields(
|
|
{ name: 'Server:', value: `\` ${hostname} \``, inline: false },
|
|
{ name: 'Map:', value: `\` ${map} \``, inline: true },
|
|
{ name: 'Status:', value: `\` ${emojiStatus} ${textStatus} \``, inline: true },
|
|
{ name: 'Slots:', value: `\` ${slots} \``, inline: true }
|
|
);
|
|
|
|
const activePlayersEmbed = new EmbedBuilder()
|
|
.setColor(client.config.Colors.Default)
|
|
.setTimestamp()
|
|
.setTitle(`Players Online:`)
|
|
.setDescription(des || (nodes ? "No Players Online :(" : ""));
|
|
|
|
return interaction.editReply({ embeds: [serverEmbed, activePlayersEmbed] });
|
|
},
|
|
},
|
|
}
|