Discord机器人无法检测特定用户消息中的链接,求解决方案
Discord机器人链接检测失效的解决办法
问题根源
- 逻辑嵌套错误:你当前的三个
if是层层嵌套的,只有当同时满足用户ID正确、消息含https链接、消息有附件三个条件时才会触发表情反应,完全不符合你“满足任一条件(链接/图片/文件)就反应”的需求。 - 链接检测范围太窄:
- 链接可能以
http://开头,而非仅https:// - Discord会自动将部分链接转为嵌入消息,此时原始链接不会出现在
message.content中,而是存储在message.embeds里 - 还可能存在短链接、不带协议的链接(比如
www.example.com)这类场景
- 链接可能以
修正后的代码
client.on('messageCreate', message => { // 跳过非目标用户的消息 if (message.author.id !== '217900978756780032') return; // 检测是否包含链接(覆盖http/https/无协议www链接/嵌入链接) const hasLink = /https?:\/\/|www\./.test(message.content) || message.embeds.some(embed => embed.url); // 检测是否有附件(图片/文件) const hasAttachment = message.attachments.size > 0; // 任一条件满足则添加表情反应 if (hasLink || hasAttachment) { message.react('<:facebook:1009793997872562287>'); message.react('<a:siren:886047171768635432>'); } })
代码说明
- 先过滤非目标用户的消息,减少无效逻辑执行
- 用正则表达式
/https?:\/\/|www\./匹配绝大多数常见链接格式 - 新增
message.embeds检查,捕获被Discord自动转换的嵌入链接 - 用
||实现“或”逻辑,只要链接或附件任一存在就触发反应 - 代码结构更简洁,可读性更强
内容的提问来源于stack exchange,提问作者PestFromTheWest
相关产品推荐
相关产品推荐

