diff --git a/coolq/bot.go b/coolq/bot.go index 6ea59f6..45d6861 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -3,7 +3,6 @@ package coolq import ( "bytes" "encoding/gob" - "encoding/json" "fmt" "hash/crc32" "path" @@ -17,10 +16,13 @@ import ( "github.com/Mrs4s/MiraiGo/message" "github.com/Mrs4s/go-cqhttp/global" + jsoniter "github.com/json-iterator/go" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" ) +var json = jsoniter.ConfigCompatibleWithStandardLibrary + type CQBot struct { Client *client.QQClient diff --git a/docs/adminApi.md b/docs/adminApi.md index 374bfd1..a455dcd 100644 --- a/docs/adminApi.md +++ b/docs/adminApi.md @@ -8,7 +8,7 @@ | 参数名 | 类型 | 说明 | | ------------ | ------ | --------------------------- | -| access_token | string | 校验口令,config.json中配置 | +| access_token | string | 校验口令,config.hjson中配置 | @@ -209,7 +209,7 @@ method: `POST` formdata ### admin/do_config_json -> 直接修改 config.json配置 +> 直接修改 config.hjson配置 method: `POST` formdata @@ -217,7 +217,7 @@ method: `POST` formdata | 参数名 | 类型 | 说明 | | ------ | ------ | ----------------------------------- | -| json | string | 完整的config.json的配合,json字符串 | +| json | string | 完整的config.hjson的配合,json字符串 | 返回: @@ -228,7 +228,7 @@ method: `POST` formdata ### admin/get_config_json -> 获取当前 config.json配置 +> 获取当前 config.hjson配置 method: `GET` @@ -247,5 +247,5 @@ method: `GET` | 参数名 | 类型 | 说明 | | ------ | ------ | ----------------------------------- | -| config | string | 完整的config.json的配合,json字符串 | +| config | string | 完整的config.hjson的配合,json字符串 | diff --git a/docs/config.md b/docs/config.md index 5e5334f..19595f4 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1,6 +1,6 @@ # 配置 -go-cqhttp 包含 `config.json` 和 `device.json` 两个配置文件, 其中 `config.json` 为运行配置 `device.json` 为虚拟设备信息. +go-cqhttp 包含 `config.hjson` 和 `device.json` 两个配置文件, 其中 `config.json` 为运行配置 `device.json` 为虚拟设备信息. ## 从原CQHTTP导入配置 diff --git a/docs/file.md b/docs/file.md index 4fe926e..987a49d 100644 --- a/docs/file.md +++ b/docs/file.md @@ -5,7 +5,7 @@ go-cqhttp 默认生成的文件树如下所示: ```` . ├── go-cqhttp -├── config.json +├── config.hjson ├── device.json ├── logs │ └── xx-xx-xx.log @@ -18,7 +18,7 @@ go-cqhttp 默认生成的文件树如下所示: | 文件 | 用途 | | ----------- | ------------------- | | go-cqhttp | go-cqhttp可执行文件 | -| config.json | 运行配置文件 | +| config.hjson | 运行配置文件 | | device.json | 虚拟设备配置文件 | | logs | 日志存放目录 | | data | 数据目录 | diff --git a/docs/quick_start.md b/docs/quick_start.md index 778a533..d9676a3 100644 --- a/docs/quick_start.md +++ b/docs/quick_start.md @@ -28,8 +28,8 @@ 1. 双击`go-cqhttp.exe`此时将提示 ``` -[WARNING]: 尝试加载配置文件 config.json 失败: 文件不存在 -[INFO]: 默认配置文件已生成,请编辑 config.json 后重启程序. +[WARNING]: 尝试加载配置文件 config.hjson 失败: 文件不存在 +[INFO]: 默认配置文件已生成,请编辑 config.hjson 后重启程序. ``` 2. 参照[config.md](https://github.com/Mrs4s/go-cqhttp/blob/master/docs/config.md)和你所用到的插件的 `README` 填入参数 3. 再次双击`go-cqhttp.exe` @@ -79,8 +79,8 @@ enable ws?(Y/n) 2. `cd`到解压目录 3. 输入 `./go-cqhttp`,`Enter`运行 ,此时将提示 ``` -[WARNING]: 尝试加载配置文件 config.json 失败: 文件不存在 -[INFO]: 默认配置文件已生成,请编辑 config.json 后重启程序. +[WARNING]: 尝试加载配置文件 config.hjson 失败: 文件不存在 +[INFO]: 默认配置文件已生成,请编辑 config.hjson 后重启程序. ``` 4. 参照[config.md](https://github.com/Mrs4s/go-cqhttp/blob/master/docs/config.md)和你所用到的插件的 `README` 填入参数 diff --git a/global/config.go b/global/config.go index 3026065..460e9be 100644 --- a/global/config.go +++ b/global/config.go @@ -1,14 +1,17 @@ package global import ( - "encoding/json" "os" "strconv" "time" + "github.com/hjson/hjson-go" + jsoniter "github.com/json-iterator/go" log "github.com/sirupsen/logrus" ) +var json = jsoniter.ConfigCompatibleWithStandardLibrary + type JsonConfig struct { Uin int64 `json:"uin"` Password string `json:"password"` @@ -144,19 +147,28 @@ func Load(p string) *JsonConfig { log.Warnf("尝试加载配置文件 %v 失败: 文件不存在", p) return nil } - c := JsonConfig{} - err := json.Unmarshal([]byte(ReadAllText(p)), &c) + var dat map[string]interface{} + var c = JsonConfig{} + err := hjson.Unmarshal([]byte(ReadAllText(p)), &dat) + if err == nil { + b, _ := json.Marshal(dat) + err = json.Unmarshal(b, &c) + } if err != nil { log.Warnf("尝试加载配置文件 %v 时出现错误: %v", p, err) log.Infoln("原文件已备份") - os.Rename(p, p+".backup"+strconv.FormatInt(time.Now().Unix(), 10)) + _ = os.Rename(p, p+".backup"+strconv.FormatInt(time.Now().Unix(), 10)) return nil } return &c } func (c *JsonConfig) Save(p string) error { - data, err := json.MarshalIndent(c, "", "\t") + data, err := hjson.MarshalWithOptions(c, hjson.EncoderOptions{ + Eol: "\n", + BracesSameLine: true, + IndentBy: " ", + }) if err != nil { return err } diff --git a/go.mod b/go.mod index 6eed354..66122bf 100644 --- a/go.mod +++ b/go.mod @@ -5,11 +5,16 @@ go 1.14 require ( github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900 github.com/dustin/go-humanize v1.0.0 + github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect github.com/getlantern/go-update v0.0.0-20190510022740-79c495ab728c github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9 // indirect github.com/gin-gonic/gin v1.6.3 github.com/gorilla/websocket v1.4.2 github.com/guonaihong/gout v0.1.3 + github.com/hjson/hjson-go v3.1.0+incompatible + github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect + github.com/jonboulle/clockwork v0.2.2 // indirect + github.com/json-iterator/go v1.1.9 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/kr/binarydist v0.1.0 // indirect github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible @@ -19,6 +24,7 @@ require ( github.com/sirupsen/logrus v1.7.0 github.com/syndtr/goleveldb v1.0.0 github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 + github.com/tebeka/strftime v0.1.5 // indirect github.com/tidwall/gjson v1.6.3 github.com/wdvxdr1123/go-silk v0.0.0-20201007123416-b982fd3d91d6 github.com/yinghau76/go-ascii-art v0.0.0-20190517192627-e7f465a30189 diff --git a/go.sum b/go.sum index cacb4c2..8e7d488 100644 --- a/go.sum +++ b/go.sum @@ -5,11 +5,15 @@ github.com/Mrs4s/MiraiGo v0.0.0-20201117154121-989187125900/go.mod h1:pAsWtMIwqk github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU= +github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4= github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY= @@ -30,6 +34,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= @@ -60,15 +65,25 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/guonaihong/gout v0.1.3 h1:BIiV6nnsA+R6dIB1P33uhCM8+TVAG3zHrXGZad7hDc8= github.com/guonaihong/gout v0.1.3/go.mod h1:vXvv5Kxr70eM5wrp4F0+t9lnLWmq+YPW2GByll2f/EA= +github.com/hjson/hjson-go v3.1.0+incompatible h1:DY/9yE8ey8Zv22bY+mHV1uk2yRy0h8tKhZ77hEdi0Aw= +github.com/hjson/hjson-go v3.1.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4= +github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag= +github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= @@ -78,6 +93,7 @@ github.com/kr/binarydist v0.1.0/go.mod h1:DY7S//GCoz1BCd0B0EVrinCKAZN3pXe+MDaIZb github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is= github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4= github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= @@ -86,18 +102,23 @@ github.com/lestrrat-go/strftime v1.0.3/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR7 github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= @@ -109,11 +130,14 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 h1:J6v8awz+me+xeb/cUTotKgceAYouhIB3pjzgRd6IlGk= github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816/go.mod h1:tzym/CEb5jnFI+Q0k4Qq3+LvRF4gO3E2pxS8fHP8jcA= +github.com/tebeka/strftime v0.1.5 h1:1NQKN1NiQgkqd/2moD6ySP/5CoZQsKa1d3ZhJ44Jpmg= +github.com/tebeka/strftime v0.1.5/go.mod h1:29/OidkoWHdEKZqzyDLUyC+LmgDgdHo4WAFCDT7D/Ig= github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0= github.com/tidwall/gjson v1.6.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI= github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0= @@ -154,6 +178,7 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -162,6 +187,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -181,10 +207,13 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go index b09ece5..9c2c9d2 100644 --- a/main.go +++ b/main.go @@ -5,7 +5,6 @@ import ( "context" "crypto/md5" "encoding/base64" - "encoding/json" "fmt" "io" "io/ioutil" @@ -29,12 +28,15 @@ import ( "github.com/Mrs4s/go-cqhttp/coolq" "github.com/Mrs4s/go-cqhttp/global" "github.com/getlantern/go-update" + jsoniter "github.com/json-iterator/go" rotatelogs "github.com/lestrrat-go/file-rotatelogs" "github.com/rifflock/lfshook" log "github.com/sirupsen/logrus" easy "github.com/t-tomalak/logrus-easy-formatter" ) +var json = jsoniter.ConfigCompatibleWithStandardLibrary + func init() { log.SetFormatter(&easy.Formatter{ TimestampFormat: "2006-01-02 15:04:05", @@ -66,7 +68,7 @@ func init() { } if global.PathExists("cqhttp.json") { log.Info("发现 cqhttp.json 将在五秒后尝试导入配置,按 Ctrl+C 取消.") - log.Warn("警告: 该操作会删除 cqhttp.json 并覆盖 config.json 文件.") + log.Warn("警告: 该操作会删除 cqhttp.json 并覆盖 config.hjson 文件.") time.Sleep(time.Second * 5) conf := global.CQHttpApiConfig{} if err := json.Unmarshal([]byte(global.ReadAllText("cqhttp.json")), &conf); err != nil { @@ -88,8 +90,8 @@ func init() { goConf.ReverseServers[0].ReverseEventUrl = conf.WSReverseEventUrl goConf.ReverseServers[0].ReverseReconnectInterval = conf.WSReverseReconnectInterval } - if err := goConf.Save("config.json"); err != nil { - log.Fatalf("保存 config.json 时出现错误: %v", err) + if err := goConf.Save("config.hjson"); err != nil { + log.Fatalf("保存 config.hjson 时出现错误: %v", err) } _ = os.Remove("cqhttp.json") } @@ -122,8 +124,10 @@ func main() { } var conf *global.JsonConfig - if global.PathExists("config.json") || os.Getenv("UIN") == "" { + if global.PathExists("config.json") { conf = global.Load("config.json") + _ = conf.Save("config.hjson") + _ = os.Remove("config.json") } else if os.Getenv("UIN") != "" { log.Infof("将从环境变量加载配置.") uin, _ := strconv.ParseInt(os.Getenv("UIN"), 10, 64) @@ -149,19 +153,21 @@ func main() { if post != "" { conf.HttpConfig.PostUrls[post] = os.Getenv("HTTP_SECRET") } + } else { + conf = global.Load("config.hjson") } if conf == nil { - err := global.DefaultConfig().Save("config.json") + err := global.DefaultConfig().Save("config.hjson") if err != nil { log.Fatalf("创建默认配置文件时出现错误: %v", err) return } - log.Infof("默认配置文件已生成, 请编辑 config.json 后重启程序.") + log.Infof("默认配置文件已生成, 请编辑 config.hjson 后重启程序.") time.Sleep(time.Second * 5) return } if conf.Uin == 0 || (conf.Password == "" && conf.PasswordEncrypted == "") { - log.Warnf("请修改 config.json 以添加账号密码.") + log.Warnf("请修改 config.hjson 以添加账号密码.") time.Sleep(time.Second * 5) return } @@ -228,7 +234,7 @@ func main() { if encrypted := EncryptPwd(conf.Password, key[:]); encrypted != "" { conf.Password = "" conf.PasswordEncrypted = encrypted - _ = conf.Save("config.json") + _ = conf.Save("config.hjson") } else { log.Warnf("加密时出现问题.") } @@ -314,7 +320,7 @@ func main() { if conf.WebUi.Host == "" { conf.WebUi.Host = "127.0.0.1" } - confErr := conf.Save("config.json") + confErr := conf.Save("config.hjson") if confErr != nil { log.Error("保存配置文件失败") } diff --git a/server/apiAdmin.go b/server/apiAdmin.go index 6c14120..026d072 100644 --- a/server/apiAdmin.go +++ b/server/apiAdmin.go @@ -4,7 +4,6 @@ import ( "bufio" "bytes" "encoding/base64" - "encoding/json" "fmt" "image" "io/ioutil" @@ -19,11 +18,14 @@ import ( "github.com/Mrs4s/go-cqhttp/coolq" "github.com/Mrs4s/go-cqhttp/global" "github.com/gin-gonic/gin" + jsoniter "github.com/json-iterator/go" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" asciiart "github.com/yinghau76/go-ascii-art" ) +var json = jsoniter.ConfigCompatibleWithStandardLibrary + var WebInput = make(chan string, 1) //长度1,用于阻塞 var Console = make(chan os.Signal, 1) @@ -283,7 +285,7 @@ func GetConf() *global.JsonConfig { if JsonConfig != nil { return JsonConfig } - conf := global.Load("config.json") + conf := global.Load("config.hjson") return conf } @@ -475,9 +477,9 @@ func AdminDoConfigBase(s *webServer, c *gin.Context) { conf.EnableDB = false } conf.AccessToken = c.PostForm("access_token") - if err := conf.Save("config.json"); err != nil { - log.Fatalf("保存 config.json 时出现错误: %v", err) - c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err))) + if err := conf.Save("config.hjson"); err != nil { + log.Fatalf("保存 config.hjson 时出现错误: %v", err) + c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err))) } else { JsonConfig = nil c.JSON(200, coolq.OK(coolq.MSG{})) @@ -500,9 +502,9 @@ func AdminDoConfigHttp(s *webServer, c *gin.Context) { if c.PostForm("post_url") != "" { conf.HttpConfig.PostUrls[c.PostForm("post_url")] = c.PostForm("post_secret") } - if err := conf.Save("config.json"); err != nil { - log.Fatalf("保存 config.json 时出现错误: %v", err) - c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err))) + if err := conf.Save("config.hjson"); err != nil { + log.Fatalf("保存 config.hjson 时出现错误: %v", err) + c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err))) } else { JsonConfig = nil c.JSON(200, coolq.OK(coolq.MSG{})) @@ -520,9 +522,9 @@ func AdminDoConfigWs(s *webServer, c *gin.Context) { } else { conf.WSConfig.Enabled = false } - if err := conf.Save("config.json"); err != nil { - log.Fatalf("保存 config.json 时出现错误: %v", err) - c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err))) + if err := conf.Save("config.hjson"); err != nil { + log.Fatalf("保存 config.hjson 时出现错误: %v", err) + c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err))) } else { JsonConfig = nil c.JSON(200, coolq.OK(coolq.MSG{})) @@ -542,9 +544,9 @@ func AdminDoConfigReverse(s *webServer, c *gin.Context) { } else { conf.ReverseServers[0].Enabled = false } - if err := conf.Save("config.json"); err != nil { - log.Fatalf("保存 config.json 时出现错误: %v", err) - c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err))) + if err := conf.Save("config.hjson"); err != nil { + log.Fatalf("保存 config.hjson 时出现错误: %v", err) + c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err))) } else { JsonConfig = nil c.JSON(200, coolq.OK(coolq.MSG{})) @@ -557,13 +559,13 @@ func AdminDoConfigJson(s *webServer, c *gin.Context) { Json := c.PostForm("json") err := json.Unmarshal([]byte(Json), &conf) if err != nil { - log.Warnf("尝试加载配置文件 %v 时出现错误: %v", "config.json", err) - c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err))) + log.Warnf("尝试加载配置文件 %v 时出现错误: %v", "config.hjson", err) + c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err))) return } - if err := conf.Save("config.json"); err != nil { - log.Fatalf("保存 config.json 时出现错误: %v", err) - c.JSON(200, Failed(502, "保存 config.json 时出现错误:"+fmt.Sprintf("%v", err))) + if err := conf.Save("config.hjson"); err != nil { + log.Fatalf("保存 config.hjson 时出现错误: %v", err) + c.JSON(200, Failed(502, "保存 config.hjson 时出现错误:"+fmt.Sprintf("%v", err))) } else { JsonConfig = nil c.JSON(200, coolq.OK(coolq.MSG{}))