diff --git a/LittlePaimon/plugins/Paimon_Wiki/__init__.py b/LittlePaimon/plugins/Paimon_Wiki/__init__.py index 0d4202b..378fe38 100644 --- a/LittlePaimon/plugins/Paimon_Wiki/__init__.py +++ b/LittlePaimon/plugins/Paimon_Wiki/__init__.py @@ -6,9 +6,10 @@ from nonebot.adapters.onebot.v11.helpers import HandleCancellation from nonebot.adapters.onebot.v11.exception import ActionFailed from nonebot.params import RegexDict, ArgPlainText, CommandArg, Arg from nonebot.plugin import PluginMetadata +from nonebot.permission import SUPERUSER from nonebot.typing import T_State -from LittlePaimon import NICKNAME, DRIVER +from LittlePaimon import NICKNAME from LittlePaimon.utils.alias import get_match_alias from LittlePaimon.utils.tool import freq_limiter from LittlePaimon.utils.message import MessageBuild @@ -61,6 +62,12 @@ material_map_full = on_command('材料地图', priority=11, block=True, state={ 'pm_usage': '材料地图<材料名列表>[地图]', 'pm_priority': 10 }) +generate_map = on_command('生成地图', priority=1, block=True, permission=SUPERUSER, state={ + 'pm_name': '生成地图', + 'pm_description': '生成材料图鉴等所需要的地图资源,仅超级用户可用。', + 'pm_usage': '生成地图', + 'pm_priority': 11 +}) # abyss_rate = on_command('syrate', aliases={'深渊登场率', '深境螺旋登场率', '深渊登场率排行', '深渊排行'}, priority=11, block=True, state={ @@ -166,7 +173,11 @@ async def _(event: MessageEvent, map_: str = Arg('map'), names=Arg('names')): await material_map_full.finish(result, at_sender=True) -DRIVER.on_bot_connect(init_map) +@generate_map.handle() +async def _(event: MessageEvent): + await generate_map.send('开始生成地图资源,这可能需要较长时间。') + result = await init_map() + await generate_map.finish(result) def create_wiki_matcher(pattern: str, help_fun: str, help_name: str): diff --git a/LittlePaimon/plugins/Paimon_Wiki/draw_map.py b/LittlePaimon/plugins/Paimon_Wiki/draw_map.py index 79c35fc..1862a11 100644 --- a/LittlePaimon/plugins/Paimon_Wiki/draw_map.py +++ b/LittlePaimon/plugins/Paimon_Wiki/draw_map.py @@ -47,6 +47,7 @@ async def init_map(refresh: bool = False): map_img.paste(anchor_icon, (int(point.x) - 32, int(point.y) - 64), anchor_icon) map_img.save(save_path) logger.info('原神地图', f'{map_name[map_id.name]}地图初始化完成') + return f'地图资源生成完成,目前有{"、".join(list(map_name_reverse.keys()))}地图。' async def draw_map(name: str, map_: str): @@ -57,6 +58,8 @@ async def draw_map(name: str, map_: str): :return: 地图 """ map_id = models.MapID[map_name_reverse[map_]] + if not (RESOURCE_BASE_PATH / 'genshin_map' / 'results' / f'{map_id.name}.png').exists(): + return f'缺少{map_id.name}地图资源,请联系超级用户进行[生成地图]' maps = await request.get_maps(map_id) labels = await request.get_labels(map_id) if resources := list(filter(lambda x: x.name == name, [child for label in labels for child in label.children])): @@ -113,6 +116,8 @@ async def draw_map(name: str, map_: str): async def get_full_map(names: List[str], map_: str): map_id = models.MapID[map_name_reverse[map_]] + if not (RESOURCE_BASE_PATH / 'genshin_map' / 'results' / f'{map_id.name}.png').exists(): + return f'缺少{map_id.name}地图资源,请联系超级用户进行[生成地图]' maps = await request.get_maps(map_id) labels = await request.get_labels(map_id) resources = []