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

Discord机器人发送私信遇DiscordAPIError[50006]错误,求解决方案

解决DiscordAPIError[50006]: Cannot send an empty message问题

核心问题分析

错误提示明确说明无法发送空消息,结合代码和请求体信息,主要存在两个关键问题:

  • send方法的参数传递逻辑错误,导致消息内容未被正确识别
  • 手动实例化UserManager属于冗余操作,不符合discord.js的使用规范

具体修复步骤

  1. 正确使用UserManager
    客户端实例client自带users属性,它本身就是UserManager的实例,无需手动执行new UserManager(client)。

  2. 修正消息发送逻辑
    createDM()返回的DMChannel对象,其send()方法仅需接收消息配置对象(如{ content: 消息文本 }),不需要额外传入用户ID。更简便的方式是直接调用user.send(),discord.js会自动创建DM通道。

  3. 校验消息内容有效性
    提前检查authorsText和reviewrsText是否为有效内容,避免出现undefined或空字符串的情况。

修正后的代码示例

if (type === 'opened') {
  const { authorsText, reviewrsText, passed } = DataBase.setConflicts(
    source_branch,
    has_conflicts,
    diverged_commits_count,
    authorData.discord,
    title
  );

  if (passed === false) {
    try {
      // 检查作者消息内容
      if (authorsText && authorsText.trim()) {
        const authorUser = await client.users.fetch(authorData.discord);
        await authorUser.send({ content: authorsText });
      } else {
        console.warn('authorsText为空,跳过发送');
      }

      // 检查审核人消息内容
      if (reviewrsText && reviewrsText.trim()) {
        const assigneeUser = await client.users.fetch(assigneeData.discord);
        await assigneeUser.send({ content: reviewrsText });
      } else {
        console.warn('reviewrsText为空,跳过发送');
      }
    } catch (error) {
      console.error('Error al enviar mensajes directos:', error);
    }
  }
}

额外注意事项

  • 使用client.users.fetch()获取用户时,需确保机器人与用户处于同一服务器,且用户未屏蔽机器人
  • 若需发送嵌入消息、交互组件等复杂内容,可在send()的配置对象中添加对应字段(如embeds、components)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:35:18