Refactor message handling functions for improved clarity and maintainability

This commit is contained in:
fzzin
2025-04-14 19:43:27 +02:00
parent 212f6f60b0
commit 59803fabd5
6 changed files with 155 additions and 131 deletions

View File

@@ -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",

195
deno.lock generated
View File

@@ -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"
]
}
}

View File

@@ -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<typeof desiredProperties> {}
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);

View File

@@ -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) {

View File

@@ -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, {

View File

@@ -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) {
});
}
}
}
}