Discord开发:如何在DM中获取消息?已尝试方法无效求助
解决Discord DM消息获取与反应问题
核心问题分析
你的代码存在两个关键问题:
messages.fetch()是异步Promise操作,直接调用.react()会因Promise未完成而报错- 直接通过
message.author.messages获取消息的方式不符合Discord API规范,必须先获取DM频道实例
修正方案
1. 异步处理+正确获取DM频道
确保命令函数为异步函数,先获取用户的DM频道,再从中获取消息并添加反应:
// 命令函数需声明为async async function yourCommandHandler(message, args) { let id = args[0]; let react = args.slice(1).join(' '); try { // 获取或创建与用户的DM频道 const dmChannel = await message.author.createDM(); // 从DM频道中获取指定ID的消息 const fetchedMessage = await dmChannel.messages.fetch(id); // 为消息添加反应 await fetchedMessage.react(react); } catch (error) { console.error('操作失败:', error); message.reply('无法找到指定消息或无权限操作,请检查消息ID是否正确,且该消息是与机器人的DM内容'); } }
2. 必须注意的API限制
- 机器人仅能获取它参与过的DM消息:即机器人自身发送的消息,或用户直接发给机器人的消息,无法获取用户与其他账号的DM内容,这是Discord的安全限制
- 消息ID需准确:确保传入的
id是DM频道内存在的有效消息ID - 反应格式正确:自定义表情需用
<:表情名:表情ID>格式,普通表情直接使用emoji字符即可
内容的提问来源于stack exchange,提问作者Filipino ako
相关产品推荐
相关产品推荐

