From 59ec5bacdedd80a32aa2cdbfc1bc8db319a84350 Mon Sep 17 00:00:00 2001 From: yanyongyu Date: Wed, 31 Mar 2021 21:20:07 +0800 Subject: [PATCH] :memo: update changelog --- docs/advanced/runtime-hook.md | 16 ++++++++++++++-- nonebot/adapters/_base.py | 2 +- nonebot/typing.py | 2 +- .../nonebot/adapters/cqhttp/bot.py | 2 +- .../nonebot/adapters/ding/bot.py | 2 +- pages/changelog.md | 3 +++ tests/test_plugins/test_api_hook.py | 6 ++++++ 7 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 tests/test_plugins/test_api_hook.py diff --git a/docs/advanced/runtime-hook.md b/docs/advanced/runtime-hook.md index 7d157891..f7e26be6 100644 --- a/docs/advanced/runtime-hook.md +++ b/docs/advanced/runtime-hook.md @@ -19,7 +19,7 @@ from nonebot import get_driver driver=get_driver() ``` -共分为四种函数: +共分为五种函数: ### 启动准备 @@ -61,6 +61,18 @@ async def do_something(bot: Bot): pass ``` +### bot api 调用钩子 + +这个钩子函数会在 `Bot` 调用 API 时运行。 + +```python +from nonebot.adapters import Bot + +@Bot.on_calling_api +async def handle_api_call(bot: Bot, api: str, data: Dict[str, Any]): + pass +``` + ## 事件处理钩子 这些钩子函数指的是影响 `nonebot2` 进行 `事件处理` 的函数。 @@ -71,7 +83,7 @@ async def do_something(bot: Bot): ::: -:::warning 注意 +:::warning 注意 1.在事件处理钩子函数中,与 `matcher` 运行状态相关的函数将不可用,如 `matcher.finish()` diff --git a/nonebot/adapters/_base.py b/nonebot/adapters/_base.py index d36407a9..264f69c7 100644 --- a/nonebot/adapters/_base.py +++ b/nonebot/adapters/_base.py @@ -156,7 +156,7 @@ class Bot(abc.ABC): await bot.call_api("send_msg", message="hello world") await bot.send_msg(message="hello world") """ - coros = list(map(lambda x: x(api, data), self._call_api_hook)) + coros = list(map(lambda x: x(self, api, data), self._call_api_hook)) if coros: try: logger.debug("Running CallingAPI hooks...") diff --git a/nonebot/typing.py b/nonebot/typing.py index c1dc008a..a9dccc35 100644 --- a/nonebot/typing.py +++ b/nonebot/typing.py @@ -71,7 +71,7 @@ T_WebSocketDisconnectionHook = Callable[["Bot"], Awaitable[None]] WebSocket 连接断开时执行的函数 """ -T_CallingAPIHook = Callable[[str, Dict[str, Any]], Awaitable[None]] +T_CallingAPIHook = Callable[["Bot", str, Dict[str, Any]], Awaitable[None]] T_EventPreProcessor = Callable[["Bot", "Event", T_State], Awaitable[None]] """ diff --git a/packages/nonebot-adapter-cqhttp/nonebot/adapters/cqhttp/bot.py b/packages/nonebot-adapter-cqhttp/nonebot/adapters/cqhttp/bot.py index a30e2d0a..bea0bcc3 100644 --- a/packages/nonebot-adapter-cqhttp/nonebot/adapters/cqhttp/bot.py +++ b/packages/nonebot-adapter-cqhttp/nonebot/adapters/cqhttp/bot.py @@ -396,7 +396,7 @@ class Bot(BaseBot): - ``NetworkError``: 网络错误 - ``ActionFailed``: API 调用失败 """ - return super().call_api(api, **data) + return await super().call_api(api, **data) @overrides(BaseBot) async def send(self, diff --git a/packages/nonebot-adapter-ding/nonebot/adapters/ding/bot.py b/packages/nonebot-adapter-ding/nonebot/adapters/ding/bot.py index 410515bb..8f2880a1 100644 --- a/packages/nonebot-adapter-ding/nonebot/adapters/ding/bot.py +++ b/packages/nonebot-adapter-ding/nonebot/adapters/ding/bot.py @@ -193,7 +193,7 @@ class Bot(BaseBot): - ``NetworkError``: 网络错误 - ``ActionFailed``: API 调用失败 """ - return super().call_api(api, event=event, **data) + return await super().call_api(api, event=event, **data) @overrides(BaseBot) async def send(self, diff --git a/pages/changelog.md b/pages/changelog.md index ab414e00..4315c502 100644 --- a/pages/changelog.md +++ b/pages/changelog.md @@ -11,6 +11,9 @@ sidebar: auto - 修复 `pydantic 1.8` 导致的 `alias` 问题 - 修改 `cqhttp` `ding` `session id`,不再允许跨群 - 修改 `shell_command` 存储 message +- 修复 `cqhttp` 检查 reply 失败退出 +- 新增 `call_api` hook 接口 +- 优化 `import hook` ## v2.0.0a11 diff --git a/tests/test_plugins/test_api_hook.py b/tests/test_plugins/test_api_hook.py new file mode 100644 index 00000000..1849daf9 --- /dev/null +++ b/tests/test_plugins/test_api_hook.py @@ -0,0 +1,6 @@ +from nonebot.adapters import Bot + + +@Bot.on_calling_api +async def call(bot: Bot, api: str, data: dict): + print(type(bot), api, data)