Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/core/loader.py
2021-04-07 23:18:41 +08:00

107 lines
4.6 KiB
Python

import importlib
import os
import re
import traceback
from graia.application.logger import LoggingLogger
DisplayAttributeError = False
def logger_info(msg):
LoggingLogger().info(msg)
class ModulesLoader:
def __init__(self):
pass
def load_modules(self):
fun_file = None
modules_function = {
'command': dict,
'regex': dict,
'options': list,
'self_options': list
}
friend_modules_function = {
'friend_options': list
}
other_function = {
'admin': dict,
'essential': dict,
'help': dict,
'rss': dict
}
functions = {}
functions.update(modules_function)
functions.update(friend_modules_function)
functions.update(other_function)
functions_list = {}
functions_list['modules_function'] = []
functions_list['friend_modules_function'] = []
for x in functions:
if functions[x] == dict:
functions_list[x] = {}
if functions[x] == list:
functions_list[x] = []
load_dir_path = os.path.abspath('./modules/')
dir_list = os.listdir(load_dir_path)
for file_name in dir_list:
file_path = f'{load_dir_path}/{file_name}'
if os.path.isdir(file_path):
if file_path != '__pycache__':
fun_file = file_name
else:
fun_file = None
if os.path.isfile(file_path):
b = re.match(r'(.*)(.py)', file_path)
if b:
fun_file = b.group(1)
try:
if fun_file is not None:
logger_info('Loading modules.' + fun_file + '...')
modules = 'modules.' + fun_file
import_fun = importlib.__import__(modules, fromlist=[fun_file])
for x in functions:
try:
attrs = import_fun.__getattribute__(x)
if attrs:
if functions[x] == dict:
if isinstance(attrs, dict):
functions_list[x].update(attrs)
logger_info(
f'Successfully loaded to {x} list from {modules} module: ' + str(attrs))
if x in modules_function:
for y in attrs:
functions_list['modules_function'].append(y)
if x in friend_modules_function:
for y in attrs:
functions_list['friend_modules_function'].append(y)
else:
logger_info(f'?? wtf {x} in {fun_file} format is wrong! should be dict.')
if functions[x] == list:
if isinstance(attrs, list):
for y in attrs:
functions_list[x].append(y)
logger_info(
f'Successfully loaded to {x} list from {modules} module: ' + str(y))
if x in modules_function:
functions_list['modules_function'].append(y)
if x in friend_modules_function:
functions_list['friend_modules_function'].append(y)
else:
logger_info(f'?? wtf {x} in {fun_file} format is wrong! should be list.')
except AttributeError as e:
if DisplayAttributeError:
logger_info(str(e))
except:
traceback.print_exc()
functions_list["modules_function"] = list(set(functions_list["modules_function"]))
functions_list["friend_modules_function"] = list(set(functions_list["friend_modules_function"]))
logger_info(f'Now we have function = {functions_list["modules_function"]}')
logger_info(f'Now we have friend function = {functions_list["friend_modules_function"]}')
return functions_list
Modules = ModulesLoader().load_modules()