1
0
Fork 0
mirror of https://github.com/myned/modufur.git synced 2024-12-25 06:37:29 +00:00

Create a single task to delete messages from any channel for rate limits

This commit is contained in:
Myned 2017-10-15 02:14:34 -04:00
parent 30f782ec95
commit 1c0c63143f

View file

@ -16,12 +16,15 @@ class Administration:
self.bot = bot self.bot = bot
self.RATE_LIMIT = 2.1 self.RATE_LIMIT = 2.1
self.queue = asyncio.Queue() self.queue = asyncio.Queue()
self.deleting = False
for channel in u.tasks.get('management', {}).get('auto_delete', []): if u.tasks['auto_del']:
temp = self.bot.get_channel(channel) for channel in u.tasks['auto_del']:
self.bot.loop.create_task(self.queue_on_message(temp)) 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()) self.bot.loop.create_task(self.delete())
print('Looping #{}'.format(temp.name)) self.deleting = True
# @commands.group(aliases=['pr', 'clear', 'cl']) # @commands.group(aliases=['pr', 'clear', 'cl'])
# @commands.is_owner() # @commands.is_owner()
@ -136,7 +139,7 @@ class Administration:
await ctx.send('❌ **Deletion timed out.**', delete_after=10) await ctx.send('❌ **Deletion timed out.**', delete_after=10)
async def delete(self): async def delete(self):
while not self.bot.is_closed(): while self.deleting:
message = await self.queue.get() message = await self.queue.get()
await asyncio.sleep(self.RATE_LIMIT) await asyncio.sleep(self.RATE_LIMIT)
try: try:
@ -164,8 +167,10 @@ class Administration:
await self.queue.put(message) await self.queue.put(message)
except exc.Abort: 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') u.dump(u.tasks, 'cogs/tasks.pkl')
if not u.tasks['auto_del']:
self.deleting = False
print('Stopped looping {}'.format(channel.id)) print('Stopped looping {}'.format(channel.id))
await channel.send('✅ **Stopped deleting messages in** {}**.**'.format(channel.mention), delete_after=5) await channel.send('✅ **Stopped deleting messages in** {}**.**'.format(channel.mention), delete_after=5)
@ -179,11 +184,13 @@ class Administration:
channel = ctx.channel channel = ctx.channel
try: try:
if channel.id not in u.tasks.setdefault('management', {}).setdefault('auto_delete', []): if channel.id not in u.tasks['auto_del']:
u.tasks['management']['auto_delete'].append(channel.id) u.tasks['auto_del'].append(channel.id)
u.dump(u.tasks, 'cogs/tasks.pkl') u.dump(u.tasks, 'cogs/tasks.pkl')
self.bot.loop.create_task(self.queue_on_message(channel)) 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)) print('Looping #{}'.format(channel.name))
await ctx.send('✅ **Auto-deleting all messages in this channel.**', delete_after=5) await ctx.send('✅ **Auto-deleting all messages in this channel.**', delete_after=5)
else: else: