From 3c55f9bb05863740bcb9075530e34d748ab21840 Mon Sep 17 00:00:00 2001 From: Myned Date: Sat, 14 Oct 2017 23:40:56 -0400 Subject: [PATCH 1/2] Added settings.pkl for del_ctx checks --- src/main/cogs/management.py | 22 ++++++++++++++++++++++ src/main/misc/checks.py | 2 +- src/main/utils/utils.py | 1 + 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/cogs/management.py b/src/main/cogs/management.py index 9d16ac7..bcb858d 100644 --- a/src/main/cogs/management.py +++ b/src/main/cogs/management.py @@ -81,8 +81,10 @@ class Administration: for channel in channels: try: ref = await channel.get_message(reference) + except err.NotFound: continue + history = [] try: pru_sent = await ctx.send('⌛️ **Pruning** <@{}>**\'s messages will take some time.**'.format(uid)) @@ -118,14 +120,18 @@ class Administration: for message in history: try: await message.delete() + except d.NotFound: pass + # print('Deleted {}/{} messages.'.format(history.index(message) + 1, len(history))) await del_sent.edit(content='🗑 **Deleted** `{}/{}` **messages.**'.format(history.index(message) + 1, len(history))) await asyncio.sleep(self.RATE_LIMIT) await del_sent.edit(content='🗑 `{}` **of** <@{}>**\'s messages deleted from** {}**.**'.format(len(history), uid, ctx.guild.name)) + except exc.CheckFail: await ctx.send('❌ **Deletion aborted.**', delete_after=10) + except TimeoutError: await ctx.send('❌ **Deletion timed out.**', delete_after=10) @@ -152,11 +158,13 @@ class Administration: while not self.bot.is_closed(): message = await self.bot.wait_for('message', check=check) await self.queue.put(message) + except exc.Abort: u.tasks['management']['auto_delete'].remove(channel.id) u.dump(u.tasks, 'cogs/tasks.pkl') print('Stopped looping {}'.format(channel.id)) await channel.send('✅ **Stopped deleting messages in** {}**.**'.format(channel.mention), delete_after=5) + except AttributeError: pass @@ -176,5 +184,19 @@ class Administration: await ctx.send('✅ **Auto-deleting all messages in this channel.**', delete_after=5) else: raise exc.Exists + except exc.Exists: await ctx.send('❌ **Already auto-deleting in this channel.** Type `stop` to stop.', delete_after=10) + + @commands.command(name='deletecommands', aliases=['delcmds']) + @commands.has_permissions(administrator=True) + async def delete_commands(self, ctx): + guild = ctx.guild + + if guild.id not in u.settings['del_ctx']: + u.settings['del_ctx'].append(guild.id) + else: + u.settings['del_ctx'].remove(guild.id) + u.dump(u.settings, 'settings.pkl') + + await ctx.send('✅ **Delete command invocations:** `{}`'.format(guild.id in u.settings['del_ctx'])) diff --git a/src/main/misc/checks.py b/src/main/misc/checks.py index c782109..bcf7ae6 100644 --- a/src/main/misc/checks.py +++ b/src/main/misc/checks.py @@ -58,7 +58,7 @@ def is_nsfw(): def del_ctx(): async def predicate(ctx): - if isinstance(ctx.message.channel, discord.TextChannel): + if ctx.me.permissions_in(ctx.channel).manage_messages is True and isinstance(ctx.message.channel, discord.TextChannel) and ctx.guild.id in u.settings['del_ctx']: await ctx.message.delete() return True return commands.check(predicate) diff --git a/src/main/utils/utils.py b/src/main/utils/utils.py index 9b6ad51..0fa8040 100644 --- a/src/main/utils/utils.py +++ b/src/main/utils/utils.py @@ -50,6 +50,7 @@ def dump(obj, filename): pkl.dump(obj, outfile) +settings = setdefault('settings.pkl', {'del_ctx': []}) tasks = setdefault('cogs/tasks.pkl', {}) From a346dfca7edcfd0108be356076c28f7c86278ba2 Mon Sep 17 00:00:00 2001 From: Myned Date: Sat, 14 Oct 2017 23:41:42 -0400 Subject: [PATCH 2/2] Formatting changes, changed to errext, caught CheckFailure --- src/main/cogs/booru.py | 2 +- src/main/cogs/owner.py | 8 ++++---- src/main/run.py | 9 +++++++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/cogs/booru.py b/src/main/cogs/booru.py index c84b27e..3094b45 100644 --- a/src/main/cogs/booru.py +++ b/src/main/cogs/booru.py @@ -37,7 +37,7 @@ class MsG: for tag in tag_request.get('wolf', []): tags.append(tag[0]) - await ctx.send('✅ ``{}` **tags:**\n```\n{}```'.format(tag, formatter.tostring(tags))) + await ctx.send('✅ `{}` **related tags:**\n```\n{}```'.format(tag, formatter.tostring(tags))) @tags.error async def tags_error(self, ctx, error): diff --git a/src/main/cogs/owner.py b/src/main/cogs/owner.py index 3a65307..19a9916 100644 --- a/src/main/cogs/owner.py +++ b/src/main/cogs/owner.py @@ -27,8 +27,8 @@ class Bot: @commands.is_owner() @checks.del_ctx() async def die(self, ctx): - if isinstance(self.bot.get_channel(u.config['startup_channel']), d.TextChannel): - await self.bot.get_channel(u.config['shutdown_channel']).send('**Shutting down...** 🌙') + if isinstance(self.bot.get_channel(u.config['shutdown_channel']), d.TextChannel): + await self.bot.get_channel(u.config['shutdown_channel']).send('**Shutting down. . .** 🌙') # loop = self.bot.loop.all_tasks() # for task in loop: # task.cancel() @@ -43,8 +43,8 @@ class Bot: @checks.del_ctx() async def restart(self, ctx): print('\n| | | | | | | | | |\nR E S T A R T I N G\n| | | | | | | | | |\n') - if isinstance(self.bot.get_channel(u.config['startup_channel']), d.TextChannel): - await self.bot.get_channel(u.config['shutdown_channel']).send('**Restarting...** 💤') + if isinstance(self.bot.get_channel(u.config['shutdown_channel']), d.TextChannel): + await self.bot.get_channel(u.config['shutdown_channel']).send('**Restarting. . .** 💤') # u.notify('R E S T A R T I N G') # loop = self.bot.loop.all_tasks() # for task in loop: diff --git a/src/main/run.py b/src/main/run.py index 0d9feb7..2b51ca9 100644 --- a/src/main/run.py +++ b/src/main/run.py @@ -9,6 +9,7 @@ import traceback as tb import discord as d from discord import utils from discord.ext import commands +from discord.ext.commands import errors as errext from misc import exceptions as exc from misc import checks @@ -40,7 +41,9 @@ async def on_ready(): @bot.event -async def on_error(error): +async def on_error(error, *args, **kwargs): + if isinstance(bot.get_channel(u.config['shutdown_channel']), d.TextChannel): + await bot.get_channel(u.config['shutdown_channel']).send('**__ERROR__** ⚠️ {}\n**Exiting. . .**'.format(error)) u.close() await bot.logout() await bot.close() @@ -51,7 +54,9 @@ async def on_error(error): @bot.event async def on_command_error(ctx, error): - if not isinstance(error, commands.errors.CommandNotFound): + if isinstance(error, errext.CheckFailure): + await ctx.send('❌ **Insufficient permissions.**', delete_after=10) + elif not isinstance(error, errext.CommandNotFound): print('\n! ! ! ! ! ! ! ! ! ! ! !\nC O M M A N D E R R O R : {}\n! ! ! ! ! ! ! ! ! ! ! !\n'.format( error), file=sys.stderr) tb.print_exception(type(error), error, error.__traceback__, file=sys.stderr)