github.com/Mrs4s/MiraiGo@v0.0.0-20240226124653-54bdd873e3fe/client/translate.go (about) 1 package client 2 3 import ( 4 "github.com/pkg/errors" 5 6 "github.com/Mrs4s/MiraiGo/client/internal/network" 7 "github.com/Mrs4s/MiraiGo/client/pb/oidb" 8 ) 9 10 func (c *QQClient) buildTranslatePacket(src, dst, text string) (uint16, []byte) { 11 body := &oidb.TranslateReqBody{ 12 BatchTranslateReq: &oidb.BatchTranslateReq{ 13 SrcLanguage: src, 14 DstLanguage: dst, 15 SrcTextList: []string{text}, 16 }, 17 } 18 payload := c.packOIDBPackageProto(2448, 2, body) 19 return c.uniPacket("OidbSvc.0x990", payload) 20 } 21 22 func (c *QQClient) Translate(src, dst, text string) (string, error) { 23 rsp, err := c.sendAndWait(c.buildTranslatePacket(src, dst, text)) 24 if err != nil { 25 return "", err 26 } 27 if data, ok := rsp.(*oidb.BatchTranslateRsp); ok { 28 if data.ErrorCode != 0 { 29 return "", errors.New(string(data.ErrorMsg)) 30 } 31 return data.DstTextList[0], nil 32 } 33 return "", errors.New("decode error") 34 } 35 36 // OidbSvc.0x990 37 func decodeTranslateResponse(_ *QQClient, pkt *network.Packet) (any, error) { 38 rsp := oidb.TranslateRspBody{} 39 err := unpackOIDBPackage(pkt.Payload, &rsp) 40 if err != nil { 41 return nil, err 42 } 43 return rsp.BatchTranslateRsp, nil 44 }