/* eslint-disable require-jsdoc */ /* eslint-disable max-len */ const {MessageEmbed} = require('discord.js'); function add(command, interval, bot) { const id = setInterval(() => bot.core.run(command), interval); bot.cloops.push({id, interval, command}); } function remove(item, bot) { clearInterval(bot.cloops[item].id); bot.cloops.splice(item, 1); } function clear(bot) { for (const interval of bot.cloops) clearInterval(interval.id); bot.cloops = []; } function list(bot, discord, channeldc, selector) { const message = []; if (discord) { for (const [id, cloop] of Object.entries(bot.cloops)) { message.push(id); message.push(' > '); message.push(`\`${cloop.command}\``); message.push(' - '); message.push(cloop.interval); message.push('\n'); } message.pop(); const Embed = new MessageEmbed() .setColor('#FFFF00') .setTitle('Cloops') .setDescription(message.join('')); channeldc.send({embeds: [Embed]}); return; } message.push({text: 'Cloops:', color: 'green'}); message.push('\n'); for (const [id, cloop] of Object.entries(bot.cloops)) { message.push({text: id, color: 'aqua'}); message.push({text: ' > ', color: 'gold'}); message.push({text: cloop.command, color: 'green'}); message.push({text: ' - ', color: 'gold'}); message.push({text: cloop.interval, color: 'green'}); message.push('\n'); } message.pop(); bot.tellraw(selector, message); } module.exports = { name: 'cloop', alias: [], description: 'Loop commands', usage: [ ' ', ' ', ' ', ' ', ], trusted: 1, execute: function(bot, username, usernameraw, sender, prefix, args, config, hash, ownerhash, selector) { if (!bot.cloops) bot.cloops = []; if (args[1] === 'add' && args[3]) { if (!Number(args[2]) && Number(args[2]) !== 0) throw new SyntaxError('Invalid interval'); add(args.slice(3).join(' '), args[2], bot); bot.tellraw(selector, [{text: 'Added command ', color: 'white'}, {text: `${args.slice(3).join(' ')}`, color: 'aqua'}, {text: ' with interval ', color: 'white'}, {text: `${args[2]}`, color: 'green'}, {text: ' to the cloops', color: 'white'}]); } else if (args[1] === 'list') { list(bot, false, null, selector); } else if (args[1] === 'remove') { remove(args[2], bot); bot.tellraw(selector, [{text: 'Removed cloop '}, {text: args[2], color: 'aqua'}]); } else if (args[1] === 'removeall') { clear(bot); bot.tellraw(selector, [{text: 'Removed all looped commands', color: 'white'}]); } else { throw new SyntaxError('Invalid argument'); } }, discordExecute: function(bot, username, usernameraw, sender, prefix, args, channeldc, message) { if (!bot.cloops) bot.cloops = []; if (message.member.roles.cache.some((role) => role.name === 'Trusted')) { if (args[0] === 'add' && args[2]) { if (!Number(args[1]) && Number(args[1]) !== 0) throw new SyntaxError('Invalid interval'); add(args.slice(2).join(' '), args[1], bot); const Embed = new MessageEmbed() .setColor('#FFFF00') .setTitle('Cloop') .setDescription(`Added cloop \`${args.slice(2).join(' ')}\` with interval ${args[1]} to the cloops`); channeldc.send({embeds: [Embed]}); } else if (args[0] === 'list') { list(bot, true, channeldc); } else if (args[0] === 'remove') { remove(args[1], bot); const Embed = new MessageEmbed() .setColor('#FFFF00') .setTitle('Cloop') .setDescription(`Removed cloop \`${args[1]}\``); channeldc.send({embeds: [Embed]}); } else if (args[0] === 'removeall') { clear(bot); const Embed = new MessageEmbed() .setColor('#FFFF00') .setTitle('Cloop') .setDescription('Removed all looped commands'); channeldc.send({embeds: [Embed]}); } else { throw new Error('Invalid argument'); } } else { throw new Error('You\'re not in the trusted role!'); } }, };