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 }