This commit is contained in:
qsc
2026-02-21 18:02:39 +08:00
parent 208426a9e8
commit fb4f5e49da
10 changed files with 214 additions and 9 deletions
+2 -4
View File
@@ -1,13 +1,11 @@
# pyright: reportArgumentType=false
import asyncio
import json
import aiofiles
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.interval import IntervalTrigger
from astrbot.api.event import filter, AstrMessageEvent, MessageEventResult, MessageChain
from astrbot.api.star import Context, Star, register, StarTools
from astrbot.api.event import MessageChain
from astrbot.api.star import Context
from astrbot.api import logger
from astrbot.api import AstrBotConfig
+41 -1
View File
@@ -1,6 +1,8 @@
from pathlib import Path
from datetime import datetime,date
import aiofiles
import base64
import os
async def load_template(template_name: str) -> str:
"""
@@ -58,6 +60,7 @@ def week_to_num(week :str):
}
return week_map.get(week,None)
def compare_date_str(date_str: str) -> str:
"""
date_str 格式:YYYY-MM-DD
@@ -70,4 +73,41 @@ def compare_date_str(date_str: str) -> str:
elif d == today:
return "今天"
else:
return "将来"
return "将来"
def load_as_base64(icons_dir: str) -> dict[str, str]:
"""
将指定目录下的图标文件转换为 base64 字符串。
返回 {"文件名(不含扩展名)": "data:image/xxx;base64,xxx"} 的字典。
"""
supported_ext = {".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg", ".ico"}
icons = {}
for filename in os.listdir(icons_dir):
name, ext = os.path.splitext(filename)
if ext.lower() not in supported_ext:
continue
# 用原始文件名(系统实际存储的)打开文件
filepath = os.path.join(icons_dir, filename)
with open(filepath, "rb") as f:
data = base64.b64encode(f.read()).decode()
# 尝试修正显示用的 key(如果文件名是 GBK 乱码)
display_name = name
try:
display_name = name.encode("latin-1").decode("gbk")
except (UnicodeEncodeError, UnicodeDecodeError):
pass # 本来就是正确的 UTF-8
if ext.lower() == ".svg":
mime = "image/svg+xml"
elif ext.lower() == ".jpg":
mime = "image/jpeg"
else:
mime = f"image/{ext.lower().lstrip('.')}"
icons[display_name] = f"data:{mime};base64,{data}"
return icons
+3 -2
View File
@@ -51,7 +51,8 @@ class JX3Service:
"code": 0,
"msg": "功能函数未执行",
"data": {},
"temp": ""
"temp": "",
"icons": {}
}
@@ -1063,7 +1064,7 @@ class JX3Service:
# 4. 加载模板
try:
return_data["temp"] = await load_template("juesheqiyu.html")
return_data["temp"] = await load_template("test.html")
except FileNotFoundError as e:
logger.error(f"加载模板失败: {e}")
return_data["msg"] = "系统错误:模板文件不存在"
+3 -1
View File
@@ -13,11 +13,12 @@ from .bilei_data import BiLeidata
class MessageBuilder:
"""回复消息构建"""
def __init__(self, server: str, jx3api: JX3Service, bilei: BiLeidata, jx3at: AsyncTask):
def __init__(self, server: str, jx3api: JX3Service, bilei: BiLeidata, jx3at: AsyncTask, icons: dict[str, dict[str, str]]):
self.server = server
self.jx3api = jx3api
self.bilei = bilei
self.jx3at = jx3at
self.icons = icons
async def html_render(
@@ -68,6 +69,7 @@ class MessageBuilder:
"omit_background": False,
"type": "jpeg"
}
data["data"]["icons"] = self.icons
url = await self.html_render(data["temp"], data["data"], options=options)
await event.send(event.image_result(url))
else: