Home Reference Source Repository

src/commands/roles/add.js

'use babel';
'use strict';

import ModRole from '../../database/mod-role';
import * as permissions from '../../permissions';
import CommandFormatError from '../../errors/command-format';
import Util from '../../util';

export default {
	name: 'addmodrole',
	aliases: ['addmod'],
	group: 'roles',
	groupName: 'add',
	description: 'Adds a moderator role.',
	usage: 'addmodrole <role>',
	details: 'The role must be the name or ID of a role, or a role mention. Only administrators may use this command.',
	examples: ['addmodrole cool', 'addmodrole 205536402341888001', 'addmodrole @CoolPeopleRole'],
	serverOnly: true,

	isRunnable(message) {
		return permissions.isAdmin(message.server, message.author);
	},

	async run(message, args) {
		if(!args[0]) throw new CommandFormatError(this, message.server);
		const matches = Util.patterns.roleID.exec(args[0]);
		let roles;
		const idRole = message.server.roles.get('id', matches[1]);
		if(idRole) roles = [idRole]; else roles = Util.search(message.server.roles, matches[1]);

		if(roles.length === 1) {
			if(ModRole.save(roles[0])) {
				return `Added "${roles[0].name}" to the moderator roles.`;
			} else {
				return `Unable to add "${roles[0].name}" to the moderator roles. It already is one.`;
			}
		} else if(roles.length > 1) {
			return Util.disambiguation(roles, 'roles');
		} else {
			return `Unable to identify role. Use ${Util.usage('roles', message.server)} to view all of the server roles.`;
		}
	}
};