From ae9d67fb16d641d3122dc8391b14b5ecc86c6033 Mon Sep 17 00:00:00 2001 From: Braeden Sowinski Date: Thu, 26 Oct 2023 17:09:27 -0700 Subject: [PATCH] feature/server disableContainerDamage --- commands/server.js | 29 ++++++++++++++++++++++++++--- package.json | 2 +- util/NitradoAPI.js | 27 ++++++++++++++++++++++++--- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/commands/server.js b/commands/server.js index cc43e7e..53d27ca 100644 --- a/commands/server.js +++ b/commands/server.js @@ -1,7 +1,7 @@ const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, StringSelectMenuBuilder } = require('discord.js'); const CommandOptions = require('../util/CommandOptionTypes').CommandOptionTypes; const bitfieldCalculator = require('discord-bitfield-calculator'); -const { BanPlayer, UnbanPlayer, RestartServer, CheckServerStatus, DisableBaseDamage } = require('../util/NitradoAPI'); +const { BanPlayer, UnbanPlayer, RestartServer, CheckServerStatus, DisableBaseDamage, DisableContainerDamage } = require('../util/NitradoAPI'); module.exports = { name: "server", @@ -61,6 +61,18 @@ module.exports = { type: CommandOptions.Boolean, required: true, }] + }, { + name: "disable-container-damage", + description: "Disable/Enable container damage", + value: "disable-container-damage", + type: CommandOptions.SubCommand, + options: [{ + name: "preference", + description: "disableContainerDamage Preference", + value: true, + type: CommandOptions.Boolean, + required: true, + }] }], SlashCommand: { /** @@ -149,14 +161,25 @@ module.exports = { }); return interaction.send({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Yellow).setDescription(msg)], flags: (1 << 6) }); + } else if (args[0].name == 'disable-base-damage') { const preference = args[0].options[0].value; await interaction.deferReply({ flags: (1 << 6) }); - const toggle = await DisableBaseDamage(client, preference); + const disableBaseDamageFailed = await DisableBaseDamage(client, preference); - if (toggle == 1) return interaction.editReply({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Red).setDescription('Failed to set **disableBaseDamage**, try again later.')], flags: (1 << 6) }); + if (disableBaseDamageFailed) return interaction.editReply({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Red).setDescription('Failed to set **disableBaseDamage**, try again later.')], 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) }); + + } else if (args[0].name == 'disable-container-damage') { + const preference = args[0].options[0].value; + await interaction.deferReply({ flags: (1 << 6) }); + + const disableContainerDamageFailed = await DisableContainerDamage(client, preference); + + if (disableContainerDamageFailed) return interaction.editReply({ embeds: [new EmbedBuilder().setColor(client.config.Colors.Red).setDescription('Failed to set **disableContainerDamage**, try again later.')], 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) }); + } } }, diff --git a/package.json b/package.json index 39b867d..6ed4e39 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dayzr-bot", - "version": "11.4.0", + "version": "11.5.0", "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 2a13213..86c7c72 100644 --- a/util/NitradoAPI.js +++ b/util/NitradoAPI.js @@ -236,9 +236,6 @@ module.exports = { }, DisableBaseDamage: async (client, preference) => { - const settings = await module.exports.FetchServerSettings(client, 'DisableBaseDamage'); // Fetch server settings - if (settings == 1) return 1; - const pref = preference ? '1' : '0'; const posted = await PostServerSettings(client, "config", "disableBaseDamage", pref); if (posted == 1) return 1; @@ -259,6 +256,30 @@ module.exports = { const uploaded = await UploadNitradoFile(client, missionPath, 'cfggameplay.json', jsonDir); if (uploaded == 1) return 1; + return 0; + }, + + DisableContainerDamage: async (client, preference) => { + const pref = preference ? '1' : '0'; + const posted = await PostServerSettings(client, "config", "disableContainerDamage", pref); + if (posted == 1) return 1; + + const basePath = await GetRemoteDir(client).then(dirs => dirs.filter(dir => dir.type == 'dir')[0].path) + const missionPath = await GetRemoteDir(client, basePath).then(dirs => dirs[0].path) + const cfggameplayPath = `${missionPath}/cfggameplay.json`; + + const jsonDir = `./logs/cfggameplay.json`; + await module.exports.DownloadNitradoFile(client, cfggameplayPath, jsonDir); + + let gameplay = JSON.parse(fs.readFileSync(jsonDir)); + gameplay.GeneralData.disableContainerDamage = preference; + + // write JSON to file + fs.writeFileSync(jsonDir, JSON.stringify(gameplay, null, 2)); + + const uploaded = await UploadNitradoFile(client, missionPath, 'cfggameplay.json', jsonDir); + if (uploaded == 1) return 1; + return 0; } }