From 71c40384ed8b363b2b32941c6069228961289a9c Mon Sep 17 00:00:00 2001 From: Matheus Albino Date: Wed, 16 Oct 2024 11:59:33 -0300 Subject: [PATCH] Refactoring --- src/attemptSendUserMessage.ts | 15 ---------- src/bot.ts | 33 ++++++++-------------- src/checkForReposts.ts | 22 --------------- src/checkMessagesArrayForReposts.ts | 33 ---------------------- src/functions/attemptSendUserMessage.ts | 15 ++++++++++ src/functions/checkMessagesArrayReposts.ts | 33 ++++++++++++++++++++++ src/{ => functions}/feedMessagesArray.ts | 0 src/functions/handleMessageReposts.ts | 30 ++++++++++++++++++++ src/{ => functions}/ready.ts | 0 src/{ => functions}/updateMessagesArray.ts | 0 10 files changed, 89 insertions(+), 92 deletions(-) delete mode 100644 src/attemptSendUserMessage.ts delete mode 100644 src/checkForReposts.ts delete mode 100644 src/checkMessagesArrayForReposts.ts create mode 100644 src/functions/attemptSendUserMessage.ts create mode 100644 src/functions/checkMessagesArrayReposts.ts rename src/{ => functions}/feedMessagesArray.ts (100%) create mode 100644 src/functions/handleMessageReposts.ts rename src/{ => functions}/ready.ts (100%) rename src/{ => functions}/updateMessagesArray.ts (100%) diff --git a/src/attemptSendUserMessage.ts b/src/attemptSendUserMessage.ts deleted file mode 100644 index a086983..0000000 --- a/src/attemptSendUserMessage.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { TextChannel, type Message } from "discord.js"; - -export default function attemptSendAuthorMessage(message: Message): void { - if (!(message.channel instanceof TextChannel)) return; - if (!message.guild) return; - - message.author - .send( - `Hey! [__O link que voce mandou__](<${message.content}>) no canal "_${message.channel.name}_" do servidor "_${message.guild.name}_" ja foi mandado no passado! -A mensagem que voce mandou foi apagada para evitar que os chatos comentem "repost". -De nada!`, - ) - .then() - .catch((_) => null); -} diff --git a/src/bot.ts b/src/bot.ts index fc4cce1..20e3007 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -1,37 +1,26 @@ import { Client, Events, GatewayIntentBits } from "discord.js"; import type { Message } from "discord.js"; -import { readyHandler } from "./ready.ts"; -import feedMessagesArray from "./feedMessagesArray.ts"; -import updateMessagesArray from "./updateMessagesArray.ts"; -import checkForReposts from "./checkForReposts.ts"; -import attemptSendAuthorMessage from "./attemptSendUserMessage.ts"; +import { readyHandler } from "./functions/ready.ts"; +import feedMessagesArray from "./functions/feedMessagesArray.ts"; +import handleMessageReposts from "./functions/handleMessageReposts.ts"; const client = new Client({ - intents: [ - GatewayIntentBits.Guilds, - GatewayIntentBits.GuildMessages, - GatewayIntentBits.MessageContent, - ], + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.MessageContent, + ], }); let messagesArr: Message[]; client.once(Events.ClientReady, async (client) => { - readyHandler(client); - messagesArr = await feedMessagesArray(client); + readyHandler(client); + messagesArr = await feedMessagesArray(client); }); client.on(Events.MessageCreate, async (message) => { - console.log(message); - const originalMessages = checkForReposts(messagesArr, message); - console.log(originalMessages); - - if (originalMessages.length >= 1) { - message.delete(); - attemptSendAuthorMessage(message); - } else { - messagesArr = updateMessagesArray(messagesArr, message); - } + messagesArr = handleMessageReposts(messagesArr, message); }); // // TODO, updateMessagesArray on message deletion diff --git a/src/checkForReposts.ts b/src/checkForReposts.ts deleted file mode 100644 index 4bce22a..0000000 --- a/src/checkForReposts.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Message } from "discord.js"; -import { clearUrl } from "./utils/url.ts"; -import { transformMessageArrayInMap } from "./utils/message.ts"; - -export default function checkForReposts( - messagesArray: Message[], - newMessage: Message, -): Message[] { - const urlMessagesMap = transformMessageArrayInMap(messagesArray); - - const newMessageClearedUrl = clearUrl(newMessage.content); - - if (!newMessageClearedUrl) return []; - - const urlMessagesMatchArray = urlMessagesMap.get(newMessageClearedUrl); - - if (!urlMessagesMatchArray) return []; - - if (urlMessagesMatchArray.length > 1) return urlMessagesMatchArray; - - return []; -} diff --git a/src/checkMessagesArrayForReposts.ts b/src/checkMessagesArrayForReposts.ts deleted file mode 100644 index c481f39..0000000 --- a/src/checkMessagesArrayForReposts.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { Message } from "discord.js"; -import type MessageInfoWithReposts from "./interfaces/MessageInfoWithReposts.ts"; -import { transformMessageArrayInMap } from "./utils/message.ts"; - -export default function checkMessagesArrayForReposts( - messagesArray: Message[], -): Map { - const urlMessagesMap = transformMessageArrayInMap(messagesArray); - - const messageInfoWithRepostsMap = new Map(); - - for (const [url, messagesMentioningUrlArray] of urlMessagesMap) { - if (messagesMentioningUrlArray.length === 1) continue; - - const originalMessage = messagesMentioningUrlArray.reduce((prev, curr) => - prev.createdTimestamp < curr.createdTimestamp ? prev : curr, - ); - - const messageInfoWithRepostsMapPosition = - messageInfoWithRepostsMap.get(url); - - if (!messageInfoWithRepostsMapPosition) { - messageInfoWithRepostsMap.set(url, { - originalMessage, - repetitions: messagesMentioningUrlArray.filter( - (elm) => elm !== originalMessage, - ), - }); - } - } - - return messageInfoWithRepostsMap; -} diff --git a/src/functions/attemptSendUserMessage.ts b/src/functions/attemptSendUserMessage.ts new file mode 100644 index 0000000..149e424 --- /dev/null +++ b/src/functions/attemptSendUserMessage.ts @@ -0,0 +1,15 @@ +import { TextChannel, type Message } from "discord.js"; + +export default function attemptSendAuthorMessage(authorMessage: Message): void { + if (!(authorMessage.channel instanceof TextChannel)) return; + if (!authorMessage.guild) return; + + authorMessage.author + .send( + `Hey! [__O link que voce mandou__](<${authorMessage.content}>) no canal "_${authorMessage.channel.name}_" do servidor "_${authorMessage.guild.name}_" ja foi mandado no passado! +A mensagem que voce mandou foi apagada para evitar que os chatos comentem "repost". +De nada!`, + ) + .then() + .catch((_) => null); +} diff --git a/src/functions/checkMessagesArrayReposts.ts b/src/functions/checkMessagesArrayReposts.ts new file mode 100644 index 0000000..3b85cc7 --- /dev/null +++ b/src/functions/checkMessagesArrayReposts.ts @@ -0,0 +1,33 @@ +import type { Message } from "discord.js"; +import type MessageInfoWithReposts from "../interfaces/MessageInfoWithReposts.ts"; +import { transformMessageArrayInMap } from "../utils/message.ts"; + +export default function checkMessagesArrayForReposts( + messagesArray: Message[], +): Map { + const urlMessagesMap = transformMessageArrayInMap(messagesArray); + + const messageInfoWithRepostsMap = new Map(); + + for (const [url, messagesMentioningUrlArray] of urlMessagesMap) { + if (messagesMentioningUrlArray.length === 1) continue; + + const originalMessage = messagesMentioningUrlArray.reduce((prev, curr) => + prev.createdTimestamp < curr.createdTimestamp ? prev : curr, + ); + + const messageInfoWithRepostsMapPosition = + messageInfoWithRepostsMap.get(url); + + if (!messageInfoWithRepostsMapPosition) { + messageInfoWithRepostsMap.set(url, { + originalMessage, + repetitions: messagesMentioningUrlArray.filter( + (elm) => elm !== originalMessage, + ), + }); + } + } + + return messageInfoWithRepostsMap; +} diff --git a/src/feedMessagesArray.ts b/src/functions/feedMessagesArray.ts similarity index 100% rename from src/feedMessagesArray.ts rename to src/functions/feedMessagesArray.ts diff --git a/src/functions/handleMessageReposts.ts b/src/functions/handleMessageReposts.ts new file mode 100644 index 0000000..53a5b0f --- /dev/null +++ b/src/functions/handleMessageReposts.ts @@ -0,0 +1,30 @@ +import type { Message } from "discord.js"; +import { clearUrl } from "../utils/url.ts"; +import { transformMessageArrayInMap } from "../utils/message.ts"; + +import updateMessagesArray from "./updateMessagesArray.ts"; +import attemptSendAuthorMessage from "./attemptSendUserMessage.ts"; + +export default function handleMessageReposts( + messagesArray: Message[], + newMessage: Message, +): Message[] { + const urlMessagesMap = transformMessageArrayInMap(messagesArray); + + const newMessageClearedUrl = clearUrl(newMessage.content); + + if (!newMessageClearedUrl) return messagesArray; + + const urlMessagesMatchArray = urlMessagesMap.get(newMessageClearedUrl); + + if (!urlMessagesMatchArray) return messagesArray; + + if (urlMessagesMatchArray.length <= 1) { + return updateMessagesArray(messagesArray, newMessage); + } + + newMessage.delete(); + attemptSendAuthorMessage(newMessage); + + return messagesArray; +} diff --git a/src/ready.ts b/src/functions/ready.ts similarity index 100% rename from src/ready.ts rename to src/functions/ready.ts diff --git a/src/updateMessagesArray.ts b/src/functions/updateMessagesArray.ts similarity index 100% rename from src/updateMessagesArray.ts rename to src/functions/updateMessagesArray.ts