【问题标题】:DiscordJS reactionCollector does not work for other users when they reactDiscordJS 反应收集器在其他用户反应时不适用于其他用户
【发布时间】:2021-07-05 01:38:03
【问题描述】:

我的目标是创建一个验证系统,我希望其他用户(即管理员)对来自机器人的消息做出反应。 机器人将消息嵌入到某个频道,并使用 ✅ 和 ❌ 对其做出反应。现在该频道中的所有用户都应该能够对此消息做出反应。

但只有请求验证的用户才能对其做出反应(但他们以后应该不能这样做),其他用户无法对其做出反应。什么都没有发生,也没有错误。频道中其他用户的反应计数只会上升,直到请求验证的用户可以做出反应,然后它会起作用并且代码会继续。

        adminChannel.messages.fetch({ limit: 1 }).then(async messages => {
            const lastMessage = messages.first();
            await lastMessage.react('✅');
            await lastMessage.react('❌');

            const filter = (reaction, user) => {
              return ['✅', '❌'].includes(reaction.emoji.name) && !user.bot
            }

            const collector = lastMessage.createReactionCollector(filter, { max: 1 });

            collector.on('collect', async (reaction, user) => {
                if (reaction.emoji.name === '✅') {
                    //do something
                } else {
                    //do something
                }

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    问题在于lastMessage.createReactionCollector(filter, { max: 1 }) 中的ReactionCollectorOptions 参数,因为max: 1 将使机器人在添加第一个反应后停止等待反应。如果您不需要此选项,您可以使用lastMessage.createReactionCollector(filter)。 如果您仍有疑问,可以查看here 的文档ReactionCollectorOptionshere 的文档createReactionCollector 方法。

    【讨论】:

    • 这并不能解决问题。我删除了max:1,但问题仍然存在。无论如何,在我的过滤器中,我已经定义了!user.bot,这将过滤掉机器人对他自己的消息的反应。
    • 是的,过滤器没问题。如果它仍然不起作用,我认为你可以尝试启用意图和部分。您可以在 Discord Dev Portal => Your Bot Application => Bot => Intents 上启用意图。当您像这样实例化新客户端时,您可以在客户端选项中添加部分:const client = new Discord.Client({ partials: ['REACTION']}) 您可以在数组中添加其他部分。所有部分都列出了here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多