From 5d945e489305ed081e60b1f14cb37c18554c64ea Mon Sep 17 00:00:00 2001 From: Braeden Sowinski Date: Sat, 2 Sep 2023 15:06:36 -0700 Subject: [PATCH] update/player-list-handler --- package.json | 2 +- structures/DayzArmbands.js | 2 ++ util/LogsHandler.js | 59 ++++++++++++++++++++++++++++++++------ 3 files changed, 54 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 631ddfb..0e2deab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dayz-armbands", - "version": "8.10.5", + "version": "8.11.0", "description": "A General Purpose Discord Bot for DayZ Servers.", "main": "index.js", "nodemonConfig": { diff --git a/structures/DayzArmbands.js b/structures/DayzArmbands.js index 0e858b7..bb4e965 100644 --- a/structures/DayzArmbands.js +++ b/structures/DayzArmbands.js @@ -312,6 +312,7 @@ class DayzArmbands extends Client { } sendError(Channel, Error) { + this.error(Error); let embed = new EmbedBuilder() .setColor(this.config.Red) .setDescription(Error); @@ -319,6 +320,7 @@ class DayzArmbands extends Client { Channel.send(embed); } + // Handles internal errors for slash commands. E.g failed to update database from slash command. sendInternalError(Interaction, Error) { this.error(Error); const embed = new EmbedBuilder() diff --git a/util/LogsHandler.js b/util/LogsHandler.js index 6045877..0d6bac2 100644 --- a/util/LogsHandler.js +++ b/util/LogsHandler.js @@ -163,26 +163,69 @@ module.exports = { HandleActivePlayersList: async (client, guildId) => { client.activePlayersTick = 0; // reset hour tick + const res = await fetch(`https://api.nitrado.net/services/${client.config.Nitrado.ServerID}/gameservers`, { + headers: { + "Authorization": client.config.Nitrado.Auth + } + }).then(response => + response.json().then(data => data) + ).then(res => res); + + + let hostname = res.data.gameserver.settings.config.hostname; + let map = res.data.gameserver.settings.config.mission.slice(12); + let status = res.data.gameserver.status; + let slots = res.data.gameserver.slots; + + let statusEmoji; + let statusText; + if (status === "started") { + statusEmoji = "🟢"; + statusText = "Active"; + } else if (status === "stopped") { + statusEmoji = "🔴"; + statusText = "Stopped"; + } else if (status === "restarting") { + statusEmoji = "↻"; + statusText = "Restarting"; + } else { + statusEmoji = "❓"; // Unknown status + statusText = "Unknown Status"; + } + let guild = await client.GetGuild(guildId); if (!client.exists(guild.playerstats)) guild.playerstats = []; if (!client.exists(guild.activePlayersChannel)) return; const channel = client.channels.cache.get(guild.activePlayersChannel); - let activePlayers = guild.playerstats.filter(p => p.connected == true); - if (activePlayers.length == 0) return; - let des = ``; for (let i = 0; i < activePlayers.length; i++) { des += `**- ${activePlayers[i].gamertag}**\n`; } - + const nodes = activePlayers.length === 0; + const PlayersEmbed = new EmbedBuilder() + .setThumbnail(client.config.icon.IconURL) + .setColor(client.config.Colors.Default) + .setTitle(`Online List \` ${activePlayers.length} \` Player${activePlayers.length>1?'s':''} Online`) + .addFields( + { name: 'Server🎮:', value: `\` ${hostname} \``, inline: false }, + { name: 'Map🌎:', value: `\` ${map} \``, inline: true }, + { name: 'Status:', value: `\` ${statusEmoji} ${statusText} \``, inline: true }, + { name: 'Slots:', value: `\` ${slots} \``, inline: true } + ); + const activePlayersEmbed = new EmbedBuilder() .setColor(client.config.Colors.Default) - .setTitle(`Online List - ${activePlayers.length} Player${activePlayers.length>1?'s':''} Online`) - .setDescription(des); - - return channel.send({ embeds: [activePlayersEmbed] }); + .setTimestamp() + .setTitle(`Players Online:`) + .setDescription(des || (nodes ? "No Players Online :(" : "")) + + return channel.send({ embeds: [PlayersEmbed, activePlayersEmbed] }).then(sentMessage => { + setTimeout(() => { + sentMessage.delete().catch(error => client.sendError(channel, error)); + }, 360000); + }); } } \ No newline at end of file