From 4bd6fc7c3e560e7da1b2dcd5547a89690d1e3218 Mon Sep 17 00:00:00 2001 From: qsc Date: Sat, 27 Dec 2025 21:41:19 +0800 Subject: [PATCH] 11 --- core/function_basic.py | 40 ++++++- core/jx3_service.py | 15 ++- main.py | 4 +- templates/richangyuche.html | 93 +++++++++++++++ templates/temp_test.html | 228 +++++++++++++++++------------------- 5 files changed, 250 insertions(+), 130 deletions(-) create mode 100644 templates/richangyuche.html diff --git a/core/function_basic.py b/core/function_basic.py index 5886593..597a0fd 100644 --- a/core/function_basic.py +++ b/core/function_basic.py @@ -4,6 +4,8 @@ import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties from io import BytesIO import base64 +from datetime import datetime +import calendar def load_template(template_name): """ @@ -164,4 +166,40 @@ def plot_line_chart_base64(data, x_field, y_field, title=None, reverse_x=False): plt.close() img_base64 = base64.b64encode(buffer.getvalue()).decode('utf-8') - return f"data:image/png;base64,{img_base64}" \ No newline at end of file + return f"data:image/png;base64,{img_base64}" + + +def build_calendar_items(start_date_str, data): + start_date = datetime.datetime.strptime(start_date_str, "%Y-%m-%d").date() + weekday = start_date.weekday() # 周一0 ~ 周日6 + weekday = (weekday + 1) % 7 # 调整:周日=0, 周一=1 ... 周六=6 + + result = [] + row = [] + + # 第一行补空 + for _ in range(weekday): + row.append({"date": "", "items": [], "is_today": False}) + + # 排数据 + for i, day in enumerate(data): + # 识别今天 + is_today = (day["date"] == start_date_str) + + row.append({ + "date": day["day"], + "items": [day], + "is_today": is_today, + }) + + if len(row) == 7: + result.append(row) + row = [] + + # 最后一行剩余补空 + if row: + while len(row) < 7: + row.append({"date": "", "items": [], "is_today": False}) + result.append(row) + + return result \ No newline at end of file diff --git a/core/jx3_service.py b/core/jx3_service.py index fe16ad1..19a17aa 100644 --- a/core/jx3_service.py +++ b/core/jx3_service.py @@ -7,7 +7,7 @@ from astrbot.api import AstrBotConfig from .request import APIClient from .aiosqlite import AsyncSQLite -from .function_basic import load_template,flatten_field,extract_fields,gold_to_string +from .function_basic import load_template,gold_to_string,build_calendar_items class JX3Service: def __init__(self, api_config, config:AstrBotConfig): @@ -159,19 +159,24 @@ class JX3Service: data: Optional[Dict[str, Any]] = await self._base_request( "jx3_richangyuche", "GET", params=params ) - logger.info(f"richang 接口返回数据: {data}") if not data: return_data["msg"] = "获取接口信息失败" return return_data # 3. 处理返回数据 try: - # 格式化字符串,利用字典的 get 方法提供默认值 - - return_data["code"] = 0 + return_data["data"]["items"] = build_calendar_items(data["today"]["date"],data["data"]) except Exception as e: logger.error(f"richang 数据处理时出错: {e}") return_data["msg"] = "处理接口返回信息时出错" + # 加载模板 + try: + return_data["temp"] = load_template("richangyuche.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + + return_data["code"] = 200 return return_data diff --git a/main.py b/main.py index 288783c..f1522f5 100644 --- a/main.py +++ b/main.py @@ -154,8 +154,10 @@ class Jx3ApiPlugin(Star): """剑三 日常预测 服务器 """ try: data= await self.jx3fun.richangyuche() + logger.info(data) if data["code"] == 200: - yield event.plain_result(data["data"]) + url = await self.html_render(data["temp"], data["data"], options={}) + yield event.image_result(url) else: yield event.plain_result(data["msg"]) return diff --git a/templates/richangyuche.html b/templates/richangyuche.html new file mode 100644 index 0000000..0a01223 --- /dev/null +++ b/templates/richangyuche.html @@ -0,0 +1,93 @@ + + + + + 未来战场日程表 + + + + +

未来战场日程表

+ + + + + + + + + {% for week in items %} + + {% for day in week %} + {% if day.date %} + + {% else %} + + {% endif %} + {% endfor %} + + {% endfor %} + +
+ {{ day.date }} + + {% for obj in day.items %} +
+
战场:{{ obj.battle }}
+
战役:{{ obj.war }}
+
运车:{{ obj.orecar }}
+
门派:{{ obj.school }}
+
救援:{{ obj.rescue }}
+ {% if obj.card %} +
卡牌:{{ obj.card | join('、') }}
+ {% endif %} +
+ {% endfor %} + +
+ + + diff --git a/templates/temp_test.html b/templates/temp_test.html index 1cc5af0..e9ea5cd 100644 --- a/templates/temp_test.html +++ b/templates/temp_test.html @@ -1,145 +1,127 @@ - - 角色奇遇一览 - + - -
-
- 普通奇遇({{ ptqy|length if ptqy else 0 }}) -
- {% if ptqy %} -
- {% for item in ptqy %} -
-
{{ item.event }}
-
{{ item.time }}
-
- {% endfor %} -
- {% else %} -
暂无普通奇遇
- {% endif %} -
+

未来战场日历

- -
-
- 绝世奇遇({{ jsqy|length if jsqy else 0 }}) -
- {% if jsqy %} -
- {% for item in jsqy %} -
-
{{ item.event }}
-
{{ item.time }}
-
- {% endfor %} -
- {% else %} -
暂无绝世奇遇
- {% endif %} -
+ - -
-
- 宠物奇遇({{ cwqy|length if cwqy else 0 }}) -
- {% if cwqy %} -
- {% for item in cwqy %} -
-
{{ item.event }}
-
{{ item.time }}
-
- {% endfor %} -
- {% else %} -
暂无宠物奇遇
- {% endif %} -
+ + + + + + + + + + + + + + + {% for week in calendar_rows %} + + {% for cell in week %} + + {% endfor %} + + {% endfor %} + + +
周日周一周二周三周四周五周六
+ {% if cell.date %} +
{{ cell.date }}
+ {% for ev in cell.items %} +
+
{{ ev.war }}
+
{{ ev.battle }}
+
+ {% endfor %} + {% endif %} +