wechatbot/gpt/bing.go
2023-04-15 15:09:10 +08:00

93 lines
2.3 KiB
Go

package gpt
import (
"bytes"
"encoding/json"
"io/ioutil"
"log"
"net/http"
"strconv"
"strings"
"github.com/bujnlc8/wechatbot/config"
)
const Referer = "https://servicewechat.com/wxee7496be5b68b740"
type BingQueryParam struct {
Q string `json:"q"`
SID string `json:"sid"`
AutoReset string `json:"auto_reset"`
}
type BingResponse struct {
Data BingResponseData `json:"data"`
Cookie string `json:"cookie"`
}
type BingResponseData struct {
Suggests []string `json:"suggests"`
Status string `json:"status"`
Text string `json:"text"`
Message string `json:"message"`
}
func BingSearch(msg string, nickName string) (string, error) {
requestBody := BingQueryParam{
Q: msg,
SID: nickName,
AutoReset: "1",
}
requestData, err := json.Marshal(requestBody)
if err != nil {
return "", err
}
log.Printf("request bing json string : %v", string(requestData))
BingChatUrl := config.LoadConfig().BingChatUrl
req, err := http.NewRequest("POST", BingChatUrl, bytes.NewBuffer(requestData))
if err != nil {
return "", err
}
req.Header.Set("Referer", Referer)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
response, err := client.Do(req)
if err != nil {
return "非常抱歉😭,网络异常,请稍后重试", err
}
if response.StatusCode != 200 {
return "非常抱歉😭,网络异常,请稍后重试 [" + strconv.Itoa(response.StatusCode) + "]", nil
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
return "响应异常,请稍后再试", err
}
bingResponse := &BingResponse{}
log.Println(string(body))
err = json.Unmarshal(body, bingResponse)
if err != nil {
return "", err
}
if bingResponse.Data.Status == "Success" {
if strings.Contains(bingResponse.Data.Text, "New topic") {
return bingResponse.Data.Text + "\n请重新开始对话", nil
}
return bingResponse.Data.Text, nil
} else {
if bingResponse.Data.Status == "Throttled" {
return "这真是愉快,但你已达到每日限制。是否明天再聊?", nil
} else {
if strings.Contains(bingResponse.Data.Message, "has expired") {
return "本轮对话已过期,请重新开始。", nil
} else {
return "抱歉😭,发生错误:" + bingResponse.Data.Message + ",请重试", nil
}
}
}
}