# 相關配置
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文件所在路徑, 這是為發送圖片、文件啥的提供的, 暫時用處不大, 可以先略過