如何删除Discord中包含非www.youtube.com或www.twitter.com链接的消息
Discord服务器白名单链接过滤实现方案
核心逻辑
- 用正则匹配消息中所有HTTP/HTTPS格式的链接
- 校验所有匹配到的链接域名是否在白名单范围内
- 只要存在任意一个非白名单链接,直接删除对应消息
完整可运行代码
// 配置放行域名白名单,可按需追加其他允许的域名 const allowDomains = ['www.youtube.com', 'www.twitter.com'] // 通用HTTP/HTTPS链接匹配正则 const urlRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g const matchedUrls = message.content.match(urlRegex) if (matchedUrls) { // 校验是否存在非法链接 const hasInvalidUrl = matchedUrls.some(url => { try { const domain = new URL(url).hostname return !allowDomains.includes(domain) } catch (err) { // 格式异常的链接直接判定为非法 return true } }) if (hasInvalidUrl) { message.delete() } }
可选优化项
- 如果需要放行不带www的域名、短链等,直接在
allowDomains数组中添加对应域名即可,比如追加youtube.com、youtu.be、twitter.com、x.com - 如果需要适配无HTTP前缀的链接,可修改正则规则增加对应匹配逻辑
- 可在删除消息的同时增加违规用户警告、禁言等联动操作,仅需要在
message.delete()后追加对应逻辑即可
内容的提问来源于stack exchange,提问作者8less
相关产品推荐
相关产品推荐

