From bbe0fe59615ce10007a7faf325d41ff37bd0701e Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Fri, 8 Nov 2024 13:39:06 -0800 Subject: [PATCH 1/3] update/stop if nitrado credentials fail to fetch settings --- commands/server.js | 3 ++- package.json | 2 +- src/DayzRBot.js | 14 ++++++++++---- util/NitradoAPI.js | 7 ++++++- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/commands/server.js b/commands/server.js index 6ba757f..c8e5396 100644 --- a/commands/server.js +++ b/commands/server.js @@ -1,7 +1,7 @@ const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle } = require('discord.js'); const CommandOptions = require('../util/CommandOptionTypes').CommandOptionTypes; const bitfieldCalculator = require('discord-bitfield-calculator'); -const { BanPlayer, UnbanPlayer, RestartServer, CheckServerStatus, DisableBaseDamage, DisableContainerDamage } = require('../util/NitradoAPI'); +const { BanPlayer, UnbanPlayer, RestartServer, CheckServerStatus, DisableBaseDamage, DisableContainerDamage, NitradoCredentialStatus } = require('../util/NitradoAPI'); const { encrypt, decrypt } = require('../util/Cryptic'); module.exports = { @@ -286,6 +286,7 @@ module.exports = { client.key, client.encryptionIV ), // Encrypt the Authentication Token + Status: NitradoCredentialStatus.OK, // Indicate if these credentials dont work }; await client.dbo.collection('guilds').updateOne({ "server.serverID": GuildDB.serverID }, { $set: { "Nitrado": Nitrado } }, (err, res) => { diff --git a/package.json b/package.json index 454ea6d..746ae6f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dayzr-bot", - "version": "13.3.2", + "version": "13.3.3", "description": "A General Purpose Discord Bot for DayZ Nitrado Servers.", "main": "index.js", "nodemonConfig": { diff --git a/src/DayzRBot.js b/src/DayzRBot.js index 67ef13e..412bce1 100644 --- a/src/DayzRBot.js +++ b/src/DayzRBot.js @@ -6,7 +6,7 @@ const Logger = require("../util/Logger"); const crypto = require('crypto'); // custom util imports -const { DownloadNitradoFile, CheckServerStatus, FetchServerSettings, PostServerSettings } = require('../util/NitradoAPI'); +const { DownloadNitradoFile, CheckServerStatus, FetchServerSettings, PostServerSettings, NitradoCredentialStatus } = require('../util/NitradoAPI'); const { HandlePlayerLogs, HandleActivePlayersList } = require('../util/LogsHandler'); const { HandleKillfeed, UpdateLastDeathDate } = require('../util/KillfeedHandler'); const { HandleExpiredUAVs, HandleEvents, PlaceFireplaceInAlarm } = require('../util/AlarmsHandler'); @@ -308,6 +308,7 @@ class DayzRBot extends Client { */ if (!c.exists(GuildDB.Nitrado)) return; // Continue if no nitrado credentials + if (GuildDB.Nitrado.Status == NitradoCredentialStatus.FAILED) return; // Continue if these credentials are marked as failed const NitradoCred = { ServerID: GuildDB.Nitrado.ServerID, @@ -317,17 +318,22 @@ class DayzRBot extends Client { c.config.EncryptionMethod, c.key, c.encryptionIV - ) + ), }; const response = await FetchServerSettings(NitradoCred, c, "logsUpdateTimer").then(res => res); - if (response == 1) return; + if (response == 1) { + c.dbo.collection("guilds").updateOne({"server.serverID": GuildDB.serverID }, {$set: { "Nitrado.Status": NitradoCredentialStatus.FAILED }}, (err, _) => { + if (err) this.error(`Failed to update Nitrado status to failed. [${GuildDB.serverID}]`); + }); + return; + }; const settings = response.data.gameserver; // Update Nitrado DayZ Mission if change is detected if (GuildDB.Nitrado.Mission !== Missions[settings.settings.config.mission]) { c.dbo.collection("guilds").updateOne({"server.serverID": GuildDB.serverID}, {$set: { "Nitrado.Mission": Missions[settings.settings.config.mission] }}, (err, res) => { - if (err) this.error(`Failed to save mission to guild config [${guild.serverID}] for nitrado server [${guild.Nitrado.ServerID}]`); + if (err) this.error(`Failed to save mission to guild config [${GuildDB.serverID}] for nitrado server [${GuildDB.Nitrado.ServerID}]`); }); } diff --git a/util/NitradoAPI.js b/util/NitradoAPI.js index cc658c6..7e6a0f4 100644 --- a/util/NitradoAPI.js +++ b/util/NitradoAPI.js @@ -301,5 +301,10 @@ module.exports = { if (uploaded == 1) return 1; return 0; - } + }, + + NitradoCredentialStatus: { + FAILED: "FAILED", + OK: "OK", + }, } From caf43aac4e6768c1d706df7f2dea8576aa2f73eb Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Fri, 8 Nov 2024 13:49:54 -0800 Subject: [PATCH 2/3] update/add commands to check+reply nitrado credentials status --- commands/server.js | 37 ++++++++++++++++++++++++++++++++++++- package.json | 2 +- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/commands/server.js b/commands/server.js index c8e5396..f4dead6 100644 --- a/commands/server.js +++ b/commands/server.js @@ -26,6 +26,18 @@ module.exports = { value: "disconnect", type: CommandOptions.SubCommand, }, + { + name: "credentials-status", + description: "Check the status of your Nitrado Credentials", + value: "credentials-status", + type: CommandOptions.SubCommand, + }, + { + name: "retry-credentials", + description: "If your credentials are marked as FAILED, try retreiving Nitrado logs again.", + value: "retry-credentials", + type: CommandOptions.SubCommand, + }, { name: "ban-player", description: "Ban a player from the DayZ server", @@ -180,7 +192,30 @@ module.exports = { if (!client.exists(GuildDB.Nitrado) || !client.exists(GuildDB.Nitrado.ServerID)) return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Red).setDescription(`**Notice:**\nThis Discord guild has not been configured with a Nitrado DayZ server. To configure your guild, use `)] }); - if (args[0].name == 'ban-player') { + if (args[0].name == 'credentials-status') { + + const notice = GuildDB.Nitrado.Status == NitradoCredentialStatus.OK ? "Your provided Nitrado Credentials are working correctly, logs are being checked." : "Your provided Nitrado Credentials are not working. They may be incorrect, or your server may be down. Ensure your DayZ server is online, and try to initialize your server again and verify your credentials are correct." + const statusEmbed = new EmbedBuilder() + .setColor(client.config.Colors.Green) + .setTitle("Nitrado Credentials Status") + .setDescription(`**Status**\n> \`${GuildDB.Nitrado.Status}\`\n> ${notice}`); + + return interaction.send({ embeds: [statusEmbed] }); + + } else if (args[0].name == 'retry-credentials') { + + client.dbo.collection("guilds").updateOne({"server.serverID": GuildDB.serverID}, {$set:{"Nitrado.Status": NitradoCredentialStatus.OK}}, (err, _) => { + if (err) return client.sendInternalError(interaction, err); + }); + + const updatedEmbed = new EmbedBuilder() + .setColor(client.config.Colors.Green) + .setTitle("Updated Nitrado Credentials Status") + .setDescription(`**Success**\n> Successfully retrying your existing Nitrado Credentials to check DayZ logs.`); + + return interaction.send({ embeds: [updatedEmbed] }); + + } else if (args[0].name == 'ban-player') { let data = await BanPlayer(GuildDB.Nitrado, client, args[0].options[0].value); diff --git a/package.json b/package.json index 746ae6f..1aa8f0c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dayzr-bot", - "version": "13.3.3", + "version": "13.3.4", "description": "A General Purpose Discord Bot for DayZ Nitrado Servers.", "main": "index.js", "nodemonConfig": { From c0f59cc040d0ce8993974a6ba0e81ad8d58d3f28 Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Fri, 8 Nov 2024 13:54:00 -0800 Subject: [PATCH 3/3] update/embed styles for credential status --- commands/server.js | 7 ++++--- package.json | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/commands/server.js b/commands/server.js index f4dead6..fb66f2a 100644 --- a/commands/server.js +++ b/commands/server.js @@ -194,11 +194,12 @@ module.exports = { if (args[0].name == 'credentials-status') { - const notice = GuildDB.Nitrado.Status == NitradoCredentialStatus.OK ? "Your provided Nitrado Credentials are working correctly, logs are being checked." : "Your provided Nitrado Credentials are not working. They may be incorrect, or your server may be down. Ensure your DayZ server is online, and try to initialize your server again and verify your credentials are correct." + const ok = GuildDB.Nitrado.Status == NitradoCredentialStatus.OK; + const notice = ok ? "Your provided Nitrado Credentials are working correctly, logs are being checked." : "Your provided Nitrado Credentials are not working. They may be incorrect, or your server may be down. Ensure your DayZ server is online, and try to initialize your server again and verify your credentials are correct." const statusEmbed = new EmbedBuilder() - .setColor(client.config.Colors.Green) + .setColor(ok ? client.config.Colors.Green : client.config.Colors.Red) .setTitle("Nitrado Credentials Status") - .setDescription(`**Status**\n> \`${GuildDB.Nitrado.Status}\`\n> ${notice}`); + .setDescription(`**Status:** \`${GuildDB.Nitrado.Status}\`\n> ${notice}`); return interaction.send({ embeds: [statusEmbed] }); diff --git a/package.json b/package.json index 1aa8f0c..ed62ef5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dayzr-bot", - "version": "13.3.4", + "version": "13.3.5", "description": "A General Purpose Discord Bot for DayZ Nitrado Servers.", "main": "index.js", "nodemonConfig": {