1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-05 03:23:49 +08:00
Lumine f8354ec082
修复TCP缓冲区不足问题;重构 qsign 签名服务对接部分;支持配置多个签名服务器 (#2389)
* fix: skip callback error

* update: update comment

* change the logic of callback and auto-register

* add token update prompt.

* fix log buffer string

* fix #2368

增加对 client 的利用,避免创建过多 clients

* refactor: wrap sign request

* feat: impl additional sign servers configuration

* fix error in using configurations.

* fix lint error

* 支持切换回主签名服务器

* feat: support different key and auth

* optimize: find avaliable sign-server

* fix: register instance after server is changed

* fix lint error

* update: add config 'sync-check-servers'

* update: first check master sign-server, or wait 3s

* add checking log & optimize wait for checking done

* fix wrong judge

* add config: rule for changing sign server

* optimize registration logic after changing server

* add some log

* fix #2390

* resolve requested changes in #2389

* update dependency

* fix lint error 'idx is unused'

* refactor: extract sync check and async check logic

* delete async check sign-server
2023-08-27 13:19:38 +08:00

136 lines
4.7 KiB
Go

// Package base provides base config for go-cqhttp
package base
import (
"flag"
"fmt"
"os"
"time"
log "github.com/sirupsen/logrus"
"gopkg.in/yaml.v3"
"github.com/Mrs4s/go-cqhttp/modules/config"
)
// command flags
var (
LittleC string // config file
LittleD bool // daemon
LittleH bool // Help
LittleWD string // working directory
)
// config file flags
var (
Debug bool // 是否开启 debug 模式
RemoveReplyAt bool // 是否删除reply后的at
ExtraReplyData bool // 是否上报额外reply信息
IgnoreInvalidCQCode bool // 是否忽略无效CQ码
SplitURL bool // 是否分割URL
ForceFragmented bool // 是否启用强制分片
SkipMimeScan bool // 是否跳过Mime扫描
ConvertWebpImage bool // 是否转换Webp图片
ReportSelfMessage bool // 是否上报自身消息
UseSSOAddress bool // 是否使用服务器下发的新地址进行重连
LogForceNew bool // 是否在每次启动时强制创建全新的文件储存日志
LogColorful bool // 是否启用日志颜色
FastStart bool // 是否为快速启动
AllowTempSession bool // 是否允许发送临时会话信息
UpdateProtocol bool // 是否更新协议
SignServers []config.SignServer // 使用特定的服务器进行签名
IsBelow110 bool // 签名服务器版本是否低于1.1.0及以下
HTTPTimeout int // download 超时时间
SignServerTimeout int // 签名服务器超时时间
PostFormat string // 上报格式 string or array
Proxy string // 存储 proxy_rewrite,用于设置代理
PasswordHash [16]byte // 存储QQ密码哈希供登录使用
AccountToken []byte // 存储 AccountToken 供登录使用
Account *config.Account // 账户配置
Reconnect *config.Reconnect // 重连配置
LogLevel string // 日志等级
LogAging = time.Hour * 24 * 365 // 日志时效
HeartbeatInterval = time.Second * 5 // 心跳间隔
Servers []map[string]yaml.Node // 连接服务列表
Database map[string]yaml.Node // 数据库列表
)
// Parse parse flags
func Parse() {
flag.StringVar(&LittleC, "c", "config.yml", "configuration filename")
flag.BoolVar(&LittleD, "d", false, "running as a daemon")
flag.BoolVar(&LittleH, "h", false, "this Help")
flag.StringVar(&LittleWD, "w", "", "cover the working directory")
d := flag.Bool("D", false, "debug mode")
flag.BoolVar(&FastStart, "faststart", false, "skip waiting 5 seconds")
flag.BoolVar(&UpdateProtocol, "update-protocol", false, "update protocol")
flag.Parse()
if *d {
Debug = true
}
}
// Init read config from yml file
func Init() {
conf := config.Parse(LittleC)
{ // bool config
if conf.Output.Debug {
Debug = true
}
IgnoreInvalidCQCode = conf.Message.IgnoreInvalidCQCode
SplitURL = conf.Message.FixURL
RemoveReplyAt = conf.Message.RemoveReplyAt
ExtraReplyData = conf.Message.ExtraReplyData
ForceFragmented = conf.Message.ForceFragment
SkipMimeScan = conf.Message.SkipMimeScan
ConvertWebpImage = conf.Message.ConvertWebpImage
ReportSelfMessage = conf.Message.ReportSelfMessage
UseSSOAddress = conf.Account.UseSSOAddress
AllowTempSession = conf.Account.AllowTempSession
SignServers = conf.Account.SignServers
IsBelow110 = conf.Account.IsBelow110
HTTPTimeout = conf.Message.HTTPTimeout
SignServerTimeout = conf.Account.SignServerTimeout
}
{ // others
Proxy = conf.Message.ProxyRewrite
Account = conf.Account
Reconnect = conf.Account.ReLogin
Servers = conf.Servers
Database = conf.Database
LogLevel = conf.Output.LogLevel
LogColorful = conf.Output.LogColorful == nil || *conf.Output.LogColorful
if conf.Message.PostFormat != "string" && conf.Message.PostFormat != "array" {
log.Warnf("post-format 配置错误, 将自动使用 string")
PostFormat = "string"
} else {
PostFormat = conf.Message.PostFormat
}
if conf.Output.LogAging > 0 {
LogAging = time.Hour * 24 * time.Duration(conf.Output.LogAging)
}
if conf.Heartbeat.Interval > 0 {
HeartbeatInterval = time.Second * time.Duration(conf.Heartbeat.Interval)
}
if conf.Heartbeat.Disabled || conf.Heartbeat.Interval < 0 {
HeartbeatInterval = 0
}
}
}
// Help cli命令行-h的帮助提示
func Help() {
fmt.Printf(`go-cqhttp service
version: %s
Usage:
server [OPTIONS]
Options:
`, Version)
flag.PrintDefaults()
os.Exit(0)
}