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