背景
TaleAI QQ 适配器不支持文件消息的接收和发送。KiraAI 已支持。
QQ 文件传输通过 OneBot 的 upload_group_file / upload_private_file API 实现。接收时需通过 get_group_file_url / get_private_file_url 获取文件下载地址。
建议修改
1. 扩展消息模型
@dataclass
class MessageContent:
# ...
files: List[dict] = field(default_factory=list)
# [{"url": "https://...", "name": "doc.pdf", "size": "12345"}]
2. 接收端解析
elif seg_type == "file":
file_name = data.get("file", "")
file_id = data.get("file_id", "")
file_size = data.get("file_size", "")
if is_group:
file_info = await api_call("get_group_file_url", {"group_id": group_id, "file_id": file_id})
else:
file_info = await api_call("get_private_file_url", {"file_id": file_id})
file_url = file_info.get("data", {}).get("url", "")
files.append({"url": file_url, "name": file_name, "size": file_size})
3. 发送端
for file in content.files:
file_param = file["url"] if file.get("url", "").startswith("http") else f"base64://{file['url']}"
file_name = file.get("name", "file")
if is_group:
await self.api_call("upload_group_file", {"group_id": int(target_id), "file": file_param, "name": file_name})
else:
await self.api_call("upload_private_file", {"user_id": int(target_id), "file": file_param, "name": file_name})
注意:文件发送不走普通 message 段,使用独立的上传 API,返回值获取方式不同。
4. 依赖
api_call 需先实现或完善(当前已有 api_call 方法,但仅封装了 get_group_member_list)
涉及文件
core/adapter/event.py — MessageContent 扩展
core/adapter/src/qq/adapter.py — 接收解析 + 发送
core/adapter/message_processor.py — ProcessedMessage 同步扩展
优先级
P2 — 实用性高,用户经常需要发送文件(如图片压缩包、日志等)
背景
TaleAI QQ 适配器不支持文件消息的接收和发送。KiraAI 已支持。
QQ 文件传输通过 OneBot 的
upload_group_file/upload_private_fileAPI 实现。接收时需通过get_group_file_url/get_private_file_url获取文件下载地址。建议修改
1. 扩展消息模型
2. 接收端解析
3. 发送端
注意:文件发送不走普通 message 段,使用独立的上传 API,返回值获取方式不同。
4. 依赖
api_call需先实现或完善(当前已有api_call方法,但仅封装了get_group_member_list)涉及文件
core/adapter/event.py—MessageContent扩展core/adapter/src/qq/adapter.py— 接收解析 + 发送core/adapter/message_processor.py—ProcessedMessage同步扩展优先级
P2 — 实用性高,用户经常需要发送文件(如图片压缩包、日志等)