From de9fff8529533e7348e9da6f2a86b2ecc9586185 Mon Sep 17 00:00:00 2001 From: Matheus Albino Date: Wed, 16 Oct 2024 12:56:41 -0300 Subject: [PATCH] Bugfixes and consistency on message content and deletion --- package.json | 1 + src/bot.ts | 8 +++--- .../deleteMessageFromMessagesArray.ts | 12 +++++++++ src/functions/handleMessageReposts.ts | 26 +++++++++---------- src/utils/url.ts | 15 ++++++++++- 5 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 src/functions/deleteMessageFromMessagesArray.ts diff --git a/package.json b/package.json index 04aa95e..096e56f 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "main": "index.js", "scripts": { "start": "node --experimental-strip-types --env-file=.env src/bot.ts", + "debug": "node --inspect --experimental-strip-types --env-file=.env src/bot.ts", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], diff --git a/src/bot.ts b/src/bot.ts index 20e3007..dacce06 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -3,6 +3,7 @@ import type { Message } from "discord.js"; import { readyHandler } from "./functions/ready.ts"; import feedMessagesArray from "./functions/feedMessagesArray.ts"; import handleMessageReposts from "./functions/handleMessageReposts.ts"; +import deleteMessageFromMessagesArray from "./functions/deleteMessageFromMessagesArray.ts"; const client = new Client({ intents: [ @@ -23,8 +24,9 @@ client.on(Events.MessageCreate, async (message) => { messagesArr = handleMessageReposts(messagesArr, message); }); -// // TODO, updateMessagesArray on message deletion -// client.on(Events.MessageDelete, async (message) => { -// }); +// TODO, updateMessagesArray on message deletion +client.on(Events.MessageDelete, async (message) => { + messagesArr = deleteMessageFromMessagesArray(messagesArr, message); +}); await client.login(process.env.DISCORD_TOKEN); diff --git a/src/functions/deleteMessageFromMessagesArray.ts b/src/functions/deleteMessageFromMessagesArray.ts new file mode 100644 index 0000000..f1cc392 --- /dev/null +++ b/src/functions/deleteMessageFromMessagesArray.ts @@ -0,0 +1,12 @@ +import type { + Message, + OmitPartialGroupDMChannel, + PartialMessage, +} from "discord.js"; + +export default function deleteMessageFromMessagesArray( + messagesArray: Message[], + messageToDelete: OmitPartialGroupDMChannel | PartialMessage>, +): Message[] { + return messagesArray.filter((message) => message.id !== messageToDelete.id); +} diff --git a/src/functions/handleMessageReposts.ts b/src/functions/handleMessageReposts.ts index 53a5b0f..5f9261a 100644 --- a/src/functions/handleMessageReposts.ts +++ b/src/functions/handleMessageReposts.ts @@ -6,25 +6,23 @@ import updateMessagesArray from "./updateMessagesArray.ts"; import attemptSendAuthorMessage from "./attemptSendUserMessage.ts"; export default function handleMessageReposts( - messagesArray: Message[], - newMessage: Message, + messagesArray: Message[], + newMessage: Message, ): Message[] { - const urlMessagesMap = transformMessageArrayInMap(messagesArray); + const urlMessagesMap = transformMessageArrayInMap(messagesArray); - const newMessageClearedUrl = clearUrl(newMessage.content); + const newMessageClearedUrl = clearUrl(newMessage.content); - if (!newMessageClearedUrl) return messagesArray; + if (!newMessageClearedUrl) return messagesArray; - const urlMessagesMatchArray = urlMessagesMap.get(newMessageClearedUrl); + const urlMessagesMatchArray = urlMessagesMap.get(newMessageClearedUrl); - if (!urlMessagesMatchArray) return messagesArray; + if (!urlMessagesMatchArray) { + return updateMessagesArray(messagesArray, newMessage); + } - if (urlMessagesMatchArray.length <= 1) { - return updateMessagesArray(messagesArray, newMessage); - } + newMessage.delete(); + attemptSendAuthorMessage(newMessage); - newMessage.delete(); - attemptSendAuthorMessage(newMessage); - - return messagesArray; + return messagesArray; } diff --git a/src/utils/url.ts b/src/utils/url.ts index 4e274ba..7ec1148 100644 --- a/src/utils/url.ts +++ b/src/utils/url.ts @@ -1,7 +1,20 @@ export function clearUrl(url: string): string { - const clearedUrl = url.split("?")[0]; + const urlRegex = /(https?:\/\/[^ ]*)/; + + const matchUrl = url.match(urlRegex); + + if (!matchUrl) return ""; + if (!matchUrl[0]) return ""; + + let clearedUrl = matchUrl[0].split("?")[0]; if (!clearedUrl) return ""; + clearedUrl = clearedUrl.split("\n")[0]; + + if (!clearedUrl) return ""; + + clearedUrl = clearedUrl.replace(/\/+$/, ""); + return clearedUrl; }