refactor!: Event 收敛为推送信封封装,删除字段名兼容属性

删除 Event 的 user_id/group_id/content/message_id 四个属性:它们是
"兼容群(openid)与频道两套字段名"的映射层,其中 user_id 还带着
旧版群消息 payload 顶层 from_user_id 的回退(现行格式发言人标识在
author 里,该回退永远轮不到)。Event 只保留信封语义:
.raw/.data/.typed/.type/.event_id,事件体字段一律标注 payload
dataclass(如 msg: GroupAtMessage)获取解析结果。

破坏性变更:event.group_id → msg.group_openid、event.message_id →
msg.id,以此类推;被动回复凭据分工不变——消息事件用事件体 d.id
(msg_id),其余事件用信封顶层 event_id。

迁移:examples/group_bot 入群欢迎改标注 GroupAddRobot(已确认
MusicBot 未使用被删属性);GUIDE/API 同步删除对应属性行;测试
重写为信封语义断言 + typed 解析断言。

107 测试全绿,ruff/pyright 干净。
This commit is contained in:
snowy-yang committed 2026-09-24 20:18:29 +08:00
1 parent 32d9438d31
commit 7e7dcbaa94
5 files changed
+32 -42

No files matched your search

+5 -5
View File
@@ -100,13 +100,13 @@ from qqbotsdk.payloads import GroupAtMessage
async def typed(msg: GroupAtMessage):
print(msg.group_openid, msg.user_openid, msg.content)
# 方式三:参数注入,标注组件类型即拿到实例
# 方式三:参数注入,标注组件类型即拿到实例(payload 与组件可任意组合)
from qqbotsdk.api import BotApi
from qqbotsdk.events import Event
from qqbotsdk.payloads import GroupAtMessage
@ee.on("GROUP_AT_MESSAGE_CREATE")
async def di(event: Event, api: BotApi):
await api.post_group_message(event.group_id, content="收到", msg_id=event.message_id)
async def di(msg: GroupAtMessage, api: BotApi):
await api.post_group_message(msg.group_openid, content="收到", msg_id=msg.id)
```
handler 参数按标注解析的完整规则:
@@ -114,7 +114,7 @@ handler 参数按标注解析的完整规则:
| 参数标注 | 得到 |
|---|---|
| payload dataclass(如 `GroupAtMessage`) | 解析后的 dataclass 对象;未收录事件回退原始 dict |
| `Event` | 事件封装对象(`.raw`/`.data`/`.typed`/`.user_id`/`.group_id`/`.content`/`.message_id`/`.event_id`) |
| `Event` | 事件封装对象,只含信封语义(`.raw`/`.data`/`.typed`/`.type`/`.event_id`);事件体字段请标注 payload dataclass 获取 |
| 组件类型(`BotApi`/`Session`/`Config` 等) | `emitter.services` 中按类型登记的实例;未登记回退传原始 d |
| 无标注 | 原始 d(即事件 dict) |