11
This commit is contained in:
+2
-4
@@ -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
@@ -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
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user