-
-
Notifications
You must be signed in to change notification settings - Fork 566
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RFC: 适配器规范 #2435
Comments
Q: 如果对接形似 python-satori 或者极端一点的 avilla,网络通信的部分应如何处理? |
A: 适配器的网络通信部分针对的是适配器通过网络通信与对应平台交互的情况。若适配器使用的是另外的sdk,则适配器本体不关心网络部分。但是相应的,适配器应对sdk做类似处理(e.g. 挂载运行任务,处理异常返回) |
Q: 存疑的,例如 Telegram 平台中,对于调用某个 Bot 的指令,可以用
|
按ddl说法,这种情况的 @ 确实得移除(只要是 @ 当前bot自己的) |
可以在适配器编写教程中写一写吧 |
提案:对于存在 "回复消息" 的适配器,是否强制要求在消息段层面实现一个 MessageSegment.reply,或要求在 send 接口增加与 reply 相关的参数? |
我的评价是: |
新增:第 13条 |
更新第9条: |
希望能解决的问题
Nonebot现在的适配器很多,但是基本上都是各写各的,没有相对的统一结构,甚至存在代码质量的问题(e.g. Bilibili适配器)。
在这份issue中,我们提出了一个通用的适配器规范,其不会影响适配器的平台特性,并且能为用户提供更好的使用体验。
描述所需要的功能
以下规范依据文件名划分
adapter.py
exception.py
nonebot.exception
中的基础异常类型,声明适配器特定异常:event.py
Event
应存在time
字段,表示事件创建的时间。time 为datetime.datetime
类型。MessageEvent
应存在如下字段:to_me
: bool 类型,可选(因为主要是 is_tome 方法)。reply
: 一般为 reply 对应的原始消息/原始事件(由 reply 上的 msgid获取);同时也可以为自定义结构(e.g. ob12适配器下的Reply),但是应当挂载一个async def get_origin()
方法,以获取原始事件;若平台不存在回复元素,置空即可。message
/_message
: 适配器对应的 Message 类型。若原事件已存在 message字段并无法转换类型,则使用 _messageoriginal_message
: 适配器对应的 Message 类型,并且未经过 check_at_me, check_reply 等处理。message_id
: 消息id (有时与事件id等同),用于构造回复消息,撤回消息,编辑消息等操作;若平台不存在消息id,使用 "" 或随机生成即可。其中
_message
,original_message
可如下处理:bot.py
适配器应当在 handle_event内执行 check_reply, check_at_me, check_nickname。
reply
属性。在此之上,若回复的是 bot 自己的消息,则设 to_me 为真。适配器应当在 Bot 上编写常用的方法/接口,并写明每个接口的输入类型和输出类型。如果对接协议不存在或未允许扩展api,请将Bot的__getattr__方法明确写为不支持(
def __getattr__(self, item): raise NotImplementError
);否则需要编写 bot.pyi 或生成全部的可用方法,而不是完全让用户使用call_api。Bot 应声明自己的 adapter属性为适配器对应的 Adapter 类型:
message.py
MessageSegment.text
的 data 必须为{"text": xxx}
。utils.py
README.md
pyproject.toml
The text was updated successfully, but these errors were encountered: