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

如何让discord.js v14机器人回复时@提及用户?

解决discord.js v14机器人@提及用户的错误

你的问题核心是对discord.js v14里User对象的属性用法搞错了,下面梳理错误点和正确写法:

错误原因分析

  • message.author.userId()是完全错误的写法:message.author本身就是User对象,它的ID是属性而非方法,不需要加括号调用,正确的属性名是id,不是userId。
  • .user.id多余:message.author已经是发送消息的用户对象,不需要额外调用.user。
  • .tag和.username不能用来@用户:这两个属性分别是用户的「名称#标签」和纯用户名,不是Discord识别的用户ID,用它们拼<@>格式不会触发@提及。

正确写法示例

方式1:直接用用户ID拼接@格式

client.on("messageCreate", (message) => {
    if (message.content.startsWith("test")) {
        const userId = message.author.id; // 正确获取用户ID
        message.channel.reply(`Hello <@${userId}>`);
    }
});

方式2:用User对象的toString()方法(更简洁)

discord.js的User对象自带toString()方法,会直接返回<@用户ID>格式的字符串,不用手动拼接:

client.on("messageCreate", (message) => {
    if (message.content.startsWith("test")) {
        const userMention = message.author.toString();
        message.channel.reply(`Hello ${userMention}`);
    }
});

方式3:直接用reply的提及特性(如果只是要回复时@用户)

如果你只是想在回复消息时@发送者,甚至可以不用手动拼接,message.reply默认会自动提及用户:

client.on("messageCreate", (message) => {
    if (message.content.startsWith("test")) {
        message.reply("Hello!"); // 这条回复会自动@消息发送者
    }
});

关于雪花ID的说明

你提到的雪花ID就是Discord给每个用户、频道、服务器分配的唯一标识字符串,用<@雪花ID>的格式就能在消息里正确触发@提及,Discord会自动把这个字符串转换成可点击的用户@标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:35:29