diff --git a/LittlePaimon/__init__.py b/LittlePaimon/__init__.py index 37ce356..46355a7 100644 --- a/LittlePaimon/__init__.py +++ b/LittlePaimon/__init__.py @@ -33,14 +33,23 @@ logo = """ async def startup(): logger.opt(colors=True).info(logo) await database.connect() - from LittlePaimon import admin - await migrate_database() - await check_resource() + from LittlePaimon import web + # from LittlePaimon import admin + # await migrate_database() + # await check_resource() DRIVER.on_shutdown(database.disconnect) -load_plugin('LittlePaimon.manager.bot_manager') -load_plugin('LittlePaimon.manager.plugin_manager') -load_plugin('LittlePaimon.manager.database_manager') -load_plugin('LittlePaimon.manager.alias_manager') -load_plugins(str(Path(__file__).parent / 'plugins')) +# load_plugin('LittlePaimon.plugins.Mihoyo_bbs') +# load_plugin('LittlePaimon.plugins.tools') +# load_plugin('LittlePaimon.plugins.Chat') +load_plugin('LittlePaimon.plugins.Paimon_MonthInfo') +load_plugin('LittlePaimon.plugins.Paimon_Info') +# load_plugin('LittlePaimon.plugins.Paimon_Abyss') +# load_plugin('LittlePaimon.plugins.Paimon_Bind') + +# load_plugin('LittlePaimon.manager.bot_manager') +# load_plugin('LittlePaimon.manager.plugin_manager') +# load_plugin('LittlePaimon.manager.database_manager') +# load_plugin('LittlePaimon.manager.alias_manager') +# load_plugins(str(Path(__file__).parent / 'plugins')) diff --git a/LittlePaimon/plugins/Genshin_Voice/__init__.py b/LittlePaimon/plugins/Genshin_Voice/__init__.py index be25b29..ad13833 100644 --- a/LittlePaimon/plugins/Genshin_Voice/__init__.py +++ b/LittlePaimon/plugins/Genshin_Voice/__init__.py @@ -89,7 +89,7 @@ async def _(event: Union[GroupMessageEvent, PrivateMessageEvent], lang=CommandLa @voice_list.handle() -async def _(event: Union[GroupMessageEvent, PrivateMessageEvent], character=CommandCharacter(1, False), lang=CommandLang()): +async def _(event: Union[GroupMessageEvent, PrivateMessageEvent], character=CommandCharacter(1), lang=CommandLang()): result = await get_voice_list(character[0], lang) await get_voice.finish(result) diff --git a/LittlePaimon/plugins/Paimon_Abyss/__init__.py b/LittlePaimon/plugins/Paimon_Abyss/__init__.py index 45abbc2..337f8ce 100644 --- a/LittlePaimon/plugins/Paimon_Abyss/__init__.py +++ b/LittlePaimon/plugins/Paimon_Abyss/__init__.py @@ -1,6 +1,6 @@ from nonebot import on_command from nonebot.adapters.onebot.v11 import Message, MessageEvent, GroupMessageEvent -from nonebot.params import Arg +from nonebot.params import CommandArg from nonebot.plugin import PluginMetadata from LittlePaimon.utils import logger @@ -42,9 +42,9 @@ abyss_team = on_command('深渊配队', aliases={'配队推荐', '深渊阵容'} @sy.handle() -async def _(event: MessageEvent, players=CommandPlayer(), msg: str = Arg('msg')): +async def _(event: MessageEvent, players=CommandPlayer(), msg: Message = CommandArg()): logger.info('原神深渊战报', '开始执行') - abyss_index = 2 if any(i in msg for i in ['上', 'last']) else 1 + abyss_index = 2 if any(i in msg.extract_plain_text() for i in ['上', 'last']) else 1 msg = Message() for player in players: logger.info('原神深渊战报', '➤ ', {'用户': players[0].user_id, 'UID': players[0].uid}) diff --git a/LittlePaimon/plugins/Paimon_DailyNote/__init__.py b/LittlePaimon/plugins/Paimon_DailyNote/__init__.py index f9d0dac..72adfc7 100644 --- a/LittlePaimon/plugins/Paimon_DailyNote/__init__.py +++ b/LittlePaimon/plugins/Paimon_DailyNote/__init__.py @@ -2,8 +2,8 @@ from typing import Union from nonebot import on_command from nonebot.adapters.onebot.v11 import Message, MessageEvent, GroupMessageEvent, PrivateMessageEvent -from nonebot.params import Arg from nonebot.plugin import PluginMetadata +from nonebot.typing import T_State from LittlePaimon.database.models import DailyNoteSub from LittlePaimon.utils import logger @@ -39,8 +39,8 @@ ssbq_sub = on_command('ssbq提醒', aliases={'实时便笺提醒', '实时便签 @ssbq.handle() -async def _(event: MessageEvent, players=CommandPlayer(), msg: str = Arg('msg')): - if msg: +async def _(event: MessageEvent, state: T_State, players=CommandPlayer()): + if state.get('clear_msg'): await ssbq.finish('开启提醒请用[ssbq提醒开启|关闭 提醒内容+数量]指令,比如[ssbq提醒开启树脂150]') logger.info('原神实时便签', '开始执行查询') result = Message() diff --git a/LittlePaimon/plugins/Paimon_Info/__init__.py b/LittlePaimon/plugins/Paimon_Info/__init__.py index 00ea49c..df5c8d5 100644 --- a/LittlePaimon/plugins/Paimon_Info/__init__.py +++ b/LittlePaimon/plugins/Paimon_Info/__init__.py @@ -1,7 +1,7 @@ from nonebot import on_command from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment from nonebot.adapters.onebot.v11.helpers import HandleCancellation -from nonebot.params import Arg, ArgPlainText, CommandArg +from nonebot.params import ArgPlainText, CommandArg from nonebot.plugin import PluginMetadata from nonebot.typing import T_State @@ -208,7 +208,8 @@ running_udi = [] @update_info.handle() -async def _(event: MessageEvent, uid=CommandUID(), msg: str = Arg('msg')): +async def _(event: MessageEvent, state: T_State, uid=CommandUID()): + msg = state['clear_msg'] if not freq_limiter.check(f'udi{uid}'): await update_info.finish(f'UID{uid}: 更新信息冷却剩余{freq_limiter.left(f"udi{uid}")}秒\n', at_sender=True) elif f'{event.user_id}-{uid}' in running_udi: diff --git a/LittlePaimon/plugins/Paimon_MonthInfo/__init__.py b/LittlePaimon/plugins/Paimon_MonthInfo/__init__.py index 633a49d..48ee651 100644 --- a/LittlePaimon/plugins/Paimon_MonthInfo/__init__.py +++ b/LittlePaimon/plugins/Paimon_MonthInfo/__init__.py @@ -2,9 +2,9 @@ import datetime import re from nonebot import on_command -from nonebot.params import Arg from nonebot.adapters.onebot.v11 import Message, MessageEvent from nonebot.plugin import PluginMetadata +from nonebot.typing import T_State from LittlePaimon.utils.message import CommandPlayer from .handler import handle_myzj @@ -29,7 +29,8 @@ myzj = on_command('myzj', aliases={'札记信息', '每月札记'}, priority=10, @myzj.handle() -async def myzj_handler(event: MessageEvent, players=CommandPlayer(), msg: str = Arg('msg')): +async def myzj_handler(event: MessageEvent, state: T_State, players=CommandPlayer()): + msg = state['clear_msg'] month_now = datetime.datetime.now().month if month_now == 1: month_list = ['11', '12', '1'] diff --git a/LittlePaimon/utils/message.py b/LittlePaimon/utils/message.py index fbdda83..564df8c 100644 --- a/LittlePaimon/utils/message.py +++ b/LittlePaimon/utils/message.py @@ -118,8 +118,6 @@ def CommandPlayer(limit: int = 3, only_cn: bool = True) -> List[Player]: info += f'{u}尚未提供uid\n' if info: await matcher.finish(info, at_sender=True) - else: - state['main_user'] = users[0] else: user = users[0] uids: List[str] = [] @@ -132,13 +130,12 @@ def CommandPlayer(limit: int = 3, only_cn: bool = True) -> List[Player]: extra_info = replace_all(extra_info, uids) for uid in uids: query_list.append(Player(user_id=user, uid=uid)) - state['main_user'] = str(event.user_id) if len(query_list) > limit: query_list = query_list[:limit] if only_cn: query_list = [q for q in query_list if q.uid.startswith(('1', '2', '5'))] - state['msg'] = extra_info.strip() + state['clear_msg'] = extra_info.strip() return query_list return Depends(_player) @@ -161,31 +158,35 @@ def CommandUID(only_cn: bool = True) -> str: uid = uid else: await matcher.finish('第一次查询请把UID给我哦') - state['msg'] = event.message.extract_plain_text().replace(uid, '') + state['clear_msg'] = event.message.extract_plain_text().replace(uid, '') return uid return Depends(_uid) -def CommandCharacter(limit: int = 3, replace_uid: bool = True) -> List[str]: +def CommandCharacter(limit: int = 3) -> List[str]: """ 从命令中提取出原神的角色,需配合CommandUID使用 :param limit: 限制个数 - :param replace_uid: 是否先移除msg中的uid :return: 角色名列表 """ - async def _character(matcher: Matcher, state: T_State, event: MessageEvent): - msg = state['_prefix']['command_arg'].extract_plain_text().strip() if not replace_uid else state['msg'] - user_id = state.get('main_user', str(event.user_id)) - if not msg: + async def _character(matcher: Matcher, state: T_State, event: MessageEvent, msg: Message = CommandArg()): + # 获取艾特列表的第一个人或是事件触发者的qq + user_id = users[0] if (users := [str(seg.data['qq']) for seg in msg['at']]) else str(event.user_id) + # 去除消息中的uid + msg = re.sub(r'[125]\d{8}', '', msg.extract_plain_text()) + # 没有消息的话,就随机选择一个角色 + if not (msg := msg.strip()): return [random.choice(CHARACTERS)] character_list = [] - characters = msg.split(' ') - for character_name in characters: + # 按空格分割消息 + for character_name in msg.split(' '): + # 如果有设置别名 if character_match := await PlayerAlias.get_or_none(user_id=user_id, alias=character_name): character_list.append(character_match.character) msg.replace(character_name, '') + # 如果在预设别名列表 elif character_name in ['老婆', '老公', '女儿', '儿子', '爸爸', '妈妈']: if character_name == '老公': character_list.append(random.choice(MALE_CHARACTERS + BOY_CHARACTERS)) @@ -200,12 +201,13 @@ def CommandCharacter(limit: int = 3, replace_uid: bool = True) -> List[str]: elif character_name == '妈妈': character_list.append(random.choice(FEMALE_CHARACTERS)) msg.replace(character_name, '') + # 如果有匹配别名 elif character_match := get_match_alias(character_name, '角色', True): character_list.append(list(character_match.keys())[0]) msg.replace(character_name, '') + # 没有匹配到角色时,结束事件 if not character_list: await matcher.finish(f'没有名为{msg}的角色!') - state['msg'] = msg if len(character_list) > limit: character_list = character_list[:limit] return character_list