aboutsummaryrefslogtreecommitdiff
path: root/src/commands/dev/superUser.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/dev/superUser.ts')
-rw-r--r--src/commands/dev/superUser.ts73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/commands/dev/superUser.ts b/src/commands/dev/superUser.ts
new file mode 100644
index 0000000..c3ed0b0
--- /dev/null
+++ b/src/commands/dev/superUser.ts
@@ -0,0 +1,73 @@
+import { Constants } from 'discord-akairo';
+import { User } from 'discord.js';
+import { BushCommand } from '../../lib/extensions/BushCommand';
+import { BushMessage } from '../../lib/extensions/BushMessage';
+import { Global } from '../../lib/models/Global';
+
+export default class SuperUserCommand extends BushCommand {
+ public constructor() {
+ super('superuser', {
+ aliases: ['superuser', 'su'],
+ category: 'dev',
+ description: {
+ content: 'A command to manage superusers.',
+ usage: 'superuser <add/remove> <user>',
+ examples: ['superuser add IRONM00N']
+ },
+ clientPermissions: ['SEND_MESSAGES'],
+ ownerOnly: true
+ });
+ }
+ *args(): unknown {
+ const action = yield {
+ id: 'action',
+ type: ['add', 'remove'],
+ match: Constants.ArgumentMatches.PHRASE,
+ prompt: {
+ start: 'Would you like to `add` or `remove` a user from the superuser list?',
+ retry: '{error} Choose if you would like to `add` or `remove` a user.',
+ required: true
+ }
+ };
+ const user = yield {
+ id: 'user',
+ type: Constants.ArgumentTypes.USER,
+ match: Constants.ArgumentMatches.REST_CONTENT,
+ prompt: {
+ start: `Who would you like to ${action || 'add/remove'} from the superuser list?`,
+ retry: `Choose a valid user to ${action || 'add/remove'} from the superuser list.`,
+ required: true
+ }
+ };
+ return { action, user };
+ }
+ public async exec(message: BushMessage, args: { action: 'add' | 'remove'; user: User }): Promise<unknown> {
+ if (!this.client.config.owners.includes(message.author.id))
+ return await message.util.reply(`${this.client.util.emojis.error} Only my developers can run this command...`);
+
+ const superUsers = (await Global.findByPk(this.client.config.dev ? 'development' : 'production')).superUsers;
+ let success;
+ if (args.action === 'add') {
+ if (superUsers.includes(args.user.id)) {
+ return message.util.reply(`${this.client.util.emojis.warn} \`${args.user.tag}\` is already a superuser.`);
+ }
+ success = await this.client.util.insertOrRemoveFromGlobal('add', 'superUsers', args.user.id).catch(() => false);
+ } else {
+ if (!superUsers.includes(args.user.id)) {
+ return message.util.reply(`${this.client.util.emojis.warn} \`${args.user.tag}\` is not superuser.`);
+ }
+ success = await this.client.util.insertOrRemoveFromGlobal('remove', 'superUsers', args.user.id).catch(() => false);
+ }
+ if (success) {
+ const responses = [args.action == 'remove' ? `` : 'made', args.action == 'remove' ? 'is no longer' : ''];
+ return message.util.reply(
+ `${this.client.util.emojis.success} ${responses[0]} \`${args.user.tag}\` ${responses[1]} a superuser.`
+ );
+ } else {
+ const response = [args.action == 'remove' ? `removing` : 'making', args.action == 'remove' ? `from` : 'to'];
+ return message.util.reply(
+ `${this.client.util.emojis.error} There was an error ${response[0]} \`${args.user.tag}\` ${response[1]} the superuser list.`
+ );
+ }
+ }
+}