rr
This commit is contained in:
@@ -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()
|
||||
@@ -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"
|
||||
items_data = fetch_jx3_jiaoyihang(params["server"], params["name"])
|
||||
|
||||
yield event.plain_result(result_msg)
|
||||
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):
|
||||
"""可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。"""
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>剑网3交易行价格查询</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Microsoft YaHei', sans-serif;
|
||||
width: 700px;
|
||||
background-color: #f9f9f9;
|
||||
padding: 15px;
|
||||
margin: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.header {
|
||||
color: #333;
|
||||
text-align: center;
|
||||
border-bottom: 2px solid #4a90e2;
|
||||
padding-bottom: 8px;
|
||||
margin: 0 0 15px 0;
|
||||
font-size: 24px;
|
||||
}
|
||||
.summary {
|
||||
background-color: #4a90e2;
|
||||
color: white;
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 12px;
|
||||
font-size: 16px;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
background-color: white;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
font-size: 14px;
|
||||
}
|
||||
th {
|
||||
background-color: #4a90e2;
|
||||
color: white;
|
||||
padding: 8px;
|
||||
text-align: left;
|
||||
border-bottom: 2px solid #ddd;
|
||||
}
|
||||
td {
|
||||
padding: 8px;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
tr:nth-child(even) {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
.item-name {
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
max-width: 350px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.price {
|
||||
text-align: right;
|
||||
color: #e74c3c;
|
||||
font-weight: bold;
|
||||
}
|
||||
.sample {
|
||||
text-align: center;
|
||||
color: #7f8c8d;
|
||||
}
|
||||
.footer {
|
||||
margin-top: 12px;
|
||||
text-align: center;
|
||||
color: #7f8c8d;
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1 class="header">剑网3交易行价格查询</h1>
|
||||
|
||||
<div class="summary">
|
||||
共找到 <strong>{{ items|length }}</strong> 件物品 | 服务器: {{ server }}
|
||||
</div>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>物品名称</th>
|
||||
<th style="text-align: right;">最低价</th>
|
||||
<th style="text-align: center;">样本数</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for item in items %}
|
||||
<tr>
|
||||
<td class="item-name">{{ item.name }}</td>
|
||||
<td class="price">{{ item.price }}</td>
|
||||
<td class="sample">{{ item.sample_size }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="footer">
|
||||
数据更新时间: {{ update_time }}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<div>
|
||||
<h1>测试页面</h1>
|
||||
<p>服务器: {{ server }}</p>
|
||||
<p>物品数量: {{ items|length }}</p>
|
||||
<p>时间: {{ update_time }}</p>
|
||||
</div>
|
||||
Reference in New Issue
Block a user