gpt4 book ai didi

javascript - 不和谐机器人 : struggling to tally emoji reacts for voting

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:10 28 4
gpt4 key购买 nike

这里是第一次海报。抱歉,如果这是一个明显的修复,但我对 Nodejs 和一般编程世界非常陌生。

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

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

就目前情况而言,我可以通过在聊天中发送新消息并使用正确的表情符号对该消息使用react,让机器人响应我的 !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);

最佳答案

第一个问题是 user.id === message.author.id 因此只有消息作者可以使用react。 message.channel.send 返回新消息的 promise ,因此您可以使用 then => 进行消息 react 。最好使用操作 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.");
}
});

})
}
})

关于javascript - 不和谐机器人 : struggling to tally emoji reacts for voting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59926154/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com