Compare commits

...

2 Commits

Author SHA1 Message Date
84f671741b 🐛 fix(command): 回调回复图片时解析本地文件路径
- 复用 message handler 的 _resolve_url 解析上传文件的相对路径
- 回调返回的 image/video/file url 若为已上传文件则补全为绝对路径
- 修复本地文件名被当作 URL 发送导致识别失败的问题
2026-05-03 00:51:07 +08:00
a7f52e33fb 🐛 fix(command): 回调超时从 10s 改为可配置,默认 180s
- 新增 COMMAND_CALLBACK_TIMEOUT 配置项,默认 180 秒
- 生图等耗时命令不再因超时中断
2026-05-03 00:37:16 +08:00
2 changed files with 7 additions and 5 deletions

View File

@@ -37,3 +37,4 @@ COMMAND_PREFIX: str = os.environ.get("COMMAND_PREFIX", "#")
COMMAND_LENGTH_MIN: int = int(os.environ.get("COMMAND_LENGTH_MIN", "2"))
COMMAND_LENGTH_MAX: int = int(os.environ.get("COMMAND_LENGTH_MAX", "4"))
COMMAND_CALLBACK_URL: str = os.environ.get("COMMAND_CALLBACK_URL", "")
COMMAND_CALLBACK_TIMEOUT: int = int(os.environ.get("COMMAND_CALLBACK_TIMEOUT", "180"))

View File

@@ -4,7 +4,8 @@ import re
import aiohttp
from ..config import COMMAND_CALLBACK_URL, COMMAND_LENGTH_MAX, COMMAND_LENGTH_MIN, COMMAND_PREFIX
from ..config import COMMAND_CALLBACK_TIMEOUT, COMMAND_CALLBACK_URL, COMMAND_LENGTH_MAX, COMMAND_LENGTH_MIN, COMMAND_PREFIX, UPLOAD_DIR
from ..handlers.message import _resolve_url
def build_command_pattern() -> re.Pattern:
@@ -64,7 +65,7 @@ async def send_command_callback(data: dict, event, api, logger) -> None:
async with session.post(
COMMAND_CALLBACK_URL,
json=data,
timeout=aiohttp.ClientTimeout(total=10),
timeout=aiohttp.ClientTimeout(total=COMMAND_CALLBACK_TIMEOUT),
) as resp:
if resp.status >= 400:
body = await resp.text()
@@ -128,9 +129,9 @@ async def _handle_reply(result: dict, msg_event, api, logger) -> None:
if msg_type == "text":
text_parts.append(msg.get("msg", ""))
elif msg_type == "image":
image_url = msg.get("url")
image_url = _resolve_url(msg.get("url", ""))
elif msg_type == "video":
video_url = msg.get("url")
video_url = _resolve_url(msg.get("url", ""))
elif msg_type == "file":
file_msgs.append(msg)
@@ -146,7 +147,7 @@ async def _handle_reply(result: dict, msg_event, api, logger) -> None:
await api.qq.post_private_array_msg(user_id=user_id, msg=reply_msg)
# 文件单独发
for fm in file_msgs:
url = fm.get("url", "")
url = _resolve_url(fm.get("url", ""))
filename = url.split("/")[-1]
if group_id:
await api.qq.send_group_file(group_id=group_id, file=url, name=filename)