From c171873fa60ef365fb63e1029a00f0674793fba0 Mon Sep 17 00:00:00 2001 From: snowy Date: Sat, 25 May 2024 12:09:54 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E4=BC=98=E5=8C=96=E5=9C=86?= =?UTF-8?q?=E8=A7=92=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/liteyuki_crt_utils/__init__.py | 1 + .../liteyuki_crt_utils/crt_matchers.py | 71 +++++++++++++++++++ liteyuki/plugins/liteyuki_sign_status.py | 1 - .../plugins/liteyuki_statistics/stat_api.py | 2 +- liteyuki/plugins/liteyuki_weather/qweather.py | 25 ++++--- liteyuki/resources/liteyuki_crt/metadata.yml | 3 + .../liteyuki_crt/templates/crt_route.html | 22 ++++++ .../liteyuki_crt/templates/js/crt_route.js | 31 ++++++++ .../vanilla_resource/templates/css/card.css | 4 +- liteyuki/utils/network/__init__.py | 15 ++++ 10 files changed, 158 insertions(+), 17 deletions(-) create mode 100644 liteyuki/plugins/liteyuki_crt_utils/crt_matchers.py create mode 100644 liteyuki/resources/liteyuki_crt/metadata.yml create mode 100644 liteyuki/resources/liteyuki_crt/templates/crt_route.html create mode 100644 liteyuki/resources/liteyuki_crt/templates/js/crt_route.js create mode 100644 liteyuki/utils/network/__init__.py diff --git a/liteyuki/plugins/liteyuki_crt_utils/__init__.py b/liteyuki/plugins/liteyuki_crt_utils/__init__.py index a8d2b75b..f288d4d5 100644 --- a/liteyuki/plugins/liteyuki_crt_utils/__init__.py +++ b/liteyuki/plugins/liteyuki_crt_utils/__init__.py @@ -1,5 +1,6 @@ from nonebot.plugin import PluginMetadata from .rt_guide import * +from .crt_matchers import * __plugin_meta__ = PluginMetadata( name="CRT生成工具", diff --git a/liteyuki/plugins/liteyuki_crt_utils/crt_matchers.py b/liteyuki/plugins/liteyuki_crt_utils/crt_matchers.py new file mode 100644 index 00000000..524d94fd --- /dev/null +++ b/liteyuki/plugins/liteyuki_crt_utils/crt_matchers.py @@ -0,0 +1,71 @@ +from urllib.parse import quote + +import aiohttp +from nonebot import require + +from liteyuki.utils.event import get_user_id +from liteyuki.utils.base.language import Language +from liteyuki.utils.base.ly_typing import T_MessageEvent +from liteyuki.utils.base.resource import get_path +from liteyuki.utils.message.html_tool import template2image + +require("nonebot_plugin_alconna") + +from nonebot_plugin_alconna import UniMessage, on_alconna, Alconna, Args, Subcommand, Arparma, Option + +crt_cmd = on_alconna( + Alconna( + "crt", + Subcommand( + "route", + Args["start", str, "沙坪坝"]["end", str, "上新街"], + alias=("r",), + help_text="查询两地之间的地铁路线" + ), + ) +) + + +@crt_cmd.assign("route") +async def _(result: Arparma, event: T_MessageEvent): + # 获取语言 + ulang = Language(get_user_id(event)) + + # 获取参数 + start = quote(quote(result.other_args.get("start"))) + end = quote(quote(result.other_args.get("end"))) + + # 判断参数语言 + query_lang_code = "Eng" if ulang.lang_code not in ["zh-CN", "zh-HK"] else "" + if start.isalpha() and end.isalpha(): + query_lang_code = "Eng" + + # 构造请求 URL + url = f"https://www.cqmetro.cn/Front/html/TakeLine!queryYs{query_lang_code}TakeLine.action?entity.startStaName={start}&entity.endStaName={end}" + + # 请求数据 + async with aiohttp.ClientSession() as session: + async with session.get(url) as resp: + result = await resp.json() + + # 检查结果/无则终止 + if not result.get("result"): + await crt_cmd.send(ulang.get("crt.no_result")) + return + + # 模板传参定义 + templates = { + "data": { + "result": result["result"], + } + } + + # 生成图片 + image = await template2image( + template=get_path("templates/crt_route.html"), + templates=templates, + debug=True + ) + + # 发送图片 + await crt_cmd.send(UniMessage.image(raw=image)) diff --git a/liteyuki/plugins/liteyuki_sign_status.py b/liteyuki/plugins/liteyuki_sign_status.py index b5c448aa..f682ca9b 100644 --- a/liteyuki/plugins/liteyuki_sign_status.py +++ b/liteyuki/plugins/liteyuki_sign_status.py @@ -158,7 +158,6 @@ async def generate_chart(limit): templates={ "data": data }, - debug=True ) return img diff --git a/liteyuki/plugins/liteyuki_statistics/stat_api.py b/liteyuki/plugins/liteyuki_statistics/stat_api.py index 8211519f..72dbbe3f 100644 --- a/liteyuki/plugins/liteyuki_statistics/stat_api.py +++ b/liteyuki/plugins/liteyuki_statistics/stat_api.py @@ -87,7 +87,7 @@ async def get_stat_msg_image(duration: int, period: int, group_id: str = None, b ] } - return await template2image(get_path("templates/stat_msg.html"), templates, debug=True) + return await template2image(get_path("templates/stat_msg.html"), templates) # if not timestamps or period_start_time != timestamps[-1]: # timestamps.append(period_start_time) diff --git a/liteyuki/plugins/liteyuki_weather/qweather.py b/liteyuki/plugins/liteyuki_weather/qweather.py index 9b158b9e..91ace41e 100644 --- a/liteyuki/plugins/liteyuki_weather/qweather.py +++ b/liteyuki/plugins/liteyuki_weather/qweather.py @@ -84,20 +84,19 @@ async def get_weather_now_card(matcher: Matcher, event: T_MessageEvent, keyword: image = await template2image( template=get_path("templates/weather_now.html", abs_path=True), templates={ - "data": { - "params": { - "unit": unit, - "lang": ulang.lang_code, - }, - "weatherNow": weather_now, - "weatherDaily": weather_daily, - "weatherHourly": weather_hourly, - "aqi": aqi, - "location": location_data.dump(), - "localization": get_local_data(ulang.lang_code) - } + "data": { + "params" : { + "unit": unit, + "lang": ulang.lang_code, + }, + "weatherNow" : weather_now, + "weatherDaily" : weather_daily, + "weatherHourly": weather_hourly, + "aqi" : aqi, + "location" : location_data.dump(), + "localization" : get_local_data(ulang.lang_code) + } }, - debug=True, wait=1 ) return image diff --git a/liteyuki/resources/liteyuki_crt/metadata.yml b/liteyuki/resources/liteyuki_crt/metadata.yml new file mode 100644 index 00000000..157f7ecb --- /dev/null +++ b/liteyuki/resources/liteyuki_crt/metadata.yml @@ -0,0 +1,3 @@ +name: CRT相关资源包 +description: For Liteyuki CRT utils +version: 2024.4.26 \ No newline at end of file diff --git a/liteyuki/resources/liteyuki_crt/templates/crt_route.html b/liteyuki/resources/liteyuki_crt/templates/crt_route.html new file mode 100644 index 00000000..71d51839 --- /dev/null +++ b/liteyuki/resources/liteyuki_crt/templates/crt_route.html @@ -0,0 +1,22 @@ + + + + + CRT 线路图 + + + + +
{{ data | tojson }}
+ + + + + + + + \ No newline at end of file diff --git a/liteyuki/resources/liteyuki_crt/templates/js/crt_route.js b/liteyuki/resources/liteyuki_crt/templates/js/crt_route.js new file mode 100644 index 00000000..0ee758ef --- /dev/null +++ b/liteyuki/resources/liteyuki_crt/templates/js/crt_route.js @@ -0,0 +1,31 @@ +// Copyright (c) 2024 SnowyKami Liteyuki Studio All Rights Reserved. + + + +/** + * @type {{ + * results: Array<{ + * abstracts: string, + * createdDt: string, + * endStaName: string, + * startStaName: string, + * isValid: boolean, + * needTimeScope: number, + * needTransferTimes: number, + * price: number, + * skipGenerateSequence: boolean, + * transferLines: string, + * transferLinesColor: string, + * transferStaDerict: string, + * transferStaNames: string, + * }> + * }} + */ + +const data = JSON.parse(document.getElementById("data").innerText); +const results = data["result"]; + +const solution_template = document.getElementById("route-template").innerText; + + + diff --git a/liteyuki/resources/vanilla_resource/templates/css/card.css b/liteyuki/resources/vanilla_resource/templates/css/card.css index 7a63d3fc..04fd2bc4 100644 --- a/liteyuki/resources/vanilla_resource/templates/css/card.css +++ b/liteyuki/resources/vanilla_resource/templates/css/card.css @@ -19,8 +19,8 @@ body { } .info-box { - border-radius: 50px; - padding: 30px; + border-radius: 60px; + padding: 40px; backdrop-filter: blur(10px); background-color: rgba(0, 0, 0, 0.5); margin-bottom: 20px; diff --git a/liteyuki/utils/network/__init__.py b/liteyuki/utils/network/__init__.py new file mode 100644 index 00000000..81521c5a --- /dev/null +++ b/liteyuki/utils/network/__init__.py @@ -0,0 +1,15 @@ +from aiohttp import ClientSession + + +async def simple_get(url: str) -> str: + """ + 简单异步get请求 + Args: + url: + + Returns: + + """ + async with ClientSession() as session: + async with session.get(url) as resp: + return await resp.text()