Refactor la carga del módulo ModalSubmitInteraction para mejorar la compatibilidad y la gestión de errores

This commit is contained in:
2025-10-11 19:50:36 -05:00
parent 959ade0c3d
commit 3447ae64d5
2 changed files with 51 additions and 15 deletions

3
.gitignore vendored
View File

@@ -11,3 +11,6 @@ qodana.yaml
# Generados
/src/generated/prisma/
# Binarios
amayo

View File

@@ -5,13 +5,32 @@
Source of truth: node_modules/discord.js/src/structures/ModalSubmitInteraction.js
*/
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { Collection } = require('@discordjs/collection');
const { Collection } = require("@discordjs/collection");
// eslint-disable-next-line @typescript-eslint/no-var-requires
const ModalModule = require('../../../node_modules/discord.js/src/structures/ModalSubmitInteraction.js');
const ModalModule = (() => {
try {
const djs = require("discord.js");
if (djs.ModalSubmitInteraction)
return { ModalSubmitInteraction: djs.ModalSubmitInteraction };
if (djs.structures && djs.structures.ModalSubmitInteraction)
return { ModalSubmitInteraction: djs.structures.ModalSubmitInteraction };
// Try to resolve internal path at runtime without static import
return require(require.resolve(
"discord.js/src/structures/ModalSubmitInteraction.js"
));
} catch {
try {
// Fallback to node_modules relative path if needed
return require("../../../node_modules/discord.js/src/structures/ModalSubmitInteraction.js");
} catch {
return null;
}
}
})();
export function applyModalSubmitInteractionPatch() {
const ModalSubmitInteraction = ModalModule?.ModalSubmitInteraction;
if (!ModalSubmitInteraction || typeof ModalSubmitInteraction !== 'function') {
if (!ModalSubmitInteraction || typeof ModalSubmitInteraction !== "function") {
return; // Nothing to patch
}
@@ -19,16 +38,21 @@ export function applyModalSubmitInteractionPatch() {
// Override with a safer version
// eslint-disable-next-line func-names
ModalSubmitInteraction.prototype.transformComponent = function (rawComponent: any, resolved: any) {
if ('components' in rawComponent) {
ModalSubmitInteraction.prototype.transformComponent = function (
rawComponent: any,
resolved: any
) {
if ("components" in rawComponent) {
return {
type: rawComponent.type,
id: rawComponent.id,
components: rawComponent.components.map((component: any) => this.transformComponent(component, resolved)),
components: rawComponent.components.map((component: any) =>
this.transformComponent(component, resolved)
),
};
}
if ('component' in rawComponent) {
if ("component" in rawComponent) {
return {
type: rawComponent.type,
id: rawComponent.id,
@@ -41,14 +65,17 @@ export function applyModalSubmitInteractionPatch() {
id: rawComponent.id,
};
if ('custom_id' in rawComponent) data.customId = rawComponent.custom_id;
if ('value' in rawComponent) data.value = rawComponent.value;
if ("custom_id" in rawComponent) data.customId = rawComponent.custom_id;
if ("value" in rawComponent) data.value = rawComponent.value;
if (rawComponent.values) {
data.values = rawComponent.values;
if (resolved) {
const collect = (resolvedData: any, resolver: (val: any, id: string) => any) => {
const collect = (
resolvedData: any,
resolver: (val: any, id: string) => any
) => {
const collection = new Collection();
for (const value of data.values as string[]) {
if (resolvedData?.[value]) {
@@ -59,12 +86,15 @@ export function applyModalSubmitInteractionPatch() {
return collection.size ? collection : null;
};
const users = collect(resolved.users, (user: any) => this.client.users._add(user));
const users = collect(resolved.users, (user: any) =>
this.client.users._add(user)
);
if (users) data.users = users;
const channels = collect(
resolved.channels,
(channel: any) => this.client.channels._add(channel, this.guild) ?? channel,
(channel: any) =>
this.client.channels._add(channel, this.guild) ?? channel
);
if (channels) data.channels = channels;
@@ -83,7 +113,10 @@ export function applyModalSubmitInteractionPatch() {
});
if (members) data.members = members;
const roles = collect(resolved.roles, (role: any) => this.guild?.roles._add(role) ?? role);
const roles = collect(
resolved.roles,
(role: any) => this.guild?.roles._add(role) ?? role
);
if (roles) data.roles = roles;
}
}
@@ -92,6 +125,6 @@ export function applyModalSubmitInteractionPatch() {
};
// Keep a reference in case we need to restore
(ModalSubmitInteraction.prototype as any).__originalTransformComponent = original;
(ModalSubmitInteraction.prototype as any).__originalTransformComponent =
original;
}