NodeJS DiscordJS - Bot未删除DM中的用户React

vom3gejh  于 2022-12-03  发布在  Node.js
关注(0)|答案(1)|浏览(104)

所以我写了一个help命令,通过在通道中输入!help来执行,机器人被触发。我用createReactionCollector()做了一个React分页,机器人用我React的内容编辑消息。请注意,下面的代码是MWE。当我在通道中执行它时,它就像一个魔咒,用户的React也会在之后被删除。目前为止一切顺利。

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()。它仍然编辑消息,但它没有删除React后,如上面的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对象会收集对它做出React的用户的数据,我假设在DM中它不起作用,因为它不是一个通道,因此不属于公会/服务器-我说的对吗?我似乎在guide中找不到它,有人知道解决方案或变通方法吗?

5t7ly7z5

5t7ly7z51#

在“直接消息”中,您不能删除消息或删除其他用户的React。
这意味着,对于直邮,您有两种解决问题的方法:

  • 禁用直接消息中的命令
  • 正在检查通道是否为直接消息/您是否具有MANAGE_MESSAGES权限且不删除React

本指南中间接提到,您需要MANAGE_MESSAGES权限(DM中没有)才能删除其他用户的React。

相关问题