diff --git a/.gitignore b/.gitignore index 7a29af1..19c418e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ config.cfg main.exe .idea -main \ No newline at end of file +main +QQ-ChatGPT-Bot diff --git a/cmd/chatgpt/chatgpt.go b/cmd/chatgpt/chatgpt.go index 52f4fb0..3f6c764 100644 --- a/cmd/chatgpt/chatgpt.go +++ b/cmd/chatgpt/chatgpt.go @@ -4,7 +4,6 @@ import ( "QQ-ChatGPT-Bot/config" "bytes" "encoding/json" - "fmt" "io" "log" "net/http" @@ -54,13 +53,30 @@ func Client() (http.Client, error) { // GenerateText 调用openai的API生成文本 func GenerateText(text string) string { log.Println("正在调用OpenAI API生成文本...", text) - postData := []byte(fmt.Sprintf(`{ - "model": "%s", - "messages": %s, - "max_tokens": %d, - "temperature": %.1f - }`, config.Cfg.OpenAi.Model, "[{\"role\": \"user\", \"content\": \""+text+"\"}]", config.Cfg.OpenAi.MaxTokens, config.Cfg.OpenAi.Temperature)) - req, _ := http.NewRequest("POST", OpenaiApiUrl, bytes.NewBuffer(postData)) + message := struct { + Role string `json:"role"` + Content string `json:"content"` + }{ + Role: "user", + Content: text, + } + postData := struct { + Model string `json:"model"` + Messages []interface{} `json:"messages"` + MaxTokens int `json:"max_tokens"` + Temperature float64 `json:"temperature"` + }{ + Model: config.Cfg.OpenAi.Model, + Messages: []interface{}{message}, + MaxTokens: config.Cfg.OpenAi.MaxTokens, + Temperature: float64(config.Cfg.OpenAi.Temperature), + } + postDataBytes, err := json.Marshal(postData) + if err != nil { + log.Println(err) + return "" + } + req, _ := http.NewRequest("POST", OpenaiApiUrl, bytes.NewBuffer(postDataBytes)) req.Header.Set("Content-Type", "application/json") req.Header.Set("Authorization", "Bearer "+config.Cfg.OpenAi.ApiKey) client, err := Client() @@ -70,8 +86,13 @@ func GenerateText(text string) string { resp, err := client.Do(req) if err != nil { log.Println(err) + return "" } defer resp.Body.Close() + if resp == nil { + log.Println("response is nil") + return "" + } body, _ := io.ReadAll(resp.Body) var openAiRcv OpenAiRcv err = json.Unmarshal(body, &openAiRcv) diff --git a/cmd/cqhttp/message.go b/cmd/cqhttp/message.go index 22c56bb..2eb34e1 100644 --- a/cmd/cqhttp/message.go +++ b/cmd/cqhttp/message.go @@ -48,7 +48,13 @@ func (bot *Bot) HandleMsg(isAt bool, rcvMsg RcvMsg) { switch rcvMsg.MessageType { case "private": bot.MQ <- &rcvMsg - err := bot.SendPrivateMsg(rcvMsg.Sender.UserId, "[CQ:reply,id="+strconv.FormatInt(rcvMsg.MessageId, 10)+"]"+chatgpt.GenerateText(rcvMsg.Message)) + msg := chatgpt.GenerateText(rcvMsg.Message) + var err error + if msg != "" { + err = bot.SendPrivateMsg(rcvMsg.Sender.UserId, "[CQ:reply,id="+strconv.FormatInt(rcvMsg.MessageId, 10)+"]"+msg) + } else { + err = bot.SendPrivateMsg(rcvMsg.Sender.UserId, "[CQ:reply,id="+strconv.FormatInt(rcvMsg.MessageId, 10)+"]"+"生成错误!") + } if err != nil { log.Println(err) } @@ -59,7 +65,13 @@ func (bot *Bot) HandleMsg(isAt bool, rcvMsg RcvMsg) { return } bot.MQ <- &rcvMsg - err := bot.SendGroupMsg(rcvMsg.GroupId, "[CQ:reply,id="+strconv.FormatInt(rcvMsg.MessageId, 10)+"]"+chatgpt.GenerateText(rcvMsg.Message)) + msg := chatgpt.GenerateText(rcvMsg.Message) + var err error + if msg != "" { + err = bot.SendGroupMsg(rcvMsg.GroupId, "[CQ:reply,id="+strconv.FormatInt(rcvMsg.MessageId, 10)+"]"+chatgpt.GenerateText(rcvMsg.Message)) + } else { + err = bot.SendGroupMsg(rcvMsg.GroupId, "[CQ:reply,id="+strconv.FormatInt(rcvMsg.MessageId, 10)+"]"+"生成错误!") + } if err != nil { log.Println(err) }