fix(onebot): validate WebSocket protocol with independent mock peer (#2653)

* feat(onebot): support main-port reverse and forward WebSocket connections

* fix(onebot): keep protocol metadata out of business events

* test(onebot): validate WS events and APIs against independent protocol peer

---------

Co-authored-by: Hyu <[email protected]>
This commit is contained in:
RockChinQ
2026-10-12 13:59:25 +08:00
committed by GitHub
co-authored by Hyu
parent 417c552694
commit ec021c3c41
5 changed files with 416 additions and 4 deletions
@@ -111,11 +111,17 @@ class AiocqhttpEventConverter(abstract_platform_adapter.AbstractEventConverter):
type='message.deleted',
adapter_name='onebot-v11',
message_id=getattr(event, 'message_id', ''),
operator=AiocqhttpEventConverter.user(getattr(event, 'operator_id', None)),
operator=AiocqhttpEventConverter.user(
getattr(event, 'user_id', None)
if notice_type == 'friend_recall'
else getattr(event, 'operator_id', None)
),
chat_type=platform_entities.ChatType.GROUP
if notice_type == 'group_recall'
else platform_entities.ChatType.PRIVATE,
chat_id=getattr(event, 'group_id', getattr(event, 'user_id', '')),
chat_id=getattr(event, 'group_id', '')
if notice_type == 'group_recall'
else getattr(event, 'user_id', ''),
group=AiocqhttpEventConverter.group_from_event(event) if notice_type == 'group_recall' else None,
timestamp=float(getattr(event, 'time', 0) or 0),
source_platform_object=event,
@@ -39,7 +39,7 @@ class OneBotConnection:
await self.validate()
await self.send(json.dumps({'action': action, 'params': params, 'echo': echo}))
result = await future
if result.get('status') not in ('ok', 'async') or result.get('retcode') not in (0, 1):
if (result.get('status'), result.get('retcode')) not in (('ok', 0), ('async', 1)):
raise ActionFailed(result)
return result.get('data')
finally: