-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
按照约定实现位于 napcat 适配器
请开启新分支
具体参考abc定义
当前协议适配器不完整
一、关键概念与约定
- 核心抽象:
ProtocolABC(protocol_abc.py)定义了必须实现的方法和属性(例如protocol_name,api,msg_builder,self_id以及一系列 async 方法与解析方法)。 - 注册机制:实现类需定义
protocol_name(全局唯一),会被ProtocolMeta自动注册。 - 消息模型:使用
Message/MessageChain(IM.py)作为内部中立模型,需提供从/到“原始消息段(dict)”的转换。 - API 与 WebSocket 客户端:实现中应使用或包装
APIBase(为协议 API)并用AsyncWebSocketClient管理 WebSocket;登录后把 client 设置到 API(示例:self._api.set_client(client))。 - 事件分发:解析到的事件要返回
Event或None(_parse_event),并在打印/记录时尽量吞错(print_event不抛异常)。
二、必须实现的方法(简要)
按 ProtocolABC 约定实现(分组列举):
- 基础属性:
protocol_name,api,msg_builder,self_id - 基本发送/登录:
send_group_message,send_private_message,login,logout - 数据获取:
fetch_user,fetch_group,fetch_friends,fetch_groups,fetch_message,fetch_group_members,recall_message - 好友管理:
add_friend,delete_friend,block_user,unblock_user,set_friend_remark,accept_friend_request,reject_friend_request - 群管理:
create_group,set_group_admin,invite_to_group,kick_group_member,set_group_name,set_group_avatar,disband_group,transfer_group_ownership,leave_group - 个人资料:
set_self_nickname,set_self_avatar,set_self_signature,update_self_profile - 解析方法:
_parse_event,_parse_message,_parse_user,_parse_group - 辅助:
print_event(需吞并记录异常)
Tip: 若协议不支持某功能,一致性地返回
False或抛出NotImplementedError,并在文档里明确说明该行为(见NapcatProtocol的示例)。
三、实现细节与注意事项
- 协议名唯一性:
protocol_name必须唯一,否则ProtocolMeta会抛ValueError。 - 消息转换:
- 提供把
Message转为协议段的函数(例如_content_to_segments)。 - 提供把协议段解析为
MessageChain的函数(例如_parse_message_content),并尽量使用现有nodes和dto(参见 nodes)。
- 提供把
- 时间与原始数据:解析时间戳时要处理异常并回退到当前时间;保留
raw数据到Message.raw方便调试。 - 日志:使用模块 logger(如
logger = logging.getLogger("Protocol.<Name>")),打印结构化日志(可用LogFormats)。 - 异常处理:网络/解析错误处记录后返回合适类型(不要无意中破坏上层循环)。
print_event应保护上层不被异常影响。 - 异步与线程安全:遵循 async 定义(不要在 async 方法中阻塞),更新状态(如
self._self_id)要谨慎。 - 返回约定:远端 API 常返回 dict,检查
status或 data 字段(参见NapcatProtocol)。
注意:协议实现应保持行为一致与可测,优先参考
NapcatProtocol的实现细节与约定。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels