You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动