# 相关配置
1. 首先咱们先说说文件配置要求
在上一节我们创建机器人对象之前有这么一步:
```
config.load_config('setting')
```
这句话的意思就是: 我要注册我的配置文件, 当然, 也可以配置多个, 比如:
```
config.load_config('env')
config.load_config('bot')
```
这样的话, 机器人就会同时导入上边两个啦!
那我们平时的时候怎么使用配置呢?具体如下:
```
from wxmbot import config
config.load_config('env')
print(config.xxx)
print(config.get('xxx'))
print(config.get('xxx', 'yyy'))
print(config.env.xxx)
```
一共四种方法可以调用, 区别如下(假设env下有一个配置项`xxx`):
* 首先, 通过config.load_config得到的配置会统一加入到config对象的属性中, 于是, 对于我们加入的配置项, 就可以使用访问对象属性的方式获取: `config.xxx`
* 那如果我并没有xxx这个属性, 那还使用`config.xxx`则会得到None(不会报错), 和`config.get('xxx')`效果是一样的
* 那如果我没有设置(或者为None的时候), 我想在获取xxx属性的时候提供一个默认值, 那就要用到`config.get('xxx', 'yyy')`, 当属性`xxx`存在的时候, 返回其属性, 当其不存在的时候, 返回`yyy`
* 咱们之前说到, 可以载入多个配置, 那如果配置中有的项是相同的, 那怎么办呢?如果有相同的项, 那么后载入的会覆盖先载入的, 那此时就不能用config.xxx等来获取了, 因为先载入的那个配置(只是那个重复的配置内容, 不是所有的), 已经被覆盖了, 此时, 还想用的话, 就要通过config.env.xxx, 此时需要加上模块名(注意, 加上模块名时, config.env就相当于我们平时import env 得到的env模块, 并不具备之前.get()等功能了)
2. 咱们来说说一般需要的配置项, 以及每个配置项的作用吧
我来按照黑cyc宇的配置说一下:
首先有两个配置文件, 分别是`bot.py` 和 `env.py`, 配置分别如下:
```
# bot.py
SEP = " "
ARG_TYPE = 'list' # 默认是 list 方式
URL_SEP = "&|_" # 在 ARG_TYPE 为 url 时, 此为参数之间的分隔符, 每一种都可以
ROBOT_WXID = 'wxid_xxxxxxxxxxx'
```
**SEP**: 在command模式下(也就是文本信息模式), SEP为命令和参数之间的分隔符(多个相当于一个, 首先会过滤头部空格换行), 比如我的信息是`cmd arg1 arg2 arg3`, 那么命令就是`cmd`, 同时,当`ARG_TYPE`为`list`时, `SEP`也为参数之间的分隔符
**ARG_TYPE**: 本插件支持两种命令类型, 一种是上边那种, 该种名叫`list`, 还有一种名叫`url`, 顾名思义, 此时的参数列表是形如url中的get参数, 比如信息是: `cmd a=1&b=2&c=3`, 那么: 命令是`cmd`, 参数分别是a、b、c, 其值分别是1、2、3, 插件默认为`list`模式
**URL_SEP**: 在我们的`ARG_TYPE`为`url`时, 我们也不是说一定要用`&`当作参数之间的分隔符的, 我们还可以使用`|`或`_`等, 我们把我们需要的所有分隔符放到`URL_SEP`中就可以了, 注意: 每个分隔符都只能是单字符。此时, 我们甚至可以来分析`cmd a=1&b=2_c=3|d=4`这样的命令
**ROBOT_WXID**: 这个不是必须的, 但是当我们只有一个机器人的时候, 可以先把我们的机器人wxid存到配置中, 以后就可以自己取用啦
**注意**: ARG_TYPE 和 SEP 只对command的文本类消息有效, 因为其他几种没有多参数情况
---
```
# env.py
JSON_AS_ASCII = False
BOT_HOST = '127.0.0.1'
BOT_SERVER_PORT = 10001
BOT_HTTP_PORT = 10002
SELF_SERVER_PORT = 10003
RECONNECT_INTERVAL = 10
INVOKE_KEY = 'INVOKE_KEY'
BOT_PATH = 'C:/Tool/可爱猫/app'
```
**JSON_AS_ASCLL**: 一定要为Fasle, 否则会解析错误(除非你的机器人名, 联系人名和msg没有中文)
**BOT_HOST**: 你的机器人所在ip, 只要IP部分
**BOT_SERVER_PORT**: 你的机器人websocket服务端端口
**BOT_HTTP_PORT**: 你的机器人http服务端端口
**SELF_SERVER_PORT**: 你的插件运行时的websocket端口, 该配置在创建机器人对象的时候, `enable_invoke=True`的时候才有用, 这是外部主动调用机器人所需的端口
**RECONNECT_INTERVAL**: 当插件和机器人断开连接或机器人未成功连接到机器人后重新连接机器人的间隔时间, 默认10s
**INVOKE_KEY**: 当`enable_invoke=True`时, 为保护插件安全, 外部想要调用机器人时需要以传递过来的密钥, 密钥不正确, 即使链接成功, 也是无法进行后续操作的。
**BOT_PATH**: 机器人exe文件所在路径, 这是为发送图片、文件啥的提供的, 暂时用处不大, 可以先略过