Javascript 不和谐沉默投票

Javascript 不和谐沉默投票,javascript,node.js,discord,discord.js,Javascript,Node.js,Discord,Discord.js,我正在做一个命令。mute@user创建一个简单的民意测验,添加2个反应✅ 及❌. 经过一定时间后,我希望机器人静音用户,如果✅'s比❌. 问题是if(agree>disagree)不起作用,因为这两个都是表情符号。如何让我的机器人在30秒后计算投票结果,然后在此基础上使用户静音或发送“静音投票失败” 编辑1 你的代码工作了一半。 Bot在静音投票后崩溃,然后不工作,但在控制台中并没有错误。我必须重新启动它才能再次工作问题出在哪里?另外,最好检查用户是否没有禁用角色,然后检查他是否没有进行投票

我正在做一个命令。mute@user创建一个简单的民意测验,添加2个反应✅ 及❌. 经过一定时间后,我希望机器人静音用户,如果✅'s比❌.

问题是if(agree>disagree)不起作用,因为这两个都是表情符号。如何让我的机器人在30秒后计算投票结果,然后在此基础上使用户静音或发送“静音投票失败”

编辑1 你的代码工作了一半。 Bot在静音投票后崩溃,然后不工作,但在控制台中并没有错误。我必须重新启动它才能再次工作问题出在哪里?另外,最好检查用户是否没有禁用角色,然后检查他是否没有进行投票

const Discord = require('discord.js') 
const token = '' ;
const client = new Discord.Client();
const PREFIX = "."

client.on('message', async (msg) => {
  var args = msg.content.substring(PREFIX.length).split(" ");

  function wait(ms){
    var start = new Date().getTime();
    var end = start;
    while(end < start + ms) {
      end = new Date().getTime();
   }
 }


  if(msg.author.equals(client.user)) return;
  if (!msg.content.startsWith(PREFIX)) return;
  switch (args[0].toLowerCase()) {

  case "mute":
  const role = msg.guild.roles.find(r => r.name === 'Muted'); // Find Role
  if(msg.mentions.members.first().roles.has(role.id)) return 

  if(!msg.mentions.users.first()) return msg.channel.send('You need to mention somebody!'); // Check if no User was Mentioned
  const voting = new Discord.RichEmbed() // Generate Voting Embed
      .setColor('#42b34d')
      .setFooter('Mute ' + msg.mentions.users.first().tag + ' for 10m?')
      .setImage(msg.mentions.users.first().avatarURL);
  if(!role) return msg.channel.send('No Role was found, please make sure you have a muteed role!'); // Make sure there is a Role
  const agree = '✅'; // Define Emojis
  const disagree = '❌'; // Define Emojis

  const sentEmbed = await msg.channel.send(voting); // Send Embed
  const filter = (reaction, user) => (reaction.emoji.name === agree || reaction.emoji.name === disagree) && !user.bot; // Filter for Reactions
  await sentEmbed.react(agree); // React
  await sentEmbed.react(disagree); // React
  const voteStatus = await msg.channel.send('Voting started 30 seconds left'); // Send start Message and
  const collected = await sentEmbed.awaitReactions(filter, { time: 5000 }); // start Collecting Reactions
  const agreed = collected.get(agree) || { count: 1 }; // Retrieve Reactions
  const disagreed = collected.get(disagree) || { count : 1 }; // Retrieve Reactions
  const agreed_count = agreed.count - 1 ; // Count away Bot Votes
  const disagreed_count = disagreed.count - 1; // Count away Bot Votes
  voteStatus.edit('Voting endet with: ' + agreed_count + agree + ' and ' + disagreed_count + disagree); // Edit message to show Outcome
  if(agreed.count > disagreed.count) {
      await msg.guild.member(msg.mentions.users.first()).addRole(role);
      await wait(600000);
      await msg.guild.member(msg.mentions.users.first()).removeRole(role);
  }
  else {
      msg.channel.send('Mute Voting Failed :)');
  }

}


})

client.on('ready', () => {
    console.log ('Dziala');
})

client.login(token);

