LBI/modules/modules.py

102 lines
4.1 KiB
Python

import os
import discord
from aiohttp import ClientSession
from .base import BaseClass
class MainClass(BaseClass):
name = "modules"
super_users = [431043517217898496]
color = 0x000000
help_active = True
help = {
"description": "Manage bot modules.",
"commands": {
"`{prefix}{command} list`": "List of available modules.",
"`{prefix}{command} enable <module>`": "Enable module `<module>`.",
"`{prefix}{command} disable <module>`": "Disable module `<module>`.",
}
}
command_text = "modules"
def __init__(self, client):
super().__init__(client)
self.storage.mkdir("modules")
def get_all_modules(self):
all_items = os.listdir("modules")
modules = []
for item in all_items:
if item not in ["__init__.py", "base.py", "__pycache__", "dummy"]:
if os.path.isfile(os.path.join("modules", item)):
modules.append(item[:-3])
else:
modules.append(item)
return set(modules)
async def com_enable(self, message, args, kwargs):
args = args[1:]
if len(args) == 0:
await message.channel.send("You must specify at least one module.")
return
if len(args) == 1 and args[0] == "*":
for module in self.get_all_modules():
e = self.client.load_module(module)
if e:
await message.channel.send("An error occurred during the loading of the module {module}."
.format(module=module))
await self.com_list(message, args, kwargs)
return
for arg in args:
e = self.client.load_module(arg)
if e:
await message.channel.send("An error occurred during the loading of the module {module}."
.format(module=arg))
await self.com_list(message, args, kwargs)
async def com_disable(self, message, args, kwargs):
args = args[1:]
if len(args) == 0:
await message.channel.send("You must specify at least one module.")
return
if len(args) == 1 and args[0] == "*":
for module in self.get_all_modules():
e = self.client.unload_module(module)
if e:
await message.channel.send("An error occurred during the loading of the module {module}."
.format(module=module))
await self.com_list(message, args, kwargs)
return
for arg in args:
print(arg)
e = self.client.unload_module(arg)
if e:
await message.channel.send("An error occurred during the loading of the module {module}."
.format(module=arg))
await self.com_list(message, [], [])
async def com_list(self, message, args, kwargs):
list_files = self.get_all_modules()
activated = set(self.client.config["modules"])
activated_string = "\n+ " + "\n+ ".join(activated)
deactivated_string = "- " + "\n- ".join(list_files.difference(activated))
embed = discord.Embed(title="[Modules] - Liste des modules",
description="```diff\n{activated}\n{deactivated}```".format(
activated=activated_string,
deactivated=deactivated_string)
)
await message.channel.send(embed=embed)
async def com_download(self, message, args, kwargs):
if len(args) == 3:
async with ClientSession() as session:
async with session.get("http://127.0.0.1:5000/api/modules/"+args[1]+"/"+args[2]) as response:
if response.status != 200:
await message.channel.send(f"Erreur lors du téléchargement de {args[1]}")
return
with self.storage.open(os.path.join("modules", args[1]+".zip"), "wb") as file:
file.write(await response.read())