javascript - 如何允许成员只对投票 discord.js 做出一次反应
问题描述
大家好,
我有一个/create-poll
创建民意调查的命令,为此我使用 discord.js v13 的按钮,但用户可以对“是”或“否”做出尽可能多的反应,我希望他只反应 1时间,1 个成员 = 1 个反应。当任何用户按下它时,我只是禁用了该按钮。目前这是我的代码:
collector.on("collect", async i => {
if(i.customId === "o1"){
await i.deferUpdate()
option_1 += 1;
row.components[0].setLabel(`Yes (${option_1})`);
row.components[0].setDisabled();
i.editReply( {components: [row] });
}
else if(i.customId === "o2"){
await i.deferUpdate()
option_2 += 1;
row.components[1].setLabel(`No (${option_2})`);
row.components[1].setDisabled();
i.editReply( {components: [row] });
}
})
(如果您对我的代码有任何改进,我仍然接受)
解决方案
只需创建一个没有权限的角色,只需一个角色来识别用户是否投票。
这是最终代码:
const { SlashCommandBuilder } = require("@discordjs/builders")
const { MessageEmbed } = require("discord.js")
const Discord = require("discord.js")
module.exports = {
data: new SlashCommandBuilder()
.setName("create-poll")
.setDescription("Crea una encuesta")
.addStringOption(option =>
option
.setName("encuesta")
.setDescription("Escriba la encuesta que desea hacer")
.setRequired(true)
)
.addNumberOption(option =>
option
.setName("tiempo")
.setDescription("Tiempo que durara la encuesta (minutos)")
.setRequired(true)
),
async run(client, interaction){
const minutos = interaction.options.getNumber("tiempo");
const texto = interaction.options.getString("encuesta");
const minutes = minutos * 1000 * 60;
let optionA = 0;
let optionB = 0;
const row = new Discord.MessageActionRow()
.addComponents(
new Discord.MessageButton()
.setCustomId("yes")
.setLabel(`Sí (${optionA})`)
.setEmoji("✅")
.setStyle("SUCCESS")
)
.addComponents(
new Discord.MessageButton()
.setCustomId("no")
.setLabel(`No (${optionB})`)
.setEmoji("❌")
.setStyle("DANGER")
)
if(interaction.member.roles.cache.has('role-id-admin'))
{
const embed = new Discord.MessageEmbed()
.setTitle("Nueva encuesta")
.setDescription(`**${texto}**`)
.setFooter(`${interaction.user.username} creo la encuesta`,`${interaction.user.avatarURL({ dynamic: true , size: 2048 , format: "png" })}`)
.setColor("BLUE")
interaction.reply({ embeds: [embed], components: [row] }).then(() => {
setTimeout(function() {
row.components[0].setLabel(`Sí (${optionA})`);
row.components[0].setDisabled();
row.components[1].setLabel(`No (${optionB})`);
row.components[1].setDisabled();
optionA = 0;
optionB = 0;
interaction.editReply({ content: "La encuesta termino!", components: [row] });
interaction.guild.members.cache.forEach(member => {
member.roles.remove("role-id-vote");
});
}, minutes);
})
} else {
interaction.reply({ content: "No tienes permisos para usar este comando"})
}
client.on("interactionCreate", async(interaction) =>
{
if(interaction.isButton()){
/* Encuesta */
if(interaction.customId === "yes"){
if(!interaction.member.roles.cache.has('role-id-vote')){
optionA += 1;
row.components[0].setLabel(`Sí (${optionA})`);
row.components[1].setLabel(`No (${optionB})`);
interaction.member.roles.add('role-id-vote');
interaction.update({ components: [ row ] });
}
}
else if(interaction.customId === "no"){
if(!interaction.member.roles.cache.has('role-id-vote')){
optionB += 1;
row.components[0].setLabel(`Sí (${optionA})`);
row.components[1].setLabel(`No (${optionB})`);
interaction.member.roles.add('role-id-vote');
interaction.update({ components: [ row ] });
}
}
}
})
}
}
如果此代码对您有用,请使用它:D
推荐阅读
- fabricjs - 修改后重新计算路径的数组-fabricjs
- python - {lat,long,values} 列表中的轮廓
- javascript - 是否可以在 Kendo Grid (MVC) 中将单个单元格拆分为多个行条目?
- angularjs - 从 csv 文件中的 highcharts 导出数据,日期以毫秒为单位
- javascript - 使用正确的 MongoDB 层次结构?
- c - 学习动态内存分配
- python - 在列中查找特定单词
- javascript - 数组原型函数不起作用,当使用文字时
- javascript - Javascript 不在页面加载时运行
- cpu-architecture - 将 mic-1 中的寄存器向右移动,无需获取