github.com/Mrs4s/MiraiGo@v0.0.0-20240226124653-54bdd873e3fe/message/generate.go (about)

     1  //go:build ignore
     2  // +build ignore
     3  
     4  package main
     5  
     6  import (
     7  	"archive/zip"
     8  	"bytes"
     9  	"encoding/json"
    10  	"go/format"
    11  	"html/template"
    12  	"io"
    13  	"os"
    14  	"strings"
    15  )
    16  
    17  // TODO: Update face_config_json.zip:
    18  // 1. download latest linux qq
    19  // 2. run and login
    20  // 3. copy $HOME/.config/QQ/global/nt_data/Emoji/emoji-resource/face_config_json.zip
    21  
    22  type ani struct {
    23  	QSid      string
    24  	StickerID string
    25  }
    26  
    27  type config struct {
    28  	SystemFace []face `json:"sysface"`
    29  	Stickers   []ani  `json:"-"`
    30  }
    31  
    32  type face struct {
    33  	QSid         string `json:"QSid"`
    34  	QDes         string `json:"QDes"`
    35  	AniStickerId string `json:"AniStickerId"`
    36  }
    37  
    38  const codeTemplate = `// Code generated by message/generate.go DO NOT EDIT.
    39  
    40  package message
    41  
    42  var faceMap = map[int]string{
    43  {{range .SystemFace}}	{{.QSid}}:	"{{.QDes}}",
    44  {{end}}
    45  }
    46  
    47  var stickerMap = map[int]string{
    48  {{range .Stickers}}	{{.QSid}}:	"{{.StickerID}}",
    49  {{end}}
    50  }
    51  `
    52  
    53  func main() {
    54  	f, _ := os.OpenFile("face.go", os.O_WRONLY|os.O_CREATE|os.O_SYNC|os.O_TRUNC, 0o755)
    55  	defer func() { _ = f.Close() }()
    56  	face, _ := os.ReadFile("face_config_json.zip")
    57  	reader, _ := zip.NewReader(bytes.NewReader(face), int64(len(face)))
    58  	file, _ := reader.Open("face_config.json")
    59  	data, _ := io.ReadAll(file)
    60  	faceConfig := config{}
    61  	_ = json.Unmarshal(data, &faceConfig)
    62  	for i, sysface := range faceConfig.SystemFace {
    63  		faceConfig.SystemFace[i].QDes = strings.TrimPrefix(faceConfig.SystemFace[i].QDes, "/")
    64  		if sysface.AniStickerId != "" {
    65  			faceConfig.Stickers = append(faceConfig.Stickers, ani{
    66  				QSid:      sysface.QSid,
    67  				StickerID: sysface.AniStickerId,
    68  			})
    69  		}
    70  	}
    71  	tmpl, _ := template.New("template").Parse(codeTemplate)
    72  	buffer := &bytes.Buffer{}
    73  	_ = tmpl.Execute(buffer, &faceConfig)
    74  	source, _ := format.Source(buffer.Bytes())
    75  	f.Write(source)
    76  }