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

+6 -8
View File
@@ -13,7 +13,7 @@ from loguru import logger
from qqbotsdk import EventEmitter, main
from qqbotsdk.api import BotApi, button, keyboard
from qqbotsdk.events import Event
from qqbotsdk.payloads import C2CMessage, GroupAtMessage, Interaction
from qqbotsdk.payloads import C2CMessage, GroupAddRobot, GroupAtMessage, Interaction
ee = EventEmitter()
@@ -74,17 +74,15 @@ async def on_button_click(inter: Interaction, event: Event, api: BotApi) -> None
@ee.on("GROUP_ADD_ROBOT")
async def on_robot_added(event: Event, api: BotApi) -> None:
group_openid = event.group_id
async def on_robot_added(added: GroupAddRobot, event: Event, api: BotApi) -> None:
# 入群是事件而非消息:用信封顶层的事件 id 作 event_id 被动回复(拿不到则跳过)
event_id = event.event_id
if not (group_openid and event_id):
logger.info(f"机器人加入群聊 {group_openid}(无事件 ID,跳过欢迎语)")
if not (added.group_openid and event.event_id):
logger.info(f"机器人加入群聊 {added.group_openid}(无事件 ID,跳过欢迎语)")
return
await api.post_group_message(
group_openid,
added.group_openid,
content="大家好,我是本群机器人,@我即可体验~",
event_id=event_id,
event_id=event.event_id,
)