【问题标题】:Discord bot: struggling to tally emoji reacts for votingDiscord bot:努力统计表情符号对投票的反应
【发布时间】:2020-05-12 12:49:53
【问题描述】:

第一次在这里发布海报。抱歉,如果这是一个明显的解决方法,但我对 nodejs 和一般编程世界还是很陌生。

我目前正在尝试创建一个 Discord 机器人,它允许任何用户使用 !vote 命令发起“爱它或恨它”投票。投票启动后,机器人会发送一条消息宣布投票,然后用心形和骷髅头表情符号对自己的消息做出反应,分别表示爱与恨的选项。 这部分正在按预期工作。

经过一定的时间(很短的时间)后,机器人应该记录表情符号的反应,并确定是否有更多的心、更多的头骨或两者的数量相等。根据结果​​,它将发送另一条消息宣布投票结果。 这部分没有按预期工作。

就目前而言,我可以让机器人响应我的 !vote 命令,方法是在聊天中发送一条新消息并使用适当的表情符号对该消息作出反应。该机器人还将等待设定的时间并宣布投票结果。但是,它总是宣布投票是中立的,无论我在计时器到期之前点击了哪个表情符号(当然,请确保我没有同时点击两者)。

我用来比较票数的代码显然没有按预期运行。然而,在花了几个小时尝试不同的修复之后,我无法为我的生活找出解决方案,这让我发疯了。这其中有不正确的部分吗?如果是这样,我该如何解决?

非常感谢任何可以插话的人。在过去潜伏了一段时间并在其他人的问题中找到了无数的解决方案之后,我想我终于可以向 Stack Overflow 的可爱人士寻求帮助了。你们摇滚!

const Discord = require('discord.js');
const bot = new Discord.Client();

bot.on('message', function(message){
    if(message.content.toLowerCase().startsWith('!vote'))
    {
    var heartCount = 0;
    var skullCount = 0;
        message.channel.send(
            "The vote begins! Do we love it or hate it?")
                .then(async function (message){
                    try {
                    await message.react("❤️")
                    await message.react("????")
                    }
                catch (error) {
                    console.error('One of the emojis failed to react.');
                    }
                })
        const filter = (reaction, user) => {
        return ["❤️","????"].includes(reaction.emoji.name) && user.id === message.author.id };
                
                message.awaitReactions(filter, {time: 10000})
                .then(collected => {
                    for (var i = 0; i < collected.length; i++){
                        if (collected[i].emoji.name === "❤️")
                        {heartCount++;}
                        else if (collected[i].emoji.name === "????")
                        {skullCount++;}
                    };
                
                    if (heartCount > skullCount){
                        message.channel.send("We love it!");
                    }
                    else if (heartCount < skullCount){
                        message.channel.send("We hate it.");
                    }
                    else {
                        message.channel.send("We're neutral about it.");
                    }
                    
                })
    }
});

bot.login(process.env.BOT_TOKEN);

【问题讨论】:

    标签: javascript node.js discord discord.js emoji


    【解决方案1】:

    第一个问题是user.id === message.author.id,所以只有消息作者才能做出反应。 message.channel.send 返回新消息的承诺,因此您可以使用 then =&gt; 进行消息反应。更好地使用操作collector on collect 获取计数,然后在收集器结束时发送消息。

    const Discord = require('discord.js');
    const bot = new Discord.Client();
    
    bot.on('message', function(message){
        var heartCount = 0;
        var skullCount = 0;
    
        if(message.content.toLowerCase().startsWith('!vote')) {
            message.channel.send('The vote begins! Do we love it or hate it?').then(msg => {
                msg.react(`❤️`).then(() => msg.react('?'));
                const filter = (reaction, user) => {
                    return [`❤️`, '?'].includes(reaction.emoji.name);
                };
    
                const collector = msg.createReactionCollector(filter, {time: 10000});
                collector.on('collect', (reaction, reactionCollector) => {
                    if (reaction.emoji.name === `❤️`) {
                        heartCount+=1
                    } else if (reaction.emoji.name === `?`) {
                        skullCount+=1
                    }
                });
                collector.on('end', (reaction, reactionCollector) => {
                       if (heartCount > skullCount){
                            message.channel.send("We love it!");
                        }
                        else if (heartCount < skullCount){
                            message.channel.send("We hate it.");
                        }
                        else {
                            message.channel.send("We're neutral about it.");
                        }
                });
    
            })
        }
    })
    

    【讨论】:

      猜你喜欢
      • 2020-08-02
      • 2022-01-03
      • 2022-01-24
      • 2019-05-07
      • 2021-08-29
      • 2023-03-30
      • 2019-07-23
      • 1970-01-01
      • 2020-07-31
      相关资源
      最近更新 更多