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  }