diff --git a/internal/chatgpt/request.go b/internal/chatgpt/request.go index d866add..e177eef 100644 --- a/internal/chatgpt/request.go +++ b/internal/chatgpt/request.go @@ -1,9 +1,12 @@ package chatgpt import ( + "bufio" "bytes" "encoding/json" + "math/rand" "os" + "strings" typings "freechatgpt/internal/typings" @@ -11,6 +14,8 @@ import ( tls_client "github.com/bogdanfinn/tls-client" ) +var proxies []string + var ( jar = tls_client.NewCookieJar() options = []tls_client.HttpClientOption{ @@ -26,10 +31,41 @@ var ( API_REVERSE_PROXY = os.Getenv("API_REVERSE_PROXY") ) +func init() { + // Check for proxies.txt + if _, err := os.Stat("proxies.txt"); err == nil { + // Each line is a proxy, put in proxies array + file, _ := os.Open("proxies.txt") + defer file.Close() + scanner := bufio.NewScanner(file) + for scanner.Scan() { + // Split line by : + proxy := scanner.Text() + proxy_parts := strings.Split(proxy, ":") + if len(proxy_parts) == 2 { + proxy = "socks5://" + proxy + } else if len(proxy_parts) == 4 { + proxy = "socks5://" + proxy_parts[2] + ":" + proxy_parts[3] + "@" + proxy_parts[0] + ":" + proxy_parts[1] + } else { + continue + } + proxies = append(proxies, proxy) + } + } +} + +func random_int(min int, max int) int { + return min + rand.Intn(max-min) +} + func SendRequest(message typings.ChatGPTRequest, access_token string) (*http.Response, error) { - if http_proxy != "" { + if http_proxy != "" && len(proxies) > 0 { client.SetProxy(http_proxy) } + // Take random proxy from proxies.txt + if len(proxies) > 0 { + client.SetProxy(proxies[random_int(0, len(proxies)-1)]) + } apiUrl := "https://chat.openai.com/backend-api/conversation" if API_REVERSE_PROXY != "" {