From b284bf837c0905d790256156315115f18dc0ebc9 Mon Sep 17 00:00:00 2001 From: Myned Date: Sun, 15 Oct 2017 02:13:28 -0400 Subject: [PATCH 1/3] Shortened u.tasks to not include the cog --- src/main/utils/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/utils/utils.py b/src/main/utils/utils.py index 0fa8040..2bd4d6b 100644 --- a/src/main/utils/utils.py +++ b/src/main/utils/utils.py @@ -51,7 +51,7 @@ def dump(obj, filename): settings = setdefault('settings.pkl', {'del_ctx': []}) -tasks = setdefault('cogs/tasks.pkl', {}) +tasks = setdefault('cogs/tasks.pkl', {'auto_del': []}) async def clear(obj, interval=10 * 60, replace=None): From 30f782ec95dbd548febe3b27bbddd15bdfa2ede5 Mon Sep 17 00:00:00 2001 From: Myned Date: Sun, 15 Oct 2017 02:13:41 -0400 Subject: [PATCH 2/3] Formatting change --- src/main/cogs/owner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/cogs/owner.py b/src/main/cogs/owner.py index 19a9916..a78d3fc 100644 --- a/src/main/cogs/owner.py +++ b/src/main/cogs/owner.py @@ -28,7 +28,7 @@ class Bot: @checks.del_ctx() async def die(self, ctx): if isinstance(self.bot.get_channel(u.config['shutdown_channel']), d.TextChannel): - await self.bot.get_channel(u.config['shutdown_channel']).send('**Shutting down. . .** 🌙') + await self.bot.get_channel(u.config['shutdown_channel']).send('**Shutting down . . .** 🌙') # loop = self.bot.loop.all_tasks() # for task in loop: # task.cancel() @@ -44,7 +44,7 @@ class Bot: 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['shutdown_channel']), d.TextChannel): - await self.bot.get_channel(u.config['shutdown_channel']).send('**Restarting. . .** 💤') + 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: From 1c0c63143fc06dc62b3efca5ce3694acae92e973 Mon Sep 17 00:00:00 2001 From: Myned Date: Sun, 15 Oct 2017 02:14:34 -0400 Subject: [PATCH 3/3] Create a single task to delete messages from any channel for rate limits --- src/main/cogs/management.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/cogs/management.py b/src/main/cogs/management.py index 7ce42f7..56579f2 100644 --- a/src/main/cogs/management.py +++ b/src/main/cogs/management.py @@ -16,12 +16,15 @@ class Administration: self.bot = bot self.RATE_LIMIT = 2.1 self.queue = asyncio.Queue() + self.deleting = False - for channel in u.tasks.get('management', {}).get('auto_delete', []): - temp = self.bot.get_channel(channel) - self.bot.loop.create_task(self.queue_on_message(temp)) + if u.tasks['auto_del']: + for channel in u.tasks['auto_del']: + temp = self.bot.get_channel(channel) + self.bot.loop.create_task(self.queue_on_message(temp)) + print('Looping #{}'.format(temp.name)) self.bot.loop.create_task(self.delete()) - print('Looping #{}'.format(temp.name)) + self.deleting = True # @commands.group(aliases=['pr', 'clear', 'cl']) # @commands.is_owner() @@ -136,7 +139,7 @@ class Administration: await ctx.send('❌ **Deletion timed out.**', delete_after=10) async def delete(self): - while not self.bot.is_closed(): + while self.deleting: message = await self.queue.get() await asyncio.sleep(self.RATE_LIMIT) try: @@ -164,8 +167,10 @@ class Administration: await self.queue.put(message) except exc.Abort: - u.tasks['management']['auto_delete'].remove(channel.id) + u.tasks['auto_del'].remove(channel.id) u.dump(u.tasks, 'cogs/tasks.pkl') + if not u.tasks['auto_del']: + self.deleting = False print('Stopped looping {}'.format(channel.id)) await channel.send('✅ **Stopped deleting messages in** {}**.**'.format(channel.mention), delete_after=5) @@ -179,11 +184,13 @@ class Administration: channel = ctx.channel try: - if channel.id not in u.tasks.setdefault('management', {}).setdefault('auto_delete', []): - u.tasks['management']['auto_delete'].append(channel.id) + if channel.id not in u.tasks['auto_del']: + u.tasks['auto_del'].append(channel.id) u.dump(u.tasks, 'cogs/tasks.pkl') self.bot.loop.create_task(self.queue_on_message(channel)) - self.bot.loop.create_task(self.delete()) + if not self.deleting: + self.bot.loop.create_task(self.delete()) + self.deleting = True print('Looping #{}'.format(channel.name)) await ctx.send('✅ **Auto-deleting all messages in this channel.**', delete_after=5) else: