fix(qqpush): 支持无@群图片推送

This commit is contained in:
2026-07-30 20:54:43 +08:00
parent 1118c0a6e1
commit f8e9544fd6
5 changed files with 109 additions and 36 deletions

View File

@@ -3,16 +3,16 @@ from fastapi import APIRouter, Request, HTTPException
from pydantic import BaseModel
import asyncio
from typing import Optional
from nonebot import get_driver, logger
from nonebot import logger
from .config import Config
from .text_parser import TextParser
from .image_render import ImageRenderer
from .sender import sender
from .utils import validate_token
# Module-level singleton: load font once, reuse across requests
_renderer: Optional['ImageRenderer'] = None
from .sender import sender
# Module-level singleton: load font once, reuse across requests
_renderer: Optional['ImageRenderer'] = None
def _get_renderer(config: Config) -> 'ImageRenderer':
global _renderer
@@ -36,8 +36,8 @@ class PushRequest(BaseModel):
group_id: int
"""接收消息的 QQ 群号"""
qq: int
"""被 @ QQ 号"""
qq: Optional[int] = None
"""可选的被 @ QQ 号;未传时仅发送群消息"""
text: str
"""通知文本(# 表示换行)"""
@@ -89,10 +89,7 @@ def create_routes(token: str, config: Config):
if not data.group_id:
raise HTTPException(status_code=400, detail="group_id 不能为空")
if not data.qq:
raise HTTPException(status_code=400, detail="qq 不能为空")
if not data.text or not isinstance(data.text, str):
if not data.text or not isinstance(data.text, str):
raise HTTPException(status_code=400, detail="text 不能为空且必须是字符串")
# 2. 检查 Bot 是否在线
@@ -117,10 +114,10 @@ def create_routes(token: str, config: Config):
logger.info("图片生成成功")
# 5. 发送消息
send_result = await sender.send_to_group(
group_id=data.group_id,
qq=data.qq,
image_base64=image_base64
send_result = await sender.send_to_group(
group_id=data.group_id,
image_base64=image_base64,
qq=data.qq,
)
if not send_result["success"]: