nonebot2 icon indicating copy to clipboard operation
nonebot2 copied to clipboard

Adapter: nonebot-adapter-vocechat

Open 5656565566 opened this issue 7 months ago • 1 comments

适配器名称

nonebot-adapter-vocechat

适配器描述

Vocechat 协议适配器

PyPI 项目名

nonebot-adapter-vocechat

适配器 import 包名

nonebot.adapters.vocechat

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

https://github.com/5656565566/nonebot-adapter-vocechat

标签

[]

5656565566 avatar Jun 16 '25 07:06 5656565566

📃 商店发布检查结果

Adapter: nonebot-adapter-vocechat

主页

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

详情
  • ✅ 项目 主页 返回状态码 200。
  • ✅ 项目 nonebot-adapter-vocechat 已发布至 PyPI。
  • ✅ 版本号: 0.1.6。
  • ✅ 发布时间:2025-07-30 18:38:43 CST。
  • 历史测试
  • 2025-08-13 13:54:39 CST
  • 2025-07-30 19:05:56 CST
  • 2025-07-30 11:41:20 CST
  • 2025-07-26 14:20:57 CST
  • 2025-07-26 14:02:22 CST
  • 2025-07-19 15:07:33 CST
  • 2025-07-18 20:24:21 CST
  • 2025-07-18 20:19:08 CST
  • 2025-07-18 19:15:58 CST
  • 2025-06-25 20:46:31 CST

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

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

    💪 Powered by NoneFlow

    noneflow[bot] avatar Jun 16 '25 07:06 noneflow[bot]

    适配器依赖不应该包含 nonebot2 驱动器。适配器的 bot_connect 应该在 self.on_ready 中进行,否则 hook 无法正确执行。

    此处 bot 为什么要修改 call api 逻辑?https://github.com/5656565566/nonebot-adapter-vocechat/blob/5621940c5077f7b18883ac41685089c95ef64c3c/nonebot/adapters/vocechat/bot.py#L35-L63 你应该在 adapter 中去做相应处理而不是在 bot 中,这样会影响 hook 的执行。其他调用的地方也应该对应修改。

    event 类型的 name 和 type 不得为空,要么别提供默认值 https://github.com/5656565566/nonebot-adapter-vocechat/blob/5621940c5077f7b18883ac41685089c95ef64c3c/nonebot/adapters/vocechat/event.py#L13-L19

    另外请阅读适配器规范 https://github.com/nonebot/nonebot2/issues/2435 对适配器代码自检

    yanyongyu avatar Jun 25 '25 07:06 yanyongyu

    适配器依赖不应该包含 nonebot2 驱动器。适配器的 bot_connect 应该在 self.on_ready 中进行,否则 hook 无法正确执行。

    此处 bot 为什么要修改 call api 逻辑?https://github.com/5656565566/nonebot-adapter-vocechat/blob/5621940c5077f7b18883ac41685089c95ef64c3c/nonebot/adapters/vocechat/bot.py#L35-L63 你应该在 adapter 中去做相应处理而不是在 bot 中,这样会影响 hook 的执行。其他调用的地方也应该对应修改。

    event 类型的 name 和 type 不得为空,要么别提供默认值 https://github.com/5656565566/nonebot-adapter-vocechat/blob/5621940c5077f7b18883ac41685089c95ef64c3c/nonebot/adapters/vocechat/event.py#L13-L19

    另外请阅读适配器规范 #2435 对适配器代码自检

    已修改

    5656565566 avatar Jun 25 '25 12:06 5656565566

    我先提几点

    1. 你既然在 Message.extract_mentions 有所谓的 mention消息段,为什么不在MessageSegment定义方法?
    2. 你的事件消息为什么要在 get_message里调用所谓的get_detail,而不是去使用pydantic的model_validator?
    3. 请解释所谓的消息回复事件是什么?为什么你要自己设置一个reply_id?
    4. 消息编辑与消息撤回应属于 notice事件而非message事件,不然你消息撤回将同样触发指令
    5. 为什么你的bot.send_message还需要传入事件类?作为接口你为什么不把从event上获取的属性当作参数?

    RF-Tar-Railt avatar Jul 18 '25 11:07 RF-Tar-Railt

    我先提几点

    1. 你既然在 Message.extract_mentions 有所谓的 mention消息段,为什么不在MessageSegment定义方法?
    2. 你的事件消息为什么要在 get_message里调用所谓的get_detail,而不是去使用pydantic的model_validator?
    3. 请解释所谓的消息回复事件是什么?为什么你要自己设置一个reply_id?
    4. 消息编辑与消息撤回应属于 notice事件而非message事件,不然你消息撤回将同样触发指令
    5. 为什么你的bot.send_message还需要传入事件类?作为接口你为什么不把从event上获取的属性当作参数?

    感谢指导

    关于 1 2 4 点 正在进行相关的修改, 关于第 3 点,消息回复事件对应的是平台中的一个推送类型 https://doc.voce.chat/zh-cn/bot/bot-and-webhook#回复消息 我正在使用 MessageEvent 替代它并且赋值 reply 符合适配器标准 关于第 5 点,是否指的是 send_message 一般只需要从event 中提取的相关参数 比如改成

    async def send_message(
        self,
        message: Message,
        *,
        from_uid: int,
        target: Target,
        reply: Optional[int] = None,
        **kwargs: Any
    ) -> Any:
    

    这种

    5656565566 avatar Jul 18 '25 12:07 5656565566

    我先提几点

    1. 你既然在 Message.extract_mentions 有所谓的 mention消息段,为什么不在MessageSegment定义方法?
    2. 你的事件消息为什么要在 get_message里调用所谓的get_detail,而不是去使用pydantic的model_validator?
    3. 请解释所谓的消息回复事件是什么?为什么你要自己设置一个reply_id?
    4. 消息编辑与消息撤回应属于 notice事件而非message事件,不然你消息撤回将同样触发指令
    5. 为什么你的bot.send_message还需要传入事件类?作为接口你为什么不把从event上获取的属性当作参数?

    感谢指导

    关于 1 2 4 点 正在进行相关的修改, 关于第 3 点,消息回复事件对应的是平台中的一个推送类型 https://doc.voce.chat/zh-cn/bot/bot-and-webhook#回复消息 我正在使用 MessageEvent 替代它并且赋值 reply 符合适配器标准 关于第 5 点,是否指的是 send_message 一般只需要从event 中提取的相关参数 比如改成

    async def send_message(
        self,
        message: Message,
        *,
        from_uid: int,
        target: Target,
        reply: Optional[int] = None,
        **kwargs: Any
    ) -> Any:
    

    这种

    对的,然后写好 docstring

    RF-Tar-Railt avatar Jul 18 '25 12:07 RF-Tar-Railt

    我先提几点

    1. 你既然在 Message.extract_mentions 有所谓的 mention消息段,为什么不在MessageSegment定义方法?
    2. 你的事件消息为什么要在 get_message里调用所谓的get_detail,而不是去使用pydantic的model_validator?
    3. 请解释所谓的消息回复事件是什么?为什么你要自己设置一个reply_id?
    4. 消息编辑与消息撤回应属于 notice事件而非message事件,不然你消息撤回将同样触发指令
    5. 为什么你的bot.send_message还需要传入事件类?作为接口你为什么不把从event上获取的属性当作参数?

    感谢指导 关于 1 2 4 点 正在进行相关的修改, 关于第 3 点,消息回复事件对应的是平台中的一个推送类型 https://doc.voce.chat/zh-cn/bot/bot-and-webhook#回复消息 我正在使用 MessageEvent 替代它并且赋值 reply 符合适配器标准 关于第 5 点,是否指的是 send_message 一般只需要从event 中提取的相关参数 比如改成 async def send_message( self, message: Message, *, from_uid: int, target: Target, reply: Optional[int] = None, **kwargs: Any ) -> Any:

    这种

    对的,然后写好 docstring

    相关修改已完成

    5656565566 avatar Jul 19 '25 07:07 5656565566

    https://github.com/5656565566/nonebot-adapter-vocechat/blob/9138c2c82d2cdad0c7a3921e72ea7cc9849abb78/nonebot/adapters/vocechat/event.py#L93-L98 这段为什么不放在 check_at_me里

    另外你的reply并没有处理。event.reply应该像其他适配器那样是一个特殊的类,包含reply_id与reply_message这种字段。赋值在 _check_reply内进行

    RF-Tar-Railt avatar Jul 26 '25 06:07 RF-Tar-Railt

    https://github.com/5656565566/nonebot-adapter-vocechat/blob/9138c2c82d2cdad0c7a3921e72ea7cc9849abb78/nonebot/adapters/vocechat/event.py#L93-L98 这段为什么不放在 check_at_me里

    另外你的reply并没有处理。event.reply应该像其他适配器那样是一个特殊的类,包含reply_id与reply_message这种字段。赋值在 _check_reply内进行

    请问是把相关的判断放在 check_at_me 里面然后 is_tome 直接使用 event.to_me 判断吗?

    event.reply 目前我放的是 reply_id 因为这个平台没有 api 给 bot 获取被回复的原消息 这样的话可能 reply_message 之类的只能 None ,也可以吗

    5656565566 avatar Jul 26 '25 06:07 5656565566

    https://github.com/5656565566/nonebot-adapter-vocechat/blob/9138c2c82d2cdad0c7a3921e72ea7cc9849abb78/nonebot/adapters/vocechat/event.py#L93-L98 这段为什么不放在 check_at_me里

    另外你的reply并没有处理。event.reply应该像其他适配器那样是一个特殊的类,包含reply_id与reply_message这种字段。赋值在 _check_reply内进行

    请问是把相关的判断放在 check_at_me 里面然后 is_tome 直接使用 event.to_me 判断吗?

    event.reply 目前我放的是 reply_id 因为这个平台没有 api 给 bot 获取被回复的原消息 这样的话可能 reply_message 之类的只能 None ,也可以吗

    第一点是对的

    第二点你可以尝试自己维护一个缓存存id对message的

    RF-Tar-Railt avatar Jul 30 '25 03:07 RF-Tar-Railt

    https://github.com/5656565566/nonebot-adapter-vocechat/blob/9138c2c82d2cdad0c7a3921e72ea7cc9849abb78/nonebot/adapters/vocechat/event.py#L93-L98 这段为什么不放在 check_at_me里 另外你的reply并没有处理。event.reply应该像其他适配器那样是一个特殊的类,包含reply_id与reply_message这种字段。赋值在 _check_reply内进行

    请问是把相关的判断放在 check_at_me 里面然后 is_tome 直接使用 event.to_me 判断吗? event.reply 目前我放的是 reply_id 因为这个平台没有 api 给 bot 获取被回复的原消息 这样的话可能 reply_message 之类的只能 None ,也可以吗

    第一点是对的

    第二点你可以尝试自己维护一个缓存存id对message的

    关于 to_me 的修改已经完成 新增reply类型目前功能上已经完成 但是这个平台的 reply 并不是消息段,而是一个和新消息不同的 Webhook 推送 在 _parse_event 解析 好于新增一个 check_reply (那只能使用一个临时的字段 或 一个无法真正发送的 reply 消息段) 不新增一个 _check_reply 是否是可以容忍的?

    5656565566 avatar Jul 30 '25 11:07 5656565566

    @5656565566 请在适配器发布完成后 PR 更新 README 中的适配器部分,参考已有适配器格式填写 仓库 协议 注释等信息

    yanyongyu avatar Aug 13 '25 05:08 yanyongyu