From 02a858bf48b98c42f91ac577e3049edf4604dfb7 Mon Sep 17 00:00:00 2001 From: supositware Date: Sat, 13 Mar 2021 18:23:43 +0100 Subject: [PATCH] Allow blocking specific user from command --- commands/admin/commandblockuser.js | 52 ++++++++++++++++++++++++++++++ event/inhibitors/commandBlock.js | 4 ++- 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 commands/admin/commandblockuser.js diff --git a/commands/admin/commandblockuser.js b/commands/admin/commandblockuser.js new file mode 100644 index 0000000..5aebc82 --- /dev/null +++ b/commands/admin/commandblockuser.js @@ -0,0 +1,52 @@ +const { Command } = require('discord-akairo'); +const commandblockuser = require('../../models').commandblockuser; + +class commandblockuserCommand extends Command { + constructor() { + super('commandblockuser', { + aliases: ['commandblockuser', 'userblockcommand'], + category: 'admin', + args: [ + { + id: 'command', + type: 'command', + prompt: { + start: 'What command do you want to block?', + retry: 'Not a valid command, please try again' + } + }, + { + id: 'user', + type: 'user', + prompt: { + start: 'Which user you want to block?' + } + } + ], + clientPermissions: ['SEND_MESSAGES'], + userPermissions: ['ADMINISTRATOR'], + channel: 'guild', + description: { + content: 'Block a command from a user. Execute that command again to unblock a command', + usage: '[command name] [@user]', + examples: ['owned @supositware'] + } + }); + } + + async exec(message, args) { + if (args.command.id == 'commandblockuser') return message.channel.send('Whoa there, i can\'t let you block this command or else how would you unblock it?'); + + const blocked = await commandblockuser.findOne({where: {serverID: message.guild.id, userID: args.user.id, command: args.command.id}}); + + if (!blocked) { + const body = {serverID: message.guild.id, userID: args.user.id, command: args.command.id}; + commandblockuser.create(body); + return message.channel.send(`Blocked command ${args.command.id}`); + } else { + commandblockuser.destroy({where: {serverID: message.guild.id, userID: args.user.id, command: args.command.id}}); + return message.channel.send(`The command ${args.command.id} has been unblocked`); + } + } +} +module.exports = commandblockuserCommand; \ No newline at end of file diff --git a/event/inhibitors/commandBlock.js b/event/inhibitors/commandBlock.js index e9f937b..2dac687 100644 --- a/event/inhibitors/commandBlock.js +++ b/event/inhibitors/commandBlock.js @@ -1,5 +1,6 @@ const { Inhibitor } = require('discord-akairo'); const commandblock = require('../../models').commandBlock; +const commandblockuser = require('../../models').commandblockuser; class commandblockInhibitor extends Inhibitor { constructor() { @@ -11,8 +12,9 @@ class commandblockInhibitor extends Inhibitor { async exec(message, command) { if (message.channel.type == 'dm' || message.author.id == this.client.ownerID || message.member.hasPermission('ADMINISTRATOR')) return false; const blacklist = await commandblock.findOne({where: {serverID:message.guild.id, command: command.id}}); + const blocked = await commandblockuser.findOne({where: {serverID: message.guild.id, userID: message.author.id, command: command.id}}); - if (blacklist) return true; + if (blacklist || blocked) return true; } }