外观
CallBot简单
字数统计:359 字
阅读时长:1 分钟
💡 提醒
进行发送消息时需要获取当前准确的Bot实例,用于调用Bot.send()
但在某些情况下,可能函数嵌套的层数过多,外层的Bot实例一层一层传入较为麻烦
我们可以使用自带的Bot模块中的call_bot()
方法
找到当前的、准确的Bot实例
代码参考如下:
python
from gsuid_core.bot import call_bot
...
async def func(a: str, b: str):
# 假设这是一个嵌套很多层的函数,传参不太好修改
print(a)
print(b)
# 但是仍然想让bot在运行到该行时发送消息
bot = call_bot()
# 获取当前Bot实例,以及发送消息
await bot.send(f'{a} + {b}')
# 也可以写成一行
await call_bot().send(f'{a} + {b}')
这么做的好处:
- 可以避免变量
bot
在一层一层函数间传递,结构化代码并且避免过度耦合 - 某些代码历史缘故,不太好增加或删除传参,但又想发送消息
这么做的坏处:
- Debug时难以定位具体发送位置
- 会有一定性能损耗(存在查找当前frame存在的实例过程)
该方法不支持的!!:
- 你的当前函数运行于一个不存在于任何一个有效Bot的帧中
- 例如定时任务:无法直接使用
await call_bot().send()
,但是可以使用await call_bot().target_send()
- 例如某些工具函数,不由Bot响应
- 例如定时任务:无法直接使用