From c34bf36deedd43b14ff0c49674647207330700c5 Mon Sep 17 00:00:00 2001 From: Will Date: Mon, 28 Nov 2016 20:40:40 -0500 Subject: [PATCH] [Mod] Added [p]modset deletedelay (#445) Deletes issued command after X seconds --- cogs/mod.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/cogs/mod.py b/cogs/mod.py index 280268281..21c04b50f 100644 --- a/cogs/mod.py +++ b/cogs/mod.py @@ -62,11 +62,14 @@ class Mod: await send_cmd_help(ctx) roles = settings.get_server(server).copy() _settings = {**self.settings[server.id], **roles} + if "delete_delay" not in _settings: + _settings["delete_delay"] = -1 msg = ("Admin role: {ADMIN_ROLE}\n" "Mod role: {MOD_ROLE}\n" "Mod-log: {mod-log}\n" "Delete repeats: {delete_repeats}\n" "Ban mention spam: {ban_mention_spam}\n" + "Delete delay: {delete_delay}\n" "".format(**_settings)) await self.bot.say(box(msg)) @@ -149,6 +152,36 @@ class Mod: dataIO.save_json("data/mod/modlog.json", self.cases) await self.bot.say("Cases have been reset.") + @modset.command(pass_context=True, no_pm=True) + async def deletedelay(self, ctx, time: int=None): + """Sets the delay until the bot removes the command message. + Must be between -1 and 60. + + A delay of -1 means the bot will not remove the message.""" + server = ctx.message.server + if time is not None: + time = min(max(time, -1), 60) # Enforces the time limits + self.settings[server.id]["delete_delay"] = time + if time == -1: + await self.bot.say("Command deleting disabled.") + else: + await self.bot.say("Delete delay set to {}" + " seconds.".format(time)) + dataIO.save_json("data/mod/settings.json", self.settings) + else: + try: + delay = self.settings[server.id]["delete_delay"] + except KeyError: + await self.bot.say("Delete delay not yet set up on this" + " server.") + else: + if delay != -1: + await self.bot.say("Bot will delete command messages after" + " {} seconds. Set this value to -1 to" + " stop deleting messages".format(delay)) + else: + await self.bot.say("I will not delete command messages.") + @commands.command(no_pm=True, pass_context=True) @checks.admin_or_permissions(kick_members=True) async def kick(self, ctx, user: discord.Member): @@ -1230,6 +1263,32 @@ class Mod: self._tmp_banned_cache.remove(author) return False + async def on_command(self, command, ctx): + """Currently used for: + * delete delay""" + server = ctx.message.server + message = ctx.message + try: + delay = self.settings[server.id]["delete_delay"] + except KeyError: + # We have no delay set + return + + if delay == -1: + return + + async def _delete_helper(bot, message): + try: + await bot.delete_message(message) + logger.debug("Deleted command msg {}".format(message.id)) + except discord.errors.Forbidden: + # Do not have delete permissions + logger.debug("Wanted to delete mid {} but no" + " permissions".format(message.id)) + + await asyncio.sleep(delay) + await _delete_helper(self.bot, message) + async def on_message(self, message): if message.channel.is_private or self.bot.user == message.author \ or not isinstance(message.author, discord.Member):