Discord机器人发送私信遇DiscordAPIError[50006]错误,求解决方案
解决DiscordAPIError[50006]: Cannot send an empty message问题
核心问题分析
错误提示明确说明无法发送空消息,结合代码和请求体信息,主要存在两个关键问题:
send方法的参数传递逻辑错误,导致消息内容未被正确识别- 手动实例化
UserManager属于冗余操作,不符合discord.js的使用规范
具体修复步骤
正确使用UserManager
客户端实例client自带users属性,它本身就是UserManager的实例,无需手动执行new UserManager(client)。修正消息发送逻辑
createDM()返回的DMChannel对象,其send()方法仅需接收消息配置对象(如{ content: 消息文本 }),不需要额外传入用户ID。更简便的方式是直接调用user.send(),discord.js会自动创建DM通道。校验消息内容有效性
提前检查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
相关产品推荐
相关产品推荐

