【问题标题】:Instead counter returning 0, my code returns error相反,计数器返回 0,我的代码返回错误
【发布时间】:2019-02-15 19:36:35
【问题描述】:

为我的 Discord.js 机器人创建一个投票模块,但我不断收到错误:

无法读取未定义的属性“计数”

在计算收集到的反应量时。

我将这个项目用作“深入研究”类型的项目,并且一直在尝试自己获得文档等,我已经阅读了其他相对相似的问题并看到了提供的答案,但是无论我如何尝试,我都无法将这些答案实现到我自己的代码中。

const reactions5 = await poll5.awaitReactions(reaction => reaction.emoji.name === '\u0031\u20E3' ||
  reaction.emoji.name === '\u0032\u20E3' || 
  reaction.emoji.name === '\u0033\u20E3' || 
  reaction.emoji.name === '\u0034\u20E3' || 
  reaction.emoji.name === '\u0035\u20E3', {
  time: `${sysTime}`
});

const results5 = new Discord.RichEmbed()
  .setColor('#1dd1a1')
  .setFooter('HiveBot - Poll Module')
  .setTitle('The results have been collected!')
  .setDescription(`**__Question__**
                ${pollQuestion}
                **__Votes__**
                **Voted** :one: **-** ${reactions5.get('\u0031\u20E3').count - 1}
                **Voted** :two: **-** ${reactions5.get('\u0032\u20E3').count - 1}
                **Voted** :three: **-** ${reactions5.get('\u0033\u20E3').count -1}
                **Voted** :four: **-** ${reactions5.get('\u0034\u20E3').count - 1}
                **Voted** :five: **-** ${reactions5.get('\u0035\u20E3').count - 1}`)

message.channel.send(results5);

我做 -1 因为我的机器人首先添加了一个反应来创建一个模板供其他用户点击反应,所以我希望它返回 0 但我只是收到上述错误。

编辑:如果用户添加反应,计数变为

2 - 1 = 1

由于某种原因,当没有人反应时,只留下机器人反应(我可以看到它反应 0_o),而不是计数

1 -1 = 0

我收到上述错误。

希望这能消除任何困惑。

【问题讨论】:

  • “我做 -1,因为我的机器人首先添加了一个反应,以创建一个模板供其他用户点击反应” 显然,其中一个没有被添加,所以reactions5.get(...) 返回undefined。我不熟悉那个poll5.awaitReactions 电话,但看起来您确实在等待五个反应中的任何,而不是全部五个。
  • 更新根本没有解决我上面的评论。如果您调试,您会发现reaction5.get(...) 调用之一返回undefined. 您的任务是找出原因,而仅凭上面的信息我们无法做到这一点。 (尽管,[对于未受过教育的人来说]它看起来不像 awaitReactions 会等待所有 5 个。)
  • 如果我把我的挫败感发泄在你身上,我深表歉意,我完全理解你正在努力提供帮助,其他四个都完全相同,如果客户不添加反应,它会返回 1,如果我在我的实际 Discord 帐户上添加反应,它会返回 2。再次道歉。
  • 不用担心。你把那些console.logs 放在哪里了? B/c 错误很明显。我建议使用调试器逐步完成。如果由于任何原因你不能这样做,我建议在const result5 = ... 上方添加这个函数:function getReactionCount(name) { console.log(`Reaction ${name}: ${typeof reaction5.get(name)}`); return reaction5.get(name).count - 1; },然后更新getDescription 代码以使用${getReactionCount('\u0031\u20E3')} 等。其中之一将在名称旁边显示undefined,就在错误之前。除此之外,恐怕我无能为力。祝你好运!
  • 所以你是绝对正确的,当我执行console.logs 时我一定搞砸了,因为你的函数返回Reaction 2⃣: undefined

标签: javascript node.js discord.js


【解决方案1】:

下次有人试图确保 ReactionCollector 确实接收到机器人的反应时,不要await 机器人在你开始观察它们之前做出反应:D

        const poll5 = await message.channel.send(embed5);
            poll5.react('\u0031\u20E3');
            poll5.react('\u0032\u20E3');
            poll5.react('\u0033\u20E3');
            poll5.react('\u0034\u20E3');
            poll5.react('\u0035\u20E3');

        const reactions5 = await poll5.awaitReactions(reaction => reaction.emoji.name === '\u0031\u20E3' || reaction.emoji.name === '\u0032\u20E3' || reaction.emoji.name === '\u0033\u20E3' || reaction.emoji.name === '\u0034\u20E3' || reaction.emoji.name === '\u0035\u20E3', { time: `${sysTime}`})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    相关资源
    最近更新 更多