Refactor la validación de enlaces de Discord para priorizar la extracción de códigos de invitación y mejorar la gestión de excepciones.

This commit is contained in:
Shni
2025-10-14 12:02:37 -05:00
parent eb957df1e6
commit cd1db9d6eb

View File

@@ -9,7 +9,7 @@ import { sendComponentsV2Message } from "../../core/api/discordAPI";
const URL_REGEX = const URL_REGEX =
/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)/gi; /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 = [ const DISCORD_DOMAINS = [
"discord.gg", "discord.gg",
"discord.com/invite", "discord.com/invite",
@@ -57,6 +57,7 @@ export async function alliance(message: Message) {
} }
// Validar que los enlaces sean de Discord (invitaciones) // 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); const validDiscordLinks = validateDiscordLinks(links);
if (validDiscordLinks.length === 0) { if (validDiscordLinks.length === 0) {
@@ -78,9 +79,24 @@ function extractValidLinks(content: string): string[] {
} }
function validateDiscordLinks(links: string[]): string[] { function validateDiscordLinks(links: string[]): string[] {
return links.filter((link) => { // Priorizar la extracción del código de invitación: si podemos extraerlo, lo consideramos válido.
return DISCORD_DOMAINS.some((domain) => link.includes(domain)); 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( async function processValidLink(
@@ -561,9 +577,8 @@ async function processConfigVariables(
} }
if (Array.isArray(config)) { if (Array.isArray(config)) {
const processedArray = []; const processedArray: any[] = [];
for (const item of config) { for (const item of config) {
// @ts-ignore
processedArray.push( processedArray.push(
await processConfigVariables(item, user, guild, userStats, inviteObject) await processConfigVariables(item, user, guild, userStats, inviteObject)
); );