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
相关产品推荐
相关产品推荐

