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/parser.py
2021-02-06 20:46:16 +08:00

112 lines
5.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import re
from graia.application import Friend
from graia.application.group import Group, Member
from graia.application.message.chain import MessageChain
import database
from core.loader import command_loader, logger_info
from core.template import sendMessage
import importlib
admin_list = []
essential_list = []
command_list = []
help_list = []
regex_list = []
self_options_list = []
options_list = []
function_list = []
def load_modules(reload=False):
global admin_list, essential_list, command_list, help_list, regex_list, self_options_list, options_list, function_list
admin_list, essential_list, command_list, help_list, regex_list, self_options_list, options_list = command_loader(reload)
function_list = []
for command in command_list:
function_list.append(command)
for reg in regex_list:
function_list.append(reg)
for options in self_options_list:
function_list.append(options)
for options in options_list:
function_list.append(options)
logger_info(f'Now we have function = {function_list}')
load_modules()
async def parser(kwargs: dict):
"""
接收消息必经的预处理器
:param kwargs: 从监听器接收到的dict该dict将会经过此预处理器传入下游
:return: 无返回
"""
display = kwargs[MessageChain].asDisplay() # 将消息转换为一般显示形式
command_prefix = ['~', ''] # 消息前缀
if Group in kwargs: # 若为群组
trigger = kwargs[Member].id
if Friend in kwargs: # 若为好友
trigger = kwargs[Friend].id
if trigger == 1143754816: # 特殊规则
display = re.sub('^.*:\n', '', display)
if database.check_black_list(trigger): # 检查是否在黑名单
if not database.check_white_list(trigger): # 检查是否在白名单
return # 在黑名单且不在白名单,给我爪巴
if display[0] in command_prefix: # 检查消息前缀
command = re.sub(r'^' + display[0], '', display)
command_first_word = command.split(' ')[0] # 切割消息
if command_first_word in command_list: # 检查触发命令是否在模块列表中
if Group in kwargs:
check_command_enable = database.check_enable_modules(kwargs[Group].id, command_first_word) # 检查群组是否开启模块
if check_command_enable: # 若开启
check_command_enable_self = database.check_enable_modules_self(kwargs[Member].id,
command_first_word)
if check_command_enable_self:
kwargs['trigger_msg'] = command # 触发该命令的消息,去除消息前缀
kwargs['help_list'] = help_list # 帮助列表
await command_list[command_first_word](kwargs) # 将dict传入下游模块
else:
await sendMessage(kwargs, f'此模块未启用,请管理员在群内发送~enable {command_first_word}启用本模块。')
else:
check_command_enable_self = database.check_enable_modules_self(kwargs[Friend].id, command_first_word) # 检查个人是否开启模块
if check_command_enable_self:
kwargs['trigger_msg'] = command
kwargs['help_list'] = help_list
await command_list[command_first_word](kwargs)
elif command_first_word in essential_list: # 若触发的对象命令为基础命令
kwargs['trigger_msg'] = command
kwargs['function_list'] = function_list # 所有可用模块列表
kwargs['help_list'] = help_list
await essential_list[command_first_word](kwargs)
elif command_first_word in admin_list: # 若触发的对象为超管命令
if database.check_superuser(kwargs): # 检查是否为超管
kwargs['trigger_msg'] = command
kwargs['function_list'] = function_list
await admin_list[command_first_word](kwargs)
else:
await sendMessage(kwargs, '权限不足')
elif command_first_word == 'reload':
if database.check_superuser(kwargs):
await sendMessage(kwargs, '重新加载中!')
load_modules(reload=True)
await sendMessage(kwargs, '成功重新加载。')
else:
await sendMessage(kwargs, '权限不足')
# 正则模块部分
if Group in kwargs:
for regex in regex_list: # 遍历正则模块列表
check_command_enable = database.check_enable_modules(kwargs[Group].id,
regex) # 检查群组是否打开模块
if check_command_enable:
check_command_enable_self = database.check_enable_modules_self(kwargs[Member].id, regex) # 检查个人是否打开模块
if check_command_enable_self:
await regex_list[regex](kwargs) # 将整条dict传入下游正则模块
if Friend in kwargs:
for regex in regex_list:
check_command_enable_self = database.check_enable_modules_self(kwargs[Friend].id, regex)
if check_command_enable_self:
await regex_list[regex](kwargs)