144 lines
5.1 KiB
Python
144 lines
5.1 KiB
Python
import importlib
|
|
import os
|
|
import re
|
|
import traceback
|
|
from os.path import abspath
|
|
|
|
from graia.application.logger import LoggingLogger
|
|
|
|
|
|
display_load_err = False
|
|
|
|
|
|
def logger_info(msg):
|
|
LoggingLogger().info(msg)
|
|
|
|
|
|
def find_modules_logger(kwargs):
|
|
if isinstance(kwargs, dict):
|
|
for x in kwargs:
|
|
logger_info(f'Find {x}: {kwargs[x]}, update to list.')
|
|
if isinstance(kwargs, list):
|
|
for x in kwargs:
|
|
logger_info(f'Find {x}, update to list.')
|
|
|
|
|
|
def command_loader(reload=False):
|
|
fun_file = None
|
|
admin_list = {}
|
|
essential_list = {}
|
|
command_list = {}
|
|
help_list = {}
|
|
regex_list = {}
|
|
self_options_list = []
|
|
options_list = []
|
|
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
|
|
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 + '...')
|
|
import_fun = importlib.__import__('modules.' + fun_file, fromlist=[fun_file])
|
|
if reload:
|
|
importlib.reload(import_fun)
|
|
try:
|
|
admins = import_fun.admin
|
|
if isinstance(admins, dict):
|
|
admin_list.update(admins)
|
|
find_modules_logger(admins)
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
try:
|
|
essentials = import_fun.essential
|
|
if isinstance(essentials, dict):
|
|
essential_list.update(essentials)
|
|
find_modules_logger(essentials)
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
try:
|
|
fun_commands = import_fun.command
|
|
if isinstance(fun_commands, dict):
|
|
command_list.update(fun_commands)
|
|
find_modules_logger(fun_commands)
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
try:
|
|
fun_help = import_fun.help
|
|
if isinstance(fun_help, dict):
|
|
help_list.update(fun_help)
|
|
find_modules_logger(fun_help)
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
try:
|
|
fun_regex = import_fun.regex
|
|
if isinstance(fun_regex, dict):
|
|
regex_list.update(fun_regex)
|
|
find_modules_logger(fun_regex)
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
try:
|
|
fun_self_options = import_fun.self_options
|
|
if isinstance(fun_self_options, list):
|
|
for x in fun_self_options:
|
|
self_options_list.append(x)
|
|
find_modules_logger(fun_self_options)
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
try:
|
|
fun_options = import_fun.options
|
|
if isinstance(fun_options, list):
|
|
for x in fun_options:
|
|
self_options_list.append(x)
|
|
find_modules_logger(fun_options)
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
return admin_list, essential_list, command_list, help_list, regex_list, self_options_list, options_list
|
|
|
|
|
|
def rss_loader():
|
|
fun_file = None
|
|
rss_list = {}
|
|
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
|
|
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:
|
|
import_fun = importlib.__import__('modules.' + fun_file, fromlist=[fun_file])
|
|
try:
|
|
rss = import_fun.rss
|
|
if isinstance(rss, dict):
|
|
rss_list.update(rss)
|
|
find_modules_logger(rss)
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
except:
|
|
if display_load_err:
|
|
traceback.print_exc()
|
|
return rss_list
|