From 206200c4e40807661cf0695dab429a7b6df8e5cb Mon Sep 17 00:00:00 2001 From: n8thantran Date: Sat, 30 Aug 2025 19:09:55 -0700 Subject: [PATCH 1/3] fixed deleting all instead of editing the existing message --- src/util/ParkingScraper.js | 66 +++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/src/util/ParkingScraper.js b/src/util/ParkingScraper.js index 7a17334..70b0f3d 100644 --- a/src/util/ParkingScraper.js +++ b/src/util/ParkingScraper.js @@ -266,30 +266,66 @@ class ParkingScraper { const { data, websiteTimestamp } = this.cache; const embed = this.createParkingEmbed(data, websiteTimestamp); - // Delete any existing messages to keep only one message + // Try to edit existing message first + if (this.embedMessage) { + try { + await this.embedMessage.edit({ embeds: [embed] }); + logger.info( + 'Parking embed updated successfully (edited existing message)' + ); + return; + } catch (error) { + logger.warn( + 'Failed to edit existing message, will find or create new one:', + error.message + ); + this.embedMessage = null; + } + } + + // Check for existing bot messages in the channel try { - // Fetch recent messages from the channel const messages = await channel.messages.fetch({ limit: 10 }); - const botMessages = messages.filter( + const botMessage = messages.find( msg => msg.author.id === this.client.user.id ); - if (botMessages.size > 0) { - // Delete all previous bot messages - await Promise.all(botMessages.map( - msg => msg.delete().catch(() => { }) - )); - logger.info(`Deleted ${botMessages.size} previous parking messages`); + if (botMessage) { + // Edit the found message + this.embedMessage = await botMessage.edit({ embeds: [embed] }); + logger.info( + 'Parking embed updated successfully (edited found message)' + ); + } else { + // No existing messages found - delete any old ones and create fresh + const allBotMessages = messages.filter( + msg => msg.author.id === this.client.user.id + ); + + if (allBotMessages.size > 0) { + await Promise.all(allBotMessages.map( + msg => msg.delete().catch(() => {}) + )); + logger.info(`Deleted ${allBotMessages.size} old parking messages`); + } + + // Create new message + this.embedMessage = await channel.send({ embeds: [embed] }); + logger.info( + 'Parking embed updated successfully (created new message)' + ); } } catch (error) { - logger.warn('Error deleting previous messages:', error.message); + logger.warn( + 'Error finding/editing message, creating new one:', + error.message + ); + this.embedMessage = await channel.send({ embeds: [embed] }); + logger.info( + 'Parking embed updated successfully (fallback new message)' + ); } - // Always create a new message - this.embedMessage = await channel.send({ embeds: [embed] }); - - logger.info('Parking embed updated successfully'); - } catch (error) { logger.error('Error updating parking embed:', error); } From 308165272f54a711bedbec95f4efd5792ba0fdba Mon Sep 17 00:00:00 2001 From: n8thantran Date: Sat, 6 Sep 2025 14:53:57 -0700 Subject: [PATCH 2/3] added officer bypass --- config.example.json | 1 + src/handlers/MessageHandler.js | 2 +- src/util/ScamDetector.js | 10 ++++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/config.example.json b/config.example.json index 3e4c590..e793d9f 100644 --- a/config.example.json +++ b/config.example.json @@ -14,6 +14,7 @@ }, "verifiedRoleId": "xxxxxxxxxx", "jailRoleId": "xxxxxxxxxx", + "OFFICER_ROLE": "xxxxxxxxxx", "WELCOME": { "NEW_MEMBER_CHANNEL_ID": "xxxxxxxxxxx" }, diff --git a/src/handlers/MessageHandler.js b/src/handlers/MessageHandler.js index 55a9e4d..6223a64 100644 --- a/src/handlers/MessageHandler.js +++ b/src/handlers/MessageHandler.js @@ -52,7 +52,7 @@ class MessageHandler { } // Check for scam messages first - if (this.scamDetector.isScamMessage(message.content)) { + if (this.scamDetector.isScamMessage(message)) { await this.scamDetector.handleScamMessage( message, config.jailRoleId, config.SCAM_LOG_CHANNEL_ID ); diff --git a/src/util/ScamDetector.js b/src/util/ScamDetector.js index c92eef5..1b4d887 100644 --- a/src/util/ScamDetector.js +++ b/src/util/ScamDetector.js @@ -1,6 +1,7 @@ const logger = require('./logger'); const { EmbedBuilder } = require('discord.js'); const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js'); +const config = require('../../config.json'); class ScamDetector { constructor() { @@ -27,9 +28,14 @@ class ScamDetector { ]; } - isScamMessage(messageContent) { + isScamMessage(message) { try { - const content = messageContent.toLowerCase(); + // Check if user has officer role - bypass scam detection + if (message.member && message.member.roles.cache.has(config.OFFICER_ROLE)) { + return false; + } + + const content = message.content.toLowerCase(); let keywordCount = 0; for (const keyword of this.scamKeywords) { From 4cf9962038390231d5c250e5b464e4292d405ba0 Mon Sep 17 00:00:00 2001 From: n8thantran Date: Sat, 6 Sep 2025 15:01:57 -0700 Subject: [PATCH 3/3] lint --- src/util/ScamDetector.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/util/ScamDetector.js b/src/util/ScamDetector.js index 1b4d887..3870138 100644 --- a/src/util/ScamDetector.js +++ b/src/util/ScamDetector.js @@ -31,7 +31,8 @@ class ScamDetector { isScamMessage(message) { try { // Check if user has officer role - bypass scam detection - if (message.member && message.member.roles.cache.has(config.OFFICER_ROLE)) { + if (message.member && message.member.roles.cache.has( + config.OFFICER_ROLE)) { return false; }