javascript - DiscordJS - 机器人不会消除用户在 DM 中的反应
问题描述
所以我写了一个帮助命令,通过输入!help
一个频道来执行该命令并触发机器人。我做了一个反应分页,createReactionCollector()
机器人用我反应的内容编辑消息。请注意,以下代码是MWE。当我在频道中执行它时,它就像一个魅力,并且用户的反应也将立即被删除。到目前为止,一切都很好。
msg.channel.send('Page: 1️⃣').then(sentMsg => {
const pages = ['1️⃣','2️⃣','3️⃣']
pages.map(emj => sentMsg.react(emj))
const collector = sentMsg.createReactionCollector((args, user) => {
return pages.includes(args._emoji.name) && user.id === msg.author.id && !user.bot
}, { max: Infinity })
collector.on('collect', (reaction, user) => {
switch (reaction.emoji.name) {
case pages[0]: sentMsg.edit('Page: '+pages[0]); break;
case pages[1]: sentMsg.edit('Page: '+pages[1]); break;
case pages[2]: sentMsg.edit('Page: '+pages[2]); break;
}
reaction.users.remove(user).catch(e => {
if (e.code == 50013) {
msg.channel.send('[!] Cannot remove reaction of a user. Insufficient permissions.')
} else {
console.error(e)
}
})
})
})
问题
我希望它通过 DM(直接消息)与msg.author.send()
. 它仍然会编辑消息,但不会立即删除反应,如上面的 GIF 所示。相反,我收到以下错误:
DiscordAPIError: Cannot execute action on a DM channel
at RequestHandler.execute (C:\xampp\htdocs\ht\discord\mihojs_beta\node_modules\discord.js\src\rest\R
equestHandler.js:154:13)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async RequestHandler.push (C:\xampp\htdocs\ht\discord\mihojs_beta\node_modules\discord.js\src\res
t\RequestHandler.js:39:14) {
method: 'delete',
path: '/channels/794019488176799744/messages/796506596003545098/reactions/2%EF%B8%8F%E2%83%A3/36298203
0025424907',
code: 50003,
httpStatus: 403
}
我知道该Collector
对象收集有关对其做出反应的用户的数据,并且我假设在 DM 中它不起作用,因为它不是一个频道,因此不是公会/服务器的一部分 - 我是对的吗?我似乎在指南中找不到它,有人知道解决方案或解决方法吗?
解决方案
在直接消息中,您不能删除消息或删除其他用户的反应。
这意味着对于直接消息,您有两个解决该问题的选择:
- 禁用私信中的命令
- 检查频道是否是直接消息/如果您有 MANAGE_MESSAGES 权限并且不删除反应
此处的指南中间接提到您需要 MANAGE_MESSAGES 权限,这是您在 DM 中没有的权限,以删除其他用户的反应。
推荐阅读
- r - 使用 ggarrange 定位 ggplot 标签的问题
- api - 如何创建币安测试 API 密钥
- c# - 在 Xamarin.Mac 中为框架创建绑定项目
- swift - Xcode:调整 iMessage 扩展程序大小时如何运行代码?
- javascript - 在白色背景上可见带有白色箭头的白色工具提示
- python - 通过在每个 df 列上应用函数来创建系列
- java - 在 GamePanel 中找不到符号
- android - 为什么我们在 jsonArrayRequest 中将 jsonRequest 参数设置为 null?
- sqlite - SQLAlchemy with Sqlite ON DELETE,UPDATE CASCADE 不工作
- angular - void 不可分配给 > '() => void' 类型的参数