Discord.js awaitReactions或私有消息上的messageReactionAdd

时间:2020-03-22 00:47:43

标签: javascript discord discord.js

我创建了一个系统,该系统允许用户在频道中发送民意调查,并希望在私人消息中为他们提供其他选项。为此,我试图在用户对带有表情符号的私人消息做出反应时切换轮询选项。 服务器部分工作正常,但我无法使私人消息响应按预期工作。

总结:当用户对带有表情符号的私人消息做出反应时,我正在尝试执行某些操作。对于服务器通道,我的工作非常正常。

要对此进行测试,我尝试了以下方法:

第一个似乎没有收到私人消息。

client.on('messageReactionAdd', (reaction, user) => {
    console.log("added response");
});

client.on('messageReactionRemove', (reaction, user) => {
    console.log("removed response");
});

第二个是响应“!beep”命令而运行的测试代码。却显示出一些问题:

  • 过滤器永远不会通过,“收集”也不会被记录。
  • 该过滤器仅在添加反应后才起作用(我认为这是由于异步,但是我希望用户每次按下反应时都能够切换该选项)
  • 删除反应后,不会触发代码(我认为这是因为awaitReactions不支持该操作,但是我希望用户在按下反应时能够切换该选项,无论他们是否正在添加或删除它)
  • 我尝试删除错误位,该错误位在时间到后记录为“收集”。但是我希望它能够快速响应,并能即时响应,而且我希望它可重复使用,以便用户可以打开和关闭它。
const reactions = ["0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣", "?"];

        message.channel.send('@here Boop :robot:')
            .then(async (sentMessage) => {
                for (var i=0; i < reactions.length; i++) {
                    await sentMessage.react(reactions[i]);
                }

                ///////////////   TEST CODE!!!!
                const filter = (reaction, user) => {
                    console.log("filter called");
                    return true;
                };
                sentMessage.awaitReactions(filter, { time: 33000, errors: ['time'] })
                    .then(collected => {
                        console.log("collected");

                        const reaction = collected.first();
                        console.log(reaction.emoji);
                    })
                    .catch(collected => {
                        console.log("Time's up");
                    });

            });;

TLDR:我想在私人消息中为用户提供一个轮询配置面板,允许该用户通过单击对该配置面板的响应来切换选项。

我尝试过的东西没有用。难道我做错了什么?还有其他方法吗?还是这根本不可能?

1 个答案:

答案 0 :(得分:0)

更多调试后,我发现了问题,因此,如果有人在这里遇到问题;

这些确实起作用,我只是有一个if语句妨碍了XD。

client.on('messageReactionAdd', (reaction, user) => {
    console.log("added response");
});

client.on('messageReactionRemove', (reaction, user) => {
    console.log("removed response");
});

如果它们不起作用,则不会缓存该消息。为此,以下内容提供了一个很好的起点(尽管我还没有完全尝试过):