From dcf95ec01a6c5528bbbce5aec21f01b35ccc7454 Mon Sep 17 00:00:00 2001 From: Daniel Odendahl Jr Date: Fri, 19 May 2017 13:41:15 +0000 Subject: [PATCH] Guard --- commands/util/clearsetting.js | 8 ++++---- commands/util/inviteguard.js | 23 +++++++++++++++++++++++ index.js | 8 ++++++++ package.json | 2 +- 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 commands/util/inviteguard.js diff --git a/commands/util/clearsetting.js b/commands/util/clearsetting.js index 0a245867..9ea35e22 100644 --- a/commands/util/clearsetting.js +++ b/commands/util/clearsetting.js @@ -6,16 +6,16 @@ module.exports = class ClearSettingCommand extends Command { name: 'clear-setting', group: 'util', memberName: 'clear-setting', - description: 'Removes a custom-set Mod Channel, Member Channel, Member Message, Staff Role, or Single Role.', + description: 'Removes a custom-set Guard Mode, Mod Channel, Member Channel, Member Message, Staff Role, or Single Role.', guildOnly: true, args: [ { key: 'setting', - prompt: 'What setting do you want to clear? `modLog`, `memberLog`, `joinMsg`, `leaveMsg`, `staffRole`, or `singleRole`?', + prompt: 'What setting do you want to clear? `guard`, `modLog`, `memberLog`, `joinMsg`, `leaveMsg`, `staffRole`, or `singleRole`?', type: 'string', validate: setting => { - if (['modLog', 'memberLog', 'joinMsg', 'leaveMsg', 'staffRole', 'singleRole'].includes(setting)) return true; - return 'Please enter either `modLog`, `memberLog`, `joinMsg`, `leaveMsg`, `staffRole`, or `singleRole`.'; + if (['guard', 'modLog', 'memberLog', 'joinMsg', 'leaveMsg', 'staffRole', 'singleRole'].includes(setting)) return true; + return 'Please enter either `guard`, `modLog`, `memberLog`, `joinMsg`, `leaveMsg`, `staffRole`, or `singleRole`.'; } } ] diff --git a/commands/util/inviteguard.js b/commands/util/inviteguard.js new file mode 100644 index 00000000..4afadf92 --- /dev/null +++ b/commands/util/inviteguard.js @@ -0,0 +1,23 @@ +const { Command } = require('discord.js-commando'); + +module.exports = class GuardCommand extends Command { + constructor(client) { + super(client, { + name: 'invite-guard', + aliases: ['guard'], + group: 'util', + memberName: 'invite-guard', + description: 'Configures auto-delete for invites.', + guildOnly: true + }); + } + + hasPermission(msg) { + return msg.member.hasPermission('ADMINISTRATOR'); + } + + run(msg) { + msg.guild.settings.set('guard', true); + return msg.say('Invite Guard is now active.'); + } +}; diff --git a/index.js b/index.js index a6103b57..cd2bb95c 100644 --- a/index.js +++ b/index.js @@ -66,6 +66,14 @@ client.on('commandError', (command, err) => { }); client.on('message', async (msg) => { + if (msg.guild && msg.guild.settings.get('guard') && /(discord(.gg\/|app.com\/invite\/))/g.test(msg.content)) { + if (msg.channel.permissionsFor(client.user).has('ADMINISTRATOR')) return; + if (msg.member.roles.has(msg.guild.settings.get('staffRole'))) return; + if (!msg.channel.permissionsFor(client.user).has('SEND_MESSAGES')) return; + if (msg.channel.permissionsFor(client.user).has('MANAGE_MESSAGES')) msg.delete(); + else msg.channel.send('Message could not be deleted, missing the `Manage Messages` permission.'); + return msg.reply('Invites are prohibited from being posted here.'); + } else if (msg.isMentioned(client.user)) { if (msg.author.bot) return; if (msg.channel.type !== 'dm') { diff --git a/package.json b/package.json index 86a526f4..32c09330 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiaobot", - "version": "19.8.3", + "version": "19.9.0", "description": "A Discord Bot", "main": "shardingmanager.js", "scripts": {