From d1550ff7b5fd33ddd4937465175ccd975aa5df63 Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Sun, 17 Nov 2024 12:40:46 -0800 Subject: [PATCH] fix/convert player list to webhooks --- package.json | 2 +- src/DayzRBot.js | 15 ++++++++++----- util/LogsHandler.js | 21 +++++++++++++-------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index d89ec03..3ff9358 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dayzr-bot", - "version": "13.3.19", + "version": "13.3.20", "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 6524dfe..68ece1b 100644 --- a/src/DayzRBot.js +++ b/src/DayzRBot.js @@ -67,12 +67,15 @@ class DayzRBot extends Client { this.db; this.dbo; + this.databaseConnected = false; - this.arInterval = arInterval; - this.arIntervalIds = new Map(); - this.playerSessions = new Map(); - this.logHistory = new Map(); - this.alarmPingQueue = new Map(); + this.arInterval = arInterval; + this.arIntervalIds = new Map(); + this.playerSessions = new Map(); + this.logHistory = new Map(); + this.alarmPingQueue = new Map(); + this.playerListMsgIds = new Map(); + this.initialize(); this.LoadCommandsAndInteractionHandlers(); this.LoadEvents(); @@ -436,6 +439,8 @@ class DayzRBot extends Client { } this.logHistory.set(guilds[i].Nitrado.ServerID, guilds[i].server.lastLog); // Using Nitrado Server ID over guild ID in case of future support for multiple nitrado servers in a single guild this.playerSessions.set(guilds[i].Nitrado.ServerID, new Map()); // Same reason here as named above. + this.alarmPingQueue.set(guilds[i].serverID, new Map()); // Initialize alarm queue to be empty + this.playerListMsgIds.set(guilds[i].serverID, ""); // Initialize player list message ids this.log(`[${guilds[i].server.serverID}] Initialized existing Nitrado`); } } diff --git a/util/LogsHandler.js b/util/LogsHandler.js index e2f2559..873570b 100644 --- a/util/LogsHandler.js +++ b/util/LogsHandler.js @@ -5,8 +5,7 @@ const { getDefaultPlayer } = require('../database/player'); const { FetchServerSettings } = require('../util/NitradoAPI'); const { UpdatePlayer, insertPVPstats, createWeaponStats } = require('../database/player') const { Missions } = require('../database/destinations'); - -let lastSendMessage; +const { GetWebhook, WebhookSend, WebhookMessageEdit } = require("../util/WebhookHandler"); module.exports = { @@ -208,6 +207,7 @@ module.exports = { if (!client.exists(guild.activePlayersChannel)) return; const channel = client.GetChannel(guild.activePlayersChannel); + if (!channel) return; const data = await FetchServerSettings(nitrado_cred, client, 'HandleActivePlayersList'); // Fetch server status const e = data && data !== 1; // Check if data exists @@ -250,11 +250,16 @@ module.exports = { .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 - ); + + const NAME = "DayZ.R Admin Logs"; + const webhook = await GetWebhook(client, NAME, guild.connectionLogsChannel); + + let id = client.playerListMsgIds.get(guild.serverID); + if (id == "") { + id = await WebhookSend(client, webhook, { embeds: [serverEmbed, activePlayersEmbed] }).id; + client.playerListMsgIds.set(guild.serverID, id); + } else { + WebhookMessageEdit(client, webhook, id, { embeds: [serverEmbed, activePlayersEmbed] }); + } } };