From 08c2d4a52ad189d48a05e96600b0d814a737074a Mon Sep 17 00:00:00 2001 From: Turtlak Date: Mon, 11 Mar 2024 15:51:16 +0100 Subject: [PATCH 01/11] from battlemetrics request save wipe info --- src/structures/Battlemetrics.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/structures/Battlemetrics.js b/src/structures/Battlemetrics.js index cbfca1a7d..726713816 100644 --- a/src/structures/Battlemetrics.js +++ b/src/structures/Battlemetrics.js @@ -106,6 +106,7 @@ class Battlemetrics { this.server_rust_last_wipe = null; this.server_rust_last_wipe_ent = null; this.server_serverSteamId = null; + this.server_rust_wipes = null; this.map_url = null; this.map_thumbnailUrl = null; this.map_monuments = null; @@ -153,6 +154,7 @@ class Battlemetrics { set offlinePlayers(offlinePlayers) { this._offlinePlayers = offlinePlayers; } get serverEvaluation() { return this._serverEvaluation; } set serverEvaluation(serverEvaluation) { this._serverEvaluation = serverEvaluation; } + get rustWipes() { return this.server_rust_wipes; } /** * Construct the Battlemetrics API call for searching servers by name. @@ -725,6 +727,7 @@ class Battlemetrics { this.server_rust_last_wipe = details.rust_last_wipe; this.server_rust_last_wipe_ent = details.rust_last_wipe_ent; this.server_serverSteamId = details.serverSteamId; + this.server_rust_wipes = details.rust_wipes const rustMaps = details.rust_maps; if (rustMaps) { @@ -801,6 +804,18 @@ class Battlemetrics { return ordered.map(e => e[1]); } + getUpcomingWipesOrderedByTime() { + const unordered = []; + for (const wipe of this.rustWipes) { + const timestampDate = new Date(wipe.timestamp) + wipe.discordTimestamp = timestampDate.getTime() / 1000; + const timestampSplit = timestampDate.toISOString().split('T') + wipe.readableTimestamp = timestampSplit.length === 2 ?`${timestampSplit[0]} T ${timestampSplit[1]}`: timestampDate.toISOString() + unordered.push(wipe); + } + return unordered.sort(function (a, b) { return a.discordTimestamp - b.discordTimestamp }) + } + /** * Get the offline time from a player. * @param {string} playerId The id of the player to get offline time from. From 75c1c5684ef1c00136e5c9806cffa4a82e46e336 Mon Sep 17 00:00:00 2001 From: Turtlak Date: Mon, 11 Mar 2024 15:56:31 +0100 Subject: [PATCH 02/11] new settings button for turning on/off message with upcoming wipes --- src/discordTools/SetupSettingsMenu.js | 11 +++++++++++ src/discordTools/discordButtons.js | 10 ++++++++++ src/handlers/buttonHandler.js | 18 ++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/src/discordTools/SetupSettingsMenu.js b/src/discordTools/SetupSettingsMenu.js index 4784ddef5..9c03e04e0 100644 --- a/src/discordTools/SetupSettingsMenu.js +++ b/src/discordTools/SetupSettingsMenu.js @@ -256,6 +256,17 @@ async function setupGeneralSettings(client, guildId, channel) { files: [new Discord.AttachmentBuilder( Path.join(__dirname, '..', 'resources/images/settings_logo.png'))] }); + await client.messageSend(channel, { + embeds: [DiscordEmbeds.getEmbed({ + color: Constants.COLOR_SETTINGS, + title: client.intlGet(guildId, 'displayInformationBattlemetricsUpcomingWipes'), + thumbnail: `attachment://settings_logo.png` + })], + components: [DiscordButtons.getDisplayInformationBattlemetricsUpcomingWipesButton(guildId, + instance.generalSettings.displayInformationBattlemetricsUpcomingWipes)], + files: [new Discord.AttachmentBuilder( + Path.join(__dirname, '..', 'resources/images/settings_logo.png'))] + }); await client.messageSend(channel, { embeds: [DiscordEmbeds.getEmbed({ diff --git a/src/discordTools/discordButtons.js b/src/discordTools/discordButtons.js index 7f90a1066..d8be18ec8 100644 --- a/src/discordTools/discordButtons.js +++ b/src/discordTools/discordButtons.js @@ -531,6 +531,16 @@ module.exports = { style: enabled ? SUCCESS : DANGER })); }, + getDisplayInformationBattlemetricsUpcomingWipesButton: function (guildId, enabled) { + return new Discord.ActionRowBuilder().addComponents( + module.exports.getButton({ + customId: 'DisplayInformationBattlemetricsUpcomingWipes', + label: enabled ? + Client.client.intlGet(guildId, 'enabledCap') : + Client.client.intlGet(guildId, 'disabledCap'), + style: enabled ? SUCCESS : DANGER + })); + }, getSubscribeToChangesBattlemetricsButtons: function (guildId) { const instance = Client.client.getInstance(guildId); diff --git a/src/handlers/buttonHandler.js b/src/handlers/buttonHandler.js index f6bb724f0..6e7a3a8a0 100644 --- a/src/handlers/buttonHandler.js +++ b/src/handlers/buttonHandler.js @@ -340,6 +340,24 @@ module.exports = async (client, interaction) => { instance.generalSettings.displayInformationBattlemetricsAllOnlinePlayers)] }); } + else if (interaction.customId === 'DisplayInformationBattlemetricsUpcomingWipes') { + instance.generalSettings.displayInformationBattlemetricsUpcomingWipes = + !instance.generalSettings.displayInformationBattlemetricsUpcomingWipes; + client.setInstance(guildId, instance); + + if (rustplus) rustplus.generalSettings.displayInformationBattlemetricsUpcomingWipes = + instance.generalSettings.displayInformationBattlemetricsUpcomingWipes; + + client.log(client.intlGet(null, 'infoCap'), client.intlGet(null, 'buttonValueChange', { + id: `${verifyId}`, + value: `${instance.generalSettings.displayInformationBattlemetricsUpcomingWipes}` + })); + + await client.interactionUpdate(interaction, { + components: [DiscordButtons.getDisplayInformationBattlemetricsUpcomingWipesButton(guildId, + instance.generalSettings.displayInformationBattlemetricsUpcomingWipes)] + }); + } else if (interaction.customId === 'BattlemetricsServerNameChanges') { instance.generalSettings.battlemetricsServerNameChanges = !instance.generalSettings.battlemetricsServerNameChanges; From 9524f2da863ac27ad185231a28fd803eb173862e Mon Sep 17 00:00:00 2001 From: Turtlak Date: Mon, 11 Mar 2024 15:58:21 +0100 Subject: [PATCH 03/11] added upcoming wipes as settings option --- src/templates/generalSettingsTemplate.json | 1 + src/util/CreateInstanceFile.js | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/templates/generalSettingsTemplate.json b/src/templates/generalSettingsTemplate.json index cb25eed70..e9e47c772 100644 --- a/src/templates/generalSettingsTemplate.json +++ b/src/templates/generalSettingsTemplate.json @@ -18,6 +18,7 @@ "mapWipeNotifyEveryone": false, "itemAvailableInVendingMachineNotifyInGame": true, "displayInformationBattlemetricsAllOnlinePlayers": false, + "displayInformationBattlemetricsUpcomingWipes": false, "battlemetricsServerNameChanges": true, "battlemetricsTrackerNameChanges": true, "battlemetricsGlobalNameChanges": false, diff --git a/src/util/CreateInstanceFile.js b/src/util/CreateInstanceFile.js index 3ad0f1dcc..3e37653a0 100644 --- a/src/util/CreateInstanceFile.js +++ b/src/util/CreateInstanceFile.js @@ -51,7 +51,8 @@ module.exports = (client, guild) => { server: null, event: null, team: null, - battlemetricsPlayers: null + battlemetricsPlayers: null, + battlemetricsUpcomingWipes:null }, activeServer: null, serverList: {}, @@ -153,7 +154,8 @@ module.exports = (client, guild) => { server: null, event: null, team: null, - battlemetricsPlayers: null + battlemetricsPlayers: null, + battlemetricsUpcomingWipes:null } } else { From 17b04e43eee56c763e8c70edbe8f349bd03c2bdd Mon Sep 17 00:00:00 2001 From: Turtlak Date: Tue, 19 Mar 2024 11:09:56 +0100 Subject: [PATCH 04/11] added render of upcoming wipes in server information embed --- src/discordTools/discordEmbeds.js | 46 +++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/src/discordTools/discordEmbeds.js b/src/discordTools/discordEmbeds.js index d9deb2554..f8d1b43f0 100644 --- a/src/discordTools/discordEmbeds.js +++ b/src/discordTools/discordEmbeds.js @@ -699,6 +699,40 @@ module.exports = { const guildId = rustplus.guildId; const instance = Client.client.getInstance(guildId); + const emptyFieldValue = { name: '\u200B', value: '\u200B', inline: true }; + let firstWipe = emptyFieldValue; + let secondWipe = emptyFieldValue; + + const battlemetricsId = instance.activeServer !== null ? + instance.serverList[instance.activeServer].battlemetricsId : null; + + if (battlemetricsId && instance.generalSettings.displayInformationBattlemetricsUpcomingWipes){ + const bmInstance = Client.client.battlemetricsInstances[battlemetricsId]; + const upcomingWipes = bmInstance.getUpcomingWipesOrderedByTime(); + + if (upcomingWipes.length > 0){ + const closestWipe = upcomingWipes[0]; + if (closestWipe.type === 'map' || closestWipe.type === 'full') { + // try match next map or full wipe + const nextMapWipe = upcomingWipes.find((upcoming)=> upcoming.type === 'map') + if (nextMapWipe){ + firstWipe = { name: Client.client.intlGet(guildId, 'nextMapWipe'), value: ``, inline: true} + } + const nextFullWipe = upcomingWipes.find((upcoming)=> upcoming.type === 'full') + if (nextFullWipe){ + secondWipe = { name: Client.client.intlGet(guildId, 'nextFullWipe'), value: ` `, inline: true } + } + } else { + //if closest wipe is not matched type + firstWipe = { + name: Client.client.intlGet(guildId, 'nextWipe'), + value: ` `, + inline: true + } + } + } + } + const time = rustplus.getCommandTime(true); const timeLeftTitle = Client.client.intlGet(rustplus.guildId, 'timeTill', { event: rustplus.time.isDay() ? Constants.NIGHT_EMOJI : Constants.DAY_EMOJI @@ -719,18 +753,20 @@ module.exports = { fields: [ { name: playersFieldName, value: `\`${rustplus.getCommandPop(true)}\``, inline: true }, { name: timeFieldName, value: `\`${time[0]}\``, inline: true }, - { name: wipeFieldName, value: `\`${rustplus.getCommandWipe(true)}\``, inline: true }], + time[1] ? { name: timeLeftTitle, value: `\`${time[1]}\``, inline: true } : emptyFieldValue, + ], timestamp: true }); if (time[1] !== null) { embed.addFields( - { name: timeLeftTitle, value: `\`${time[1]}\``, inline: true }, - { name: '\u200B', value: '\u200B', inline: true }, - { name: '\u200B', value: '\u200B', inline: true }); + { name: wipeFieldName, value: `\`${rustplus.getCommandWipe(true)}\``, inline: true }, + firstWipe, + secondWipe, + ); } else { - embed.addFields({ name: '\u200B', value: '\u200B', inline: false }); + embed.addFields(emptyFieldValue); } embed.addFields( From d8580736e3f411b79423b2cbad6e753b2a963a91 Mon Sep 17 00:00:00 2001 From: Turtlak Date: Tue, 19 Mar 2024 11:10:17 +0100 Subject: [PATCH 05/11] new translations for upcoming wipes --- src/languages/en.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/languages/en.json b/src/languages/en.json index 61289e3f5..4e0f9ab48 100644 --- a/src/languages/en.json +++ b/src/languages/en.json @@ -766,5 +766,8 @@ "wipeDetected": "Wipe detected!", "yield": "Yield", "youAreAlreadyLeader": "You are already leader.", - "youAreNotPairedWithServer": "Leader command does not work because you're not paired with the server." + "nextFullWipe": "Next full wipe", + "nextMapWipe": "Next map wipe", + "nextWipe": "Next wipe", + "displayInformationBattlemetricsUpcomingWipes": "Should be closest wipe from Battlemetrics be displayed in the information channel?" } \ No newline at end of file From a483654fb38eddecbc64a07327496b8d0397f262 Mon Sep 17 00:00:00 2001 From: Turtlak Date: Mon, 8 Apr 2024 10:35:30 +0200 Subject: [PATCH 06/11] moved translations in json to be in alphabetical order --- src/languages/en.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/languages/en.json b/src/languages/en.json index 4e0f9ab48..e889f41dc 100644 --- a/src/languages/en.json +++ b/src/languages/en.json @@ -346,6 +346,7 @@ "discordCap": "DISCORD", "discordUsers": "Discord Users", "displayInformationBattlemetricsAllOnlinePlayers": "Should all online players from Battlemetrics be displayed in the information channel?", + "displayInformationBattlemetricsUpcomingWipes": "Should be closest wipe from Battlemetrics be displayed in the information channel?", "displayingMap": "Displaying {mapName} map.", "displayingOnlinePlayers": "Displaying online players.", "distanceDirectionGrid": "{distance}m in direction {direction}° [{grid}].", @@ -484,6 +485,9 @@ "new": "New", "newVendingMachine": "New Vending Machine located at {location}.", "newsCap": "NEWS", + "nextFullWipe": "Next full wipe", + "nextMapWipe": "Next map wipe", + "nextWipe": "Next wipe", "noActiveTimers": "No active timers.", "noCommandDelay": "No command delay.", "noCommunicationSmartSwitch": "Could not communicate with Smart Switch: {name}", @@ -765,9 +769,5 @@ "wipe": "Wipe", "wipeDetected": "Wipe detected!", "yield": "Yield", - "youAreAlreadyLeader": "You are already leader.", - "nextFullWipe": "Next full wipe", - "nextMapWipe": "Next map wipe", - "nextWipe": "Next wipe", - "displayInformationBattlemetricsUpcomingWipes": "Should be closest wipe from Battlemetrics be displayed in the information channel?" + "youAreAlreadyLeader": "You are already leader." } \ No newline at end of file From 7e9e3281ece68bafe2a089c9cf528099bce066dd Mon Sep 17 00:00:00 2001 From: Turtlak Date: Mon, 8 Apr 2024 10:38:28 +0200 Subject: [PATCH 07/11] removed upcomingWipes from create instance file --- src/util/CreateInstanceFile.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/util/CreateInstanceFile.js b/src/util/CreateInstanceFile.js index 3e37653a0..3ad0f1dcc 100644 --- a/src/util/CreateInstanceFile.js +++ b/src/util/CreateInstanceFile.js @@ -51,8 +51,7 @@ module.exports = (client, guild) => { server: null, event: null, team: null, - battlemetricsPlayers: null, - battlemetricsUpcomingWipes:null + battlemetricsPlayers: null }, activeServer: null, serverList: {}, @@ -154,8 +153,7 @@ module.exports = (client, guild) => { server: null, event: null, team: null, - battlemetricsPlayers: null, - battlemetricsUpcomingWipes:null + battlemetricsPlayers: null } } else { From 4b1aaa6a3540d070ca710f10bcd61441a634e733 Mon Sep 17 00:00:00 2001 From: Turtlak Date: Mon, 8 Apr 2024 10:51:09 +0200 Subject: [PATCH 08/11] added space between functions --- src/discordTools/SetupSettingsMenu.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/discordTools/SetupSettingsMenu.js b/src/discordTools/SetupSettingsMenu.js index 9c03e04e0..69a939005 100644 --- a/src/discordTools/SetupSettingsMenu.js +++ b/src/discordTools/SetupSettingsMenu.js @@ -256,6 +256,7 @@ async function setupGeneralSettings(client, guildId, channel) { files: [new Discord.AttachmentBuilder( Path.join(__dirname, '..', 'resources/images/settings_logo.png'))] }); + await client.messageSend(channel, { embeds: [DiscordEmbeds.getEmbed({ color: Constants.COLOR_SETTINGS, From c7d2a20209e9f2a1fc93a7d06497e52b7e9f93b5 Mon Sep 17 00:00:00 2001 From: Turtlak Date: Mon, 8 Apr 2024 11:15:03 +0200 Subject: [PATCH 09/11] changend comments from // to /*...*/ --- src/discordTools/discordEmbeds.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/discordTools/discordEmbeds.js b/src/discordTools/discordEmbeds.js index f8d1b43f0..8e2626310 100644 --- a/src/discordTools/discordEmbeds.js +++ b/src/discordTools/discordEmbeds.js @@ -713,7 +713,7 @@ module.exports = { if (upcomingWipes.length > 0){ const closestWipe = upcomingWipes[0]; if (closestWipe.type === 'map' || closestWipe.type === 'full') { - // try match next map or full wipe + /* try match next map or full wipe*/ const nextMapWipe = upcomingWipes.find((upcoming)=> upcoming.type === 'map') if (nextMapWipe){ firstWipe = { name: Client.client.intlGet(guildId, 'nextMapWipe'), value: ``, inline: true} @@ -723,7 +723,7 @@ module.exports = { secondWipe = { name: Client.client.intlGet(guildId, 'nextFullWipe'), value: ` `, inline: true } } } else { - //if closest wipe is not matched type + /*if closest wipe is not matched type*/ firstWipe = { name: Client.client.intlGet(guildId, 'nextWipe'), value: ` `, From 27dc613fe072db51f7b5299f565e149bbe95f016 Mon Sep 17 00:00:00 2001 From: Turtlak Date: Mon, 8 Apr 2024 11:53:22 +0200 Subject: [PATCH 10/11] added rust_wipes valuation to Battlemetrics.js --- src/structures/Battlemetrics.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/structures/Battlemetrics.js b/src/structures/Battlemetrics.js index 726713816..6b9a81850 100644 --- a/src/structures/Battlemetrics.js +++ b/src/structures/Battlemetrics.js @@ -669,6 +669,11 @@ class Battlemetrics { if (content['status'] === false) this.offlinePlayers.push(playerId); } + const rustWipes = details.rust_wipes; + if (rustWipes) { + this.#evaluateServerParameter('server_rust_wipes', this.server_rust_wipes, rustWipes, firstTime); + } + this.update(data); return true; } From d2034f1e288114277b9d2fb60c2926d1cec4c36b Mon Sep 17 00:00:00 2001 From: Turtlak Date: Mon, 15 Apr 2024 19:55:38 +0200 Subject: [PATCH 11/11] putted back missing translation --- src/languages/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/languages/en.json b/src/languages/en.json index e889f41dc..04da631c1 100644 --- a/src/languages/en.json +++ b/src/languages/en.json @@ -769,5 +769,6 @@ "wipe": "Wipe", "wipeDetected": "Wipe detected!", "yield": "Yield", - "youAreAlreadyLeader": "You are already leader." + "youAreAlreadyLeader": "You are already leader.", + "youAreNotPairedWithServer": "Leader command does not work because you're not paired with the server." } \ No newline at end of file