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-02-03 22:43:24 +08:00

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