chomens-bot-js/commands/cloop.js
2022-11-16 18:41:30 +07:00

127 lines
4.2 KiB
JavaScript

/* 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) {
clearInterval(bot.cloops[item].id);
bot.cloops.splice(item, 1);
}
function clear() {
for (const interval of bot.cloops) clearInterval(interval.id);
bot.cloops = [];
}
function list(bot, discord, channeldc) {
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: [
'<hash> <add> <interval> <command>',
'<hash> <remove> <index>',
'<hash> <removeall>',
'<hash> <list>',
],
trusted: 1,
execute: function(bot, username, usernameraw, sender, prefix, args, config, hash, ownerhash, selector) {
if (!bot.cloops) bot.cloops = [];
if (args[0] === hash) {
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);
} else if (args[1] === 'remove') {
remove(args[2]);
bot.tellraw(selector, [{text: 'Removed cloop '}, {text: args[2], color: 'aqua'}]);
} else if (args[1] === 'removeall') {
clear();
bot.tellraw(selector, [{text: 'Removed all looped commands', color: 'white'}]);
} else {
throw new SyntaxError('Invalid argument');
}
} else {
throw new Error('Invalid hash');
}
},
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]);
const Embed = new MessageEmbed()
.setColor('#FFFF00')
.setTitle('Cloop')
.setDescription(`Removed cloop \`${args[1]}\``);
channeldc.send({embeds: [Embed]});
} else if (args[0] === 'removeall') {
clear();
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!');
}
},
};