From cd1db9d6eb0c7a83f688720fd9460a2fa903422b Mon Sep 17 00:00:00 2001 From: Shni Date: Tue, 14 Oct 2025 12:02:37 -0500 Subject: [PATCH] =?UTF-8?q?Refactor=20la=20validaci=C3=B3n=20de=20enlaces?= =?UTF-8?q?=20de=20Discord=20para=20priorizar=20la=20extracci=C3=B3n=20de?= =?UTF-8?q?=20c=C3=B3digos=20de=20invitaci=C3=B3n=20y=20mejorar=20la=20ges?= =?UTF-8?q?ti=C3=B3n=20de=20excepciones.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/events/extras/alliace.ts | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/events/extras/alliace.ts b/src/events/extras/alliace.ts index fa801c9..1b16d7f 100644 --- a/src/events/extras/alliace.ts +++ b/src/events/extras/alliace.ts @@ -9,7 +9,7 @@ import { sendComponentsV2Message } from "../../core/api/discordAPI"; const URL_REGEX = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)/gi; -// Dominios de Discord válidos para invitaciones +// (kept for reference) dominios de Discord válidos para invitaciones const DISCORD_DOMAINS = [ "discord.gg", "discord.com/invite", @@ -57,6 +57,7 @@ export async function alliance(message: Message) { } // Validar que los enlaces sean de Discord (invitaciones) + // Usar extracción de código de invitación para validar (maneja query params como ?event=...) const validDiscordLinks = validateDiscordLinks(links); if (validDiscordLinks.length === 0) { @@ -78,9 +79,24 @@ function extractValidLinks(content: string): string[] { } function validateDiscordLinks(links: string[]): string[] { - return links.filter((link) => { - return DISCORD_DOMAINS.some((domain) => link.includes(domain)); - }); + // Priorizar la extracción del código de invitación: si podemos extraerlo, lo consideramos válido. + const results: string[] = []; + for (const link of links) { + try { + const code = extractInviteCode(link); + if (code) { + results.push(link); + continue; + } + // Fallback rápido: comprobar dominios conocidos (por compatibilidad) + if (DISCORD_DOMAINS.some((d) => link.includes(d))) { + results.push(link); + } + } catch { + // ignorar enlaces que causen excepciones + } + } + return results; } async function processValidLink( @@ -561,9 +577,8 @@ async function processConfigVariables( } if (Array.isArray(config)) { - const processedArray = []; + const processedArray: any[] = []; for (const item of config) { - // @ts-ignore processedArray.push( await processConfigVariables(item, user, guild, userStats, inviteObject) );