From 0a28d3303dae7deee60f8ba7972a181f4577db9b Mon Sep 17 00:00:00 2001 From: Nemo Date: Wed, 10 Nov 2021 00:49:27 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20de=20la=20fonctionnalit=C3=A9=20wordwar?= =?UTF-8?q?=20+=20modifs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commands/wordwar.js | 132 ++++++++++++++++++++++++++++++++++++ events/interactionCreate.js | 6 ++ 2 files changed, 138 insertions(+) create mode 100644 commands/wordwar.js diff --git a/commands/wordwar.js b/commands/wordwar.js new file mode 100644 index 0000000..907064d --- /dev/null +++ b/commands/wordwar.js @@ -0,0 +1,132 @@ +const { SlashCommandBuilder, blockQuote, userMention } = require('@discordjs/builders'); +const { MessageActionRow, MessageButton, Message } = require('discord.js'); +const ongoingww = []; + +/** + * This function aims to do word wars inside a discord channel. + * Someone launches a wordwar and other people can join in by clicking on the react icon. + * First argument is the time of duration of the wordwar. + * Second argument is the waiting time before the wordwar. +**/ +module.exports = { + data: new SlashCommandBuilder() + .setName('wordwar') + .setDescription('Pour faire des WordWar comme au NaNoWriMo') + .addStringOption(option => + option.setName('duree') + .setDescription('Durée de la wordwar. Par défaut 20min, max 30min.') + .setRequired(false) + ) + .addStringOption(option => + option.setName('attente') + .setDescription('Attente avant la wordwar. Par défaut 2min, max 15min.') + .setRequired(false) + ), + 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 { + + var wwtimer; + var wwdelay; + + if (interaction.options.get('duree') == null) { + wwtimer = 20; + } else { + wwtimer = interaction.options.get('duree').value; + if (isNormalInteger(wwtimer)) { + 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 !"); + return; + } else if (wwtimer < 1) { + return; + } + } 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 !") + return; + } // && Number.isInteger(args[1]) + } + + if (interaction.options.get('attente') == null) { + wwdelay = 2; + } else { + wwdelay = interaction.options.get('attente').value; + if (isNormalInteger(wwdelay)) { + 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 !"); + return; + } 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 !") + return; + } + } 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 !") + return; + } + } + + memberid = interaction.user.id; + ongoingww.push(memberid); + commandReply = "Une wordwar a été initiée par " + userMention(memberid) + " . Elle commencera dans " + wwdelay + " minutes et durera " + wwtimer + " minutes."; + + const row = new MessageActionRow() + .addComponents( + new MessageButton() + .setCustomId('primary') + .setLabel('Participer') + .setStyle('SUCCESS') + ) + .addComponents( + new MessageButton() + .setCustomId('secondary') + .setLabel('Annuler') + .setStyle('DANGER') + .setDisabled(true) + ); + + + + message = await interaction.reply({ content: commandReply, components: [row] }) + .then(function (message) { +/* const collector = message.createMessageComponentCollector({ + time: (1000 * 60 * (wwtimer + wwdelay)) + }) + + collector.on('collect', (buttonClick) => { + buttonClick.reply({ + content: 'Enregistré pour la wordwar', + 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); */ + }); + } + }, +}; + +function isNormalInteger(str) { + var n = Math.floor(Number(str)); + return n !== Infinity && String(n) === str && n >= 0; +} \ No newline at end of file diff --git a/events/interactionCreate.js b/events/interactionCreate.js index 0d99a8d..27d4f18 100644 --- a/events/interactionCreate.js +++ b/events/interactionCreate.js @@ -1,6 +1,12 @@ module.exports = { name: 'interactionCreate', async execute(interaction) { + if(interaction.isButton()){ + console.log(interaction); + interaction.reply({ content: `${interaction.user.tag} clicked me`, ephemeral : true }); + } + + if (!interaction.isCommand()) return; const command = interaction.client.commands.get(interaction.commandName);