【发布时间】:2021-07-11 00:05:39
【问题描述】:
我为我的 Discord 服务器创建了一个经济型机器人,但我被排行榜命令卡住了。
此命令的目的是能够以 10 为单位查看服务器上人员的排名,并显示其自己的排名。有两件事在我编写的代码中不起作用,但我只谈一件事,因为我认为我可以自己修复另一件事。
msg.awaitReactions((reaction, user) => (!user.bot) && (reaction.emoji.name == ${emotes.flechegauche} || reaction.emoji.name == ${emotes.flechedroite}), { max: 1, time: 30000 }).then(collected => {
if (**collected.first()**.emoji.name == ${emotes.flechegauche}) {
...
问题是我想检测用户的每一个反应,但只检测第一个反应。我知道问题是我放了“collected.first()”,但我阅读了文档,但不知道要将此代码更改为什么(我不习惯阅读文档和英语不是我能说流利的语言,所以这无济于事)。
如果其他人问过这个问题,我在这个网站上搜索过,我发现了这个帖子: How to edit message according to reaction in Discord.js (create a list and switch page) 回答的人说要使用 ReactionCollector,这是否意味着我必须改变我收集表情符号的整个方式或我的方法可以工作?
(由于我是第一次在这个网站上提问,如果您对我有任何建议或意见,我很感兴趣)
【问题讨论】:
-
你不必改变它,你也可以使用
awaitReactions方法。这里有更多信息:discordjs.guide/popular-topics/collectors.html#await-reactions。似乎您已经将约束设置为{ max: 1 }。这就是你所需要的。您基本上可以摆脱first方法,因为您只收集一个反应。 -
删除
.first()时,出现错误TypeError: Cannot read property 'name' of undefined。您向我指出的消息{max: 1}是一个错误,我刚刚删除了它,现在我必须等到计时器结束才能编辑消息(当我在收集结束时保留.first())。有没有办法让消息在反应后直接编辑,而不是只考虑第一反应? -
collected.first()实际上很好,我忘了它返回一个集合,所以你必须从所有收集的反应中选择一个。另外,请保留{ max: 1 },以便仅记录第一个响应。 -
当我使用
collected.fist()时,消息只检测到第一个反应,点击另一个反应不再修改消息。需要一种方法来逐个检测所有反应,但我还没有找到如何检测多个反应。 -
哦,好的。那我误解了你的问题。是的,那么不要添加
{ max: 1 }或者只是将其更改为您尝试收集的不同数量的反应。
标签: discord.js