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; }