From 59803fabd5708afd0898f2fa8716f2437911a0b8 Mon Sep 17 00:00:00 2001 From: fzzin <43480857+fzzinchemical@users.noreply.github.com> Date: Mon, 14 Apr 2025 19:43:27 +0200 Subject: [PATCH] Refactor message handling functions for improved clarity and maintainability --- deno.json | 2 +- deno.lock | 195 +++++++++++++++++++++----------- src/bot.ts | 71 +++--------- src/messages.ts | 12 +- src/plugins/rule34/messages.ts | 2 +- src/plugins/yandere/messages.ts | 4 +- 6 files changed, 155 insertions(+), 131 deletions(-) diff --git a/deno.json b/deno.json index d822fff..758383d 100755 --- a/deno.json +++ b/deno.json @@ -14,7 +14,7 @@ "admin": "deno -A --watch --check src/bot.ts" }, "imports": { - "@discordeno": "npm:discordeno@21.0.0", + "@discordeno": "npm:discord.js@14.18.0", "@melvdouc/xml-parser": "jsr:@melvdouc/xml-parser@^0.1.1", "@std/assert": "jsr:@std/assert@1", "@types/node": "npm:@types/node@^22.14.1", diff --git a/deno.lock b/deno.lock index 255d4b4..13bd7e3 100644 --- a/deno.lock +++ b/deno.lock @@ -15,9 +15,7 @@ "npm:@discordeno/bot@*": "19.0.0-next.b1bfe94", "npm:@types/node@*": "18.16.19", "npm:@types/node@^22.14.1": "22.14.1", - "npm:discordeno@*": "21.0.0", - "npm:discordeno@21.0.0": "21.0.0", - "npm:discordeno@21.0.0": "21.0.0", + "npm:discord.js@14.18.0": "14.18.0", "npm:gson@*": "0.1.5" }, "jsr": { @@ -74,109 +72,159 @@ "@discordeno/bot@19.0.0-next.b1bfe94": { "integrity": "sha512-ZaPDaPM6tuxpRZCyuNB2rzqz2WYHH20IQdutu87jffW2dV26D3Nw8SJCE1LNdXdu9akes3VMXolkNsLJ5MW2Hw==", "dependencies": [ - "@discordeno/gateway@19.0.0-next.b1bfe94", - "@discordeno/rest@19.0.0-next.b1bfe94", - "@discordeno/types@19.0.0-next.b1bfe94", - "@discordeno/utils@19.0.0-next.b1bfe94" - ] - }, - "@discordeno/bot@21.0.0": { - "integrity": "sha512-x6EcVHBvWIhjY5/lcwgZzzCiqdpKFZqu2qUaZqKb7RYS8L8Q8zY40hCnbToVehLB8+BGcnHzxCeEvWWg8tnT/g==", - "dependencies": [ - "@discordeno/gateway@21.0.0", - "@discordeno/rest@21.0.0", - "@discordeno/types@21.0.0", - "@discordeno/utils@21.0.0" + "@discordeno/gateway", + "@discordeno/rest", + "@discordeno/types", + "@discordeno/utils" ] }, "@discordeno/gateway@19.0.0-next.b1bfe94": { "integrity": "sha512-rNkcCua4Inx8NkuCjbuRBAAg+AIg1qYb24Fq6/Y2+1s+iO0VSQ/ZK8PRNbI2gSpAtAbfndvxA9kyU1ggwwLjNw==", "dependencies": [ - "@discordeno/types@19.0.0-next.b1bfe94", - "@discordeno/utils@19.0.0-next.b1bfe94", - "ws" - ] - }, - "@discordeno/gateway@21.0.0": { - "integrity": "sha512-ur5Hatd1x86PPI4UnXKghAWat3vS90NvLJcpOSu1B1gYSENRZow8dohZ8Ov58SXWq5nZVuBYDJNCR248pWJvrg==", - "dependencies": [ - "@discordeno/types@21.0.0", - "@discordeno/utils@21.0.0", - "fzstd", + "@discordeno/types", + "@discordeno/utils", "ws" ] }, "@discordeno/rest@19.0.0-next.b1bfe94": { "integrity": "sha512-lLeP3hmMM0GFsO+VA3f9EKOwfIo1HvG1hudtlC1Er6BFWgArpz0/VizHbOyOr5SzZuzrQyfcBJJfEhC+48TsRg==", "dependencies": [ - "@discordeno/types@19.0.0-next.b1bfe94", - "@discordeno/utils@19.0.0-next.b1bfe94" - ] - }, - "@discordeno/rest@21.0.0": { - "integrity": "sha512-ew5ddhUd7Qyv/GSzCy42bEmRv0yr2PspCMsLD/NeMiTLd3+OrVN5pAxBN9z+9JpS/daiiD/PVmvuUAVx/nXTEw==", - "dependencies": [ - "@discordeno/types@21.0.0", - "@discordeno/utils@21.0.0" + "@discordeno/types", + "@discordeno/utils" ] }, "@discordeno/types@19.0.0-next.b1bfe94": { "integrity": "sha512-X1MmdPFMyzjxFEANEPrrBjdJDJBAz4RTa1vpVlMp46C3dPqTwjMwijaPhPgPnFiSwt01lJ8WaFDpMvfqOwpQNg==" }, - "@discordeno/types@21.0.0": { - "integrity": "sha512-TUZAEqqlXRNQji+NCaQo8DruzI8rXbBvMaZYsZvN9f03PrdSddzMOy3cjs4eeL6ZMVocmMVRIaVnB713blylCw==" - }, "@discordeno/utils@19.0.0-next.b1bfe94": { "integrity": "sha512-Y+j3G83vCVXiNSEQlFR9WWJ6GZhvBmIfFjb03zFcmHa20nHExILJJBEyDpS+ptziEyF7jB+2hNw5I/SKn8Zm2w==", "dependencies": [ - "@discordeno/types@19.0.0-next.b1bfe94" + "@discordeno/types" ] }, - "@discordeno/utils@21.0.0": { - "integrity": "sha512-I7I3Szlk+LkT/CRmJJiLPsjuBUjbuXUCvOzsgWCltkxDMIGmQeNoQtFK7t89V1Gcc4icsrnHVMho1BcaAITijg==", + "@discordjs/builders@1.10.1": { + "integrity": "sha512-OWo1fY4ztL1/M/DUyRPShB4d/EzVfuUvPTRRHRIt/YxBrUYSz0a+JicD5F5zHFoNs2oTuWavxCOVFV1UljHTng==", "dependencies": [ - "@discordeno/types@21.0.0" + "@discordjs/formatters", + "@discordjs/util", + "@sapphire/shapeshift", + "discord-api-types", + "fast-deep-equal", + "ts-mixer", + "tslib" + ] + }, + "@discordjs/collection@1.5.3": { + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==" + }, + "@discordjs/collection@2.1.1": { + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==" + }, + "@discordjs/formatters@0.6.0": { + "integrity": "sha512-YIruKw4UILt/ivO4uISmrGq2GdMY6EkoTtD0oS0GvkJFRZbTSdPhzYiUILbJ/QslsvC9H9nTgGgnarnIl4jMfw==", + "dependencies": [ + "discord-api-types" + ] + }, + "@discordjs/rest@2.4.3": { + "integrity": "sha512-+SO4RKvWsM+y8uFHgYQrcTl/3+cY02uQOH7/7bKbVZsTfrfpoE62o5p+mmV+s7FVhTX82/kQUGGbu4YlV60RtA==", + "dependencies": [ + "@discordjs/collection@2.1.1", + "@discordjs/util", + "@sapphire/async-queue", + "@sapphire/snowflake", + "@vladfrangu/async_event_emitter", + "discord-api-types", + "magic-bytes.js", + "tslib", + "undici@6.21.1" + ] + }, + "@discordjs/util@1.1.1": { + "integrity": "sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==" + }, + "@discordjs/ws@1.2.1": { + "integrity": "sha512-PBvenhZG56a6tMWF/f4P6f4GxZKJTBG95n7aiGSPTnodmz4N5g60t79rSIAq7ywMbv8A4jFtexMruH+oe51aQQ==", + "dependencies": [ + "@discordjs/collection@2.1.1", + "@discordjs/rest", + "@discordjs/util", + "@sapphire/async-queue", + "@types/ws", + "@vladfrangu/async_event_emitter", + "discord-api-types", + "tslib", + "ws" ] }, "@fastify/busboy@2.1.1": { "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==" }, + "@sapphire/async-queue@1.5.5": { + "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==" + }, + "@sapphire/shapeshift@4.0.0": { + "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", + "dependencies": [ + "fast-deep-equal", + "lodash" + ] + }, + "@sapphire/snowflake@3.5.3": { + "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==" + }, "@types/node@18.16.19": { "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==" }, + "@types/node@22.12.0": { + "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "dependencies": [ + "undici-types@6.20.0" + ] + }, "@types/node@22.14.1": { "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", "dependencies": [ - "undici-types" + "undici-types@6.21.0" ] }, + "@types/ws@8.18.1": { + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dependencies": [ + "@types/node@22.12.0" + ] + }, + "@vladfrangu/async_event_emitter@2.4.6": { + "integrity": "sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==" + }, "circularjs@0.1.3": { "integrity": "sha512-RVp6t82JlYMz6CxtGJVoncK7StrDuAIaihiE3dC4T3gE/Pko3ZGxoDibOctjcJKxAIb4C2avHOFA9mDxCKGbbw==", "dependencies": [ "underscore" ] }, - "discordeno@21.0.0": { - "integrity": "sha512-d3D/HpC39YGInmxy2HK90kPpMMu2gYYsWuwtEEFPWpq2hlR9dvad4ihvLursPz5bj4Ob1NWOgPv3kz/bwMSIpw==", + "discord-api-types@0.37.120": { + "integrity": "sha512-7xpNK0EiWjjDFp2nAhHXezE4OUWm7s1zhc/UXXN6hnFFU8dfoPHgV0Hx0RPiCa3ILRpdeh152icc68DGCyXYIw==" + }, + "discord.js@14.18.0": { + "integrity": "sha512-SvU5kVUvwunQhN2/+0t55QW/1EHfB1lp0TtLZUSXVHDmyHTrdOj5LRKdR0zLcybaA15F+NtdWuWmGOX9lE+CAw==", "dependencies": [ - "@deno/shim-deno", - "@deno/shim-timers", - "undici", - "ws" + "@discordjs/builders", + "@discordjs/collection@1.5.3", + "@discordjs/formatters", + "@discordjs/rest", + "@discordjs/util", + "@discordjs/ws", + "@sapphire/snowflake", + "discord-api-types", + "fast-deep-equal", + "lodash.snakecase", + "tslib", + "undici@6.21.1" ] }, - "discordeno@21.0.0": { - "integrity": "sha512-NX1x5GtHbrNhpeahfHw+2A6/3bpec2obNjIZ/mkBUGWcpLWG/ZgJSIkkdQIxcrnQ3loQooo/5IpBucnFTiGATA==", - "dependencies": [ - "@discordeno/bot@21.0.0", - "@discordeno/gateway@21.0.0", - "@discordeno/rest@21.0.0", - "@discordeno/types@21.0.0", - "@discordeno/utils@21.0.0" - ] - }, - "fzstd@0.1.1": { - "integrity": "sha512-dkuVSOKKwh3eas5VkJy1AW1vFpet8TA/fGmVA5krThl8YcOVE/8ZIoEA1+U1vEn5ckxxhLirSdY837azmbaNHA==" + "fast-deep-equal@3.1.3": { + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "gson@0.1.5": { "integrity": "sha512-EK+P+vGnmekaPMEg9qC23hTNgRaJ6GfQFS73sYgzvFoVYLMX7dVOUVDbPXRnNtnr99rf6DpOn4wlSbS0puN8AQ==", @@ -187,9 +235,27 @@ "isexe@2.0.0": { "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "lodash.snakecase@4.1.1": { + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "lodash@4.17.21": { + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "magic-bytes.js@1.10.0": { + "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==" + }, + "ts-mixer@6.0.4": { + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + }, + "tslib@2.8.1": { + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, "underscore@1.6.0": { "integrity": "sha512-z4o1fvKUojIWh9XuaVLUDdf86RQiq13AC1dmHbTpoyuu+bquHms76v16CjycCbec87J7z0k//SiQVk0sMdFmpQ==" }, + "undici-types@6.20.0": { + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, "undici-types@6.21.0": { "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" }, @@ -199,6 +265,9 @@ "@fastify/busboy" ] }, + "undici@6.21.1": { + "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==" + }, "which@2.0.2": { "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": [ @@ -221,7 +290,7 @@ "jsr:@melvdouc/xml-parser@~0.1.1", "jsr:@std/assert@1", "npm:@types/node@^22.14.1", - "npm:discordeno@21.0.0" + "npm:discord.js@14.18.0" ] } } diff --git a/src/bot.ts b/src/bot.ts index df4bdb3..89323f8 100755 --- a/src/bot.ts +++ b/src/bot.ts @@ -1,65 +1,24 @@ -import { - Bot, - createBot, - createDesiredPropertiesObject, - Intents, - Message, - TransformersDesiredProperties, -} from "@discordeno"; -import { messagehandler } from "./messages.ts"; +import { Client, Events, GatewayIntentBits } from '@discordeno'; import { EnvConst, loadConfig } from "@root/core/configLoader.ts"; +import { messagehandler } from "@root/messages.ts"; const env: EnvConst = loadConfig(); -const desiredProperties = createDesiredPropertiesObject({ - interaction: { - id: true, - type: true, - data: true, - token: true, - guildId: true, - member: true, - }, - guild: { - id: true, - name: true, - roles: true, - ownerId: true, - }, - role: { - id: true, - guildId: true, - permissions: true, - }, - member: { - id: true, - roles: true, - }, - channel: { - id: true, - }, - user: { - id: true, - username: true, - discriminator: true, - }, + +const client = new Client({ intents: [GatewayIntentBits.Guilds] }); + +client.on(Events.ClientReady, readyClient => { + console.log(`Logged in as ${readyClient.user.tag}!`); }); -interface BotDesiredProperties extends Required {} +client.on(Events.InteractionCreate, async interaction => { + if (!interaction.isChatInputCommand()) return; -const rawBot = createBot({ - token: env.BOT_TOKEN, - intents: Intents.Guilds, - desiredProperties: desiredProperties as TransformersDesiredProperties, - events: { - ready() { - console.log("Bot is ready!"); - }, - async messageCreate(message) { - await messagehandler(rawBot, message as Message) - } - }, + messagehandler(interaction.command) + + if (interaction.commandName === 'ping') { + await interaction.reply('Pong!'); + } }); -// Setup desired properties -await rawBot.start() +client.login(env.BOT_TOKEN); \ No newline at end of file diff --git a/src/messages.ts b/src/messages.ts index 3e8fcfb..807d00b 100755 --- a/src/messages.ts +++ b/src/messages.ts @@ -7,20 +7,16 @@ if (!prefix) { throw new Error("BOT_PREFIX is missing!"); } -export async function messagehandler(bot: Bot, message: Message) { +export async function messagehandler(message: Message) { console.debug({message}) const command = message.content.split(" ")[0]; try { switch (command) { - case `${prefix}rule`: - if (message.thread?.nsfw) { - await rule34MessageHandler(bot, message); - } + case `${prefix}rule`: { + await rule34MessageHandler(message); break; case `${prefix}yande`: - if (message.thread?.nsfw) { - await yandereMessageHandler(bot, message); - } + await yandereMessageHandler(message); break; } } catch (e) { diff --git a/src/plugins/rule34/messages.ts b/src/plugins/rule34/messages.ts index bd771e7..23b6d2a 100644 --- a/src/plugins/rule34/messages.ts +++ b/src/plugins/rule34/messages.ts @@ -4,7 +4,7 @@ import { logMessage } from "@root/logging.ts"; import { defaultString } from "@root/defaultString.ts"; import { Embed } from "@root/structures/embeds.ts"; -export async function rule34MessageHandler(bot: Bot, message: Message) { +export async function rule34MessageHandler(message: Message) { const command = message.content.trim().split(" ").slice(1).join(" "); if (command === "drop") { bot.helpers.sendMessage(message.channelId, { diff --git a/src/plugins/yandere/messages.ts b/src/plugins/yandere/messages.ts index 1a3a60a..a880074 100644 --- a/src/plugins/yandere/messages.ts +++ b/src/plugins/yandere/messages.ts @@ -2,7 +2,7 @@ import { Bot, DiscordEmbed, Message} from "@discordeno"; import { logMessage } from "@root/logging.ts"; import { getPosts } from "@root/plugins/yandere/api/api.ts"; -export async function yandereMessageHandler(bot: Bot, message: Message) { +export async function yandereMessageHandler(message: Message) { const command = message.content.split(" ").slice(1).join(" "); const args = command.match(/(\[.+\])/g) if (command === "drop") { @@ -21,4 +21,4 @@ export async function yandereMessageHandler(bot: Bot, message: Message) { }); } } -} \ No newline at end of file +}