const Discord=require('Discord.js')
常量标记=“”;
const client=new Discord.client();
const PREFIX=“”
client.on('message',async(msg)=>{
var args=msg.content.substring(前缀.length).split(“”);
函数等待(毫秒){
var start=new Date().getTime();
var结束=开始;
同时(结束<开始+毫秒){
end=新日期().getTime();
}
}
if(msg.author.equals(client.user))返回;
如果(!msg.content.startsWith(PREFIX))返回;
开关(参数[0].toLowerCase()){
“静音”情况:
const role=msg.guild.roles.find(r=>r.name==='Muted');//查找角色
if(msg.indications.members.first().roles.has(role.id))返回
if(!msg.indications.users.first())返回msg.channel.send('您需要提及某人!');//检查是否未提及任何用户
const voting=new Discord.RichEmbed()//生成投票嵌入
.setColor(“#42b34d”)
.setFooter('Mute'+msg.indications.users.first().tag+'for 10m?'))
.setImage(msg.indications.users.first().avatarURL);
如果(!role)返回msg.channel.send('未找到任何角色,请确保您有一个静音角色!');//确保有一个角色
常数✅'; // 定义表情符号
常数❌'; // 定义表情符号
const sentEmbed=wait msg.channel.send(投票);//send Embed
const filter=(reaction,user)=>(reaction.emoji.name==同意| | | reaction.emoji.name==不同意)&&!user.bot;//筛选反应
等待。反应(同意);//反应
等待。反应(不同意);//反应
const voteStatus=await msg.channel.send('投票已开始,还剩30秒);//发送开始消息和
const collected=await sentEmbed.awaitReactions(过滤器,{time:5000});//开始收集反应
const agreed=collected.get(agree)|{count:1};//检索反应
const dismissed=collected.get(dismissed)|{count:1};//检索反应
const agreed\u count=agreed.count-1;//计算机器人的投票数
const discovered\u count=discoverd.count-1;//计算机器人投票
编辑('voteStatus.edit:'+同意计数+同意+'和'+不同意计数+不同意的投票结束);//编辑消息以显示结果
如果(同意.计数>不同意.计数){
等待msg.guild.member(msg.indications.users.first()).addRole(role);
等待等待(600000);
等待msg.guild.member(msg.indications.users.first()).removole(角色);
}
否则{
msg.channel.send('静音投票失败:));
}
}
})
client.on('ready',()=>{
console.log('Dziala');
})
client.login(令牌);

我通过以下操作解决了这个问题:

if(!msg.mentions.users.first()) return msg.channel.send('You need to mention somebody!'); // Check if no User was Mentioned
    const voting = new Discord.RichEmbed() // Generate Voting Embed
        .setColor('#42b34d')
        .setFooter('Mute ' + msg.mentions.users.first().tag + ' for 10m?')
        .setImage(msg.mentions.users.first().avatarURL);
    const role = msg.guild.roles.find(r => r.name === 'Muted'); // Find Role
    if(!role) return msg.channel.send('No Role was found, please make sure you have a muteed role!'); // Make sure there is a Role
    const agree = '✅'; // Define Emojis
    const disagree = '❌'; // Define Emojis

    const sentEmbed = await msg.channel.send(voting); // Send Embed
    const filter = (reaction, user) => (reaction.emoji.name === agree || reaction.emoji.name === disagree) && !user.bot; // Filter for Reactions
    await sentEmbed.react(agree); // React
    await sentEmbed.react(disagree); // React
    const voteStatus = await msg.channel.send('Voting started 30 seconds left'); // Send start Message and
    const collected = await sentEmbed.awaitReactions(filter, { time: 5000 }); // start Collecting Reactions
    const agreed = collected.get(agree) || { count: 1 }; // Retrieve Reactions
    const disagreed = collected.get(disagree) || { count : 1 }; // Retrieve Reactions
    const agreed_count = agreed.count - 1 ; // Count away Bot Votes
    const disagreed_count = disagreed.count - 1; // Count away Bot Votes
    voteStatus.edit('Voting endet with: ' + agreed_count + agree + ' and ' + disagreed_count + disagree); // Edit message to show Outcome
    if(agreed.count > disagreed.count) {
        await msg.guild.member(msg.mentions.users.first()).addRole(role);
        await wait(600000);
        await msg.guild.member(msg.mentions.users.first()).removeRole(role);
    }
    else {
        msg.channel.send('Mute Voting Failed :)');
    }

我通过以下方法解决了这个问题:

if(!msg.mentions.users.first()) return msg.channel.send('You need to mention somebody!'); // Check if no User was Mentioned
    const voting = new Discord.RichEmbed() // Generate Voting Embed
        .setColor('#42b34d')
        .setFooter('Mute ' + msg.mentions.users.first().tag + ' for 10m?')
        .setImage(msg.mentions.users.first().avatarURL);
    const role = msg.guild.roles.find(r => r.name === 'Muted'); // Find Role
    if(!role) return msg.channel.send('No Role was found, please make sure you have a muteed role!'); // Make sure there is a Role
    const agree = '✅'; // Define Emojis
    const disagree = '❌'; // Define Emojis

    const sentEmbed = await msg.channel.send(voting); // Send Embed
    const filter = (reaction, user) => (reaction.emoji.name === agree || reaction.emoji.name === disagree) && !user.bot; // Filter for Reactions
    await sentEmbed.react(agree); // React
    await sentEmbed.react(disagree); // React
    const voteStatus = await msg.channel.send('Voting started 30 seconds left'); // Send start Message and
    const collected = await sentEmbed.awaitReactions(filter, { time: 5000 }); // start Collecting Reactions
    const agreed = collected.get(agree) || { count: 1 }; // Retrieve Reactions
    const disagreed = collected.get(disagree) || { count : 1 }; // Retrieve Reactions
    const agreed_count = agreed.count - 1 ; // Count away Bot Votes
    const disagreed_count = disagreed.count - 1; // Count away Bot Votes
    voteStatus.edit('Voting endet with: ' + agreed_count + agree + ' and ' + disagreed_count + disagree); // Edit message to show Outcome
    if(agreed.count > disagreed.count) {
        await msg.guild.member(msg.mentions.users.first()).addRole(role);
        await wait(600000);
        await msg.guild.member(msg.mentions.users.first()).removeRole(role);
    }
    else {
        msg.channel.send('Mute Voting Failed :)');
    }
小提示:收集器启动后的反应允许在添加反应时输入,而不是等待两者都存在。小提示:收集器启动后的反应允许在添加反应时输入,而不是等待两者都存在。