mirror of
				https://github.com/nonebot/nonebot2.git
				synced 2025-10-30 06:26:41 +00:00 
			
		
		
		
	Done basic-configurations page
This commit is contained in:
		| @@ -2,6 +2,10 @@ | ||||
|  | ||||
| 到目前为止我们还在使用 NoneBot 的默认行为,在开始编写自己的插件之前,我们先尝试在配置文件上动动手脚,让 NoneBot 表现出不同的行为。 | ||||
|  | ||||
| ::: tip 提示 | ||||
| 本章的完整代码可以在 [awesome-bot-1](https://github.com/richardchien/none-bot/tree/master/docs/guide/code/awesome-bot-1) 查看。 | ||||
| ::: | ||||
|  | ||||
| ## 项目结构 | ||||
|  | ||||
| 要使用自定义配置的话,我们的机器人代码将不再只有一个文件(`bot.py`),这时候良好的项目结构开始变得重要了。 | ||||
| @@ -16,4 +20,114 @@ awesome-bot | ||||
|  | ||||
| 在后面几章中,我们将在此结构上进行扩展和改进。 | ||||
|  | ||||
| ## 编写自定义配置 | ||||
| ## 配置超级用户 | ||||
|  | ||||
| 上一章中我们知道 NoneBot 内置了 `echo` 和 `say` 命令,我们已经测试了 `echo` 命令,并且正确地收到了机器人的回复,现在来尝试向它发送一个 `say` 命令: | ||||
|  | ||||
| ``` | ||||
| /say [CQ:music,type=163,id=478490650] | ||||
| ``` | ||||
|  | ||||
| 可以预料,命令不会起任何效果,因为我们提到过,`say` 命令只有超级用户可以调用,而现在我们还没有将自己的 QQ 号配置为超级用户。 | ||||
|  | ||||
| 因此下面我们往 `config.py` 中填充如下内容: | ||||
|  | ||||
| ```python | ||||
| from none.default_config import * | ||||
|  | ||||
| SUPERUSERS = {12345678} | ||||
| ``` | ||||
|  | ||||
| 这里的第 1 行是从 NoneBot 的默认配置中导入所有项,通常这是必须的,除非你知道自己在做什么,否则始终应该在配置文件的开头写上这一行。 | ||||
|  | ||||
| 之后就是配置 `SUPERUSERS` 了,这个配置项的要求是值为 `int` 类型的**容器**,也就是说,可以是 `set`、`list`、`tuple` 等类型,元素类型为 `int`;`12345678` 是你想设置为超级用户的 QQ。 | ||||
|  | ||||
| `config.py` 写好之后,修改 `bot.py` 如下: | ||||
|  | ||||
| ```python {3,6} | ||||
| import none | ||||
|  | ||||
| import config | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     none.init(config) | ||||
|     none.load_builtin_plugins() | ||||
|     none.run(host='127.0.0.1', port=8080) | ||||
| ``` | ||||
|  | ||||
| 第 3 行导入 `config.py` 模块,第 6 行将 `config.py` 作为配置对象传给 `none.init()` 函数,这样 NoneBot 就知道了超级用户有哪些。 | ||||
|  | ||||
| 重启 NoneBot 后再次尝试发送: | ||||
|  | ||||
| ``` | ||||
| /say [CQ:music,type=163,id=478490650] | ||||
| ``` | ||||
|  | ||||
| 可以看到这次机器人成功地给你回复了一个音乐分享消息。 | ||||
|  | ||||
| ## 配置命令的起始字符 | ||||
|  | ||||
| 目前我们发送的命令都必须以一个特殊符号 `/` 开头,实际上,NoneBot 默认支持以 `/`、`/`、`!`、`!` 其中之一作为开头,现在我们希望能够不需要特殊符号开头就可以调用命令,要做到这一点非常简单,在 `config.py` 添加一行即可: | ||||
|  | ||||
| ```python {4} | ||||
| from none.default_config import * | ||||
|  | ||||
| SUPERUSERS = {12345678} | ||||
| COMMAND_START.add('') | ||||
| ``` | ||||
|  | ||||
| 首先需要知道,NoneBot 默认的 `COMMAND_START` 是一个 `set` 对象,如下: | ||||
|  | ||||
| ```python | ||||
| COMMAND_START = {'/', '!', '/', '!'} | ||||
| ``` | ||||
|  | ||||
| 因此调用 `COMMAND_START.add('')` 将会向 `set` 中添加一个空字符串,也就告诉了 NoneBot,我们希望不需要任何起始字符也能调用命令。 | ||||
|  | ||||
| 当然,你可以直接覆盖整个 `COMMAND_START`,其值和 `SUPERUSERS` 一样,可以是 `list`、`tuple`、`set` 等任意容器类型,元素类型可以是 `str` 或正则表达式,例如: | ||||
|  | ||||
| ```python | ||||
| import re | ||||
| from none.default_config import * | ||||
|  | ||||
| COMMAND_START = ['', re.compile(r'[/!]+')] | ||||
| ``` | ||||
|  | ||||
| 现在重启 NoneBot,你就可以使用形如 `echo 你好,世界` 的消息来调用 `echo` 命令了,这么做的好处在 `echo` 命令中可能体现不出来,但对于其它实用型命令,可能会让使用更方便一些,比如天气查询命令: | ||||
|  | ||||
| ``` | ||||
| 天气 南京 | ||||
| ``` | ||||
|  | ||||
| 这里命令名是 `天气`,参数是 `南京`,从肉眼上看起来非常直观,相比 `/天气 南京` 使用起来也更加舒适。 | ||||
|  | ||||
| ## 配置监听的 IP 和端口 | ||||
|  | ||||
| 当有了配置文件之后,我们可能会希望将 `none.run()` 参数中的 `host` 和 `port` 移动到配置文件中,毕竟这两项是有可能随着运行场景的变化而有不同的需求的,把它们放到配置文件中有利于配置和代码的解耦。这同样很容易做到,只需进行如下配置: | ||||
|  | ||||
| ```python {3-4} | ||||
| from none.default_config import * | ||||
|  | ||||
| HOST = '0.0.0.0' | ||||
| PORT = 8080 | ||||
| ``` | ||||
|  | ||||
| 然后在 `bot.py` 中就不再需要传入 `host` 和 `port`,如下: | ||||
|  | ||||
| ```python {8} | ||||
| import none | ||||
|  | ||||
| import config | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     none.init(config) | ||||
|     none.load_builtin_plugins() | ||||
|     none.run() | ||||
| ``` | ||||
|  | ||||
| 实际上,不需要配置这两项也可以直接使用 `none.run()`,NoneBot 会使用如下默认配置: | ||||
|  | ||||
| ```python | ||||
| HOST = '127.0.0.1' | ||||
| PORT = 8080 | ||||
| ``` | ||||
|   | ||||
| @@ -1,6 +1,8 @@ | ||||
| import none | ||||
|  | ||||
| import config | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     none.init() | ||||
|     none.init(config) | ||||
|     none.load_builtin_plugins() | ||||
|     none.run(host='127.0.0.1', port=8080) | ||||
|     none.run() | ||||
|   | ||||
| @@ -1,3 +1,7 @@ | ||||
| from none.default_config import * | ||||
|  | ||||
| HOST = '0.0.0.0' | ||||
| PORT = 8080 | ||||
|  | ||||
| SUPERUSERS = {12345678} | ||||
| COMMAND_START.add('') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user