diff --git a/README.md b/README.md index 7317fbb..4b4cb4c 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ "signal_secret": "", // 发送 signal请求时需要的密钥 "debug": false, // debug 模式 "disconnect_duration": 5, // 失连时间,超出后会触发系统 + "enable_qq": true, // 是否启用QQ "cat_bot_url": "", // CatBot 的 webhook地址(https://github.com/ssdomei232/CatBot) "cat_bot_key": "", // CatBot 的 key "qq_send_group": [], // 要发送QQ消息的群号 diff --git a/config.example.json b/config.example.json index 820b19c..065c4f4 100644 --- a/config.example.json +++ b/config.example.json @@ -8,6 +8,7 @@ "signal_secret": "", "debug": false, "disconnect_duration": 5, + "enable_qq": true, "cat_bot_url": "", "cat_bot_key": "", "qq_send_group": [], diff --git a/configs/config.go b/configs/config.go index 67737e4..e52d252 100644 --- a/configs/config.go +++ b/configs/config.go @@ -10,6 +10,7 @@ type Config struct { SignalSecret string `json:"signal_secret"` Debug bool `json:"debug"` DisconnectDuration int `json:"disconnect_duration"` // Hours + EnableQQ bool `json:"enable_qq"` CatBotUrl string `json:"cat_bot_url"` CatBotKey string `json:"cat_bot_key"` QQSendGroup []int `json:"qq_send_group"` diff --git a/internal/sendQQMsg.go b/internal/sendQQMsg.go index 907977e..900e7ed 100644 --- a/internal/sendQQMsg.go +++ b/internal/sendQQMsg.go @@ -3,11 +3,11 @@ package internal import ( "bytes" "fmt" - "io" "log" "mime/multipart" "net/http" "strconv" + "time" "github.com/ssdomei232/goodBaby/configs" ) @@ -16,6 +16,7 @@ func SendQQ() { config, err := configs.GetConfig() if err != nil { log.Printf("获取配置文件失败: %v", err) + return // 添加return避免继续执行 } url := fmt.Sprintf("%s/?secret=%s", config.CatBotUrl, config.CatBotKey) @@ -24,43 +25,65 @@ func SendQQ() { for _, groupId := range config.QQSendGroup { sendQQMsg(url, groupId, stopMsg) } - } func sendQQMsg(url string, groupId int, msg string) { method := "POST" payload := &bytes.Buffer{} writer := multipart.NewWriter(payload) - _ = writer.WriteField("group_id", strconv.Itoa(groupId)) - _ = writer.WriteField("message", msg) + + // 处理写入字段的错误 + if err := writer.WriteField("group_id", strconv.Itoa(groupId)); err != nil { + log.Printf("写入group_id字段失败: %v", err) + return + } + + if err := writer.WriteField("message", msg); err != nil { + log.Printf("写入message字段失败: %v", err) + return + } + err := writer.Close() if err != nil { - log.Println(err) + log.Printf("关闭multipart writer失败: %v", err) return } client := &http.Client{} req, err := http.NewRequest(method, url, payload) - if err != nil { - fmt.Println(err) + log.Printf("创建HTTP请求失败: %v", err) return } + req.Header.Set("Content-Type", writer.FormDataContentType()) + var res *http.Response - var maxRetries = 3 + for i := range maxRetries { res, err = client.Do(req) if err == nil { break // 请求成功,跳出循环 } - log.Printf("请求QQ API失败,正在重试... (%d/%d)", i+1, maxRetries) + if i < maxRetries { + time.Sleep(retryDelay * time.Duration(i+1)) // 递增延迟 + } + log.Printf("请求QQ API失败,正在重试... (%d/%d): %v", i+1, maxRetries, err) } - defer res.Body.Close() - _, err = io.ReadAll(res.Body) - if err != nil { - fmt.Println(err) + // 检查res是否为nil,避免panic + if res == nil { + log.Println("QQ API请求失败,无法获取响应") return } + + // 使用defer确保资源被释放,但要确保res不为nil + defer func() { + if res != nil && res.Body != nil { + res.Body.Close() + } + }() + + // 可选:记录响应结果 + log.Println("QQ消息发送完成") } diff --git a/main.go b/main.go index 1a3cb56..6f124dc 100644 --- a/main.go +++ b/main.go @@ -30,7 +30,7 @@ func init() { timer = time.NewTimer(duration) go func() { <-timer.C - trigger() + trigger(config) }() // 初始化bilibili客户端 @@ -39,8 +39,10 @@ func init() { startCookieChecker() // 启动定期检查cookie有效性 } -func trigger() { - go internal.SendQQ() +func trigger(config *configs.Config) { + if config.EnableQQ { + go internal.SendQQ() + } go internal.SendMail() go internal.Github() go internal.SendBili(biliClient)