import asyncio import traceback import discord import random import pickle import os.path import collections from subprocess import call moduleFiles="errors" class MainClass(): def saveObject(self, object, objectname): with open("storage/%s/"%moduleFiles + objectname + "tmp", "wb") as pickleFile: pickler = pickle.Pickler(pickleFile) pickler.dump(object) call(['mv', "storage/%s/"%moduleFiles + objectname + "tmp", "storage/%s/"%moduleFiles + objectname]) def loadObject(self, objectname): if self.saveExists(objectname): with open("storage/%s/"%moduleFiles + objectname, "rb") as pickleFile: unpickler = pickle.Unpickler(pickleFile) return unpickler.load() def saveExists(self, objectname): return os.path.isfile("storage/%s/"%moduleFiles + objectname) def __init__(self, client, modules, owners): if not os.path.isdir("storage/%s"%moduleFiles): call(['mkdir', 'storage/%s'%moduleFiles]) self.errorsDeque=None self.devchanids=[549662392120901633] self.memes=[ "https://moriya.zapto.org/avatars/5?s=140" ] self.icon="https://moriya.zapto.org/avatars/5?s=140" self.client = client self.modules = modules self.owners = owners self.prefix = prefix self.events=['on_error', 'on_message', 'on_ready'] #events list self.command="%slicorne"%self.prefix #command prefix (can be empty to catch every single messages) self.name="Error Handling" self.description="Module de gestions des erreurs" self.interactive=True self.authlist=[] self.color=0xdb1348 self.help="""\ licorne => Crée une erreur. """ async def on_ready(self): if self.saveExists('errorsDeque'): self.errorsDeque=self.loadObject('errorsDeque') else: self.errorsDeque=collections.deque() for i in range(len(self.errorsDeque)): try: messagelst=self.errorsDeque.popleft() channel = self.client.get_channel(messagelst[0]) delete_message = await channel.get_message(messagelst[1]) await delete_message.delete() except: raise self.saveObject(self.errorsDeque, 'errorsDeque') async def on_message(self, message): 5/0 async def on_error(self, event, *args, **kwargs): embed = discord.Embed(title="Aïe :/", description="```PYTHON\n{0}```".format(traceback.format_exc()), color=self.color).set_image(url=random.choice(self.memes)) messagelst = None try: message = await args[0].channel.send(embed=embed.set_footer(text="Ce message s'autodétruira dans une minute.", icon_url=self.icon)) messagelst=[message.channel.id, message.id] self.errorsDeque.append(messagelst) except: try: message = args[1].channel.send(embed=embed.set_footer(text="Ce message s'autodétruira dans une minute.", icon_url=self.icon)) messagelst=[message.channel.id, message.id] self.errorsDeque.append(messagelst) except: pass for chanid in self.devchanids: try: await self.client.get_channel(chanid).send(embed=embed.set_footer(text="Ce message ne s'autodétruira pas.", icon_url=self.icon)) except: pass self.saveObject(self.errorsDeque, 'errorsDeque') await asyncio.sleep(60) try: channel = self.client.get_channel(messagelst[0]) delete_message = await channel.get_message(messagelst[1]) await delete_message.delete() except: raise finally: try: self.errorsDeque.remove(messagelst) except: pass self.saveObject(self.errorsDeque, 'errorsDeque')