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

