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

Discord机器人如何在embed中@提及用户?代码触发异常排查

问题根因

  • 当前代码使用全等判断message.content === ".help",仅当消息内容完全等于.help、无任何其他附加内容时才会触发后续逻辑。带@用户的.help指令消息内容会包含提及内容,无法匹配该判断条件,因此代码不会执行。
  • 直接将User对象传入setDescription()存在版本兼容问题,部分discord.js版本无法自动将用户对象转换为@提及格式,会导致Embed内容异常。

修复方案

调整指令匹配规则为判断消息以.help开头,补充用户提及的空值校验,同时优化提及格式输出,修复后的代码如下:

client.on("message", (message) => {
    // 匹配以.help开头的消息,兼容后面带@用户、空格的场景
    if (message.content.startsWith(".help")){
        let user = message.mentions.users.first(); 
        const boopembed = new discord.MessageEmbed()
            .setColor('BB250C')
            .setTitle(':p')
            // 空值处理:未提及用户时显示提示,提及用户则转成@格式
            .setDescription(user ? user.toString() : "未提及任何用户")
        // 如果你使用的是discord.js v13及以上版本,需要改为 message.channel.send({embeds: [boopembed]})
        message.channel.send({embed: boopembed})      
    }
})

可选优化

如果需要避免.helpabc这类误触发的情况,可以将判断条件替换为正则匹配,仅匹配.help后面跟空格、@用户的合法格式:

if (/^\.help(\s+<@!?\d+>)*\s*$/.test(message.content))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:36:00