如何在Discord.js中向指定用户ID发送私信(DM)
解决Discord.js机器人向指定用户发送私信的问题
嘿,我来帮你搞定这个向特定ID用户发DM的需求!你的代码里有几个小问题需要调整,我一步步给你理清楚:
首先,直接用message.send是不对的——你需要先通过目标用户ID获取到对应的用户对象,再调用它的send方法来发私信。另外你的模板字符串还有语法错误,以及用户名称的获取方式也需要修正。
这里是修正后的完整代码,我加了详细注释:
const Discord = require('discord.js'); const bot = new Discord.Client(); const PREFIX = "!!"; // 把目标用户ID存成常量,方便后续修改 const TARGET_USER_ID = "206377170707152906"; bot.on("message", async message => { // 忽略机器人自己的消息,避免循环触发 if (message.author.bot) return; if (message.content.toLowerCase().startsWith(`${PREFIX}suggest`)) { try { // 通过ID获取目标用户对象,注意用await处理异步操作 const targetUser = await bot.users.fetch(TARGET_USER_ID); // 给目标用户发私信,修正模板字符串语法,用username获取正确用户名 await targetUser.send(`The user ${message.author.username} has given a suggestion; "${message.content}"`); // 给发送命令的用户回复确认消息 await message.author.send(`The suggestion "${message.content}" has been sent!`); // 可选:在频道里给用户一个公开反馈 await message.reply("你的建议已经提交给管理员啦!"); } catch (error) { // 捕获发送失败的情况,比如用户关闭了陌生人私信、机器人无权限 console.error("发送私信失败:", error); await message.reply("抱歉,提交建议时出现了错误,请联系管理员处理!"); } return; } }); // 记得替换成你的机器人token bot.login("YOUR_BOT_TOKEN");
几个关键调整点:
- 获取目标用户对象:Discord.js v12及以上版本,获取不在当前服务器的用户必须用
bot.users.fetch()方法,不能直接通过ID索引。 - 错误处理:用
try/catch包裹异步操作,避免因用户无法接收DM导致机器人崩溃。 - 语法修正:修复了模板字符串的错误写法,把
{$message.author.name}改成${message.author.username}(新版本Discord.js不再使用name属性),同时补全了缺失的引号。 - 防循环机制:增加了忽略机器人自身消息的判断,避免触发无限循环。
这样调整后,你的机器人就能正确给指定ID的用户发送私信,同时给提交建议的用户清晰反馈啦!
内容的提问来源于stack exchange,提问作者user9824370




