Discord.js反应收集器未在侦听collector.on('collect')

时间:2020-08-08 22:01:32

标签: node.js discord discord.js

我正在尝试使用Discord.js制作具有AFK功能的Discord机器人。当用户发送消息时,它将检查他们是否为AFK,并发送DM产品以在他们做出反应时关闭AFK。我正在尝试更新到v12。它在更新之前一直在工作,现在似乎拒绝听取任何反应。它将对消息作出反应,但是任何时候我都不会将其记录在控制台中。

import pandas as pd

# test data
data = {'Name': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'A', 'B', 'C'],
        'Data': ['green', 'blue', 'yellow', 'green', 'green', 'green', 'red', 'violet', 'red', 'white', 3, 3, 3]}

# create dataframe
df = pd.DataFrame(data)

# convert the Data column to str type
df.Data = df.Data.astype('str')

# groupby name and apply the function
dfg = df.groupby('Name', as_index=False)['Data'].apply(lambda x: ';'.join(sorted(set(x))))

# display(dfg)
  Name                 Data
0    A  3;blue;green;yellow
1    B          3;green;red
2    C   3;red;violet;white

它不会引发任何错误,它会在设置反应收集器之后运行代码,我在message.author.send(noLongerAFKMessage).then(async function(msg) { try { await msg.react('✅'); await msg.react('❌'); const reactionFilter = (reaction, user) => { return reaction.emoji.name === '✅' || reaction.emoji.name === '❌'; }; // Use reaction filter to remove to remove the user from the database rather than an event const collector = msg.createReactionCollector(reactionFilter, { time: 15000 }); collector.on('collect', (reaction, ReactionCollector) => { console.log(`Collected ${reaction.emoji.name} from ${reaction.users.last().tag}`); }); collector.on('end', _ => { msg.delete().catch(() => console.log('Tried deleting afk message that was already deleted')); }); } catch (err) { console.error(err); } }); 上使用了console.log,看起来一切正常,甚至在收集器结束时删除了消息!我还没有找到这样的东西,我对发生的事情感到非常困惑。

1 个答案:

答案 0 :(得分:0)

问题似乎出在 collect 事件处理程序上:

collector.on('collect', (reaction, ReactionCollector) => {
  console.log(`Collected ${reaction.emoji.name} from ${reaction.users.last().tag}`);
});

有2个问题:

  1. collect 事件现在在Discord.js v12中传递了一个 MessageReaction User 对象,而不是元素和收集器对象,例如Discord.js v11中的对象。这意味着您需要将参数从(reaction, ReactionCollector)更改为(reaction, user)

  2. reaction.users不再返回Discord.js集合,而是返回ReactionUserManager,您必须访问该集合的cache属性以获得Discord.Collection() 。这意味着您需要将reaction.users.last().tag更改为reaction.users.cache.last().tag。另外,由于现在已传递 User 对象,因此您可以改用user.tag

这是修改后的代码:

collector.on('collect', (reaction, user) => {
  console.log(`Collected ${reaction.emoji.name} from ${user.tag}`);
});