fix/player-list command + auto player list + refactors for issue #28
This commit is contained in:
6 files changed
+103
-81
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');
|
const { EmbedBuilder } = require('discord.js');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@@ -29,19 +31,50 @@ module.exports = {
|
|||||||
return interaction.send({ embeds: [warnNitradoNotInitialized], flags: (1 << 6) });
|
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**`;
|
let des = activePlayers.length > 0 ? `` : `**No Players Online**`;
|
||||||
for (let i = 0; i < activePlayers.length; i++) {
|
for (let i = 0; i < activePlayers.length; i++) {
|
||||||
des += `**- ${activePlayers[i].gamertag}**\n`;
|
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()
|
const activePlayersEmbed = new EmbedBuilder()
|
||||||
.setColor(client.config.Colors.Default)
|
.setColor(client.config.Colors.Default)
|
||||||
.setTitle(`Online List - ${activePlayers.length} Player${(activePlayers.length>1||activePlayers.length==0)?'s':''} Online`)
|
.setTimestamp()
|
||||||
.setDescription(des);
|
.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 (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.' });
|
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 (args[0].name == 'initialize') {
|
||||||
|
|
||||||
if (client.exists(GuildDB.Nitrado)) {
|
if (client.exists(GuildDB.Nitrado)) {
|
||||||
@@ -171,7 +156,7 @@ module.exports = {
|
|||||||
|
|
||||||
if (args[0].name == 'ban-player') {
|
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) {
|
if (data == 1) {
|
||||||
let failed = new EmbedBuilder()
|
let failed = new EmbedBuilder()
|
||||||
@@ -189,7 +174,7 @@ module.exports = {
|
|||||||
|
|
||||||
} else if (args[0].name == 'unban-player') {
|
} 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) {
|
if (data == 1) {
|
||||||
let failed = new EmbedBuilder()
|
let failed = new EmbedBuilder()
|
||||||
@@ -210,7 +195,7 @@ module.exports = {
|
|||||||
restart_message = 'Server being restarted by an admin.';
|
restart_message = 'Server being restarted by an admin.';
|
||||||
message = 'The server was 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) });
|
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") {
|
} else if (args[0].name == "auto-restart") {
|
||||||
@@ -219,7 +204,7 @@ module.exports = {
|
|||||||
|
|
||||||
// Enable/Disable a 10min periodic server status check.
|
// Enable/Disable a 10min periodic server status check.
|
||||||
if (!client.arIntervalIds.has(GuildDB.serverID)) {
|
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;
|
pref = 1;
|
||||||
} else {
|
} else {
|
||||||
msg = 'Auto server restart periodic check disabled.'
|
msg = 'Auto server restart periodic check disabled.'
|
||||||
@@ -241,7 +226,7 @@ module.exports = {
|
|||||||
const preference = args[0].options[0].value;
|
const preference = args[0].options[0].value;
|
||||||
await interaction.deferReply({ flags: (1 << 6) });
|
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) });
|
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) });
|
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;
|
const preference = args[0].options[0].value;
|
||||||
await interaction.deferReply({ flags: (1 << 6) });
|
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) });
|
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) });
|
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');
|
const { calculateVector } = require('../util/Vector');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
Missions: {
|
||||||
|
"dayzOffline.chernarusplus": "Chernarus",
|
||||||
|
"dayzOffline.enoch": "Livonia",
|
||||||
|
},
|
||||||
|
|
||||||
// Calculates the nearest location to a given coordinate
|
// Calculates the nearest location to a given coordinate
|
||||||
nearest: (pos, mission) => {
|
nearest: (pos, mission) => {
|
||||||
let tempDest;
|
let tempDest;
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "dayzr-bot",
|
"name": "dayzr-bot",
|
||||||
"version": "13.0.1",
|
"version": "13.0.2",
|
||||||
"description": "A General Purpose Discord Bot for DayZ Nitrado Servers.",
|
"description": "A General Purpose Discord Bot for DayZ Nitrado Servers.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"nodemonConfig": {
|
"nodemonConfig": {
|
||||||
|
|||||||
+10
-5
@@ -14,6 +14,7 @@ const { decrypt } = require('../util/Cryptic');
|
|||||||
|
|
||||||
// Data structures imports
|
// Data structures imports
|
||||||
const { getDefaultPlayer, UpdatePlayer } = require('../database/player');
|
const { getDefaultPlayer, UpdatePlayer } = require('../database/player');
|
||||||
|
const { Missions } = require('../database/destinations');
|
||||||
const { GetGuild } = require('../database/guild');
|
const { GetGuild } = require('../database/guild');
|
||||||
|
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
@@ -23,11 +24,6 @@ const readline = require('readline');
|
|||||||
const minute = 60000; // 1 minute in milliseconds
|
const minute = 60000; // 1 minute in milliseconds
|
||||||
const arInterval = 600000; // Set auto-restart interval 10 minutes (600,000ms)
|
const arInterval = 600000; // Set auto-restart interval 10 minutes (600,000ms)
|
||||||
|
|
||||||
const Missions = {
|
|
||||||
"dayzOffline.chernarusplus": "Chernarus",
|
|
||||||
"dayzOffline.enoch": "Livonia",
|
|
||||||
};
|
|
||||||
|
|
||||||
class DayzRBot extends Client {
|
class DayzRBot extends Client {
|
||||||
|
|
||||||
constructor(options, config) {
|
constructor(options, config) {
|
||||||
@@ -88,6 +84,15 @@ class DayzRBot extends Client {
|
|||||||
if (interaction.type == InteractionType.ApplicationCommand) {
|
if (interaction.type == InteractionType.ApplicationCommand) {
|
||||||
let GuildDB = await GetGuild(this, interaction.guild_id);
|
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)) {
|
for (const [factionID, data] of Object.entries(GuildDB.factionArmbands)) {
|
||||||
const guild = this.guilds.cache.get(GuildDB.serverID);
|
const guild = this.guilds.cache.get(GuildDB.serverID);
|
||||||
const role = guild.roles.cache.find(role => role.id == factionID);
|
const role = guild.roles.cache.find(role => role.id == factionID);
|
||||||
|
|||||||
+44
-50
@@ -4,6 +4,7 @@ const { SendConnectionLogs, DetectCombatLog } = require('./AdminLogsHandler');
|
|||||||
const { getDefaultPlayer } = require('../database/player');
|
const { getDefaultPlayer } = require('../database/player');
|
||||||
const { FetchServerSettings } = require('../util/NitradoAPI');
|
const { FetchServerSettings } = require('../util/NitradoAPI');
|
||||||
const { UpdatePlayer, insertPVPstats, createWeaponStats } = require('../database/player')
|
const { UpdatePlayer, insertPVPstats, createWeaponStats } = require('../database/player')
|
||||||
|
const { Missions } = require('../database/destinations');
|
||||||
|
|
||||||
let lastSendMessage;
|
let lastSendMessage;
|
||||||
|
|
||||||
@@ -205,62 +206,55 @@ module.exports = {
|
|||||||
HandleActivePlayersList: async (nitrado_cred, client, guild) => {
|
HandleActivePlayersList: async (nitrado_cred, client, guild) => {
|
||||||
client.activePlayersTick = 0; // reset hour tick
|
client.activePlayersTick = 0; // reset hour tick
|
||||||
|
|
||||||
const data = await FetchServerSettings(nitrado_cred, client, 'HandleActivePlayersList'); // Fetch server status
|
if (!client.exists(guild.activePlayersChannel)) return;
|
||||||
|
const channel = client.GetChannel(guild.activePlayersChannel);
|
||||||
|
|
||||||
if (data && data !== 1) {
|
const data = await FetchServerSettings(GuildDB.Nitrado, client, 'HandleActivePlayersList'); // Fetch server status
|
||||||
let hostname = data.data.gameserver.settings.config.hostname;
|
const e = data && data !== 1; // Check if data exists
|
||||||
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;
|
const hostname = e ? data.data.gameserver.settings.config.hostname : 'N/A';
|
||||||
let statusText;
|
const map = Missions[data.data.gameserver.settings.config.mission];
|
||||||
if (status === "started") {
|
const status = e ? data.data.gameserver.status : 'N/A';
|
||||||
statusEmoji = "🟢";
|
const slots = e ? data.data.gameserver.slots : 'N/A';
|
||||||
statusText = "Active";
|
const playersOnline = e ? data.data.gameserver.query.player_current : undefined;
|
||||||
} 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 Statuses = {
|
||||||
|
"started": {emoji: "🟢", text: "Active"},
|
||||||
|
"stopped": {emoji: "🔴", text: "Stopped"},
|
||||||
|
"restarting": {emoji: "↻", text: "Restarting"},
|
||||||
|
};
|
||||||
|
|
||||||
const channel = client.GetChannel(guild.activePlayersChannel);
|
const emojiStatus = Statuses[status].emoji || "❓";
|
||||||
let activePlayers = await client.dbo.collection("players").find({"connected": true}).toArray();
|
const textStatus = Statuses[status].text || "Unknown Status";
|
||||||
|
|
||||||
let des = ``;
|
let activePlayers = await client.dbo.collection("players").find({"connected": true}).toArray();
|
||||||
for (let i = 0; i < activePlayers.length; i++) {
|
|
||||||
des += `**- ${activePlayers[i].gamertag}**\n`;
|
|
||||||
}
|
|
||||||
const nodes = activePlayers.length === 0;
|
|
||||||
const PlayersEmbed = 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: `\` ${statusEmoji} ${statusText} \``, inline: true },
|
|
||||||
{ name: 'Slots:', value: `\` ${slots} \``, inline: true }
|
|
||||||
);
|
|
||||||
|
|
||||||
const activePlayersEmbed = new EmbedBuilder()
|
let des = activePlayers.length > 0 ? `` : `**No Players Online**`;
|
||||||
.setColor(client.config.Colors.Default)
|
for (let i = 0; i < activePlayers.length; i++) {
|
||||||
.setTimestamp()
|
des += `**- ${activePlayers[i].gamertag}**\n`;
|
||||||
.setTitle(`Players Online:`)
|
|
||||||
.setDescription(des || (nodes ? "No Players Online :(" : ""));
|
|
||||||
|
|
||||||
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 =>
|
|
||||||
lastSendMessage = sentMessage
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 :(" : ""));
|
||||||
|
|
||||||
|
if (lastSendMessage) lastSendMessage.delete().catch(error => client.sendError(channel, `HandleActivePlayersList Error: \n${error}`)); // Remove previous message before reprinting
|
||||||
|
|
||||||
|
return channel.send({ embeds: [serverEmbed, activePlayersEmbed] }).then(sentMessage =>
|
||||||
|
lastSendMessage = sentMessage
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Reference in new issue
Block a user