nonebot2 icon indicating copy to clipboard operation
nonebot2 copied to clipboard

Adapter: nonebot-adapter-efchat

Open molanp opened this issue 7 months ago • 9 comments

适配器名称

nonebot-adapter-efchat

适配器描述

适用于EFChat(恒五聊)聊天室的nonebot适配器

PyPI 项目名

nonebot-adapter-efchat

适配器 import 包名

nonebot.adapters.efchat

适配器项目仓库/主页链接

https://github.com/molanp/nonebot_adapter_efchat

标签

[{"label":"EFChat","color":"#ac6161"},{"label":"恒五聊","color":"#cc99ff"}]

molanp avatar May 22 '25 18:05 molanp

📃 商店发布检查结果

Adapter: nonebot-adapter-efchat

主页

✅ 所有测试通过,一切准备就绪!

详情
  • ✅ 项目 主页 返回状态码 200。
  • ✅ 项目 nonebot-adapter-efchat 已发布至 PyPI。
  • ✅ 标签: EFChat-#ac6161, 恒五聊-#cc99ff。
  • ✅ 版本号: 0.1.1。
  • ✅ 发布时间:2025-06-16 20:23:18 CST。
  • 历史测试
  • 2025-06-25 15:39:30 CST
  • 2025-06-25 15:32:05 CST
  • 2025-06-25 15:29:08 CST
  • 2025-06-25 15:27:14 CST
  • 2025-06-25 15:24:21 CST
  • 2025-06-25 15:23:19 CST
  • 2025-06-25 15:04:31 CST
  • 2025-06-17 16:43:56 CST

  • 💡 如需修改信息,请直接修改 issue,机器人会自动更新检查结果。 💡 当插件加载测试失败时,请发布新版本后勾选插件测试勾选框重新运行插件测试。

    ♻️ 评论已更新至最新检查结果

    💪 Powered by NoneFlow

    noneflow[bot] avatar May 22 '25 18:05 noneflow[bot]

    发布前请先阅读一下 #2435 ,确认无误后回复一下。

    这里的 tome 不正确,建议在 check to me 做判断然后写入 event 字段,不应该直接读取全局配置,会出错。 https://github.com/molanp/nonebot_adapter_efchat/blob/3b219706303f77d7c60c2a75b27e3f4cea2f92a0/src/nonebot/adapters/efchat/event.py#L28-L41

    这里event的校验/后处理应该使用 pydantic validator,你可以参考其他适配器通过 from nonebot.compat import model_validator 实现。

    adapter 的 startup 创建连接应该使用 self.on_ready(xxx) 。需要在启动完成后发起连接。

    适配器 import 包名不对吧,应该是 nonebot.adapters.efchat ?

    cc @RF-Tar-Railt

    yanyongyu avatar May 29 '25 02:05 yanyongyu

    已完成规范化处理

    molanp avatar May 30 '25 11:05 molanp

    对于网络请求,适配器不应当依赖特定的网络层框架/库(e.g. httpx)。 适配器的网络请求或 ws 连接应通过驱动器的 Request 进行。若存在所使用的驱动器无法满足平台条件的情况,[1] 条可忽略。

    请注意,你的适配器强依赖了httpx和websockets。请修改

    修改提示: 使用nonebot内置的driver.Request进行网络请求

    RF-Tar-Railt avatar Jun 09 '25 11:06 RF-Tar-Railt

    完成

    molanp avatar Jun 09 '25 14:06 molanp

    1. https://github.com/molanp/nonebot_adapter_efchat/blob/main/src/nonebot/adapters/efchat/event.py#L22-L23 这里你应该同时写好 pyd1 和 pyd2的写法。参考 https://github.com/nonebot/adapter-milky/blob/67afc24ac0ca120ff2dd5884f36f3ddcc1afdd95/src/nonebot/adapters/milky/model/base.py#L32-L47
    2. 各事件的 post_type 是什么?消息事件的 message_type 又是什么? 这些如果是不属于 EFChat 协议的东西请删掉
    3. 根据你 https://github.com/molanp/nonebot_adapter_efchat/blob/main/src/nonebot/adapters/efchat/adapter.py#L137 的代码, event.self_id 是你手动传入的,那么你的事件基类就不应该有 self_id 属性。整个适配器下你只在检查 At 自身消息段时使用了这个属性,请改为使用 bot.self_id。
    4. https://github.com/molanp/nonebot_adapter_efchat/blob/main/src/nonebot/adapters/efchat/adapter.py#L102 https://github.com/molanp/nonebot_adapter_efchat/blob/main/src/nonebot/adapters/efchat/adapter.py#L139-L147 https://github.com/molanp/nonebot_adapter_efchat/blob/main/src/nonebot/adapters/efchat/adapter.py#L177-L188 请注意,你这样写是未定义行为。Bot实例被创建且经过 bot_connect 后应当在会话中保持一致,而不是像你这样反复实例化新的Bot。请去参考其他适配的写法。
    5. https://github.com/molanp/nonebot_adapter_efchat/blob/main/src/nonebot/adapters/efchat/bot.py#L128-L129 这段代码无用。
    6. https://github.com/molanp/nonebot_adapter_efchat/blob/main/src/nonebot/adapters/efchat/bot.py#L82-L112 你的意思是EFChat不能进行主动消息吗?请注意,at_senderreply_message 原则上应该只能用于 bot.send 中。
    7. 消息事件中默认值 Message("") 请改掉:
      • message 应当使用 model_validator(mode="before") 去读取原始数据
      • reply 直接使用 None
      • message_id 请使用 None, 或者自行设置自增id/随机id
    8. https://github.com/molanp/nonebot_adapter_efchat/blob/main/src/nonebot/adapters/efchat/adapter.py#L137 你的事件解析应该使用 nonebot.compat.type_validate_python 来进行。同理,你事件模型中所有的 def __init__ 都应该删除,而是去使用 model_validator(mode="before") 来进行对应的数据处理。

    RF-Tar-Railt avatar Jun 14 '25 05:06 RF-Tar-Railt

    感谢您指出问题,现已规范 应该没问题了吧(?

    molanp avatar Jun 14 '25 16:06 molanp

    感谢您指出问题,现已规范 应该没问题了吧(?

            isinstance(event, ChannelMessageEvent | WhisperMessageEvent)
    

    bot.py的129行这里还得改。 A | B是py3.10以上的语法,而你的适配器最低支持版本是py3.9

    RF-Tar-Railt avatar Jun 14 '25 16:06 RF-Tar-Railt

    已更改

    6.https://github.com/molanp/nonebot_adapter_efchat/blob/main/src/nonebot/adapters/efchat/bot.py#L82-L112 你的意思是EFChat不能进行主动消息吗?请注意,at_sender 和 reply_message 原则上应该只能用于 bot.send 中。

    这个是因为,经过测试,发送私聊消息(主动和被动)的确收到了服务器返回的发送成功的数据包,但是聊天中对方是看不到的

    molanp avatar Jun 14 '25 16:06 molanp

    send_xxx_message你还是需要传入事件,即便只是拿事件的id整reply?我的建议是最好将这两个api整成事件无关的

    RF-Tar-Railt avatar Jun 25 '25 07:06 RF-Tar-Railt

    当前这两个方法已脱离event依赖,请问一下async def send(方法是否也不能依赖event?

    molanp avatar Jun 25 '25 07:06 molanp

    当前这两个方法已脱离event依赖,请问一下async def send(方法是否也不能依赖event?

    bot.send反而是需要依赖event的(

    RF-Tar-Railt avatar Jun 25 '25 07:06 RF-Tar-Railt

    好的

    请注意,at_sender 和 reply_message 原则上应该只能用于 bot.send 中。

    这个的意思是除了bot.send以外,其余发送方法均不能携带at_senderreply_message参数吗

    molanp avatar Jun 25 '25 07:06 molanp

    好的

    请注意,at_sender 和 reply_message 原则上应该只能用于 bot.send 中。

    这个的意思是除了bot.send以外,其余发送方法均不能携带at_senderreply_message参数吗

    意思是原则上通过接口直接发送消息时,应该由用户自己拼MessageSegment.at和MessageSegment.at

    RF-Tar-Railt avatar Jun 25 '25 07:06 RF-Tar-Railt

    好的,已移除相关参数

    感谢指导

    molanp avatar Jun 25 '25 07:06 molanp

    @molanp 请在适配器发布后,提交 PR 补充 README 中的适配器部分,参考其他适配器填写格式。

    yanyongyu avatar Jun 25 '25 07:06 yanyongyu