fix/player-list command + auto player list + refactors for issue #28
This commit is contained in:
6 files changed
+85
-63
No files matched your search
+37
-4
@@ -1,3 +1,5 @@
|
||||
const { FetchServerSettings } = require('../util/NitradoAPI');
|
||||
const { Missions } = require('../database/destinations');
|
||||
const { EmbedBuilder } = require('discord.js');
|
||||
|
||||
module.exports = {
|
||||
@@ -29,19 +31,50 @@ module.exports = {
|
||||
return interaction.send({ embeds: [warnNitradoNotInitialized], flags: (1 << 6) });
|
||||
}
|
||||
|
||||
let activePlayers = await client.dbo.collection("players").find({"connected": true});
|
||||
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 = Missions[data.data.gameserver.settings.config.mission];
|
||||
const status = e ? data.data.gameserver.status : 'N/A';
|
||||
const slots = e ? data.data.gameserver.slots : 'N/A';
|
||||
const playersOnline = data.data.gameserver.query.player_current;
|
||||
|
||||
const Statuses = {
|
||||
"started": {emoji: "🟢", text: "Active"},
|
||||
"stopped": {emoji: "🔴", text: "Stopped"},
|
||||
"restarting": {emoji: "↻", text: "Restarting"},
|
||||
};
|
||||
|
||||
const emojiStatus = Statuses[status].emoji || "❓";
|
||||
const textStatus = 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)
|
||||
.setTitle(`Online List - ${activePlayers.length} Player${(activePlayers.length>1||activePlayers.length==0)?'s':''} Online`)
|
||||
.setDescription(des);
|
||||
.setTimestamp()
|
||||
.setTitle(`Players Online:`)
|
||||
.setDescription(des || (nodes ? "No Players Online :(" : ""));
|
||||
|
||||
return interaction.send({ embeds: [activePlayersEmbed] });
|
||||
return interaction.send({ embeds: [serverEmbed, activePlayersEmbed] });
|
||||
},
|
||||
},
|
||||
}
|
||||
+6
-21
@@ -97,21 +97,6 @@ module.exports = {
|
||||
if (GuildDB.hasBotAdmin && interaction.member.roles.filter(e => GuildDB.botAdminRoles.indexOf(e) !== -1).length > 0) canUseCommand = true;
|
||||
if (!canUseCommand) return interaction.send({ content: 'You don\'t have the permissions to use this command.' });
|
||||
|
||||
const NitradoCred = client.exists(GuildDB.Nitrado) ? {
|
||||
ServerID: GuildDB.Nitrado.ServerID,
|
||||
UserID: GuildDB.Nitrado.UserID,
|
||||
Auth: decrypt(
|
||||
GuildDB.Nitrado.Auth,
|
||||
client.config.EncryptionMethod,
|
||||
client.key,
|
||||
client.encryptionIV
|
||||
)
|
||||
} : {
|
||||
ServerID: null,
|
||||
UserID: null,
|
||||
Auth: null
|
||||
}
|
||||
|
||||
if (args[0].name == 'initialize') {
|
||||
|
||||
if (client.exists(GuildDB.Nitrado)) {
|
||||
@@ -171,7 +156,7 @@ module.exports = {
|
||||
|
||||
if (args[0].name == 'ban-player') {
|
||||
|
||||
let data = await BanPlayer(NitradoCred, client, args[0].options[0].value);
|
||||
let data = await BanPlayer(GuildDB.Nitrado, client, args[0].options[0].value);
|
||||
|
||||
if (data == 1) {
|
||||
let failed = new EmbedBuilder()
|
||||
@@ -189,7 +174,7 @@ module.exports = {
|
||||
|
||||
} else if (args[0].name == 'unban-player') {
|
||||
|
||||
let data = UnbanPlayer(NitradoCred, client, args[0].options[0].value);
|
||||
let data = UnbanPlayer(GuildDB.Nitrado, client, args[0].options[0].value);
|
||||
|
||||
if (data == 1) {
|
||||
let failed = new EmbedBuilder()
|
||||
@@ -210,7 +195,7 @@ module.exports = {
|
||||
restart_message = 'Server being restarted by an admin.';
|
||||
message = 'The server was restarted by an admin!';
|
||||
|
||||
RestartServer(NitradoCred, client, restart_message, message);
|
||||
RestartServer(GuildDB.Nitrado, client, restart_message, message);
|
||||
return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription('The server will restart shortly.')], flags: (1 << 6) });
|
||||
|
||||
} else if (args[0].name == "auto-restart") {
|
||||
@@ -219,7 +204,7 @@ module.exports = {
|
||||
|
||||
// Enable/Disable a 10min periodic server status check.
|
||||
if (!client.arIntervalIds.has(GuildDB.serverID)) {
|
||||
client.arIntervalIds.set(GuildDB.serverID, setInterval(CheckServerStatus, client.arInterval, NitradoCred, client));
|
||||
client.arIntervalIds.set(GuildDB.serverID, setInterval(CheckServerStatus, client.arInterval, GuildDB.Nitrado, client));
|
||||
pref = 1;
|
||||
} else {
|
||||
msg = 'Auto server restart periodic check disabled.'
|
||||
@@ -241,7 +226,7 @@ module.exports = {
|
||||
const preference = args[0].options[0].value;
|
||||
await interaction.deferReply({ flags: (1 << 6) });
|
||||
|
||||
const disableBaseDamageFailed = await DisableBaseDamage(NitradoCred, client, preference);
|
||||
const disableBaseDamageFailed = await DisableBaseDamage(GuildDB.Nitrado, client, preference);
|
||||
|
||||
if (disableBaseDamageFailed) return interaction.editReply({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Red).setDescription('Failed to set **disableBaseDamage**. This can result from a variety of reasons:\nNitrado servers may be experiencing issues\nThe DayZ.R Bot may be experiencing issues\nYour Nitrado credentials were entered incorrectly')], flags: (1 << 6) });
|
||||
return interaction.editReply({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Green).setDescription(`Successfully set **disableBaseDamage** to ${preference}.\nRestart the DayZ server to apply these changes.`)], flags: (1 << 6) });
|
||||
@@ -250,7 +235,7 @@ module.exports = {
|
||||
const preference = args[0].options[0].value;
|
||||
await interaction.deferReply({ flags: (1 << 6) });
|
||||
|
||||
const disableContainerDamageFailed = await DisableContainerDamage(NitradoCred, client, preference);
|
||||
const disableContainerDamageFailed = await DisableContainerDamage(GuildDB.Nitrado, client, preference);
|
||||
|
||||
if (disableContainerDamageFailed) return interaction.editReply({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Red).setDescription('Failed to set **disableContainerDamage**. This can result from a variety of reasons:\nNitrado servers may be experiencing issues\nThe DayZ.R Bot may be experiencing issues\nYour Nitrado credentials were entered incorrectly')], flags: (1 << 6) });
|
||||
return interaction.editReply({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Green).setDescription(`Successfully set **disableContainerDamage** to ${preference}.\nRestart the DayZ server to apply these changes.`)], flags: (1 << 6) });
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
const { calculateVector } = require('../util/Vector');
|
||||
|
||||
module.exports = {
|
||||
Missions: {
|
||||
"dayzOffline.chernarusplus": "Chernarus",
|
||||
"dayzOffline.enoch": "Livonia",
|
||||
},
|
||||
|
||||
// Calculates the nearest location to a given coordinate
|
||||
nearest: (pos, mission) => {
|
||||
let tempDest;
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "dayzr-bot",
|
||||
"version": "13.0.1",
|
||||
"version": "13.0.2",
|
||||
"description": "A General Purpose Discord Bot for DayZ Nitrado Servers.",
|
||||
"main": "index.js",
|
||||
"nodemonConfig": {
|
||||
|
||||
+10
-5
@@ -14,6 +14,7 @@ const { decrypt } = require('../util/Cryptic');
|
||||
|
||||
// Data structures imports
|
||||
const { getDefaultPlayer, UpdatePlayer } = require('../database/player');
|
||||
const { Missions } = require('../database/destinations');
|
||||
const { GetGuild } = require('../database/guild');
|
||||
|
||||
const path = require("path");
|
||||
@@ -23,11 +24,6 @@ const readline = require('readline');
|
||||
const minute = 60000; // 1 minute in milliseconds
|
||||
const arInterval = 600000; // Set auto-restart interval 10 minutes (600,000ms)
|
||||
|
||||
const Missions = {
|
||||
"dayzOffline.chernarusplus": "Chernarus",
|
||||
"dayzOffline.enoch": "Livonia",
|
||||
};
|
||||
|
||||
class DayzRBot extends Client {
|
||||
|
||||
constructor(options, config) {
|
||||
@@ -88,6 +84,15 @@ class DayzRBot extends Client {
|
||||
if (interaction.type == InteractionType.ApplicationCommand) {
|
||||
let GuildDB = await GetGuild(this, interaction.guild_id);
|
||||
|
||||
if (this.exists(GuildDB.Nitrado) && this.exists(GuildDB.Nitrado.Auth)) {
|
||||
GuildDB.Nitrado.Auth = decrypt(
|
||||
GuildDB.Nitrado.Auth,
|
||||
this.config.EncryptionMethod,
|
||||
this.key,
|
||||
this.encryptionIV
|
||||
);
|
||||
}
|
||||
|
||||
for (const [factionID, data] of Object.entries(GuildDB.factionArmbands)) {
|
||||
const guild = this.guilds.cache.get(GuildDB.serverID);
|
||||
const role = guild.roles.cache.find(role => role.id == factionID);
|
||||
|
||||
+26
-32
@@ -4,6 +4,7 @@ const { SendConnectionLogs, DetectCombatLog } = require('./AdminLogsHandler');
|
||||
const { getDefaultPlayer } = require('../database/player');
|
||||
const { FetchServerSettings } = require('../util/NitradoAPI');
|
||||
const { UpdatePlayer, insertPVPstats, createWeaponStats } = require('../database/player')
|
||||
const { Missions } = require('../database/destinations');
|
||||
|
||||
let lastSendMessage;
|
||||
|
||||
@@ -205,48 +206,42 @@ module.exports = {
|
||||
HandleActivePlayersList: async (nitrado_cred, client, guild) => {
|
||||
client.activePlayersTick = 0; // reset hour tick
|
||||
|
||||
const data = await FetchServerSettings(nitrado_cred, client, 'HandleActivePlayersList'); // Fetch server status
|
||||
|
||||
if (data && data !== 1) {
|
||||
let hostname = data.data.gameserver.settings.config.hostname;
|
||||
let map = data.data.gameserver.settings.config.mission.slice(12);
|
||||
let status = data.data.gameserver.status;
|
||||
let slots = data.data.gameserver.slots;
|
||||
let playersOnline = data.data.gameserver.query.player_current;
|
||||
|
||||
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";
|
||||
}
|
||||
|
||||
if (!client.exists(guild.activePlayersChannel)) return;
|
||||
|
||||
const channel = client.GetChannel(guild.activePlayersChannel);
|
||||
|
||||
const data = await FetchServerSettings(GuildDB.Nitrado, client, 'HandleActivePlayersList'); // 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 = Missions[data.data.gameserver.settings.config.mission];
|
||||
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 : undefined;
|
||||
|
||||
const Statuses = {
|
||||
"started": {emoji: "🟢", text: "Active"},
|
||||
"stopped": {emoji: "🔴", text: "Stopped"},
|
||||
"restarting": {emoji: "↻", text: "Restarting"},
|
||||
};
|
||||
|
||||
const emojiStatus = Statuses[status].emoji || "❓";
|
||||
const textStatus = Statuses[status].text || "Unknown Status";
|
||||
|
||||
let activePlayers = await client.dbo.collection("players").find({"connected": true}).toArray();
|
||||
|
||||
let des = ``;
|
||||
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 PlayersEmbed = new EmbedBuilder()
|
||||
const serverEmbed = new EmbedBuilder()
|
||||
.setColor(client.config.Colors.Default)
|
||||
.setTitle(`Online List \` ${playersOnline === undefined ? activePlayers.length : playersOnline} \` Player${playersOnline !== 1 ? 's' : ''} Online`)
|
||||
.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: `\` ${statusEmoji} ${statusText} \``, inline: true },
|
||||
{ name: 'Status:', value: `\` ${emojiStatus} ${textStatus} \``, inline: true },
|
||||
{ name: 'Slots:', value: `\` ${slots} \``, inline: true }
|
||||
);
|
||||
|
||||
@@ -258,9 +253,8 @@ module.exports = {
|
||||
|
||||
if (lastSendMessage) lastSendMessage.delete().catch(error => client.sendError(channel, `HandleActivePlayersList Error: \n${error}`)); // Remove previous message before reprinting
|
||||
|
||||
return channel.send({ embeds: [PlayersEmbed, activePlayersEmbed] }).then(sentMessage =>
|
||||
return channel.send({ embeds: [serverEmbed, activePlayersEmbed] }).then(sentMessage =>
|
||||
lastSendMessage = sentMessage
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in new issue
Block a user