fonctionnalité de wordwar prête pour l'utilisation
This commit is contained in:
parent
0a28d3303d
commit
93922cca75
@ -1,6 +1,8 @@
|
|||||||
const { SlashCommandBuilder, blockQuote, userMention } = require('@discordjs/builders');
|
const { SlashCommandBuilder, blockQuote, userMention, roleMention } = require('@discordjs/builders');
|
||||||
const { MessageActionRow, MessageButton, Message } = require('discord.js');
|
const { MessageActionRow, MessageButton, Collection } = require('discord.js');
|
||||||
const ongoingww = [];
|
const ongoingww = new Collection();
|
||||||
|
const intTable = new Collection();
|
||||||
|
var wwId = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function aims to do word wars inside a discord channel.
|
* This function aims to do word wars inside a discord channel.
|
||||||
@ -23,52 +25,67 @@ module.exports = {
|
|||||||
.setRequired(false)
|
.setRequired(false)
|
||||||
),
|
),
|
||||||
async execute(interaction) {
|
async execute(interaction) {
|
||||||
if (ongoingww.includes(interaction.user.id)) {
|
|
||||||
interaction.channel.send("<@" + interaction.user.id + "> a déjà une wordwar en cours, merci de patienter pour en relancer une nouvelle !")
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
|
// Vérifie que l'utilisateur ne participe pas déjà à une ww en regardant ses rôles
|
||||||
|
if (ongoingww.has(interaction.user.id)) {
|
||||||
|
interaction.reply({ content: "Vous avez déjà une wordwar en cours.", ephemeral: true });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// On vérifie que la commande a correctement été entrée
|
||||||
var wwtimer;
|
var wwtimer;
|
||||||
var wwdelay;
|
var wwdelay;
|
||||||
|
|
||||||
if (interaction.options.get('duree') == null) {
|
if (interaction.options.get('duree') == null) {
|
||||||
wwtimer = 20;
|
wwtimer = 15;
|
||||||
} else {
|
} else {
|
||||||
wwtimer = interaction.options.get('duree').value;
|
wwtimer = interaction.options.get('duree').value;
|
||||||
if (isNormalInteger(wwtimer)) {
|
if (isNormalInteger(wwtimer)) {
|
||||||
if (wwtimer > 30) {
|
if (wwtimer > 30) {
|
||||||
interaction.channel.send("Le temps d'une wordwar ne peux pas excéder **30 minutes** sur ce channel. Merci de réessayer !");
|
interaction.reply({ content: "Le temps d'une wordwar ne peux pas excéder **30 minutes** sur ce channel. Merci de réessayer !", ephemeral: true });
|
||||||
return;
|
return;
|
||||||
} else if (wwtimer < 1) {
|
} else if (wwtimer < 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
interaction.channel.send("Le temps d'une wordwar doit être un entier positif compris entre **1 minute** et **30 minutes**. Merci de réessayer !")
|
interaction.reply({ content: "Le temps d'une wordwar doit être un entier positif compris entre **1 minute** et **30 minutes**. Merci de réessayer !", ephemeral: true });
|
||||||
return;
|
return;
|
||||||
} // && Number.isInteger(args[1])
|
} // && Number.isInteger(args[1])
|
||||||
}
|
}
|
||||||
|
|
||||||
if (interaction.options.get('attente') == null) {
|
if (interaction.options.get('attente') == null) {
|
||||||
wwdelay = 2;
|
wwdelay = 15;
|
||||||
} else {
|
} else {
|
||||||
wwdelay = interaction.options.get('attente').value;
|
wwdelay = interaction.options.get('attente').value;
|
||||||
if (isNormalInteger(wwdelay)) {
|
if (isNormalInteger(wwdelay)) {
|
||||||
if (wwdelay > 15) {
|
if (wwdelay > 15) {
|
||||||
interaction.channel.send("Le temps d'attente d'une wordwar ne peux pas excéder **15 minutes** sur ce channel. Merci de réessayer !");
|
interaction.reply({ content: "Le temps d'attente d'une wordwar ne peux pas excéder **15 minutes** sur ce channel. Merci de réessayer !", ephemeral: true });
|
||||||
return;
|
return;
|
||||||
} else if (wwdelay < 1) {
|
} else if (wwdelay < 1) {
|
||||||
interaction.channel.send("Le temps d'attente d'une wordwar ne peux pas être inférieur à **1 minute** sur ce channel. Merci de réessayer !")
|
interaction.reply({ content: "Le temps d'attente d'une wordwar ne peux pas être inférieur à **1 minute** sur ce channel. Merci de réessayer !", ephemeral: true });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
interaction.channel.send("Le temps d'attente d'une wordwar doit être un entier positif compris entre **1 minute** et **15 minutes**. Merci de réessayer !")
|
interaction.reply({ content: "Le temps d'attente d'une wordwar doit être un entier positif compris entre **1 minute** et **15 minutes**. Merci de réessayer !", ephemeral: true });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memberid = interaction.user.id;
|
//Si la commande a bien été entrée, on continue
|
||||||
ongoingww.push(memberid);
|
|
||||||
commandReply = "Une wordwar a été initiée par " + userMention(memberid) + " . Elle commencera dans " + wwdelay + " minutes et durera " + wwtimer + " minutes.";
|
//Create a role with a specific ID for this ww
|
||||||
|
var newRole = {
|
||||||
|
name: "WordWar#" + wwId,
|
||||||
|
color: "RANDOM",
|
||||||
|
mentionable: true,
|
||||||
|
reason: "Rôle temporaire pour les wordwar"
|
||||||
|
};
|
||||||
|
var wwRole = await interaction.guild.roles.create(newRole);
|
||||||
|
wwId++;
|
||||||
|
ongoingww.set(interaction.user.id, wwRole.name);
|
||||||
|
interaction.member.roles.add(wwRole.id);
|
||||||
|
|
||||||
|
commandReply = "Une wordwar a été initiée. Elle commencera dans " + wwdelay + " minutes et durera " + wwtimer + " minutes.";
|
||||||
|
|
||||||
const row = new MessageActionRow()
|
const row = new MessageActionRow()
|
||||||
.addComponents(
|
.addComponents(
|
||||||
@ -82,51 +99,105 @@ module.exports = {
|
|||||||
.setCustomId('secondary')
|
.setCustomId('secondary')
|
||||||
.setLabel('Annuler')
|
.setLabel('Annuler')
|
||||||
.setStyle('DANGER')
|
.setStyle('DANGER')
|
||||||
.setDisabled(true)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
interaction.reply({ content: commandReply, components: [row] })
|
||||||
|
.then(() => {
|
||||||
|
const filterParticipate = (btnInt) => btnInt.customId === 'primary';
|
||||||
|
|
||||||
|
const collectorParticipate = interaction.channel.createMessageComponentCollector({
|
||||||
|
filter: filterParticipate,
|
||||||
|
});
|
||||||
|
|
||||||
message = await interaction.reply({ content: commandReply, components: [row] })
|
collectorParticipate.on('collect', async i => {
|
||||||
.then(function (message) {
|
if (i.member.roles.cache.has(wwRole.id)) {
|
||||||
/* const collector = message.createMessageComponentCollector({
|
OnlyReply('Vous êtes déjà enregistré pour cette wordwar', i, wwRole);
|
||||||
time: (1000 * 60 * (wwtimer + wwdelay))
|
} else if (ongoingww.has(i.user.id)) {
|
||||||
})
|
OnlyReply('Vous êtes déjà enregistré dans la wordwar ' + ongoingww.get(i.user.id), i, wwRole);
|
||||||
|
} else {
|
||||||
collector.on('collect', (buttonClick) => {
|
i.member.roles.add(wwRole);
|
||||||
buttonClick.reply({
|
ongoingww.set(i.user.ida, wwRole);
|
||||||
content: 'Enregistré pour la wordwar',
|
OnlyReply('Participation est enregistrée', i, wwRole);
|
||||||
ephemeral: true
|
|
||||||
})
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
/* interaction.react('✅');
|
|
||||||
setTimeout(() => {
|
|
||||||
reaction = interaction.reactions.cache.find(r => r.name = '✅');
|
|
||||||
users = reaction.users.cache;
|
|
||||||
var participantStart = "";
|
|
||||||
users.forEach(element => {
|
|
||||||
participantStart += userMention(element.id);
|
|
||||||
});
|
|
||||||
interaction.channel.send("\nLa wordwar initiée par " + userMention(memberid) + " commence. Vous pouvez toujours la rejoindre si vous le désirez. Bonne chance à tou.te.s !!\n" + participantStart)
|
|
||||||
var participantTab = [];
|
|
||||||
setTimeout(function () {
|
|
||||||
participantTab += 'La wordwar initiée par ' + userMention(memberid) + ' est maintenant terminée, merci d\'y avoir participé \!\n';
|
|
||||||
reaction = interaction.reactions.cache.find(r => r.name = '✅');
|
|
||||||
users = reaction.users.cache;
|
|
||||||
users.forEach(element => {
|
|
||||||
participantTab += userMention(element.id);
|
|
||||||
});
|
|
||||||
interaction.channel.send(participantTab);
|
|
||||||
}, wwtimer * 60000);
|
|
||||||
ongoingww.splice(ongoingww.indexOf(memberid), 1);
|
|
||||||
}, wwdelay * 60000); */
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
});
|
||||||
};
|
|
||||||
|
const filterCancel = (btnInt) => btnInt.customId === 'secondary';
|
||||||
|
|
||||||
|
const collectorCancel = interaction.channel.createMessageComponentCollector({
|
||||||
|
filter: filterCancel,
|
||||||
|
});
|
||||||
|
|
||||||
|
collectorCancel.on('collect', async i => {
|
||||||
|
console.log("pouet on passe combien de fois ici ?");
|
||||||
|
if (!i.member.roles.cache.has(wwRole.id)) {
|
||||||
|
OnlyReply('Vous n\'êtes pas enregistré pour cette wordwar', i, wwRole);
|
||||||
|
} else {
|
||||||
|
OnlyReply('Participation est annulée', i, wwRole);
|
||||||
|
i.member.roles.remove(wwRole);
|
||||||
|
ongoingww.delete(i.user.id);
|
||||||
|
|
||||||
|
// Si l'utilisateur qui annule est le dernier dans cette wordwar
|
||||||
|
if (typeof ongoingww.find(wordWar => wordWar == wwRole.name) == "undefined") {
|
||||||
|
row.components.forEach(element => {
|
||||||
|
element.setDisabled(true);
|
||||||
|
});
|
||||||
|
i.message.edit({ content: "La " + wwRole.name + " a été annulée par manque de participants.", components: [row] });
|
||||||
|
wwRole.delete();
|
||||||
|
collectorCancel.stop();
|
||||||
|
collectorParticipate.stop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (wwRole.deleted != true) {
|
||||||
|
setTimeout(async () => {
|
||||||
|
console.log('Wordwar launched');
|
||||||
|
var participantStart = '\nLa wordwar ' + wwRole.name + ' commence. Vous pouvez toujours la rejoindre si vous le désirez. Bonne chance à tou.te.s !! ' + roleMention(wwRole.id) + '\n';
|
||||||
|
var sentMsg = await interaction.channel.send({ content: participantStart, fetchReply: true });
|
||||||
|
if (wwRole.deleted != true) {
|
||||||
|
setTimeout(async () => {
|
||||||
|
if (wwRole.deleted != true) {
|
||||||
|
console.log('Wordwar ended');
|
||||||
|
var participantEnd = 'La wordwar ' + wwRole.name + ' est maintenant terminée, merci d\'y avoir participé \! ' + roleMention(wwRole.id) + '\n';
|
||||||
|
interaction.channel.send(participantEnd);
|
||||||
|
ongoingww.forEach(element => {
|
||||||
|
if (element.value == wwRole.name) {
|
||||||
|
element.delete();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
wwRole.delete();
|
||||||
|
collectorCancel.stop();
|
||||||
|
collectorParticipate.stop();
|
||||||
|
}, 30 * 1000); // Wait 30 seconds to delete the role
|
||||||
|
} else {
|
||||||
|
sentMsg.delete();
|
||||||
|
console.log('Wordwar canceled');
|
||||||
|
}
|
||||||
|
}, wwtimer * 1000);
|
||||||
|
} else {
|
||||||
|
sentMsg.delete();
|
||||||
|
console.log('Wordwar canceled');
|
||||||
|
}
|
||||||
|
}, wwdelay * 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* }
|
||||||
|
*/ }
|
||||||
|
}
|
||||||
|
|
||||||
function isNormalInteger(str) {
|
function isNormalInteger(str) {
|
||||||
var n = Math.floor(Number(str));
|
var n = Math.floor(Number(str));
|
||||||
return n !== Infinity && String(n) === str && n >= 0;
|
return n !== Infinity && String(n) === str && n >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function OnlyReply(str, int, ww) {
|
||||||
|
if (!intTable.has(ww.name + int.user.id)) {
|
||||||
|
intTable.set(ww.name + int.user.id, int);
|
||||||
|
int.reply({ content: str, ephemeral: true });
|
||||||
|
} else {
|
||||||
|
intTable.get(ww.name + int.user.id).editReply({ content: str, ephemeral: true });
|
||||||
|
int.deferUpdate();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user