├── .gitignore ├── README.md ├── go.mod └── main.go /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .vscode 3 | 4 | session.token 5 | token -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gocq-token-convert 2 | 3 | 转换 go-cqhttp 的 session.token 为 oicq 格式,方便使用。 4 | 5 | ## 使用方法 6 | 7 | 将 session.token 与本程序放在同一目录下,直接运行。 -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module gocq-token-convert 2 | 3 | go 1.19 4 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "encoding/binary" 6 | "log" 7 | "os" 8 | ) 9 | 10 | type token struct { 11 | D2Key []byte 12 | D2 []byte 13 | TGT []byte 14 | } 15 | 16 | type Reader struct { 17 | buf *bytes.Reader 18 | } 19 | 20 | func NewReader(data []byte) *Reader { 21 | buf := bytes.NewReader(data) 22 | return &Reader{ 23 | buf: buf, 24 | } 25 | } 26 | func (r *Reader) ReadBytes(len int) []byte { 27 | b := make([]byte, len) 28 | if len > 0 { 29 | _, err := r.buf.Read(b) 30 | if err != nil { 31 | panic(err) 32 | } 33 | } 34 | return b 35 | } 36 | 37 | func (r *Reader) ReadBytesShort() []byte { 38 | return r.ReadBytes(int(r.ReadUInt16())) 39 | } 40 | 41 | func (r *Reader) ReadInt64() int64 { 42 | b := make([]byte, 8) 43 | _, _ = r.buf.Read(b) 44 | return int64(binary.BigEndian.Uint64(b)) 45 | } 46 | 47 | func (r *Reader) ReadUInt16() uint16 { 48 | b := make([]byte, 2) 49 | _, _ = r.buf.Read(b) 50 | return binary.BigEndian.Uint16(b) 51 | } 52 | 53 | func readToken(data []byte) *token { 54 | rd := NewReader(data) 55 | t := &token{} 56 | rd.ReadInt64() 57 | t.D2 = rd.ReadBytesShort() 58 | t.D2Key = rd.ReadBytesShort() 59 | t.TGT = rd.ReadBytesShort() 60 | return t 61 | } 62 | 63 | func main() { 64 | data, err := os.ReadFile("session.token") 65 | if err != nil { 66 | log.Fatal(err) 67 | } 68 | t := readToken(data) 69 | buf := new(bytes.Buffer) 70 | buf.Write(t.D2Key) 71 | buf.Write(t.D2) 72 | buf.Write(t.TGT) 73 | err = os.WriteFile("token", buf.Bytes(), 0666) 74 | if err != nil { 75 | log.Fatal(err) 76 | } 77 | } 78 | --------------------------------------------------------------------------------