新增日志支持、卡片显示专辑封面、菜单去掉音源标注
- 日志:控制台 + logs/musicbot.log(按天轮转、保留 7 天), LOG_LEVEL/LOG_DIR 可配;目录不可写时退化为仅控制台; diagnose=False 避免把凭证写进日志 - 卡片用 Markdown 图片语法显示专辑封面(), 封面取自 MusicServer 的 img 字段(tx/wy 有、kw/kg 无) - 按钮 data 加第 5 段(封面 URL),解码兼容旧 4 段,已发出的按钮不失效 - 菜单去掉每首歌后的(音源)标注;卡片保留"来源:" - 测试补:封面渲染、无封面源、旧 data 兼容、LOG_LEVEL、日志落盘
This commit is contained in:
1 parent
7a8adb4571
commit
9bcdad7aa1
7 files changed
+162
-24
No files matched your search
+34
-1
@@ -1,6 +1,7 @@
|
||||
"""装配入口:注册命令并运行 bot。"""
|
||||
"""装配入口:配置日志、注册命令并运行 bot。"""
|
||||
|
||||
import asyncio
|
||||
import sys
|
||||
|
||||
from aiohttp import ClientSession
|
||||
from loguru import logger
|
||||
@@ -9,9 +10,41 @@ from qqbotsdk import EventEmitter, run_loop
|
||||
from .config import BotConfig
|
||||
from .music import register
|
||||
|
||||
# 日志文件按天轮转、保留 7 天;目录写不进去时退化为仅控制台
|
||||
_LOG_RETENTION = "7 days"
|
||||
_LOG_FORMAT = (
|
||||
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
|
||||
"<level>{level: <8}</level> | "
|
||||
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
|
||||
"<level>{message}</level>"
|
||||
)
|
||||
|
||||
|
||||
def setup_logging(config: BotConfig) -> None:
|
||||
"""日志同时输出到控制台与 logs/musicbot.log(按天轮转)。"""
|
||||
logger.remove() # 去掉 loguru 默认的 stderr handler,统一由这里接管
|
||||
logger.add(sys.stderr, level=config.log_level, format=_LOG_FORMAT)
|
||||
try:
|
||||
config.log_dir.mkdir(parents=True, exist_ok=True)
|
||||
logger.add(
|
||||
config.log_dir / "musicbot.log",
|
||||
level=config.log_level,
|
||||
format=_LOG_FORMAT,
|
||||
rotation="00:00", # 每天零点切分
|
||||
retention=_LOG_RETENTION,
|
||||
encoding="utf-8",
|
||||
enqueue=True, # 多任务写入串行化,避免并发写坏文件
|
||||
backtrace=True,
|
||||
diagnose=False, # 不回显变量值,避免把凭证写进日志
|
||||
)
|
||||
except OSError as e:
|
||||
logger.warning(f"日志目录不可写({config.log_dir}),仅输出到控制台: {e}")
|
||||
|
||||
|
||||
async def amain() -> None:
|
||||
config = BotConfig.load()
|
||||
setup_logging(config)
|
||||
logger.info(f"musicbot 启动,日志级别 {config.log_level}")
|
||||
ee = EventEmitter() # 队列由 emitter 自建,run_loop 复用同一实例
|
||||
# bot 自建连接池:直链探测不受 SDK 的 TIMEOUT 约束
|
||||
async with ClientSession() as http:
|
||||
|
||||
Reference in new issue
Block a user