From 5b15c66d0f222a75a4aaf1cdeffddb6055dc5148 Mon Sep 17 00:00:00 2001 From: qsc20001102 Date: Fri, 19 Sep 2025 22:29:04 +0800 Subject: [PATCH] rr --- core/load_template.py | 24 +++++++++ main.py | 62 +++++++++++++++------ templates/jiaoyihang.html | 107 +++++++++++++++++++++++++++++++++++++ templates/simple_test.html | 6 +++ 4 files changed, 182 insertions(+), 17 deletions(-) create mode 100644 core/load_template.py create mode 100644 templates/jiaoyihang.html create mode 100644 templates/simple_test.html diff --git a/core/load_template.py b/core/load_template.py new file mode 100644 index 0000000..c8f3363 --- /dev/null +++ b/core/load_template.py @@ -0,0 +1,24 @@ +import os +from pathlib import Path + +def load_template(template_name): + """ + 从模板文件加载模板内容 + + Args: + template_name: 模板文件名(不带路径) + + Returns: + str: 模板内容 + """ + # 获取模板文件路径 + plugin_dir = Path(__file__).parent.parent + template_path = plugin_dir / "templates" / template_name + + # 检查文件是否存在 + if not template_path.exists(): + raise FileNotFoundError(f"模板文件不存在: {template_path}") + + # 读取模板内容 + with open(template_path, 'r', encoding='utf-8') as f: + return f.read() \ No newline at end of file diff --git a/main.py b/main.py index 5a52958..c8db2d7 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,5 @@ -import requests -import json import urllib3 +from datetime import datetime from astrbot.api.event import filter, AstrMessageEvent, MessageEventResult from astrbot.api.star import Context, Star, register from astrbot.api import logger @@ -8,9 +7,14 @@ from astrbot.api import AstrBotConfig from .core.request import fetch_jx3_data from .core.jx3jiaoyihang import fetch_jx3_jiaoyihang +from .core.load_template import load_template + +from jinja2 import Template + # 禁用 SSL 警告 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + @register("jx3api", "fxdyz", "通过接口调用剑网三API接口获取游戏数据", "1.0.0") class Jx3ApiPlugin(Star): def __init__(self, context: Context, config: AstrBotConfig): @@ -21,6 +25,7 @@ class Jx3ApiPlugin(Star): async def initialize(self): """可选择实现异步的插件初始化方法,当实例化该插件类之后会自动调用该方法。""" + @filter.command("剑三日常") async def jx3_richang(self, event: AstrMessageEvent): """获取剑网3日常活动信息""" @@ -172,23 +177,46 @@ class Jx3ApiPlugin(Star): if len(parts) > 2: params["name"] = parts[2] # 第三个参数为日期偏移 - # 获取数据 - data = fetch_jx3_jiaoyihang(params["server"], params["name"]) - - if not data: - yield event.plain_result("获取接口信息失败,请稍后再试") - return - - # 格式化返回消息 - try: - # 构建回复消息 - result_msg = f"{data}\n" - yield event.plain_result(result_msg) - + # 获取交易行数据 + try: + items_data = fetch_jx3_jiaoyihang(params["server"], params["name"]) + + if not items_data or items_data == "无交易行数据": + yield f"在服务器【{params['server']}】未找到物品【{params['name']}】的交易行数据" + return + + # 加载模板 + try: + template_content = load_template("jiaoyihang.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + yield "系统错误:模板文件不存在" + return + + # 准备模板渲染数据 + render_data = { + "items": items_data, + "server": params["server"], + "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + + # 渲染为图片 - 可能需要调整选项以适应完整HTML文档 + options = { + "clip": { + "x": 0, + "y": 0, + "width": 800, + "height": 600 + } + } + + url = await self.html_render(template_content, render_data, options) + yield event.image_result(url) + except Exception as e: - logger.error(f"处理数据时出错: {e}") - yield event.plain_result("处理接口返回信息时出错") + logger.error(f"交易行查询出错: {e}") + yield "查询交易行数据时出错,请稍后再试" async def terminate(self): """可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。""" diff --git a/templates/jiaoyihang.html b/templates/jiaoyihang.html new file mode 100644 index 0000000..d3fcc93 --- /dev/null +++ b/templates/jiaoyihang.html @@ -0,0 +1,107 @@ + + + + + 剑网3交易行价格查询 + + + +

剑网3交易行价格查询

+ +
+ 共找到 {{ items|length }} 件物品 | 服务器: {{ server }} +
+ + + + + + + + + + + {% for item in items %} + + + + + + {% endfor %} + +
物品名称最低价样本数
{{ item.name }}{{ item.price }}{{ item.sample_size }}
+ + + + \ No newline at end of file diff --git a/templates/simple_test.html b/templates/simple_test.html new file mode 100644 index 0000000..8d3b0cb --- /dev/null +++ b/templates/simple_test.html @@ -0,0 +1,6 @@ +
+

测试页面

+

服务器: {{ server }}

+

物品数量: {{ items|length }}

+

时间: {{ update_time }}

+
\ No newline at end of file