93 lines
2.3 KiB
Go
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
|
|
}
|
|
}
|
|
}
|
|
}
|