Skip to content

Commit 656a0f3

Browse files
Kajiekazzclaude
andcommitted
改进代码样式
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 8f9f134 commit 656a0f3

File tree

4 files changed

+93
-165
lines changed

4 files changed

+93
-165
lines changed

go.mod

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/FloatTech/ZeroBot-Plugin
22

3-
go 1.24.2
3+
go 1.25.1
44

55
require (
66
github.com/Baidu-AIP/golang-sdk v1.1.1
@@ -12,7 +12,7 @@ require (
1212
github.com/FloatTech/sqlite v1.7.2
1313
github.com/FloatTech/ttl v0.0.0-20250224045156-012b1463287d
1414
github.com/FloatTech/zbpctrl v1.7.1
15-
github.com/FloatTech/zbputils v1.7.2-0.20260131170726-494cb1776a47
15+
github.com/FloatTech/zbputils v1.7.2-0.20260117132036-29f021ceb949
1616
github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7
1717
github.com/RomiChan/websocket v1.4.3-0.20251002072000-d3eb41798438
1818
github.com/Tnze/go-mc v1.20.2
@@ -24,17 +24,16 @@ require (
2424
github.com/fumiama/cron v1.3.0
2525
github.com/fumiama/deepinfra v0.0.0-20251221163610-e98ee3ba437a
2626
github.com/fumiama/go-base16384 v1.7.1
27-
github.com/fumiama/go-onebot-agent v0.0.0-20260128132028-05e6b4809f0a
27+
github.com/fumiama/go-onebot-agent v0.0.0-20260117094018-cd93ccfd6e04
2828
github.com/fumiama/go-registry v0.2.7
2929
github.com/fumiama/gotracemoe v0.0.3
30-
github.com/fumiama/imgsz v0.0.4
3130
github.com/fumiama/jieba v0.0.0-20221203025406-36c17a10b565
3231
github.com/fumiama/slowdo v0.0.0-20241001074058-27c4fe5259a4
3332
github.com/fumiama/terasu v1.0.2
3433
github.com/fumiama/unibase2n v0.0.0-20240530074540-ec743fd5a6d6
3534
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
3635
github.com/google/uuid v1.6.0
37-
github.com/guohuiyuan/music-lib v1.0.2-0.20260121020416-53f6cb24629d
36+
github.com/guohuiyuan/music-lib v1.0.3
3837
github.com/jinzhu/gorm v1.9.16
3938
github.com/jozsefsallai/gophersauce v1.0.1
4039
github.com/kanrichan/resvg-go v0.0.2-0.20231001163256-63db194ca9f5
@@ -44,22 +43,21 @@ require (
4443
github.com/mroth/weightedrand v1.0.0
4544
github.com/notnil/chess v1.10.0
4645
github.com/pkg/errors v0.9.1
47-
github.com/shirou/gopsutil/v4 v4.25.12
46+
github.com/shirou/gopsutil/v4 v4.26.1
4847
github.com/sirupsen/logrus v1.9.4
4948
github.com/tidwall/gjson v1.18.0
5049
github.com/wcharczuk/go-chart/v2 v2.1.2
5150
github.com/wdvxdr1123/ZeroBot v1.8.3-0.20260117102541-393033a35adb
5251
gitlab.com/gomidi/midi/v2 v2.3.18
5352
golang.org/x/image v0.34.0
54-
golang.org/x/sys v0.39.0
53+
golang.org/x/sys v0.40.0
5554
golang.org/x/text v0.32.0
5655
)
5756

5857
require (
5958
github.com/PuerkitoBio/goquery v1.8.0 // indirect
6059
github.com/adamzy/cedar-go v0.0.0-20170805034717-80a9c64b256d // indirect
6160
github.com/ajstarks/svgo v0.0.0-20200320125537-f189e35d30ca // indirect
62-
github.com/andybalholm/brotli v1.2.0 // indirect
6361
github.com/andybalholm/cascadia v1.3.1 // indirect
6462
github.com/antchfx/xpath v1.3.5 // indirect
6563
github.com/dustin/go-humanize v1.0.1 // indirect
@@ -68,6 +66,7 @@ require (
6866
github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4 // indirect
6967
github.com/fumiama/go-simple-protobuf v0.2.0 // indirect
7068
github.com/fumiama/gofastTEA v0.1.3 // indirect
69+
github.com/fumiama/imgsz v0.0.4 // indirect
7170
github.com/fumiama/orbyte v0.0.0-20251002065953-3bb358367eb5 // indirect
7271
github.com/gabriel-vasile/mimetype v1.4.12 // indirect
7372
github.com/go-ole/go-ole v1.2.6 // indirect
@@ -77,7 +76,6 @@ require (
7776
github.com/jfreymuth/vorbis v1.0.2 // indirect
7877
github.com/jinzhu/inflection v1.0.0 // indirect
7978
github.com/json-iterator/go v1.1.12 // indirect
80-
github.com/klauspost/compress v1.18.4 // indirect
8179
github.com/liuzl/cedar-go v0.0.0-20170805034717-80a9c64b256d // indirect
8280
github.com/liuzl/da v0.0.0-20180704015230-14771aad5b1d // indirect
8381
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect

go.sum

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ github.com/FloatTech/ttl v0.0.0-20250224045156-012b1463287d h1:mUQ/c3wXKsUGa4Sg9
1616
github.com/FloatTech/ttl v0.0.0-20250224045156-012b1463287d/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs=
1717
github.com/FloatTech/zbpctrl v1.7.1 h1:0yPEmCForhyMbnhTckmjDUFFDZgQp1RjO2bVF4ZVqOs=
1818
github.com/FloatTech/zbpctrl v1.7.1/go.mod h1:xmM4dSwHA02Gei3ogCRiG+RTrw/7Z69PfrN5NYf8BPE=
19-
github.com/FloatTech/zbputils v1.7.2-0.20260131170726-494cb1776a47 h1:slMr6r4XDKnYCFmWhcHA02O3MTAUnU8p2gEe843JyQA=
20-
github.com/FloatTech/zbputils v1.7.2-0.20260131170726-494cb1776a47/go.mod h1:W2kaR/A5oUtEb7DnveXCc0T374VjI+f3KmOWH9FE5vU=
19+
github.com/FloatTech/zbputils v1.7.2-0.20260117132036-29f021ceb949 h1:1AEUIu4up84J4VqrENGyzUuYEIaQ5xYNDwIm00voL5c=
20+
github.com/FloatTech/zbputils v1.7.2-0.20260117132036-29f021ceb949/go.mod h1:uX5JHIADt9/vSIriLZTRwkeVvOVwxOGiDyS5O1lTPGE=
2121
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
2222
github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
2323
github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
@@ -31,8 +31,6 @@ github.com/adamzy/cedar-go v0.0.0-20170805034717-80a9c64b256d h1:ir/IFJU5xbja5Ua
3131
github.com/adamzy/cedar-go v0.0.0-20170805034717-80a9c64b256d/go.mod h1:PRWNwWq0yifz6XDPZu48aSld8BWwBfr2JKB2bGWiEd4=
3232
github.com/ajstarks/svgo v0.0.0-20200320125537-f189e35d30ca h1:kWzLcty5V2rzOqJM7Tp/MfSX0RMSI1x4IOLApEefYxA=
3333
github.com/ajstarks/svgo v0.0.0-20200320125537-f189e35d30ca/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
34-
github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ=
35-
github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
3634
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
3735
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
3836
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
@@ -69,8 +67,8 @@ github.com/fumiama/deepinfra v0.0.0-20251221163610-e98ee3ba437a h1:a0+2vaXajfxsN
6967
github.com/fumiama/deepinfra v0.0.0-20251221163610-e98ee3ba437a/go.mod h1:uqsWK/GM9OvKV0pXZOQB63rWugBbiXInY8E1JoRKhkg=
7068
github.com/fumiama/go-base16384 v1.7.1 h1:1P1x6FWRvd7PtbH4idDAGWAjKKcVxggxlROYKRXbw58=
7169
github.com/fumiama/go-base16384 v1.7.1/go.mod h1:OEn+947GV5gsbTAnyuUW/SrfxJYUdYupSIQXOuGOcXM=
72-
github.com/fumiama/go-onebot-agent v0.0.0-20260128132028-05e6b4809f0a h1:8GYo5nctK2si5WDNX0WmZTxY7TWXRjAOBu5pjK7GDW0=
73-
github.com/fumiama/go-onebot-agent v0.0.0-20260128132028-05e6b4809f0a/go.mod h1:rTrS23rvTYuZcSngENJTvcBFTz1nGsImSv+bW7yfhqs=
70+
github.com/fumiama/go-onebot-agent v0.0.0-20260117094018-cd93ccfd6e04 h1:TAvkyECK+lSVh+AnVSPNfCmeCiYiJCd+z9QQwfjHSuw=
71+
github.com/fumiama/go-onebot-agent v0.0.0-20260117094018-cd93ccfd6e04/go.mod h1:rTrS23rvTYuZcSngENJTvcBFTz1nGsImSv+bW7yfhqs=
7472
github.com/fumiama/go-registry v0.2.7 h1:tLEqgEpsiybQMqBv0dLHm5leia/z1DhajMupwnOHeNs=
7573
github.com/fumiama/go-registry v0.2.7/go.mod h1:m+wp5fF8dYgVoFkBPZl+vlK90loymaJE0JCtocVQLEs=
7674
github.com/fumiama/go-simple-protobuf v0.2.0 h1:ACyN1MAlu7pDR3EszWgzUeNP+IRsSHwH6V9JCJA5R5o=
@@ -119,8 +117,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
119117
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
120118
github.com/gopxl/beep/v2 v2.1.1 h1:6FYIYMm2qPAdWkjX+7xwKrViS1x0Po5kDMdRkq8NVbU=
121119
github.com/gopxl/beep/v2 v2.1.1/go.mod h1:ZAm9TGQ9lvpoiFLd4zf5B1IuyxZhgRACMId1XJbaW0E=
122-
github.com/guohuiyuan/music-lib v1.0.2-0.20260121020416-53f6cb24629d h1:6Cw52c4JaYvq55yAa9ZgUQeBL6b3ZWErQqkbeMZiAYw=
123-
github.com/guohuiyuan/music-lib v1.0.2-0.20260121020416-53f6cb24629d/go.mod h1:D/6kQDwhQFDNZEMjN8y760DQSVYpOGlQXrYzhKz0rCQ=
120+
github.com/guohuiyuan/music-lib v1.0.3 h1:lp1/YrQ+KcJ/Maww8pndrjHXNvWlJ6wXRRCGoyuZiZ8=
121+
github.com/guohuiyuan/music-lib v1.0.3/go.mod h1:3DexVzzLf4nVxdz/b1qpRnDJ7y66TjUaQWjTOCwl1ro=
124122
github.com/jfreymuth/oggvorbis v1.0.5 h1:u+Ck+R0eLSRhgq8WTmffYnrVtSztJcYrl588DM4e3kQ=
125123
github.com/jfreymuth/oggvorbis v1.0.5/go.mod h1:1U4pqWmghcoVsCJJ4fRBKv9peUJMBHixthRlBeD6uII=
126124
github.com/jfreymuth/vorbis v1.0.2 h1:m1xH6+ZI4thH927pgKD8JOH4eaGRm18rEE9/0WKjvNE=
@@ -137,8 +135,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
137135
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
138136
github.com/kanrichan/resvg-go v0.0.2-0.20231001163256-63db194ca9f5 h1:BXnB1Gz4y/zwQh+ZFNy7rgd+ZfMOrwRr4uZSHEI+ieY=
139137
github.com/kanrichan/resvg-go v0.0.2-0.20231001163256-63db194ca9f5/go.mod h1:c9+VS9GaommgIOzNWb5ze4lYwfT8BZ2UDyGiuQTT7yc=
140-
github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c=
141-
github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
142138
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
143139
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
144140
github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4=
@@ -186,8 +182,8 @@ github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt
186182
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
187183
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
188184
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
189-
github.com/shirou/gopsutil/v4 v4.25.12 h1:e7PvW/0RmJ8p8vPGJH4jvNkOyLmbkXgXW4m6ZPic6CY=
190-
github.com/shirou/gopsutil/v4 v4.25.12/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU=
185+
github.com/shirou/gopsutil/v4 v4.26.1 h1:TOkEyriIXk2HX9d4isZJtbjXbEjf5qyKPAzbzY0JWSo=
186+
github.com/shirou/gopsutil/v4 v4.26.1/go.mod h1:medLI9/UNAb0dOI9Q3/7yWSqKkj00u+1tgY8nvv41pc=
191187
github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w=
192188
github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=
193189
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -281,8 +277,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
281277
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
282278
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
283279
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
284-
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
285-
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
280+
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
281+
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
286282
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
287283
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
288284
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=

plugin/crypter/handlers.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
var faceTagRe = regexp.MustCompile(`\{\{face:(\d+)\}\}`)
1616

1717
func parseID(v interface{}) int64 {
18-
n, _ := strconv.ParseInt(fmt.Sprintf("%v", v), 10, 64)
18+
n, _ := strconv.ParseInt(fmt.Sprint(v), 10, 64)
1919
return n
2020
}
2121

@@ -34,17 +34,16 @@ func serializeMsg(segs message.Message) string {
3434

3535
func deserializeMsg(s string) message.Message {
3636
var msg message.Message
37-
last := 0
38-
for _, loc := range faceTagRe.FindAllStringSubmatchIndex(s, -1) {
39-
if loc[0] > last {
40-
msg = append(msg, message.Text(s[last:loc[0]]))
37+
parts := faceTagRe.Split(s, -1)
38+
matches := faceTagRe.FindAllStringSubmatch(s, -1)
39+
for i, part := range parts {
40+
if part != "" {
41+
msg = append(msg, message.Text(part))
42+
}
43+
if i < len(matches) {
44+
id, _ := strconv.Atoi(matches[i][1])
45+
msg = append(msg, message.Face(id))
4146
}
42-
id, _ := strconv.Atoi(s[loc[2]:loc[3]])
43-
msg = append(msg, message.Face(id))
44-
last = loc[1]
45-
}
46-
if last < len(s) {
47-
msg = append(msg, message.Text(s[last:]))
4847
}
4948
return msg
5049
}

plugin/crypter/qqemoji.go

Lines changed: 66 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,131 +1,66 @@
1-
// Package crypter QQ表情加解密
2-
package crypter
3-
4-
import (
5-
"bytes"
6-
"fmt"
7-
"io"
8-
"strings"
9-
"unicode/utf8"
10-
11-
"github.com/andybalholm/brotli"
12-
"github.com/klauspost/compress/zstd"
13-
"github.com/wdvxdr1123/ZeroBot/message"
14-
)
15-
16-
const (
17-
emojiZeroID = 297
18-
emojiOneID = 424
19-
)
20-
21-
func encodeQQEmoji(text string) message.Message {
22-
if text == "" {
23-
return message.Message{message.Text("请输入要加密的文本")}
24-
}
25-
26-
data := []byte(text)
27-
best, header := data, "0"
28-
if br := tryCompress(func(w io.Writer) io.WriteCloser { return brotli.NewWriterLevel(w, brotli.BestCompression) }, data); len(br) > 0 && len(br) < len(best) {
29-
best, header = br, "10"
30-
}
31-
if zs := tryCompress(func(w io.Writer) io.WriteCloser {
32-
enc, _ := zstd.NewWriter(w, zstd.WithEncoderLevel(zstd.SpeedBestCompression))
33-
return enc
34-
}, data); len(zs) > 0 && len(zs) < len(best) {
35-
best, header = zs, "11"
36-
}
37-
38-
var bin strings.Builder
39-
bin.WriteString(header)
40-
for _, b := range best {
41-
fmt.Fprintf(&bin, "%08b", b)
42-
}
43-
44-
s := bin.String()
45-
msg := make(message.Message, 0, len(s))
46-
for _, bit := range s {
47-
if bit == '0' {
48-
msg = append(msg, message.Face(emojiZeroID))
49-
} else {
50-
msg = append(msg, message.Face(emojiOneID))
51-
}
52-
}
53-
return msg
54-
}
55-
56-
func decodeQQEmoji(faceIDs []int) string {
57-
var bin strings.Builder
58-
for _, id := range faceIDs {
59-
if id == emojiZeroID {
60-
bin.WriteByte('0')
61-
} else if id == emojiOneID {
62-
bin.WriteByte('1')
63-
}
64-
}
65-
binary := bin.String()
66-
if len(binary) < 2 {
67-
return "QQ表情密文格式错误"
68-
}
69-
70-
var header int
71-
switch {
72-
case binary[:2] == "11":
73-
header = 2
74-
case binary[:2] == "10":
75-
header = 2
76-
case binary[0] == '0':
77-
header = 1
78-
default:
79-
return "QQ表情密文格式错误"
80-
}
81-
82-
dataBin := binary[header:]
83-
if len(dataBin)%8 != 0 {
84-
return fmt.Sprintf("QQ表情解密失败:数据长度不正确(%d位)", len(dataBin))
85-
}
86-
87-
data := make([]byte, len(dataBin)/8)
88-
for i := range data {
89-
for j := 0; j < 8; j++ {
90-
if dataBin[i*8+j] == '1' {
91-
data[i] |= 1 << (7 - j)
92-
}
93-
}
94-
}
95-
96-
var out []byte
97-
var err error
98-
switch binary[:header] {
99-
case "0":
100-
out = data
101-
case "10":
102-
r := brotli.NewReader(bytes.NewReader(data))
103-
out, err = io.ReadAll(r)
104-
case "11":
105-
var dec *zstd.Decoder
106-
dec, err = zstd.NewReader(bytes.NewReader(data))
107-
if err == nil {
108-
out, err = io.ReadAll(dec)
109-
dec.Close()
110-
}
111-
}
112-
if err != nil {
113-
return fmt.Sprintf("QQ表情解压失败: %v", err)
114-
}
115-
if !utf8.Valid(out) {
116-
return "QQ表情解密失败:结果不是有效文本"
117-
}
118-
return string(out)
119-
}
120-
121-
func tryCompress(newWriter func(io.Writer) io.WriteCloser, data []byte) []byte {
122-
var buf bytes.Buffer
123-
w := newWriter(&buf)
124-
if _, err := w.Write(data); err != nil {
125-
return nil
126-
}
127-
if err := w.Close(); err != nil {
128-
return nil
129-
}
130-
return buf.Bytes()
131-
}
1+
// Package crypter QQ表情加解密
2+
package crypter
3+
4+
import (
5+
"fmt"
6+
"strings"
7+
"unicode/utf8"
8+
9+
"github.com/wdvxdr1123/ZeroBot/message"
10+
)
11+
12+
const (
13+
emojiZeroID = 297
14+
emojiOneID = 424
15+
)
16+
17+
func encodeQQEmoji(text string) message.Message {
18+
if text == "" {
19+
return message.Message{message.Text("请输入要加密的文本")}
20+
}
21+
22+
var bin strings.Builder
23+
for _, b := range []byte(text) {
24+
fmt.Fprintf(&bin, "%08b", b)
25+
}
26+
27+
s := bin.String()
28+
msg := make(message.Message, 0, len(s))
29+
for _, bit := range s {
30+
if bit == '0' {
31+
msg = append(msg, message.Face(emojiZeroID))
32+
} else {
33+
msg = append(msg, message.Face(emojiOneID))
34+
}
35+
}
36+
return msg
37+
}
38+
39+
func decodeQQEmoji(faceIDs []int) string {
40+
var bin strings.Builder
41+
for _, id := range faceIDs {
42+
if id == emojiZeroID {
43+
bin.WriteByte('0')
44+
} else if id == emojiOneID {
45+
bin.WriteByte('1')
46+
}
47+
}
48+
binary := bin.String()
49+
if len(binary) == 0 || len(binary)%8 != 0 {
50+
return "QQ表情密文格式错误"
51+
}
52+
53+
data := make([]byte, len(binary)/8)
54+
for i := range data {
55+
for j := 0; j < 8; j++ {
56+
if binary[i*8+j] == '1' {
57+
data[i] |= 1 << (7 - j)
58+
}
59+
}
60+
}
61+
62+
if !utf8.Valid(data) {
63+
return "QQ表情解密失败:结果不是有效文本"
64+
}
65+
return string(data)
66+
}

0 commit comments

Comments
 (0)