Discord.js awaitReactions或在私人消息中的messageReactionAdd



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

总而言之:当用户对带有表情符号的私人消息做出反应时,我正在尝试做一些事情。我已经让这个工作非常好的服务器通道。

为了测试这一点,我尝试了以下方法:

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

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

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

  • 过滤器永远不会通过,"collected"永远不会被记录
  • 过滤器只有在添加反应后才能工作(我认为这是因为异步,但我希望用户在按下反应时能够切换选项(
  • 当反应被删除时,代码不会被触发(我想这是因为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:我想在私人消息中给用户一个轮询配置面板,让该用户可以通过点击对所述配置面板的反应来切换选项。

我试过的东西没用。我做错什么了吗?有其他方法吗?或者这根本不可能?

经过更多的调试,我发现了这个问题,以防有人在这里遇到问题;

这些确实有效,我只是有一个if语句挡住了XD的去路。

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

如果它们不起作用,则不会缓存消息。以下给出了一个很好的起点(尽管我还没有完全尝试过(:

  • https://gist.github.com/Danktuary/27b3cef7ef6c42e2d3f5aff4779db8ba
  • https://github.com/AnIdiotsGuide/discordjs-bot-guide/blob/master/coding-guides/raw-events.md

最新更新