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

如何用discord.js v12.5.1非异步方式按ID给用户发私信

Discord.js v12.5.1 实现私信发送功能(非async/await版本)

修正原代码语法问题

你提供的原代码存在语法错误(缺少闭合括号),先补充完整基础结构:

client.once('ready', () => {
  // 私信发送逻辑写在这里
});

非async/await实现方案

以下是两种基于回调链的实现方式,适配discord.js v12.5.1:

方案1:优先从缓存获取用户,缓存不存在则调用API

client.once('ready', () => {
  const targetUserId = "替换为目标用户ID";
  const cachedUser = client.users.cache.get(targetUserId);

  if (cachedUser) {
    cachedUser.send("测试私信内容")
      .then(() => log.info(`成功给 ${cachedUser.tag} 发送私信`))
      .catch(err => log.error(`发送失败: ${err.message}`));
  } else {
    // 从Discord API获取用户,不缓存结果(第二个参数设为false)
    client.users.fetch(targetUserId, false)
      .then(user => {
        user.send("测试私信内容")
          .then(() => log.info(`成功给 ${user.tag} 发送私信`))
          .catch(err => log.error(`发送失败: ${err.message}`));
      })
      .catch(err => log.error(`获取用户失败: ${err.message}`));
  }
});

方案2:直接从API获取用户

如果不确定用户是否在缓存中,可直接调用API获取,通过回调链处理结果:

client.once('ready', () => {
  client.users.fetch("替换为目标用户ID")
    .then(user => user.send("测试私信内容"))
    .then(() => log.info("私信发送成功"))
    .catch(err => log.error(`操作出错: ${err.message}`));
});

注意事项

  • 务必将代码中的"替换为目标用户ID"替换为实际的用户ID(字符串格式)
  • 确保目标用户未屏蔽机器人,且机器人与用户至少在一个共同服务器内,否则会发送失败
  • 错误处理不可省略,避免因异常导致程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:20:32