From a4394099fa0dded9873f6084aec8af46d514cd49 Mon Sep 17 00:00:00 2001 From: Braeden Sowinski Date: Sun, 3 Sep 2023 15:13:46 -0700 Subject: [PATCH] change/move restart function to NitradoAPI.js --- commands/admin.js | 13 ++----------- package.json | 2 +- util/NitradoAPI.js | 32 +++++++++++++++++++++++--------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/commands/admin.js b/commands/admin.js index 9317f7c..108b9b7 100644 --- a/commands/admin.js +++ b/commands/admin.js @@ -1,6 +1,6 @@ const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, StringSelectMenuBuilder } = require('discord.js'); const bitfieldCalculator = require('discord-bitfield-calculator'); -const { BanPlayer, UnbanPlayer } = require('../util/NitradoAPI'); +const { BanPlayer, UnbanPlayer, RestartServer } = require('../util/NitradoAPI'); const { Armbands } = require('../config/armbandsdb.js'); module.exports = { @@ -407,16 +407,7 @@ module.exports = { return interaction.send({ embeds: [successEmbed] }); } else if (args[0].name == "restart") { - - const res = await fetch(`https://api.nitrado.net/services/${client.config.Nitrado.ServerID}/gameservers/restart`, { - method: "POST", - headers: { - "Authorization": client.config.Nitrado.Auth, - } - }).then(response => - response.json().then(data => data) - ).then(res => res); - + RestartServer(client); return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription('The server will restart shortly.')], flags: (1 << 6) }); } } diff --git a/package.json b/package.json index f4bbe39..a53a4ec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dayzr-bot", - "version": "9.4.0", + "version": "9.4.1", "description": "A General Purpose Discord Bot for DayZ Nitrado Servers.", "main": "index.js", "nodemonConfig": { diff --git a/util/NitradoAPI.js b/util/NitradoAPI.js index 69602db..d38e59c 100644 --- a/util/NitradoAPI.js +++ b/util/NitradoAPI.js @@ -28,18 +28,16 @@ module.exports = { await finished(Readable.fromWeb(body).pipe(stream)); return 0; } catch (error) { - if (retries === maxRetries) { - throw new Error(`Failed to fetch data after ${maxRetries} retries`); - } + if (retries === maxRetries) throw new Error(`DownloadNitradoFile: Failed to fetch data after ${maxRetries} retries`); } await new Promise(resolve => setTimeout(resolve, retryDelay)); // Delay before retrying } }, HandlePlayerBan: async (client, gamertag, ban) => { - // get current bans for (let retries = 0; retries <= maxRetries; retries++) { try { + // get current bans const res = await fetch(`https://api.nitrado.net/services/${client.config.Nitrado.ServerID}/gameservers`, { headers: { "Authorization": client.config.Nitrado.Auth @@ -72,9 +70,7 @@ module.exports = { sendList(); })); } catch (error) { - if (retries === maxRetries) { - throw new Error(`Failed to fetch data after ${maxRetries} retries`); - } + if (retries === maxRetries) throw new Error(`HandlePlayerBans: Failed to fetch data after ${maxRetries} retries`); } await new Promise(resolve => setTimeout(resolve, retryDelay)); // Delay before retrying } @@ -87,6 +83,24 @@ module.exports = { two whole different functions for each. */ - BanPlayer: async (client, gamertag) => module.exports.HandlePlayerBan(client, gamertag, true), - UnbanPlayer: async (client, gamertag) => module.exports.HandlePlayerBan(client, gamertag, false) + BanPlayer: async (client, gamertag) => module.exports.HandlePlayerBan(client, gamertag, true), + UnbanPlayer: async (client, gamertag) => module.exports.HandlePlayerBan(client, gamertag, false), + + RestartServer: async (client) => { + for (let retries = 0; retries < maxRetries; retries++) { + try { + const res = await fetch(`https://api.nitrado.net/services/${client.config.Nitrado.ServerID}/gameservers/restart`, { + method: "POST", + headers: { + "Authorization": client.config.Nitrado.Auth, + } + }).then(response => + response.json().then(data => data) + ).then(res => res); + } catch (error) { + if (retries === maxRetries) throw new Error(`RestartServer: Failed to fetch data after ${maxRetries} retries`); + } + await new Promise(resolve => setTimeout(resolve, retryDelay)); // Delay before retrying + } + }, } \ No newline at end of file