99 lines
3.9 KiB
Python
99 lines
3.9 KiB
Python
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="""\
|
|
</prefix>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')
|