【问题标题】:DiscordJS - Bot is not removing user's reaction in a DMDiscordJS - 机器人不会消除用户在 DM 中的反应
【发布时间】:2021-04-12 17:13:28
【问题描述】:

所以我编写了一个帮助命令,通过在频道中输入!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)
            }
        })
    })
})

问题

我希望它通过带有msg.author.send() 的 DM(直接消息)发送。它仍然会编辑消息,但不会立即删除反应,如上面的 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 中它不起作用,因为它不是一个频道,因此不是公会/服务器的一部分 - 我说的对吗?我似乎在guide 中找不到它,有人知道解决方案或解决方法吗?

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    在直接消息中,您不能删除消息或删除其他用户的反应。

    这意味着对于直接消息,您有两个解决问题的选择:

    • 在私信中禁用命令
    • 检查频道是否为直接消息/您是否具有 MANAGE_MESSAGES 权限且未删除反应

    在指南here 中间接提到您需要 MANAGE_MESSAGES 权限,而您在 DM 中没有此权限,才能删除其他用户的反应。

    【讨论】:

    • 那太可惜了。正如我已经想到的那样,DM 不是频道,也不是服务器的一部分,因此不存在权限。是的,我已经完成了有关权限的错误处理。我的代码已经检查了权限,我只是没有将它们放在示例中以避免不必要的代码。无论如何,谢谢您的确认。
    • 如果您的问题已解决,请使用绿色勾号将答案标记为已接受的解决方案,这会将问题标记为已解决。
    • 我知道,但它并没有解决我的问题,因为目前既没有解决方案也没有可能的解决方法。你只是同意并证实了我的假设。我为此感谢你,但它根本没有解决它。我会在将来为 Discord 推出新功能时保持开放状态,我们永远不知道。
    • 您也许可以使用messageReactionAdd 事件,并为您希望用户对其做出反应的每条消息分配一个唯一的 id,例如 uuid,以识别已对哪条消息作出反应。
    • @Intel 我不认为你知道这里的问题是什么!
    猜你喜欢
    • 2021-11-14
    • 2021-06-12
    • 2021-10-10
    • 2019-06-01
    • 2022-08-11
    • 2021-04-30
    • 2021-08-28
    • 2019-02-19
    • 2021-11-29
    相关资源
    最近更新 更多