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:
@@ -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)
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user