mirror of
https://github.com/nonebot/nonebot2.git
synced 2025-03-03 12:24:21 +08:00
160 lines
4.7 KiB
Markdown
160 lines
4.7 KiB
Markdown
---
|
||
sidebar_position: 8
|
||
description: 在特定的生命周期中执行代码
|
||
|
||
options:
|
||
menu:
|
||
weight: 90
|
||
category: advanced
|
||
---
|
||
|
||
# 钩子函数
|
||
|
||
> [钩子编程](https://zh.wikipedia.org/wiki/%E9%92%A9%E5%AD%90%E7%BC%96%E7%A8%8B)(hooking),也称作“挂钩”,是计算机程序设计术语,指通过拦截软件模块间的函数调用、消息传递、事件传递来修改或扩展操作系统、应用程序或其他软件组件的行为的各种技术。处理被拦截的函数调用、事件、消息的代码,被称为钩子(hook)。
|
||
|
||
在 NoneBot 中有一系列预定义的钩子函数,可以分为两类:**全局钩子函数**和**事件处理钩子函数**,这些钩子函数可以用装饰器的形式来使用。
|
||
|
||
## 全局钩子函数
|
||
|
||
全局钩子函数是指 NoneBot 针对其本身运行过程的钩子函数。
|
||
|
||
这些钩子函数是由驱动器来运行的,故需要先[获得全局驱动器](./driver.md#获取驱动器)。
|
||
|
||
### 启动准备
|
||
|
||
这个钩子函数会在 NoneBot 启动时运行。很多时候,我们并不希望在模块被导入时就执行一些耗时操作,如:连接数据库,这时候我们可以在这个钩子函数中进行这些操作。
|
||
|
||
```python
|
||
from nonebot import get_driver
|
||
|
||
driver = get_driver()
|
||
|
||
@driver.on_startup
|
||
async def do_something():
|
||
pass
|
||
```
|
||
|
||
### 终止处理
|
||
|
||
这个钩子函数会在 NoneBot 终止时运行。我们可以在这个钩子函数中进行一些清理工作,如:关闭数据库连接。
|
||
|
||
```python
|
||
from nonebot import get_driver
|
||
|
||
driver = get_driver()
|
||
|
||
@driver.on_shutdown
|
||
async def do_something():
|
||
pass
|
||
```
|
||
|
||
### Bot 连接处理
|
||
|
||
这个钩子函数会在任何协议适配器连接 `Bot` 对象至 NoneBot 时运行。支持依赖注入,可以直接注入 `Bot` 对象。
|
||
|
||
```python
|
||
from nonebot import get_driver
|
||
|
||
driver = get_driver()
|
||
|
||
@driver.on_bot_connect
|
||