Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 限制用户对消息的反应_Javascript_Discord.js - Fatal编程技术网

Javascript 限制用户对消息的反应

Javascript 限制用户对消息的反应,javascript,discord.js,Javascript,Discord.js,我正在为JavaScript中的不一致性构建一个简单的轮询bot,现在我正在尝试实现每个用户对消息的最大反应数 例如,假设我们对投票问题有以下选项: 问题是什么 方案A 方案B 备选案文C 方案D 选项E 每个“选项”都是对机器人发出的消息的反应,我想确保用户不能对这些选项中的3个以上作出反应 我的思路是做一个messageReactionAdd监听器和 然后,当用户第四次作出反应时,删除最后一次 反应,向他发送一条信息,如“你已经投了三次票了”, 请删除“再次投票的反应” 尽管如此,我还是被

我正在为JavaScript中的不一致性构建一个简单的轮询bot,现在我正在尝试实现每个用户对消息的最大反应数

例如,假设我们对投票问题有以下选项:

问题是什么

  • 方案A

  • 方案B

  • 备选案文C

  • 方案D

  • 选项E

  • 每个“选项”都是对机器人发出的消息的反应,我想确保用户不能对这些选项中的
    3个以上作出反应

    • 我的思路是做一个
      messageReactionAdd
      监听器和 然后,当用户第四次作出反应时,删除最后一次 反应,向他发送一条信息,如“你已经投了三次票了”
    , 请删除“再次投票的反应”
  • 尽管如此,我还是被困在试图在对象中导航以找到目标的过程中 每个用户的总反应计数我可以找到总反应计数 每个表情符号,但这不是我需要的
  • 有人能给我一些关于这方面的见解吗

    编辑

    用于发送消息的代码:

    Embed = new Discord.MessageEmbed()
                    .setColor(0x6666ff)
                    .setTitle(question)
                    .setDescription(optionsList);
    
                    message.channel.send(Embed).then(messageReaction => {
    
                    for (var i = 0; i < options.length; i++){
                        messageReaction.react(emojiAlphabet[i][0]);
                    }
    
                    message.delete().catch(console.error);
                  });
    
    Embed=newdiscord.MessageEmbed()
    .setColor(0x6666ff)
    .setTitle(问题)
    .setDescription(选项列表);
    message.channel.send(嵌入).then(messageReaction=>{
    对于(变量i=0;i
    试试这个:

    const{Collection}=require('discord.js')
    //用户只能对其作出3次反应的消息
    const polls=新集合()
    //集合:存储用户对消息的反应次数
    const reactionCount=新集合()
    //发送轮询时,添加bot发送到集合的消息:
    polls.add(消息)
    client.on('messageReactionAdd',(reaction,user)=>{
    //编辑:这样当机器人做出反应时,它不会运行
    if(user.id==client.user.id)返回
    常量{message}=反应
    //仅当消息是轮询之一时,才执行以下操作
    如果(轮询.has(消息)){
    //如果消息尚未添加到集合中,请添加它
    如果(!reactionCount.get(message))reactionCount.set(message,new Collection())
    //此消息的反应很重要
    const userCount=reactionCount.get(消息)
    //将1添加到用户的反应计数
    userCount.set(用户,(userCount.get(用户)| | 0)+1)
    if(userCount.get(user)>3){
    反应.用户.删除(用户)
    //提及用户(如果用户有昵称,则使用其昵称)
    message.channel.send(`,您已经投票3次,请删除一个反应以再次投票。`)
    }
    }
    })
    client.on('messageReactionRemove',(reaction,user)=>{
    //编辑:这样当机器人做出反应时,它不会运行
    if(user.id==client.user.id)返回
    常量{message}=反应
    const userCount=reactionCount.get(消息)
    //从用户的反应计数中减去1
    if(polls.has(message))userCount.set(user,reactionCount.get(message).get(user)-1)
    })
    
    非常感谢cherryblossom:-)当我尝试与客户端一起实现代码时,还有一个问题。在('messageReactionAdd')上,我收到了由bot添加的两倍的反应调用,我可以以任何方式将它们从messageReactionAdd和messageReactionRemove中的解析中排除吗?谢谢你advance@ManuelCelli是的,如果(user.id==client.user.id)返回,您可以使用
    。我编辑了我的帖子。再次感谢您的帮助:-)我在将邮件添加到轮询常量时遇到一些问题,我已使用创建邮件时使用的代码更新了问题。已成功解决问题,使用polls.add(client.user.lastMessage)@ManuelCelli您也可以执行
    message.channel.send(Embed)。然后(messageReaction=>polls.add)(messageReaction))