Soy nuevo aquí, y recientemente me he enfrentado a un gran problema con Discord Scam Links en mi servidor Discord, probé eso:
if(message.content.includes("discordscam.com")) { message.delete() }Pero esta es una muy mala manera de combatir las estafas ya que solo eliminará una URL específica y no otras, me di cuenta de que debería usar RegExp, pero, desafortunadamente, no entiendo cómo.
Debido a que el contenido puede incluir varias direcciones URL, deberá verificar cada palabra. Primero filtre palabras a cualquier URL. Luego, desde allí, verifique si alguna de las URL no es Twitter o YouTube.
La primera expresión regular es para url /^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_\+.~#?&\/\/=]*)/
La siguiente expresión regular es para direcciones URL permitidas (youtube|twitter).com
// split contents by word, check each word function shouldDelete(contents){ let urlFilter = contents.split(' ').map(word => { let t = word.match(/^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_\+.~#?&\/\/=]*)/) return t?.length > 0 ? t[0] : null }).filter(url=>{ if(!url || /(youtube|twitter).com/g.test(url)) return else return url }) if(urlFilter.length > 0){ return `"${contents}" should delete` }else{ return `"${contents}" shouldn't delete` } } let sampleContents=[ 'twitter.com', 'youtube.com', 'discordscam.com', 'discordscam.com and youtube.com', 'https://www.youtube.com/watch?time_continue=2&v=dQw4w9WgXcQ&feature=emb_logo' ] sampleContents.forEach(item=>{ console.log(shouldDelete(item)) })¡Espero que esto te ayude a orientarte en la dirección correcta!
Tengo una expresión regular que se valida en función de la cadena que tiene youtube o twitter, seguida de .com y no puede tener más puntos después.
const urlTest = str => /^.*(youtube|twitter)\.com[^.]*$/.test(str); console.log(` testing "youtube.com" good? ${urlTest("youtube.com")} testing "twitter.com" good? ${urlTest("twitter.com")} testing "youtube.com.net" good? ${urlTest("youtube.com.net")} testing "https://somesite.com/nothing" good? ${urlTest("https://somesite.com/nothing")} testing "https://youtube.com/somethingelse" good? ${urlTest("https://youtube.com/somethingelse")} `);