You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js机器人删除成员发送URL的实现问题及解决方法

解决Discord.js机器人检测并删除含URL消息的问题

我之前折腾过类似的需求,要让Discord机器人自动清理成员发的各种链接——不管是带https、www的,还是像example.com这种不带前缀的,手写正则真的太容易踩坑了,要么误判正常文本,要么漏过一些特殊格式的链接。

两种可行思路分享

  • 手写正则(不推荐):如果非要自己写,得覆盖多种格式,比如匹配https?://\S+、www\.\S+、[\w-]+\.\w+这类,但这种方式很容易误判(比如用户打个www开头的普通单词),而且很难兼顾所有URL格式,维护起来也麻烦。
  • 使用成熟的第三方包(强烈推荐):你提到的linkify这个npm包真的是完美解决方案!它能智能识别各种形式的链接,不管有没有协议前缀、是什么类型的协议,都能精准检测出来。

具体实现代码示例

先安装依赖:

npm install linkifyjs

然后在Discord.js的消息监听事件里集成:

const { Client, GatewayIntentBits } = require('discord.js');
const linkify = require('linkifyjs');

// 初始化机器人,注意要开启必要的意图
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent // 必须开启这个才能读取消息内容
  ]
});

client.on('messageCreate', async (message) => {
  // 跳过机器人自己发送的消息,避免循环
  if (message.author.bot) return;

  // 用linkify检测消息中是否包含链接
  const detectedLinks = linkify.find(message.content);
  if (detectedLinks.length > 0) {
    try {
      // 删除含链接的消息
      await message.delete();
      // 发送提示消息
      await message.channel.send(`${message.author},请勿在频道内发送链接哦!`);
    } catch (err) {
      console.error('处理链接消息时出错:', err);
    }
  }
});

// 登录机器人
client.login('你的机器人令牌');

这个包的优势在于,它不仅能识别标准的http/https链接,像ftp://、mailto:、甚至不带任何前缀的域名(比如discord.com)都能准确检测到,完全不用自己操心各种边缘情况。

内容的提问来源于stack exchange,提问作者Ken Senpai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:53:57