diff --git a/Paimon_Gacha_Log/get_img.py b/Paimon_Gacha_Log/get_img.py index 13eabbd..46db339 100644 --- a/Paimon_Gacha_Log/get_img.py +++ b/Paimon_Gacha_Log/get_img.py @@ -2,7 +2,7 @@ import os from PIL import Image, ImageDraw, ImageFont -from utils.character_alias import get_short_name +from utils.alias_handler import get_short_name from utils.message_util import MessageBuild res_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'res') diff --git a/Paimon_Info/__init__.py b/Paimon_Info/__init__.py index 48adc97..299a32d 100644 --- a/Paimon_Info/__init__.py +++ b/Paimon_Info/__init__.py @@ -5,21 +5,22 @@ from asyncio import sleep from collections import defaultdict from nonebot import on_command, require, logger, get_bot -from nonebot.adapters.onebot.v11 import MessageEvent, Message, Bot +from nonebot.adapters.onebot.v11 import MessageEvent, Message, Bot, MessageSegment from nonebot.params import CommandArg +from nonebot.typing import T_State from nonebot.permission import SUPERUSER from nonebot.rule import to_me -from utils.character_alias import get_id_by_alias +from utils.alias_handler import get_match_alias from utils.config import config -from utils.db_util import get_auto_sign, delete_auto_sign +from utils.db_util import get_auto_sign, delete_auto_sign, get_last_query from utils.db_util import insert_public_cookie, update_private_cookie, delete_cookie_cache, delete_private_cookie, \ update_last_query, reset_public_cookie from utils.db_util import update_note_remind2, update_note_remind, get_note_remind, delete_note_remind, \ update_day_remind_count, get_private_cookie, add_auto_sign from utils.auth_util import check_cookie from utils.decorator import exception_handler -from utils.message_util import get_uid_in_msg +from utils.message_util import get_uid_in_msg, uid_userId_to_dict, replace_all, transform_uid from .draw_abyss_info import draw_abyss_card from .draw_daily_note import draw_daily_note_card from .draw_month_info import draw_monthinfo_card @@ -70,26 +71,73 @@ delete_ck = on_command('delete_ck', aliases={'删除ck', '删除cookie'}, priori @sy.handle() -@exception_handler() -async def sy_handler(event: MessageEvent, msg: Message = CommandArg()): - uid, msg, user_id, use_cache = await get_uid_in_msg(event, msg) - if not uid: - await sy.finish('请把正确的uid给派蒙哦,例如sy100123456!', at_sender=True) +@ys.handle() +@ysa.handle() +@ysc.handle() +async def _(event: MessageEvent, state: T_State, msg: Message = CommandArg()): + state['use_cache'] = False if '-r' in msg.extract_plain_text() else True + msg_text = msg.extract_plain_text().replace('-r', '').strip() if not msg: + uid = await get_last_query(str(event.user_id)) + if uid: + state['uid'] = uid + state['user_id'] = str(event.user_id) + else: + uid_list = [] + check_uid = msg_text.split(' ') + for check in check_uid: + uid = re.search(r'(?P(1|2|5)\d{8})', check) + if uid: + uid_list.append(uid.group('uid')) + msg_text = msg_text.replace(uid.group('uid'), '') + state['user_id'] = str(event.user_id) + if not uid_list: + user_list = [] + for msg_seg in msg: + if msg_seg.type == "at": + user_list.append(msg_seg.data['qq']) + if len(user_list) == 1: + uid = await get_last_query(user_list[0]) + if uid: + state['uid'] = uid + state['user_id'] = user_list[0] + elif user_list: + state['uid'] = [await get_last_query(user) for user in user_list] + state['user_id'] = user_list + else: + state['user_id'] = str(event.user_id) + uid = await get_last_query(str(event.user_id)) + if uid: + state['uid'] = uid + else: + state['uid'] = uid_list[0] if len(uid_list) == 1 else uid_list if uid_list else None + if msg_text: + state['msg'] = msg_text.strip() + + +@sy.got('uid', prompt='请把要查询的uid给派蒙哦~') +@exception_handler() +async def _(event: MessageEvent, state: T_State): + uid = transform_uid(state['uid']) + if uid: + state['uid'] = uid + else: + await ysa.finish('这个uid不正确哦~,请检查一下', at_sender=True) + if 'msg' not in state: floor = [] else: - floor = msg.split(' ') - true_floor = [] - for f in floor: - if f.isdigit() and (9 <= int(f) <= 12) and len(true_floor) < 2: - true_floor.append(int(f)) + floor = state['msg'].split(' ') + true_floor = [int(f) for f in floor if f.isdigit() and (9 <= int(f) <= 12)] true_floor.sort() - data = await get_abyss_data(user_id, uid, use_cache=use_cache) - if isinstance(data, str): - await sy.finish(data, at_sender=True) - else: - abyss_card = await draw_abyss_card(data, uid, true_floor) - await sy.finish(abyss_card, at_sender=True) + query_dict, total_result = uid_userId_to_dict(state['uid'], state['user_id']) + for uid, user_id in query_dict.items(): + data = await get_abyss_data(user_id, uid, use_cache=state['use_cache']) + if isinstance(data, str): + total_result += MessageSegment.text(data + '\n') + else: + abyss_card = await draw_abyss_card(data, uid, true_floor) + total_result += abyss_card + await sy.finish(total_result, at_sender=True) @ssbq.handle() @@ -151,62 +199,106 @@ async def myzj_handler(event: MessageEvent, msg: Message = CommandArg()): await myzj.finish(monthinfo_card, at_sender=True) -@ys.handle() +@ys.got('uid', prompt='请把要查询的uid给派蒙哦~') @exception_handler() -async def ys_handler(bot: Bot, event: MessageEvent, msg: Message = CommandArg()): - uid, msg, user_id, use_cache = await get_uid_in_msg(event, msg) - if not uid: - await ys.finish('请把正确的uid给派蒙哦,例如ys100123456!', at_sender=True) - data = await get_player_card_data(user_id, uid, use_cache=use_cache) - if isinstance(data, str): - await ys.finish(data, at_sender=True) +async def ys_handler(bot: Bot, event: MessageEvent, state: T_State): + uid = transform_uid(state['uid']) + if uid: + state['uid'] = uid else: - if event.message_type == 'group': - user_info = await bot.get_group_member_info(group_id=event.group_id, user_id=int(user_id)) - nickname = user_info['card'] or user_info['nickname'] + await ysa.finish('这个uid不正确哦~,请检查一下', at_sender=True) + query_dict, total_result = uid_userId_to_dict(state['uid'], state['user_id']) + for uid, user_id in query_dict.items(): + data = await get_player_card_data(user_id, uid, use_cache=state['use_cache']) + if isinstance(data, str): + total_result += MessageSegment.text(data + '\n') else: - nickname = event.sender.nickname - chara_data = await get_chara_detail_data(user_id, uid, use_cache=use_cache) - chara_data = None if isinstance(chara_data, str) else chara_data - player_card = await draw_player_card(data, chara_data, uid, nickname) - await ys.finish(player_card, at_sender=True) + if event.message_type == 'group': + user_info = await bot.get_group_member_info(group_id=event.group_id, user_id=int(user_id)) + nickname = user_info['card'] or user_info['nickname'] + else: + nickname = event.sender.nickname + chara_data = await get_chara_detail_data(user_id, uid, use_cache=state['use_cache']) + chara_data = None if isinstance(chara_data, str) else chara_data + player_card = await draw_player_card(data, chara_data, uid, nickname) + total_result += player_card + await ys.finish(total_result, at_sender=True) -@ysa.handle() +@ysa.got('uid', prompt='请把要查询的uid给派蒙哦~') @exception_handler() -async def ysa_handler(event: MessageEvent, msg: Message = CommandArg()): - uid, msg, user_id, use_cache = await get_uid_in_msg(event, msg) - if not uid: - await ysa.finish('请把正确的uid给派蒙哦,例如ysa100123456!', at_sender=True) - - chara_data = await get_chara_detail_data(user_id, uid, use_cache=use_cache) - if isinstance(chara_data, str): - await ysa.finish(chara_data, at_sender=True) +async def ysa_handler(event: MessageEvent, state: T_State): + uid = transform_uid(state['uid']) + if uid: + state['uid'] = uid else: - player_card = await draw_all_chara_card(chara_data, uid) - await ysa.finish(player_card, at_sender=True) + await ysa.finish('这个uid不正确哦~,请检查一下', at_sender=True) + query_dict, total_result = uid_userId_to_dict(state['uid'], state['user_id']) + for uid, user_id in query_dict.items(): + chara_data = await get_chara_detail_data(user_id, uid, use_cache=state['use_cache']) + if isinstance(chara_data, str): + total_result += MessageSegment.text(chara_data + '\n') + else: + player_card = await draw_all_chara_card(chara_data, uid) + total_result += player_card + await ysa.finish(total_result, at_sender=True) -@ysc.handle() -@exception_handler() -async def ysc_handler(event: MessageEvent, msg: Message = CommandArg()): - uid, msg, user_id, use_cache = await get_uid_in_msg(event, msg) - if not uid: - await ysc.finish('请把正确的uid给派蒙哦,例如ysc100123456钟离', at_sender=True) - if not msg: - await ysc.finish(f'要把角色名给派蒙呀!例如ysc100123456钟离', at_sender=True) - chara = msg.split(' ')[0] - chara_name = get_id_by_alias(chara) - if not chara_name: - await ysc.finish(f'没有角色名叫{chara}哦!', at_sender=True) - - chara_data = await get_chara_detail_data(user_id, uid, use_cache=use_cache) - if isinstance(chara_data, str): - await ysc.finish(chara_data, at_sender=True) +@ysc.got('msg', prompt='请把要查询的角色名给派蒙哦~') +async def _(event: MessageEvent, state: T_State): + name = state['msg'] + if isinstance(name, Message): + name = replace_all(name.extract_plain_text().strip().replace('ysc', ''), state['uid']) + if name == 'q': + await ysc.finish() + match_alias = get_match_alias(name, 'roles', True) + if len(match_alias) == 1: + state['choice'] = match_alias else: - skill_data = await get_chara_skill_data(uid, chara_name[0], use_cache=use_cache) - chara_card = await draw_chara_card(chara_data, skill_data, chara_name, uid) - await ysc.finish(chara_card, at_sender=True) + if not match_alias: + await ysc.finish(f'没有找到叫{name}的角色哦~', at_sender=True) + elif 'choice' not in state: + msg = f'你要找的角色是哪个呀:\n' + # 将字典中每个键拼接到msg中,并添加序号 + msg += '\n'.join([f'{int(i) + 1}. {name}' for i, name in enumerate(match_alias)]) + await ysc.send(msg + '\n回答\"q\"可以取消查询', at_sender=True) + state['match_alias'] = match_alias + + +@ysc.got('choice') +async def _(event: MessageEvent, state: T_State): + choice = state['choice'] + if isinstance(choice, dict): + # 获取字典的键 + role = list(choice.items())[0] + else: + match_alias = state['match_alias'] + choice = replace_all(choice.extract_plain_text().strip().replace('ysc', ''), state['uid']) + + if choice == 'q': + await ysc.finish() + if choice.isdigit() and (1 <= int(choice) <= len(match_alias)): + role = list(match_alias.items())[int(choice) - 1] + elif choice not in match_alias.keys(): + state['times'] = state['times'] + 1 if 'times' in state else 1 + if state['times'] == 1: + await ysc.reject(f'请旅行者从上面的角色中选一个问派蒙\n回答\"q\"可以取消查询', at_sender=True) + elif state['times'] == 2: + await ysc.reject(f'别调戏派蒙啦,快选一个吧,不想问了请回答\"q\"!', at_sender=True) + elif state['times'] >= 3: + await ysc.finish(f'看来旅行者您有点神志不清哦(,下次再问派蒙吧' + MessageSegment.face(146), at_sender=True) + else: + role = [m for m in list(match_alias.items()) if m[0] == choice][0] + query_dict, total_result = uid_userId_to_dict(state['uid'], state['user_id']) + for uid, user_id in query_dict.items(): + chara_data = await get_chara_detail_data(user_id, uid, use_cache=state['use_cache']) + if isinstance(chara_data, str): + total_result += MessageSegment.text(chara_data + '\n') + else: + skill_data = await get_chara_skill_data(uid, role[1], use_cache=state['use_cache']) + chara_card = await draw_chara_card(chara_data, skill_data, role, uid) + total_result += chara_card + await ysc.finish(total_result, at_sender=True) cookie_error_msg = '这个cookie无效哦,请旅行者确认是否正确\n1.ck要登录mys帐号后获取,且不能退出登录\n2.ck中要有cookie_token和account_id两个参数\n3.建议在无痕模式下取' diff --git a/Paimon_Info/draw_abyss_info.py b/Paimon_Info/draw_abyss_info.py index c35b0f4..4be5efb 100644 --- a/Paimon_Info/draw_abyss_info.py +++ b/Paimon_Info/draw_abyss_info.py @@ -79,14 +79,14 @@ async def draw_abyss_card(data, uid, floor_num): if not data: return '数据出错' if data['retcode'] == 10102: - return '这uid没有在米游社公开信息哦' + return f'uid{uid}没有在米游社公开信息哦' elif data['retcode'] == 10104: - return 'uid有误哦,检查一下或再手动输入一次uid吧' + return f'uid{uid}有误哦,检查一下吧' elif data['retcode'] != 0: - return f'派蒙获取数据失败了,可能是以下原因:\n1.达到每日30次查询上限了\n2.绑定的cookie失效了\n3.没有在米游社公开信息\n{data["message"]},{data["retcode"]}' + return f'派蒙获取{uid}数据失败了,可能是以下原因:\n1.达到每日30次查询上限了\n2.绑定的cookie失效了\n3.没有在米游社公开信息\n{data["message"]},{data["retcode"]}' data = data['data'] if not data['defeat_rank']: - return '没有深渊数据,请打了8-3之后的层数再来!' + return f'uid{uid}没有深渊数据,请打了8-3之后的层数再来!' total_star = '[' for d in data['floors']: if not d['levels']: diff --git a/Paimon_Info/draw_daily_note.py b/Paimon_Info/draw_daily_note.py index ca9d9bd..4f39640 100644 --- a/Paimon_Info/draw_daily_note.py +++ b/Paimon_Info/draw_daily_note.py @@ -35,11 +35,11 @@ async def draw_daily_note_card(data, uid): if not data: return '数据出错' if data['retcode'] == 10102: - return '这uid没有在米游社公开信息哦,请到 个人主页-管理 中打开' + return f'uid{uid}没有在米游社公开信息哦,请到 个人主页-管理 中打开' elif data['retcode'] == 10104: - return 'uid有误哦,检查一下或再手动输入一次uid吧' + return f'uid{uid}有误哦,检查一下或再手动输入一次uid吧' elif data['retcode'] != 0: - return f'派蒙获取数据失败了,获取状态:\n{data["message"]},{data["retcode"]}' + return f'派蒙获取{uid}数据失败了,获取状态:\n{data["message"]},{data["retcode"]}' data = data['data'] circle_img = load_image(os.path.join(res_path, 'daily_note', '透明圆.png')) finished_icon = load_image(os.path.join(res_path, 'daily_note', 'finished.png')) diff --git a/Paimon_Info/draw_player_card.py b/Paimon_Info/draw_player_card.py index 37017e1..efd244d 100644 --- a/Paimon_Info/draw_player_card.py +++ b/Paimon_Info/draw_player_card.py @@ -186,11 +186,11 @@ async def draw_player_card(data, chara_data, uid, nickname="旅行者"): if not data: return '数据出错' if data['retcode'] == 10102: - return '这uid没有在米游社公开信息哦,请到 个人主页-管理 中打开' + return f'uid{uid}没有在米游社公开信息哦,请到 个人主页-管理 中打开' elif data['retcode'] == 10104: - return 'uid有误哦,检查一下或再手动输入一次uid吧' + return f'uid{uid}有误哦,检查一下吧' elif data['retcode'] != 0: - return f'派蒙获取数据失败了,获取状态:\n{data["message"]},{data["retcode"]}' + return f'派蒙获取{uid}数据失败了,获取状态:\n{data["message"]},{data["retcode"]}' data = data['data'] bg_img = load_image(os.path.join(res_path, 'player_card', '背景.png'), mode='RGBA') bg_draw = ImageDraw.Draw(bg_img) @@ -243,7 +243,7 @@ async def draw_player_card(data, chara_data, uid, nickname="旅行者"): elif i > 8: break else: - nocha = '*这uid关闭了角色详情显示,派蒙看不到哦' + nocha = f'*uid{uid}关闭了角色详情显示,派蒙看不到哦' return MessageBuild.Image(bg_img, quality=80) + MessageBuild.Text(nocha) @@ -285,11 +285,11 @@ async def draw_all_chara_card(data, uid): if not data: return '数据出错' if data['retcode'] == 10102: - return '这uid没有在米游社公开信息哦,请到 个人主页-管理 中打开' + return f'uid{uid}没有在米游社公开信息哦,请到 个人主页-管理 中打开' elif data['retcode'] == 10104: - return 'uid有误哦,检查一下或再手动输入一次uid吧' + return f'uid{uid}有误哦,检查一下吧' elif data['retcode'] != 0: - return f'派蒙获取数据失败了,获取状态:\n{data["message"]},{data["retcode"]}' + return f'派蒙获取{uid}数据失败了,获取状态:\n{data["message"]},{data["retcode"]}' data = data['data']['avatars'] chara_num = len(data) col = int(chara_num / 4) @@ -368,22 +368,22 @@ async def draw_line(p): async def draw_chara_card(data, skill_data, chara_name, uid): if not data: - return '数据出错' + return f'{uid}数据出错' if data['retcode'] == 10102: - return '这uid没有在米游社公开信息哦,请到 个人主页-管理 中打开' + return f'uid{uid}没有在米游社公开信息哦,请到 个人主页-管理 中打开' elif data['retcode'] == 10104: - return 'uid有误哦,检查一下或再手动输入一次uid吧' + return f'uid{uid}有误哦,检查一下吧' elif data['retcode'] != 0: - return f'派蒙获取数据失败了,获取状态:\n{data["message"]},{data["retcode"]}' + return f'派蒙获取{uid}数据失败了,获取状态:\n{data["message"]},{data["retcode"]}' data = data['data']['avatars'] f = False for chara in data: - if chara['id'] == chara_name[0] or (chara_name[1][-1] == '旅行者' and chara['name'] == '旅行者'): + if chara['id'] == int(chara_name[1]) or (chara_name[0] in ['空', '荧'] and chara['name'] == '旅行者'): character = chara f = True break if not f: - return f'{chara_name[1][0]}不在你公开的8个角色中或你没有这个角色哦' + return f'{chara_name[0]}不在{uid}公开的8个角色中或没有这个角色哦' # 立绘 bg_img = load_image(os.path.join(res_path, 'name_card', f'{character["id"]}.png')) bg_draw = ImageDraw.Draw(bg_img) diff --git a/Paimon_Wiki/__init__.py b/Paimon_Wiki/__init__.py index 3bfdee7..e61203a 100644 --- a/Paimon_Wiki/__init__.py +++ b/Paimon_Wiki/__init__.py @@ -7,10 +7,9 @@ from nonebot.adapters.onebot.v11 import MessageEvent, Message, MessageSegment from nonebot.params import RegexDict from nonebot.typing import T_State -from utils.character_alias import get_id_by_alias -from utils.decorator import exception_handler -from utils.message_util import MessageBuild, match_alias -from .abyss_rate_draw import draw_rate_rank, draw_teams_rate +from utils.alias_handler import get_match_alias +from utils.message_util import MessageBuild +# from .abyss_rate_draw import draw_rate_rank, draw_teams_rate from .blue import get_blue_pic __usage__ = ''' @@ -23,7 +22,7 @@ __usage__ = ''' 6.[深渊登场率]查看2.6深渊角色登场率 7.[深渊上半/下半阵容出场率]查看2.6深渊阵容出场率 ''' -__help_version__ = '1.0.2' +__help_version__ = '1.0.4' res_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'res') @@ -38,59 +37,20 @@ weapon_guide = on_endswith('武器攻略', priority=6, block=True) monster_map = on_endswith('原魔图鉴', priority=6, block=True) -@guide.handle() -@exception_handler() -async def genshin_guide(event: MessageEvent): - name: str = event.message.extract_plain_text().replace('角色攻略', '').strip() - realname = get_id_by_alias(name) - if name in ['风主', '岩主', '雷主'] or realname: - name = realname[1][0] if name not in ['风主', '岩主', '雷主'] else name - await guide.finish(await MessageBuild.StaticImage(url=f'LittlePaimon/XFGuide/{name}.jpg')) - else: - await guide.finish(f'没有找到{name}的攻略', at_sender=True) - - -@material.handle() -@exception_handler() -async def genshin_material(event: MessageEvent): - name: str = event.message.extract_plain_text().replace('角色材料', '').strip() - realname = get_id_by_alias(name) - if name in ['夜兰', '久岐忍', '鹿野院平藏'] or realname: - name = realname[1][0] if realname else name - await material.finish(await MessageBuild.StaticImage(f'LittlePaimon/RoleMaterials/{name}材料.jpg')) - else: - await material.finish(f'没有找到{name}的材料', at_sender=True) - - @attribute.handle() -@exception_handler() async def genshinAttribute(event: MessageEvent): - name: str = event.message.extract_plain_text().replace('参考面板', '').strip() - realname = get_id_by_alias(name) - if name in ['风主', '岩主', '雷主'] or realname: - name = realname[1][0] if name not in ['风主', '岩主', '雷主'] else name - img = await get_blue_pic(name) + name = event.message.extract_plain_text().replace('参考面板', '').strip() + realname = get_match_alias(name) + if realname: + img = await get_blue_pic(realname) await attribute.finish(img) else: await attribute.finish(f'没有找到{name}的参考面板', at_sender=True) -@attribute2.handle() -@exception_handler() -async def genshinAttribute2(event: MessageEvent): - name: str = event.message.extract_plain_text().replace('收益曲线', '').strip() - realname = get_id_by_alias(name) - if name in ['风主', '岩主', '雷主'] or realname: - name = realname[1][0] if name not in ['风主', '岩主', '雷主'] else name - await attribute2.finish(await MessageBuild.StaticImage(url=f'LittlePaimon/blue/{name}.jpg')) - else: - await attribute2.finish(f'没有找到{name}的收益曲线', at_sender=True) - - @daily_material.handle() -@exception_handler() async def daily_material_handle(event: MessageEvent): - week: str = event.message.extract_plain_text().replace('材料', '').replace('天赋材料', '').replace('突破材料', '').strip() + week = event.message.extract_plain_text().replace('材料', '').replace('天赋材料', '').replace('突破材料', '').strip() if week: find_week = re.search(r'(?P今日|今天|现在|明天|明日|后天|后日|周一|周二|周三|周四|周五|周六|周日)', week) if find_week: @@ -119,22 +79,20 @@ async def daily_material_handle(event: MessageEvent): await daily_material.finish(await MessageBuild.StaticImage(url=url)) -@abyss_rate.handle() -@exception_handler() -async def abyss_rate_handler(event: MessageEvent): - abyss_img = await draw_rate_rank() - await abyss_rate.finish(abyss_img) +# @abyss_rate.handle() +# async def abyss_rate_handler(event: MessageEvent): +# abyss_img = await draw_rate_rank() +# await abyss_rate.finish(abyss_img) +# +# +# @abyss_team.handle() +# async def abyss_team_handler(event: MessageEvent, reGroup=RegexDict()): +# abyss_img = await draw_teams_rate(reGroup['floor']) +# await abyss_team.finish(abyss_img) -@abyss_team.handle() -@exception_handler() -async def abyss_team_handler(event: MessageEvent, reGroup=RegexDict()): - abyss_img = await draw_teams_rate(reGroup['floor']) - await abyss_team.finish(abyss_img) - - -def create_choice_command(endswith: str, type_: str, url: str, file_type: str = 'jpg'): - command = on_endswith(endswith, priority=6, block=False) +def create_choice_command(endswith: str, type_: str, url: str, exclude: list = []): + command = on_endswith(endswith, priority=6, block=True) @command.handle() async def _(event: MessageEvent, state: T_State): @@ -149,39 +107,45 @@ def create_choice_command(endswith: str, type_: str, url: str, file_type: str = name = name.extract_plain_text().strip() if name == 'q': await command.finish() - finally_name = await match_alias(name, type_) - if isinstance(finally_name, str): - await command.finish(await MessageBuild.StaticImage(url=url + finally_name + '.' + file_type)) - elif isinstance(finally_name, list): - if not finally_name: - await command.finish(f'没有该{endswith[0:2]}的信息哦,问一个别的吧~') + match_alias = get_match_alias(name, type_) + if isinstance(match_alias, str) and match_alias not in exclude: + await command.finish(await MessageBuild.StaticImage(url=url.format(match_alias))) + else: + if not match_alias or match_alias in exclude: + await command.finish(f'没有{state["name"]}的{endswith}哦~', at_sender=True) else: + if isinstance(match_alias, dict): + match_alias = list(match_alias.keys()) if 'choice' not in state: msg = f'你要找的{endswith[0:2]}是哪个呀:\n' - msg += '\n'.join([f'{int(i) + 1}. {name}' for i, name in enumerate(finally_name)]) - await command.send(msg + '\n回答\"q\"可以取消查询') - state['match_alias'] = finally_name + msg += '\n'.join([f'{int(i) + 1}. {name}' for i, name in enumerate(match_alias)]) + await command.send(msg + '\n回答\"q\"可以取消查询', at_sender=True) + state['match_alias'] = match_alias @command.got('choice') async def _(event: MessageEvent, state: T_State): match_alias = state['match_alias'] choice = state['choice'] - choice = choice.extract_plain_text().strip() + choice = choice.extract_plain_text().strip().replace(endswith, '') if choice == 'q': await command.finish() if choice.isdigit() and (1 <= int(choice) <= len(match_alias)): await command.finish( - await MessageBuild.StaticImage(url=url + match_alias[int(choice) - 1] + '.' + file_type)) + await MessageBuild.StaticImage(url=url.format(match_alias[int(choice) - 1]))) if choice not in match_alias: state['times'] = state['times'] + 1 if 'times' in state else 1 - if state['times'] >= 3: - await command.finish(f'看来旅行者您有点神志不清哦(,下次再问派蒙吧' + MessageSegment.face(146)) - elif state['times'] == 1: - await command.reject(f'请旅行者从上面的{endswith[0:2]}中选一个问派蒙\n回答\"q\"可以取消查询') + if state['times'] == 1: + await command.reject(f'请旅行者从上面的{endswith[0:2]}中选一个问派蒙\n回答\"q\"可以取消查询', at_sender=True) elif state['times'] == 2: - await command.reject(f'别调戏派蒙啦,快选一个吧,不想问了麻烦回答\"q\"!') - await command.finish(await MessageBuild.StaticImage(url=url + choice + '.' + file_type)) + await command.reject(f'别调戏派蒙啦,快选一个吧,不想问了请回答\"q\"!', at_sender=True) + elif state['times'] >= 3: + await command.finish(f'看来旅行者您有点神志不清哦(,下次再问派蒙吧' + MessageSegment.face(146), at_sender=True) + await command.finish(await MessageBuild.StaticImage(url=url.format(choice))) -create_choice_command('原魔图鉴', 'monsters', 'LittlePaimon/MonsterMaps/', 'jpg') -create_choice_command('武器攻略', 'weapons', 'LittlePaimon/WeaponGuild/', 'png') +create_choice_command('原魔图鉴', 'monsters', 'LittlePaimon/MonsterMaps/{}.jpg') +create_choice_command('武器攻略', 'weapons', 'LittlePaimon/WeaponGuild/{}.png') +create_choice_command('角色攻略', 'roles', 'LittlePaimon/XFGuide/{}.jpg', ['夜兰', '久岐忍', '鹿野院平藏']) +create_choice_command('角色材料', 'roles', 'LittlePaimon/RoleMaterials/{}材料.jpg') +create_choice_command('收益曲线', 'roles', 'LittlePaimon/blue/{}.jpg', ['神里绫人', '夜兰', '久岐忍', '鹿野院平藏']) + diff --git a/Paimon_Wiki/abyss_rate_draw.py b/Paimon_Wiki/abyss_rate_draw.py index feb05d8..b8e84ca 100644 --- a/Paimon_Wiki/abyss_rate_draw.py +++ b/Paimon_Wiki/abyss_rate_draw.py @@ -2,7 +2,7 @@ import os from PIL import Image, ImageDraw, ImageFont -from utils.character_alias import get_id_by_alias +from utils.alias_handler import get_id_by_alias from utils.message_util import MessageBuild from .abyss_rate_data import get_rate, get_formation_rate diff --git a/Paimon_Wiki/blue.py b/Paimon_Wiki/blue.py index f3e094d..6e18b3d 100644 --- a/Paimon_Wiki/blue.py +++ b/Paimon_Wiki/blue.py @@ -57,7 +57,7 @@ blue = { async def get_blue_pic(name): - for c in blue.items(): - if c[0] == name: - return await MessageBuild.StaticImage(url=f'LittlePaimon/blue/{c[1][0]}.jpg', crop=(0, int(c[1][1][0]), 1080, int(c[1][1][1]))) + if name in blue.keys(): + return await MessageBuild.StaticImage(url=f'LittlePaimon/blue/{blue[name][0]}.jpg', + crop=(0, int(blue[name][1][0]), 1080, int(blue[name][1][1]))) return None diff --git a/utils/alias.json b/utils/alias.json new file mode 100644 index 0000000..787604c --- /dev/null +++ b/utils/alias.json @@ -0,0 +1,717 @@ +{ + "roles":{ + "10000002": ["神里绫华", "绫华", "大小姐", "小乌龟", "白鹭公主", "0华", "神里妹", "凌华", "神里凌华"], + "10000003": ["琴", "团长", "琴团长", "蒲公英骑士"], + "10000005": ["空", "空哥", "龙哥", "哥哥", "旅行者", "主角"], + "10000006": ["丽莎", "蔷薇魔女"], + "10000007": ["荧", "荧妹", "爷", "妹妹", "旅行者", "主角"], + "10000014": ["芭芭拉", "偶像", "内鬼", "牧师"], + "10000015": ["凯亚", "凝冰渡海真君", "矿工"], + "10000016": ["迪卢克", "卢姥爷", "姥爷", "老爷", "卢锅巴", "正义人", "正e人", "落魄人"], + "10000020": ["雷泽", "物泽", "小狼", "狼崽", "卢皮卡"], + "10000021": ["安柏", "蒙德第一火弓", "打火机", "侦查骑士"], + "10000022": ["温迪", "巴巴托斯", "风神", "芭芭脱丝", "卖唱的", "苹果酒", "不干正事真君", "吟游诗人"], + "10000023": ["香菱", "卯师傅", "锅巴", "灶神", "香师傅"], + "10000024": ["北斗", "大姐头", "船长", "龙王"], + "10000025": ["行秋", "水神", "秋秋人", "少爷"], + "10000026": ["魈", "金鹏", "夜叉", "三眼五显仙人", "降魔大圣", "靖妖傩舞", "打桩机"], + "10000027": ["凝光", "富婆", "天权星"], + "10000029": ["可莉", "哒哒哒", "炸弹人", "火花骑士", "嘟嘟可"], + "10000030": ["钟离", "帝君", "先生", "老爷子", "岩神", "摩拉克斯", "岩王爷", "岩王帝君"], + "10000031": ["菲谢尔", "皇女", "奥兹", "乌鸦", "中二少女", "小艾咪"], + "10000032": ["班尼特", "班爷", "班神", "点赞哥", "火神"], + "10000033": ["达达利亚", "公子", "愚人众", "阿贾克斯", "鸭鸭", "达达鸭", "玩具销售员"], + "10000034": ["诺艾尔", "女仆", "高达", "岩王帝姬"], + "10000035": ["七七", "77", "僵尸", "肚饿真君"], + "10000036": ["重云", "冰棍"], + "10000037": ["甘雨", "秘书", "王小美", "RPG", "椰羊", "椰奶"], + "10000038": ["阿贝多", "炼金术士", "花呗多"], + "10000039": ["迪奥娜", "dio娜", "猫猫", "冰猫"], + "10000041": ["莫娜", "穷b", "占星术士", "半部讨龙真君"], + "10000042": ["刻晴", "刻师傅", "阿晴", "刻猫猫", "牛杂师傅", "玉衡星"], + "10000043": ["砂糖", "眼镜娘", "雷莹", "风荧"], + "10000044": ["辛焱", "黑妹", "摇滚"], + "10000045": ["罗莎莉亚", "修女", "罗莎"], + "10000046": ["胡桃", "whotao", "堂主"], + "10000047": ["枫原万叶", "万叶", "叶天帝"], + "10000048": ["烟绯", "罗翔", "律师"], + "10000049": ["宵宫", "烟花", "霄宫", "稻妻第一火弓"], + "10000050": ["托马", "保姆", "家政"], + "10000051": ["优菈", "优拉", "浪花骑士", "记仇的", "尤拉"], + "10000052": ["雷电将军", "雷神", "巴尔", "雷军", "雷电影", "影", "煮饭婆", "奶香一刀"], + "10000053": ["早柚", "忍者", "终末番"], + "10000054": ["珊瑚宫心海", "心海", "军师", "美人鱼", "观赏鱼", "龙王"], + "10000055": ["五郎", "狗狗", "修狗", "希娜小姐"], + "10000056": ["九条裟罗", "九条"], + "10000057": ["荒泷一斗", "一斗", "哈哈哈", "斗子哥"], + "10000058": ["八重神子", "神子", "八重", "狐狸", "屑狐狸"], + "10000062": ["埃洛伊"], + "10000063": ["申鹤", "小姨", "小姨妈"], + "10000064": ["云堇", "云先生"], + "10000066": ["神里绫人", "0人", "大舅子", "小舅子", "绫人", "神里哥", "凌人", "神里凌人"], + "11111111": ["夜兰", "夜阑"], + "11111112": ["久岐忍", "忍者", "阿卡丽"], + "11111113": ["鹿野院平藏", "近战法师"] + }, + "weapons": { + "磐岩结绿": [ + "磐岩结绿", + "绿箭", + "绿剑" + ], + "斫峰之刃": [ + "斫峰之刃", + "斫峰", + "盾剑" + ], + "无工之剑": [ + "无工之剑", + "蜈蚣", + "蜈蚣大剑", + "无工大剑", + "盾大剑", + "无工" + ], + "贯虹之槊": [ + "贯虹之槊", + "贯虹", + "岩枪", + "盾枪" + ], + "赤角石溃杵": [ + "赤角石溃杵", + "赤角", + "石溃杵" + ], + "尘世之锁": [ + "尘世之锁", + "尘世锁", + "尘世", + "盾书", + "锁" + ], + "终末嗟叹之诗": [ + "终末嗟叹之诗", + "终末", + "终末弓", + "叹气弓", + "乐团弓" + ], + "松籁响起之时": [ + "松籁响起之时", + "松籁", + "乐团大剑", + "松剑" + ], + "苍古自由之誓": [ + "苍古自由之誓", + "苍古", + "乐团剑" + ], + "渔获": [ + "鱼叉" + ], + "衔珠海皇": [ + "衔珠海皇", + "海皇", + "咸鱼剑", + "咸鱼大剑" + ], + "匣里日月": [ + "匣里日月", + "日月" + ], + "匣里灭辰": [ + "匣里灭辰", + "灭辰" + ], + "匣里龙吟": [ + "匣里龙吟", + "龙吟" + ], + "天空之翼": [ + "天空之翼", + "天空弓" + ], + "天空之刃": [ + "天空之刃", + "天空剑" + ], + "天空之卷": [ + "天空之卷", + "天空书", + "厕纸" + ], + "天空之脊": [ + "天空之脊", + "天空枪", + "薄荷枪" + ], + "天空之傲": [ + "天空之傲", + "天空大剑" + ], + "四风原典": [ + "四风原典", + "四风" + ], + "试作斩岩": [ + "试作斩岩", + "斩岩" + ], + "试作星镰": [ + "试作星镰", + "星镰" + ], + "试作金珀": [ + "试作金珀", + "金珀" + ], + "试作古华": [ + "试作古华", + "古华" + ], + "试作澹月": [ + "试作澹月", + "澹月" + ], + "千岩长枪": [ + "千岩长枪", + "千岩枪" + ], + "千岩古剑": [ + "千岩古剑", + "千岩剑", + "千岩大剑" + ], + "暗巷闪光": [ + "暗巷闪光", + "暗巷剑" + ], + "暗巷猎手": [ + "暗巷猎手", + "暗巷弓" + ], + "阿莫斯之弓": [ + "阿莫斯之弓", + "阿莫斯", + "ams", + "痛苦弓" + ], + "雾切之回光": [ + "雾切之回光", + "雾切" + ], + "飞雷之弦振": [ + "飞雷之弦振", + "飞雷", + "飞雷弓" + ], + "薙草之稻光": [ + "薙草之稻光", + "薙草", + "稻光", + "薙草稻光", + "马尾枪", + "马尾", + "薙刀" + ], + "神乐之真意": [ + "神乐之真意", + "神乐", + "真意" + ], + "狼的末路": [ + "狼的末路", + "狼末" + ], + "护摩之杖": [ + "护摩之杖", + "护摩", + "护摩枪", + "护膜" + ], + "和璞鸢": [ + "和璞鸢", + "鸟枪", + "绿枪" + ], + "风鹰剑": [ + "风鹰剑", + "风鹰" + ], + "冬极白星": [ + "冬极白星", + "冬极" + ], + "不灭月华": [ + "不灭月华", + "月华" + ], + "波乱月白经津": [ + "波乱月白经津", + "波乱", + "月白", + "波乱月白", + "经津", + "波波津" + ], + "若水": [ + "若水", + "麒麟弓", + "Aqua", + "aqua" + ], + "昭心": [ + "昭心", + "糟心" + ], + "幽夜华尔兹": [ + "幽夜华尔兹", + "幽夜", + "幽夜弓", + "华尔兹", + "皇女弓" + ], + "雪葬的星银": [ + "雪葬的星银", + "雪葬", + "星银", + "雪葬星银", + "雪山大剑" + ], + "喜多院十文字": [ + "喜多院十文字", + "喜多院", + "十文字" + ], + "万国诸海图谱": [ + "万国诸海图谱", + "万国", + "万国诸海" + ], + "天目影打刀": [ + "天目影打刀", + "天目刀", + "天目" + ], + "破魔之弓": [ + "破魔之弓", + "破魔弓" + ], + "曚云之月": [ + "曚云之月", + "曚云弓" + ], + "流月针": [ + "流月针", + "针" + ], + "流浪乐章": [ + "流浪乐章", + "赌狗书", + "赌狗乐章", + "赌狗" + ], + "桂木斩长正": [ + "桂木斩长正", + "桂木", + "斩长正" + ], + "腐殖之剑": [ + "腐殖之剑", + "腐殖", + "腐殖剑" + ], + "风花之颂": [ + "风花之颂", + "风花弓" + ], + "证誓之明瞳": [ + "证誓之明瞳", + "证誓", + "明瞳", + "证誓明瞳" + ], + "嘟嘟可故事集": [ + "嘟嘟可故事集", + "嘟嘟可" + ], + "辰砂之纺锤": [ + "辰砂之纺锤", + "辰砂", + "辰砂纺锤", + "纺锤" + ], + "白辰之环": [ + "白辰之环", + "白辰", + "白辰环" + ], + "决斗之枪": [ + "决斗之枪", + "决斗枪", + "决斗", + "月卡枪" + ], + "螭骨剑": [ + "螭骨剑", + "螭骨", + "丈育剑", + "离骨剑", + "月卡大剑" + ], + "黑剑": [ + "黑剑", + "月卡剑" + ], + "苍翠猎弓": [ + "苍翠猎弓", + "绿弓", + "月卡弓" + ], + "讨龙英杰谭": [ + "讨龙英杰谭", + "讨龙" + ], + "神射手之誓": [ + "神射手之誓", + "脚气弓", + "神射手" + ], + "黑缨枪": [ + "黑缨枪", + "史莱姆枪" + ], + "「渔获」": [ + "「渔获」" + ], + "以理服人": [ + "以理服人" + ], + "佣兵重剑": [ + "佣兵重剑" + ], + "信使": [ + "信使" + ], + "冷刃": [ + "冷刃" + ], + "历练的猎弓": [ + "历练的猎弓" + ], + "反曲弓": [ + "反曲弓" + ], + "口袋魔导书": [ + "口袋魔导书" + ], + "吃虎鱼刀": [ + "吃虎鱼刀" + ], + "学徒笔记": [ + "学徒笔记" + ], + "宗室大剑": [ + "宗室大剑" + ], + "宗室猎枪": [ + "宗室猎枪" + ], + "宗室秘法录": [ + "宗室秘法录" + ], + "宗室长剑": [ + "宗室长剑" + ], + "宗室长弓": [ + "宗室长弓" + ], + "异世界行记": [ + "异世界行记" + ], + "弓藏": [ + "弓藏" + ], + "弹弓": [ + "弹弓" + ], + "忍冬之果": [ + "忍冬之果" + ], + "息灾": [ + "息灾" + ], + "恶王丸": [ + "恶王丸" + ], + "掠食者": [ + "掠食者" + ], + "断浪长鳍": [ + "断浪长鳍" + ], + "新手长枪": [ + "新手长枪" + ], + "旅行剑": [ + "旅行剑" + ], + "无锋剑": [ + "无锋剑" + ], + "暗巷的酒与诗": [ + "暗巷的酒与诗" + ], + "暗铁剑": [ + "暗铁剑" + ], + "沐浴龙血的剑": [ + "沐浴龙血的剑" + ], + "猎弓": [ + "猎弓" + ], + "甲级宝珏": [ + "甲级宝珏" + ], + "白影剑": [ + "白影剑" + ], + "白缨枪": [ + "白缨枪" + ], + "白铁大剑": [ + "白铁大剑" + ], + "祭礼剑": [ + "祭礼剑" + ], + "祭礼大剑": [ + "祭礼大剑" + ], + "祭礼弓": [ + "祭礼弓" + ], + "祭礼残章": [ + "祭礼残章" + ], + "笛剑": [ + "笛剑" + ], + "绝弦": [ + "绝弦" + ], + "翡玉法球": [ + "翡玉法球" + ], + "落霞": [ + "落霞" + ], + "西风剑": [ + "西风剑" + ], + "西风大剑": [ + "西风大剑" + ], + "西风猎弓": [ + "西风猎弓" + ], + "西风秘典": [ + "西风秘典" + ], + "西风长枪": [ + "西风长枪" + ], + "训练大剑": [ + "训练大剑" + ], + "钟剑": [ + "钟剑" + ], + "钢轮弓": [ + "钢轮弓" + ], + "钺矛": [ + "钺矛" + ], + "铁尖枪": [ + "铁尖枪" + ], + "铁影阔剑": [ + "铁影阔剑" + ], + "铁蜂刺": [ + "铁蜂刺" + ], + "银剑": [ + "银剑" + ], + "降临之剑": [ + "降临之剑" + ], + "雨裁": [ + "雨裁" + ], + "飞天大御剑": [ + "飞天大御剑" + ], + "飞天御剑": [ + "飞天御剑" + ], + "魔导绪论": [ + "魔导绪论" + ], + "鸦羽弓": [ + "鸦羽弓" + ], + "黎明神剑": [ + "黎明神剑" + ], + "黑岩刺枪": [ + "黑岩刺枪" + ], + "黑岩战弓": [ + "黑岩战弓" + ], + "黑岩斩刀": [ + "黑岩斩刀" + ], + "黑岩绯玉": [ + "黑岩绯玉" + ], + "黑岩长剑": [ + "黑岩长剑" + ], + "龙脊长枪": [ + "龙脊长枪" + ] + }, + "monsters": [ + "「公子」", + "「女士」", + "丘丘人", + "丘丘岩盔王", + "丘丘雷兜王", + "丘丘霜铠王", + "冰丘丘萨满", + "冰史莱姆", + "冰弹丘丘人", + "冰深渊法师", + "冰盾丘丘人", + "冰盾丘丘暴徒", + "冰箭丘丘人", + "冰萤", + "冰霜骗骗花", + "冰飘浮灵", + "冲锋丘丘人", + "古岩龙蜥", + "嗜岩·兽境幼兽", + "嗜岩·兽境猎犬", + "嗜雷·兽境幼兽", + "嗜雷·兽境猎犬", + "奇怪的丘丘人", + "奔狼的领主", + "射手丘丘人", + "岩丘丘萨满", + "岩史莱姆", + "岩盾丘丘人", + "岩盾丘丘暴徒", + "岩飘浮灵", + "岩龙蜥", + "幼岩龙蜥", + "急冻树", + "恒常机关阵列", + "愚人众·冰萤术士", + "愚人众·火之债务处理人", + "愚人众·藏镜仕女", + "愚人众·雷萤术士", + "愚人众先遣队·冰铳重卫士", + "愚人众先遣队·岩使游击兵", + "愚人众先遣队·水铳重卫士", + "愚人众先遣队·火铳游击兵", + "愚人众先遣队·雷锤前锋军", + "愚人众先遣队·风拳前锋军", + "打手丘丘人", + "无相之冰", + "无相之岩", + "无相之水", + "无相之火", + "无相之雷", + "无相之风", + "木盾丘丘人", + "木盾丘丘暴徒", + "水丘丘萨满", + "水史莱姆", + "水深渊法师", + "水萤", + "水飘浮灵", + "浮游水蕈兽", + "海乱鬼·炎威", + "海乱鬼·雷腾", + "深海龙蜥·原种", + "深海龙蜥·吞雷", + "深海龙蜥·啮冰", + "深海龙蜥之群", + "深渊使徒·激流", + "深渊咏者·渊火", + "深渊咏者·紫电", + "火史莱姆", + "火斧丘丘暴徒", + "火深渊法师", + "火箭丘丘人", + "火飘浮灵", + "炽热骗骗花", + "爆弹丘丘人", + "爆炎树", + "狂风之核", + "电气骗骗花", + "盗宝团·冰之药剂师", + "盗宝团·拳术家", + "盗宝团·掘墓者", + "盗宝团·斥候", + "盗宝团·杂工", + "盗宝团·水之药剂师", + "盗宝团·海上男儿", + "盗宝团·火之药剂师", + "盗宝团·神射手", + "盗宝团·粉碎者", + "盗宝团·雷之药剂师", + "祸津御建鸣神命", + "纯水精灵", + "若陀龙王", + "草丘丘萨满", + "草史莱姆", + "遗迹侦察者", + "遗迹守卫", + "遗迹巡弋者", + "遗迹巨蛇", + "遗迹歼击者", + "遗迹猎者", + "遗迹重机", + "遗迹防卫者", + "野伏·机巧番", + "野伏·火付番", + "野伏·阵刀番", + "雷丘丘萨满", + "雷史莱姆", + "雷弹丘丘人", + "雷斧丘丘暴徒", + "雷深渊法师", + "雷箭丘丘人", + "雷萤", + "雷音权现", + "雷飘浮灵", + "风丘丘萨满", + "风史莱姆", + "风飘浮灵", + "风魔龙", + "魔偶剑鬼", + "黄金王兽", + "黑蛇骑士·斩风之剑", + "黯色空壳·旗令", + "黯色空壳·破阵", + "黯色空壳·近卫" + ] +} \ No newline at end of file diff --git a/utils/alias_handler.py b/utils/alias_handler.py new file mode 100644 index 0000000..4956103 --- /dev/null +++ b/utils/alias_handler.py @@ -0,0 +1,48 @@ +import difflib +from typing import Union +from .file_handler import load_json +import os + + +# def get_id_by_alias(name): +# +# for c in character_alias.items(): +# if name in c[1]: +# return c +# return None + + +def get_short_name(name): + short_name = load_json(path=os.path.join(os.path.dirname(__file__),'short_name.json')) + return name if name not in short_name.keys() else short_name[name] + + +def get_match_alias(msg: str, type: str = 'roles', single_to_dict: bool = False) -> Union[str, list, dict]: + alias_file = load_json(path=os.path.join(os.path.dirname(__file__), 'alias.json')) + alias_list = alias_file[type] + if msg in ['风主', '岩主', '雷主']: + return msg + elif type == 'roles': + possible = {} + for role_id, alias in alias_list.items(): + match_list = difflib.get_close_matches(msg, alias, cutoff=0.6, n=3) + if msg in match_list: + if single_to_dict: + return {alias[0]: role_id} + else: + return alias[0] + elif match_list: + possible[alias[0]] = role_id + return possible + elif type == 'weapons': + possible = [] + for name, alias in alias_list.items(): + match_list = difflib.get_close_matches(msg, alias, cutoff=0.4, n=3) + if msg in match_list: + return name + elif match_list: + possible.append(name) + return possible + elif type == 'monsters': + match_list = difflib.get_close_matches(msg, alias_list, cutoff=0.4, n=5) + return match_list[0] if len(match_list) == 1 else match_list diff --git a/utils/character_alias.py b/utils/character_alias.py deleted file mode 100644 index 889c406..0000000 --- a/utils/character_alias.py +++ /dev/null @@ -1,144 +0,0 @@ -character_alias = { - 10000002: ['神里绫华', '绫华', '大小姐', '小乌龟', '白鹭公主', '0华', '神里', '神里妹', '凌华', '神里凌华'], - 10000003: ['琴', '团长', '琴团长', '蒲公英骑士'], - 10000005: ['空', '空哥', '龙哥', '哥哥', '旅行者', '主角'], - 10000006: ['丽莎', '蔷薇魔女'], - 10000007: ['荧', '荧妹', '爷', '妹妹', '旅行者', '主角'], - 10000014: ['芭芭拉', '偶像', '内鬼', '牧师'], - 10000015: ['凯亚', '凝冰渡海真君', '矿工'], - 10000016: ['迪卢克', '卢姥爷', '姥爷', '老爷', '卢锅巴', '正义人', '正e人', '落魄人'], - 10000020: ['雷泽', '物泽', '小狼', '狼崽', '卢皮卡'], - 10000021: ['安柏', '蒙德第一火弓', '打火机', '侦查骑士'], - 10000022: ['温迪', '巴巴托斯', '风神', '芭芭脱丝', '卖唱的', '苹果酒', '不干正事真君', '吟游诗人'], - 10000023: ['香菱', '卯师傅', '锅巴', '灶神', '香师傅'], - 10000024: ['北斗', '大姐头', '船长', '龙王'], - 10000025: ['行秋', '水神', '秋秋人', '少爷'], - 10000026: ['魈', '金鹏', '夜叉', '三眼五显仙人', '降魔大圣', '靖妖傩舞', '打桩机'], - 10000027: ['凝光', '富婆', '天权星'], - 10000029: ['可莉', '哒哒哒', '炸弹人', '火花骑士', '嘟嘟可'], - 10000030: ['钟离', '帝君', '先生', '老爷子', '岩神', '摩拉克斯', '岩王爷', '岩王帝君'], - 10000031: ['菲谢尔', '皇女', '奥兹', '乌鸦', '中二少女', '小艾咪'], - 10000032: ['班尼特', '班爷', '班神', '点赞哥', '火神'], - 10000033: ['达达利亚', '公子', '愚人众', '阿贾克斯', '鸭鸭', '达达鸭', '玩具销售员'], - 10000034: ['诺艾尔', '女仆', '高达', '岩王帝姬'], - 10000035: ['七七', '77', '僵尸', '肚饿真君'], - 10000036: ['重云', '冰棍'], - 10000037: ['甘雨', '秘书', '王小美', 'RPG', '椰羊', '椰奶'], - 10000038: ['阿贝多', '炼金术士', '花呗多'], - 10000039: ['迪奥娜', 'dio娜', '猫猫', '冰猫'], - 10000041: ['莫娜', '穷b', '占星术士', '半部讨龙真君'], - 10000042: ['刻晴', '刻师傅', '阿晴', '刻猫猫', '牛杂师傅', '玉衡星'], - 10000043: ['砂糖', '眼镜娘', '雷莹', '风荧'], - 10000044: ['辛焱', '黑妹', '摇滚'], - 10000045: ['罗莎莉亚', '修女', '罗莎'], - 10000046: ['胡桃', 'whotao', '堂主'], - 10000047: ['枫原万叶', '万叶', '叶天帝'], - 10000048: ['烟绯', '罗翔', '律师'], - 10000049: ['宵宫', '烟花', '霄宫', '稻妻第一火弓'], - 10000050: ['托马', '保姆', '家政'], - 10000051: ['优菈', '优拉', '浪花骑士', '记仇的'], - 10000052: ['雷电将军', '雷神', '巴尔', '雷军', '雷电影', '影', '煮饭婆', '奶香一刀'], - 10000053: ['早柚', '忍者', '终末番'], - 10000054: ['珊瑚宫心海', '心海', '军师', '美人鱼', '观赏鱼', '龙王'], - 10000055: ['五郎', '狗狗', '修狗', '希娜小姐'], - 10000056: ['九条裟罗', '九条'], - 10000057: ['荒泷一斗', '一斗', '哈哈哈', '斗子哥'], - 10000058: ['八重神子', '神子', '八重', '狐狸', '屑狐狸'], - 10000062: ['埃洛伊'], - 10000063: ['申鹤', '小姨', '小姨妈'], - 10000064: ['云堇', '云先生'], - 10000066: ['神里绫人', '0人', '大舅子', '小舅子', '绫人', '神里哥', '凌人', '神里凌人'] -} -short_name = { - '胡桃': '胡桃', - '托马': '托马', - '宵宫': '宵宫', - '烟绯': '烟绯', - '可莉': '可莉', - '迪卢克': '姥爷', - '辛焱': '辛焱', - '安柏': '安柏', - '香菱': '香菱', - '班尼特': '点赞', - '珊瑚宫心海': '心海', - '达达利亚': '公子', - '行秋': '行秋', - '莫娜': '莫娜', - '芭芭拉': '牧师', - '申鹤': '申鹤', - '神里绫华': '绫华', - '优菈': '优菈', - '甘雨': '甘雨', - '凯亚': '凯亚', - '重云': '重云', - '七七': '七七', - '迪奥娜': '冰猫', - '罗莎莉亚': '修女', - '埃洛伊': '异界', - '八重神子': '神子', - '雷电将军': '雷神', - '九条裟罗': '九条', - '刻晴': '刻晴', - '雷泽': '雷泽', - '菲谢尔': '皇女', - '丽莎': '丽莎', - '北斗': '北斗', - '雷主': '雷主', - '早柚': '早柚', - '枫原万叶': '万叶', - '魈': '魈君', - '温迪': '温迪', - '琴': '团长', - '砂糖': '砂糖', - '风主': '风主', - '荒泷一斗': '一斗', - '五郎': '五郎', - '阿贝多': '白垩', - '钟离': '钟离', - '诺艾尔': '女仆', - '凝光': '凝光', - '岩主': '岩主', - '云堇': '云堇', - '神里绫人': '绫人', - '神乐之真意': '神乐', - '息灾': '息灾', - '赤角石溃杵': '赤角', - '松籁响起之时': '松籁', - '苍古自由之誓': '苍古', - '终末嗟叹之诗': '终末', - '冬极白星': '冬极', - '不灭月华': '月华', - '薙草之稻光': '薙刀', - '飞雷之弦振': '飞雷', - '雾切之回光': '雾切', - '天空之刃': '空刃', - '狼的末路': '狼末', - '阿莫斯之弓': '痛苦', - '天空之卷': '空卷', - '天空之傲': '空傲', - '和璞鸢': '鸟枪', - '四风原典': '四风', - '天空之翼': '空翼', - '天空之脊': '空脊', - '尘世之锁': '尘锁', - '无工之剑': '无工', - '贯虹之槊': '贯虹', - '斫峰之刃': '斫峰', - '磐岩结绿': '绿剑', - '护摩之杖': '护摩', - '波乱月白经津': '波乱' -} - - -def get_id_by_alias(name): - for c in character_alias.items(): - if name in c[1]: - return c - return None - - -def get_short_name(name): - for n in short_name.items(): - if name == n[0]: - return n[1] - return name diff --git a/utils/message_util.py b/utils/message_util.py index 58ab019..a1b39ac 100644 --- a/utils/message_util.py +++ b/utils/message_util.py @@ -1,6 +1,5 @@ import re import base64 -import difflib from PIL import Image from pathlib import Path @@ -11,7 +10,7 @@ from nonebot import get_bot, logger from nonebot.adapters.onebot.v11 import MessageEvent, Message, MessageSegment from .db_util import get_last_query, update_last_query -from .file_handler import load_image, load_json_from_url +from .file_handler import load_image from . import aiorequests @@ -135,19 +134,41 @@ def get_message_id(event): return event.channel_id -async def match_alias(msg: str, type: str = 'weapons') -> Union[str, list]: - alias_file = await load_json_from_url(url='https://static.cherishmoon.fun/LittlePaimon/alias.json') - alias_list = alias_file[type] - if type == 'weapons': - possible = [] - for name, alias in alias_list.items(): - match_list = difflib.get_close_matches(msg, alias, cutoff=0.4, n=5) - if msg in match_list: - return name - elif match_list: - possible.append(name) - return possible - elif type == 'monsters': - match_list = difflib.get_close_matches(msg, alias_list, cutoff=0.4, n=5) - return match_list[0] if len(match_list) == 1 else match_list +def uid_userId_to_dict(uid, user_id) -> Tuple[dict, Message]: + total_result = Message() + query_dict = {} + if isinstance(uid, str) and isinstance(user_id, str): + query_dict[uid] = user_id + elif isinstance(uid, list) and isinstance(user_id, str): + for u in uid: + query_dict[u] = user_id + elif isinstance(uid, list) and isinstance(user_id, list): + for u, us in zip(uid, user_id): + if u is not None: + query_dict[u] = us + else: + total_result += MessageSegment.text(f'派蒙没有{us}的{u}信息哦,请把uid给派蒙吧~') + return query_dict, total_result + +def replace_all(raw_text: str, text_list: Union[str, list]): + if not text_list: + return raw_text + else: + if isinstance(text_list, str): + text_list = [text_list] + for text in text_list: + raw_text = raw_text.replace(text, '') + return raw_text + + +def transform_uid(msg): + if isinstance(msg, Message): + msg = msg.extract_plain_text().strip() + check_uid = msg.split(' ') + uid_list = [] + for check in check_uid: + uid = re.search(r'(?P(1|2|5)\d{8})', check) + if uid: + uid_list.append(uid.group('uid')) + return uid_list if len(uid_list) > 1 else uid_list[0] if uid_list else None diff --git a/utils/short_name.json b/utils/short_name.json new file mode 100644 index 0000000..2fd3422 --- /dev/null +++ b/utils/short_name.json @@ -0,0 +1,79 @@ +{ + "胡桃": "胡桃", + "托马": "托马", + "宵宫": "宵宫", + "烟绯": "烟绯", + "可莉": "可莉", + "迪卢克": "姥爷", + "辛焱": "辛焱", + "安柏": "安柏", + "香菱": "香菱", + "班尼特": "点赞", + "珊瑚宫心海": "心海", + "达达利亚": "公子", + "行秋": "行秋", + "莫娜": "莫娜", + "芭芭拉": "牧师", + "申鹤": "申鹤", + "神里绫华": "绫华", + "优菈": "优菈", + "甘雨": "甘雨", + "凯亚": "凯亚", + "重云": "重云", + "七七": "七七", + "迪奥娜": "冰猫", + "罗莎莉亚": "修女", + "埃洛伊": "异界", + "八重神子": "神子", + "雷电将军": "雷神", + "九条裟罗": "九条", + "刻晴": "刻晴", + "雷泽": "雷泽", + "菲谢尔": "皇女", + "丽莎": "丽莎", + "北斗": "北斗", + "雷主": "雷主", + "早柚": "早柚", + "枫原万叶": "万叶", + "魈": "魈君", + "温迪": "温迪", + "琴": "团长", + "砂糖": "砂糖", + "风主": "风主", + "荒泷一斗": "一斗", + "五郎": "五郎", + "阿贝多": "白垩", + "钟离": "钟离", + "诺艾尔": "女仆", + "凝光": "凝光", + "岩主": "岩主", + "云堇": "云堇", + "神里绫人": "绫人", + "神乐之真意": "神乐", + "息灾": "息灾", + "赤角石溃杵": "赤角", + "松籁响起之时": "松籁", + "苍古自由之誓": "苍古", + "终末嗟叹之诗": "终末", + "冬极白星": "冬极", + "不灭月华": "月华", + "薙草之稻光": "薙刀", + "飞雷之弦振": "飞雷", + "雾切之回光": "雾切", + "天空之刃": "空刃", + "狼的末路": "狼末", + "阿莫斯之弓": "痛苦", + "天空之卷": "空卷", + "天空之傲": "空傲", + "和璞鸢": "鸟枪", + "四风原典": "四风", + "天空之翼": "空翼", + "天空之脊": "空脊", + "尘世之锁": "尘锁", + "无工之剑": "无工", + "贯虹之槊": "贯虹", + "斫峰之刃": "斫峰", + "磐岩结绿": "绿剑", + "护摩之杖": "护摩", + "波乱月白经津": "波乱" +} \ No newline at end of file