在 Discord.js 中检测消息中的链接
Posted
技术标签:
【中文标题】在 Discord.js 中检测消息中的链接【英文标题】:Detect links in messages in Discord.js 【发布时间】:2019-03-19 01:46:44 【问题描述】:我是 discord.js 的新手。我正在尝试检查消息中是否包含类似“嗨,我来自 discord.gg/xxxxx,现在我将向我的链接发送垃圾邮件”之类的链接。 如何检查消息是否包含链接?
【问题讨论】:
【参考方案1】:我不确定您是要专门检查不和谐的邀请链接,还是要检查所有链接。无论哪种方式,您都可以使用message.content.includes
。
示例:
bot.on('message', (message) => //whenever a message is sent
if (message.content.includes('discord.gg/'||'discordapp.com/invite/')) //if it contains an invite link
message.delete() //delete the message
.then(message.channel.send('Link Deleted:\n**Invite links are not permitted on this server**'))
)
【讨论】:
在你的代码中包含 discordapp.com/invite 也很重要,因为这样的链接可以用来绕过你的链接过滤。 现在您还必须包含discord.com/invite
,因为这些是将嵌入的有效邀请。【参考方案2】:
您所做的工作有效,但您不需要 .then()
,只需保留 message.channel.send()
原样即可。
【讨论】:
【参考方案3】:你可以试试这个:
bot.on(`message`, async message =>
const bannedWords = [`discord.gg`, `.gg/`, `.gg /`, `. gg /`, `. gg/`, `discord .gg /`, `discord.gg /`, `discord .gg/`, `discord .gg`, `discord . gg`, `discord. gg`, `discord gg`, `discordgg`, `discord gg /`]
try
if (bannedWords.some(word => message.content.toLowerCase().includes(word)))
if (message.author.id === message.guild.ownerID) return;
await message.delete();
await message.channel.send(`You cannot send invites to other Discord servers`);
catch (e)
console.log(e);
);
(缺少一个“)”)
【讨论】:
【参考方案4】:您可以使用Regular Expressions (RegEX) 进行检查
示例:
// The message to check for a Discord link
var message = "Hi, please join discord.gg/a2dsc for cool conversations";
// The message will be tested on "discord.gg/any character or digit"
var containsDiscordUrl = message.test(/discord.gg\/\w*\d*);
// If the test has found a URL..
if (containsDiscordUrl) // ... Do something
【讨论】:
【参考方案5】:我觉得这是最好的:
let regx = /^((?:https?:)?\/\/)?((?:www|m)\.)? ((?:discord\.gg|discordapp\.com))/g
let cdu = regx.test(message.content.toLowerCase().replace(/\s+/g, ''))
告诉我它是否有效!
【讨论】:
【参考方案6】:let regexp = /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d1,3)3)(?!(?:169\.254|192\.168)(?:\.\d1,3)2)(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d1,3)2)(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d1,2|2[0-4]\d|25[0-5]))2(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]2,)))(?::\d2,5)?(?:\/\S*)?$/;
我认为这对你有帮助。
【讨论】:
我们假设您发布答案是为了提供帮助;-) 首先,它有助于解释为什么您的答案比其他旧答案更好或不同。而且,看起来您正在添加另一个答案,所以这本身并不是一个答案。也许这应该是对其他答案的评论?或者您可以说“我会通过...改进 的答案” 请记住,答案的顺序会随着时间的推移而变化,因此您不能假设您的答案刚好高于或低于您正在改进的答案.以上是关于在 Discord.js 中检测消息中的链接的主要内容,如果未能解决你的问题,请参考以下文章
使用 discord.js 和 Node.js 清除所有不是图像或链接的消息 [关闭]