chatgpt sdk writen by golang.
you should login into the ChatGPT Website firstly, find the Cookies named cf_clearance,__Secure-next-auth.session-token, and copy their values.
_puidcookie is required too, while only plus user can find it in their cookies after login ChatGPT official website.
- install chatgpt-go sdk
go get -u github.com/chatgp/chatgpt-go- chat in independent conversation
package main
import (
	"log"
	"net/http"
	"time"
	chatgpt "github.com/chatgp/chatgpt-go"
)
func main() {
	token := `copy-from-cookies`
	cfValue := "copy-from-cookies"
	puid := "copy-from-cookies"
	cookies := []*http.Cookie{
		{
			Name:  "__Secure-next-auth.session-token",
			Value: token,
		},
		{
			Name:  "cf_clearance",
			Value: cfValue,
		},
		{
			Name:  "_puid",
			Value: puid,
		},
	}
	cli := chatgpt.NewClient(
		chatgpt.WithDebug(true),
		chatgpt.WithTimeout(60*time.Second),
		chatgpt.WithCookies(cookies),
	)
	// chat in independent conversation
	message := "say hello to me"
	text, err := cli.GetChatText(message)
	if err != nil {
		log.Fatalf("get chat text failed: %v", err)
	}
	log.Printf("q: %s, a: %s\n", message, text.Content)
}- chat in continuous conversation
package main
import (
	"log"
	"net/http"
	"time"
	chatgpt "github.com/chatgp/chatgpt-go"
)
func main() {
	// new chatgpt client
	token := `copy-from-cookies`
	cfValue := "copy-from-cookies"
	cookies := []*http.Cookie{
		{
			Name:  "__Secure-next-auth.session-token",
			Value: token,
		},
		{
			Name:  "cf_clearance",
			Value: cfValue,
		},
	}
	cli := chatgpt.NewClient(
		chatgpt.WithDebug(true),
		chatgpt.WithTimeout(60*time.Second),
		chatgpt.WithCookies(cookies),
	)
	// chat in continuous conversation
	// first message
	message := "say hello to me"
	text, err := cli.GetChatText(message)
	if err != nil {
		log.Fatalf("get chat text failed: %v", err)
	}
	log.Printf("q: %s, a: %s\n", message, text.Content)
	// continue conversation with new message
	conversationID := text.ConversationID
	parentMessage := text.MessageID
	newMessage := "again"
	newText, err := cli.GetChatText(newMessage, conversationID, parentMessage)
	if err != nil {
		log.Fatalf("get chat text failed: %v", err)
	}
	log.Printf("q: %s, a: %s\n", newMessage, newText.Content)
}if you want to start a new conversation out of current conversation, you don't need to reset the client. just remove the
conversationID、parentMessagearguments inGetChatTextmethod and use it to get a new text reply.
- get chat content with stream
package main
import (
	"log"
	"net/http"
	"time"
	chatgpt "github.com/chatgp/chatgpt-go"
)
func main() {
	// new chatgpt client
	token := `copy-from-cookies`
	cfValue := "copy-from-cookies"
	cookies := []*http.Cookie{
		{
			Name:  "__Secure-next-auth.session-token",
			Value: token,
		},
		{
			Name:  "cf_clearance",
			Value: cfValue,
		},
	}
	cli := chatgpt.NewClient(
		chatgpt.WithDebug(true),
		chatgpt.WithTimeout(60*time.Second),
		chatgpt.WithCookies(cookies),
	)
	message := "say hello to me"
	stream, err := cli.GetChatStream(message)
	if err != nil {
		log.Fatalf("get chat stream failed: %v\n", err)
	}
	var answer string
	for text := range stream.Stream {
		log.Printf("stream text: %s\n", text.Content)
		answer = text.Content
	}
	if stream.Err != nil {
		log.Fatalf("stream closed with error: %v\n", stream.Err)
	}
	log.Printf("q: %s, a: %s\n", message, answer)
}under examples folder there are some tests, execute go test command and get outputs like below:
- get chat text
- get chat text in continuous conversation
- get chat text from stream
- 
Telegram Group: ChatGPT Creators 
- 
Discord Server: ChatGPT Creators 
- 
Wechat Group: ChatGPT Creators 




