diff --git a/cmd/gocq/login.go b/cmd/gocq/login.go index 0dc4ccc0f..40ea0dfa6 100644 --- a/cmd/gocq/login.go +++ b/cmd/gocq/login.go @@ -14,7 +14,7 @@ import ( "github.com/LagrangeDev/LagrangeGo/client" "github.com/LagrangeDev/LagrangeGo/client/auth" "github.com/LagrangeDev/LagrangeGo/client/packets/wtlogin/qrcodestate" - "github.com/LagrangeDev/LagrangeGo/utils" + "github.com/LagrangeDev/LagrangeGo/utils/io" "github.com/mattn/go-colorable" "github.com/pkg/errors" log "github.com/sirupsen/logrus" @@ -81,7 +81,7 @@ func printQRCode(imgData []byte) { } bound := img.Bounds().Max.X - buf := make([]byte, 0, (bound+1)*(bound/2+utils.Ternary(bound%2 == 0, 0, 1))) + buf := make([]byte, 0, (bound+1)*(bound/2+io.Ternary(bound%2 == 0, 0, 1))) padding := 0 lastColor := img.At(padding, padding).(color.Gray).Y @@ -94,7 +94,7 @@ func printQRCode(imgData []byte) { for y := padding; y < bound-padding; y += 2 { for x := padding; x < bound-padding; x++ { isUpWhite := img.At(x, y).(color.Gray).Y == 255 - isDownWhite := utils.Ternary(y < bound-padding, img.At(x, y+1).(color.Gray).Y == 255, false) + isDownWhite := io.Ternary(y < bound-padding, img.At(x, y+1).(color.Gray).Y == 255, false) switch { case !isUpWhite && !isDownWhite: @@ -277,7 +277,7 @@ func getTicket(u string) (string, string) { log.Warnf("2. 手动抓取提交") log.Warn("请输入(1 - 2):") text := readLine() - id := utils.NewUUID() + id := io.NewUUID() auto := !strings.Contains(text, "2") // TODO 自动获取验证码 if auto { diff --git a/cmd/gocq/main.go b/cmd/gocq/main.go index c23f74a27..329491b71 100644 --- a/cmd/gocq/main.go +++ b/cmd/gocq/main.go @@ -17,8 +17,8 @@ import ( "github.com/LagrangeDev/LagrangeGo/client" "github.com/LagrangeDev/LagrangeGo/client/auth" "github.com/LagrangeDev/LagrangeGo/client/packets/pb/action" - "github.com/LagrangeDev/LagrangeGo/utils" "github.com/LagrangeDev/LagrangeGo/utils/crypto" + "github.com/LagrangeDev/LagrangeGo/utils/io" para "github.com/fumiama/go-hide-param" rotatelogs "github.com/lestrrat-go/file-rotatelogs" log "github.com/sirupsen/logrus" @@ -377,7 +377,7 @@ func LoginInteract() { if uint(base.Account.Status) >= 3000 { base.Account.Status = 10 } - _ = cli.SetOnlineStatus(utils.Ternary(base.Account.Status >= 1000, action.SetStatus{ + _ = cli.SetOnlineStatus(io.Ternary(base.Account.Status >= 1000, action.SetStatus{ Status: 10, ExtStatus: uint32(base.Account.Status), }, action.SetStatus{Status: uint32(base.Account.Status)})) @@ -488,19 +488,19 @@ type protocolLogger struct{} const fromProtocol = "Protocol -> " -func (p protocolLogger) Info(format string, arg ...any) { +func (p protocolLogger) Infof(format string, arg ...any) { log.Infof(fromProtocol+format, arg...) } -func (p protocolLogger) Warning(format string, arg ...any) { +func (p protocolLogger) Warningf(format string, arg ...any) { log.Warnf(fromProtocol+format, arg...) } -func (p protocolLogger) Debug(format string, arg ...any) { +func (p protocolLogger) Debugf(format string, arg ...any) { log.Debugf(fromProtocol+format, arg...) } -func (p protocolLogger) Error(format string, arg ...any) { +func (p protocolLogger) Errorf(format string, arg ...any) { log.Errorf(fromProtocol+format, arg...) } diff --git a/cmd/gocq/sign.go b/cmd/gocq/sign.go index 642911bce..84a5d084b 100644 --- a/cmd/gocq/sign.go +++ b/cmd/gocq/sign.go @@ -17,7 +17,7 @@ import ( "github.com/LagrangeDev/LagrangeGo/client/auth" "github.com/LagrangeDev/LagrangeGo/client/sign" - "github.com/LagrangeDev/LagrangeGo/utils" + "github.com/LagrangeDev/LagrangeGo/utils/io" log "github.com/sirupsen/logrus" "github.com/Mrs4s/go-cqhttp/internal/base" @@ -113,7 +113,7 @@ func (c *signer) AddRequestHeader(header map[string]string) { func (c *signer) AddSignServer(signServers ...string) { c.lock.Lock() defer c.lock.Unlock() - c.instances = append(c.instances, utils.Map[string, *remote](signServers, func(s string) *remote { + c.instances = append(c.instances, io.Map(signServers, func(s string) *remote { return &remote{server: s} })...) } @@ -122,7 +122,7 @@ func (c *signer) AddSignServer(signServers ...string) { func (c *signer) GetSignServer() []string { c.lock.RLock() defer c.lock.RUnlock() - return utils.Map(c.instances, func(sign *remote) string { + return io.Map(c.instances, func(sign *remote) string { return sign.server }) } diff --git a/coolq/api.go b/coolq/api.go index d40c80a9d..0b18ee77e 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -19,8 +19,8 @@ import ( "github.com/LagrangeDev/LagrangeGo/client/entity" "github.com/LagrangeDev/LagrangeGo/client/sign" "github.com/LagrangeDev/LagrangeGo/message" - "github.com/LagrangeDev/LagrangeGo/utils" "github.com/LagrangeDev/LagrangeGo/utils/binary" + "github.com/LagrangeDev/LagrangeGo/utils/io" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" @@ -272,7 +272,7 @@ func (bot *CQBot) CQUploadGroupFile(groupID int64, file, name, folder string) gl log.Warnf("上传群文件 %v 失败: 文件不存在", file) return Failed(100, "FILE_NOT_FOUND", "文件不存在") } - if err := bot.Client.SendGroupFile(uint32(groupID), file, name, utils.Ternary(folder == "", "/", folder)); err != nil { + if err := bot.Client.SendGroupFile(uint32(groupID), file, name, io.Ternary(folder == "", "/", folder)); err != nil { log.Warnf("上传群 %v 文件 %v 失败: %v", groupID, file, err) return Failed(100, "FILE_SYSTEM_UPLOAD_API_ERROR", err.Error()) } @@ -837,9 +837,9 @@ func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bo return Failed(100, "FLAG_HAS_BEEN_CHECKED", "消息已被处理") } if approve { - _ = bot.Client.SetGroupRequest(req.IsFiltered, true, req.Sequence, uint32(req.EventType), req.GroupUin, "") + _ = bot.Client.SetGroupRequest(req.IsFiltered, entity.GroupRequestOperateAllow, req.Sequence, uint32(req.EventType), req.GroupUin, "") } else { - _ = bot.Client.SetGroupRequest(req.IsFiltered, false, req.Sequence, uint32(req.EventType), req.GroupUin, reason) + _ = bot.Client.SetGroupRequest(req.IsFiltered, entity.GroupRequestOperateDeny, req.Sequence, uint32(req.EventType), req.GroupUin, reason) } return OK(nil) } @@ -852,9 +852,9 @@ func (bot *CQBot) CQProcessGroupRequest(flag, subType, reason string, approve bo return Failed(100, "FLAG_HAS_BEEN_CHECKED", "消息已被处理") } if approve { - _ = bot.Client.SetGroupRequest(req.IsFiltered, true, req.Sequence, uint32(req.EventType), req.GroupUin, "") + _ = bot.Client.SetGroupRequest(req.IsFiltered, entity.GroupRequestOperateAllow, req.Sequence, uint32(req.EventType), req.GroupUin, "") } else { - _ = bot.Client.SetGroupRequest(req.IsFiltered, false, req.Sequence, uint32(req.EventType), req.GroupUin, reason) + _ = bot.Client.SetGroupRequest(req.IsFiltered, entity.GroupRequestOperateDeny, req.Sequence, uint32(req.EventType), req.GroupUin, reason) } return OK(nil) } @@ -1057,7 +1057,7 @@ func (bot *CQBot) CQHandleQuickOperation(context, operation gjson.Result) global }, }) - err := json.Unmarshal(utils.S2B(reply.Raw), &replySegments) + err := json.Unmarshal(io.S2B(reply.Raw), &replySegments) if err != nil { log.WithError(err).Warnf("处理 at_sender 过程中发生错误") return Failed(-1, "处理 at_sender 过程中发生错误", err.Error()) @@ -1071,7 +1071,7 @@ func (bot *CQBot) CQHandleQuickOperation(context, operation gjson.Result) global return Failed(-1, "处理 at_sender 过程中发生错误", err.Error()) } - reply = gjson.Parse(utils.B2S(modified)) + reply = gjson.Parse(io.B2S(modified)) } else if at && reply.Type == gjson.String { reply = gjson.Parse(fmt.Sprintf( "\"[CQ:at,qq=%d]%s\"", @@ -1141,11 +1141,12 @@ func (bot *CQBot) CQGetImage(file string) global.MSG { if err == nil { r := binary.NewReader(b) - r.ReadBytes(16) + r.SkipBytes(16) msg := global.MSG{ "size": r.ReadI32(), "filename": r.ReadStringWithLength("u32", true), "url": r.ReadStringWithLength("u32", true), + "fileuuid": r.ReadStringWithLength("u32", true), } local := path.Join(global.CachePath, file+path.Ext(msg["filename"].(string))) if !global.FileExists(local) { diff --git a/coolq/bot.go b/coolq/bot.go index 205a1d2a1..b453eab36 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -17,8 +17,8 @@ import ( event2 "github.com/LagrangeDev/LagrangeGo/client/event" "github.com/LagrangeDev/LagrangeGo/client/sign" "github.com/LagrangeDev/LagrangeGo/message" - "github.com/LagrangeDev/LagrangeGo/utils" "github.com/LagrangeDev/LagrangeGo/utils/binary" + "github.com/LagrangeDev/LagrangeGo/utils/io" "github.com/RomiChan/syncx" "github.com/pkg/errors" log "github.com/sirupsen/logrus" @@ -67,7 +67,7 @@ func (e *Event) JSONBytes() []byte { // by lazy marshalling. func (e *Event) JSONString() string { e.once.Do(e.marshal) - return utils.B2S(e.buffer.Bytes()) + return io.B2S(e.buffer.Bytes()) } // NewQQBot 初始化一个QQBot实例 @@ -426,12 +426,12 @@ func (bot *CQBot) InsertGroupMessage(m *message.GroupMessage, source message.Sou Timestamp: int64(m.Time), }, GroupCode: int64(m.GroupUin), - AnonymousID: func() string { - if m.Sender.IsAnonymous() { - return m.Sender.AnonymousInfo.AnonymousID - } - return "" - }(), + // AnonymousID: func() string { + // if m.Sender.IsAnonymous() { + // return m.Sender.AnonymousInfo.AnonymousID + // } + // return "" + // }(), Content: ToMessageContent(m.Elements, source), } if replyElem != nil { @@ -557,8 +557,5 @@ func formatMemberName(mem *entity.GroupMember) string { // encodeMessageID 临时先这样, 暂时用不上 func encodeMessageID(target int64, seq int32) string { - return hex.EncodeToString(binary.NewWriterF(func(w *binary.Builder) { - w.WriteU64(uint64(target)) - w.WriteU32(uint32(seq)) - })) + return hex.EncodeToString(binary.NewBuilder().WriteU64(uint64(target)).WriteU32(uint32(seq)).ToBytes()) } diff --git a/coolq/converter.go b/coolq/converter.go index 5ee70481f..b639e66ea 100644 --- a/coolq/converter.go +++ b/coolq/converter.go @@ -73,44 +73,44 @@ func (bot *CQBot) formatGroupMessage(m *message.GroupMessage) *event { }, "user_id": m.Sender.Uin, } - if m.Sender.IsAnonymous() { - gm["anonymous"] = global.MSG{ - "flag": m.Sender.AnonymousInfo.AnonymousID + "|" + m.Sender.AnonymousInfo.AnonymousNick, - "id": m.Sender.Uin, - "name": m.Sender.AnonymousInfo.AnonymousNick, + // if m.Sender.IsAnonymous() { + // gm["anonymous"] = global.MSG{ + // "flag": m.Sender.AnonymousInfo.AnonymousID + "|" + m.Sender.AnonymousInfo.AnonymousNick, + // "id": m.Sender.Uin, + // "name": m.Sender.AnonymousInfo.AnonymousNick, + // } + // gm["sender"].(global.MSG)["nickname"] = "匿名消息" + // typ = "message/group/anonymous" + // } else { + mem := bot.Client.GetCachedMemberInfo(m.Sender.Uin, m.GroupUin) + if mem == nil { + log.Warnf("获取 %v 成员信息失败,尝试刷新成员列表", m.Sender.Uin) + err := bot.Client.RefreshGroupMembersCache(m.GroupUin) + if err != nil { + log.Warnf("刷新群 %v 成员列表失败: %v", m.GroupUin, err) + return nil } - gm["sender"].(global.MSG)["nickname"] = "匿名消息" - typ = "message/group/anonymous" - } else { - mem := bot.Client.GetCachedMemberInfo(m.Sender.Uin, m.GroupUin) + mem = bot.Client.GetCachedMemberInfo(m.Sender.Uin, m.GroupUin) if mem == nil { - log.Warnf("获取 %v 成员信息失败,尝试刷新成员列表", m.Sender.Uin) - err := bot.Client.RefreshGroupMembersCache(m.GroupUin) - if err != nil { - log.Warnf("刷新群 %v 成员列表失败: %v", m.GroupUin, err) - return nil - } - mem = bot.Client.GetCachedMemberInfo(m.Sender.Uin, m.GroupUin) - if mem == nil { - return nil - } + return nil } - ms := gm["sender"].(global.MSG) - role := "member" - switch mem.Permission { // nolint:exhaustive - case entity.Owner: - role = "owner" - case entity.Admin: - role = "admin" - case entity.Member: - role = "member" - } - ms["role"] = role - ms["nickname"] = m.Sender.Nickname - ms["card"] = m.Sender.CardName - // TODO 获取专属头衔 - ms["title"] = "" } + ms := gm["sender"].(global.MSG) + role := "member" + switch mem.Permission { // nolint:exhaustive + case entity.Owner: + role = "owner" + case entity.Admin: + role = "admin" + case entity.Member: + role = "member" + } + ms["role"] = role + ms["nickname"] = m.Sender.Nickname + ms["card"] = m.Sender.CardName + // TODO 获取专属头衔 + ms["title"] = "" + // } ev := bot.event(typ, gm) ev.Time = int64(m.Time) return ev diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 2cc0e2707..adf330c14 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -17,9 +17,9 @@ import ( "github.com/LagrangeDev/LagrangeGo/client/packets/pb/service/oidb" "github.com/LagrangeDev/LagrangeGo/message" - "github.com/LagrangeDev/LagrangeGo/utils" "github.com/LagrangeDev/LagrangeGo/utils/binary" "github.com/LagrangeDev/LagrangeGo/utils/crypto" + lgrio "github.com/LagrangeDev/LagrangeGo/utils/io" b14 "github.com/fumiama/go-base16384" "github.com/segmentio/asm/base64" log "github.com/sirupsen/logrus" @@ -940,7 +940,7 @@ func (bot *CQBot) makeImageOrVideoElem(elem msg.Element, video bool, sourceType return &msg.LocalImage{Stream: bytes.NewReader(b), URL: f}, nil } if !video && strings.HasPrefix(f, "base16384") { - b, err := b14.UTF82UTF16BE(utils.S2B(strings.TrimPrefix(f, "base16384://"))) + b, err := b14.UTF82UTF16BE(lgrio.S2B(strings.TrimPrefix(f, "base16384://"))) if err != nil { return nil, err } diff --git a/coolq/event.go b/coolq/event.go index 1179ff582..8da75edbe 100644 --- a/coolq/event.go +++ b/coolq/event.go @@ -533,11 +533,14 @@ func (bot *CQBot) checkMedia(e []message.IMessageElement, source message.Source) // i.URL = u // } //} - data := binary.NewWriterF(func(w *binary.Builder) { - _, _ = w.Write(i.Md5) - w.WritePacketString(i.FileUUID, "u32", true) - w.WritePacketString(i.ImageID, "u32", true) - }) + // 根据 https://github.com/Mrs4s/go-cqhttp/blob/a5923f179b360331786a6509eb33481e775a7bd1/coolq/event.go#L663-L669 修复 + data := binary.NewBuilder(). + WriteBytes(i.Md5). + WriteU32(i.Size). + WritePacketString(i.ImageID, "u32", true). + WritePacketString(i.URL, "u32", true). + WritePacketString(i.FileUUID, "u32", true). + ToBytes() cache.Image.Insert(i.Md5, data) case *message.VoiceElement: @@ -552,14 +555,14 @@ func (bot *CQBot) checkMedia(e []message.IMessageElement, source message.Source) } } case *message.ShortVideoElement: - data := binary.NewWriterF(func(w *binary.Builder) { - w.WriteBool(source.SourceType == message.SourceGroup) - w.WriteBytes(i.Md5) - w.WriteBytes(i.Sha1) - w.WritePacketString(i.Name, "u32", true) - w.WritePacketString(i.UUID, "u32", true) - w.WriteU32(uint32(source.PrimaryID)) - }) + data := binary.NewBuilder(). + WriteBool(source.SourceType == message.SourceGroup). + WriteBytes(i.Md5). + WriteBytes(i.Sha1). + WritePacketString(i.Name, "u32", true). + WritePacketString(i.UUID, "u32", true). + WriteU32(uint32(source.PrimaryID)). + ToBytes() filename := hex.EncodeToString(i.Md5) + ".video" cache.Video.Insert(i.Md5, data) if source.SourceType == message.SourceGroup { diff --git a/db/leveldb/leveldb.go b/db/leveldb/leveldb.go index f46c3ef71..bd611ceb3 100644 --- a/db/leveldb/leveldb.go +++ b/db/leveldb/leveldb.go @@ -3,8 +3,8 @@ package leveldb import ( "path" - "github.com/LagrangeDev/LagrangeGo/utils" "github.com/LagrangeDev/LagrangeGo/utils/binary" + lgrio "github.com/LagrangeDev/LagrangeGo/utils/io" "github.com/pkg/errors" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/opt" @@ -46,7 +46,7 @@ func (ldb *database) Open() error { } func (ldb *database) GetMessageByGlobalID(id int32) (_ db.StoredMessage, err error) { - v, err := ldb.db.Get(binary.ToBytes(id), nil) + v, err := ldb.db.Get(binary.NewBuilder().WriteI32(id).ToBytes(), nil) if err != nil || len(v) == 0 { return nil, errors.Wrap(err, "get value error") } @@ -55,7 +55,7 @@ func (ldb *database) GetMessageByGlobalID(id int32) (_ db.StoredMessage, err err err = errors.Errorf("%v", r) } }() - r, err := newReader(utils.B2S(v)) + r, err := newReader(lgrio.B2S(v)) if err != nil { return nil, err } @@ -97,7 +97,7 @@ func (ldb *database) InsertGroupMessage(msg *db.StoredGroupMessage) error { w := newWriter() w.uvarint(group) w.writeStoredGroupMessage(msg) - err := ldb.db.Put(binary.ToBytes(msg.GlobalID), w.bytes(), nil) + err := ldb.db.Put(binary.NewBuilder().WriteI32(msg.GlobalID).ToBytes(), w.bytes(), nil) return errors.Wrap(err, "put data error") } @@ -105,6 +105,6 @@ func (ldb *database) InsertPrivateMessage(msg *db.StoredPrivateMessage) error { w := newWriter() w.uvarint(private) w.writeStoredPrivateMessage(msg) - err := ldb.db.Put(binary.ToBytes(msg.GlobalID), w.bytes(), nil) + err := ldb.db.Put(binary.NewBuilder().WriteI32(msg.GlobalID).ToBytes(), w.bytes(), nil) return errors.Wrap(err, "put data error") } diff --git a/db/sqlite3/sqlite3.go b/db/sqlite3/sqlite3.go index a722994cc..cb86cf035 100644 --- a/db/sqlite3/sqlite3.go +++ b/db/sqlite3/sqlite3.go @@ -9,8 +9,8 @@ import ( "time" sql "github.com/FloatTech/sqlite" - "github.com/LagrangeDev/LagrangeGo/utils" "github.com/LagrangeDev/LagrangeGo/utils/binary" + lgrio "github.com/LagrangeDev/LagrangeGo/utils/io" "github.com/pkg/errors" log "github.com/sirupsen/logrus" "gopkg.in/yaml.v3" @@ -130,7 +130,7 @@ func (s *database) GetGroupMessageByGlobalID(id int32) (*db.StoredGroupMessage, ret.SubType = grpmsg.SubType ret.GroupCode = grpmsg.GroupCode ret.AnonymousID = grpmsg.AnonymousID - _ = yaml.Unmarshal(utils.S2B(grpmsg.Content), &ret) + _ = yaml.Unmarshal(lgrio.S2B(grpmsg.Content), &ret) if grpmsg.AttributeID != 0 { var attr StoredMessageAttribute s.RLock() @@ -162,7 +162,7 @@ func (s *database) GetGroupMessageByGlobalID(id int32) (*db.StoredGroupMessage, PrevID: quoinf.PrevID, PrevGlobalID: quoinf.PrevGlobalID, } - _ = yaml.Unmarshal(utils.S2B(quoinf.QuotedContent), &ret.QuotedInfo) + _ = yaml.Unmarshal(lgrio.S2B(quoinf.QuotedContent), &ret.QuotedInfo) } } return &ret, nil @@ -182,7 +182,7 @@ func (s *database) GetPrivateMessageByGlobalID(id int32) (*db.StoredPrivateMessa ret.SubType = privmsg.SubType ret.SessionUin = privmsg.SessionUin ret.TargetUin = privmsg.TargetUin - _ = yaml.Unmarshal(utils.S2B(privmsg.Content), &ret) + _ = yaml.Unmarshal(lgrio.S2B(privmsg.Content), &ret) if privmsg.AttributeID != 0 { var attr StoredMessageAttribute s.RLock() @@ -214,7 +214,7 @@ func (s *database) GetPrivateMessageByGlobalID(id int32) (*db.StoredPrivateMessa PrevID: quoinf.PrevID, PrevGlobalID: quoinf.PrevGlobalID, } - _ = yaml.Unmarshal(utils.S2B(quoinf.QuotedContent), &ret.QuotedInfo) + _ = yaml.Unmarshal(lgrio.S2B(quoinf.QuotedContent), &ret.QuotedInfo) } } return &ret, nil @@ -230,13 +230,13 @@ func (s *database) InsertGroupMessage(msg *db.StoredGroupMessage) error { } h := crc64.New(crc64.MakeTable(crc64.ISO)) if msg.Attribute != nil { - h.Write(binary.NewWriterF(func(w *binary.Builder) { - w.WriteU32(uint32(msg.Attribute.MessageSeq)) - w.WriteU32(uint32(msg.Attribute.InternalID)) - w.WriteU64(uint64(msg.Attribute.SenderUin)) - w.WriteU64(uint64(msg.Attribute.Timestamp)) - })) - h.Write(utils.S2B(msg.Attribute.SenderName)) + h.Write(binary.NewBuilder(). + WriteI32(msg.Attribute.MessageSeq). + WriteI32(msg.Attribute.InternalID). + WriteI64(msg.Attribute.SenderUin). + WriteI64(msg.Attribute.Timestamp). + ToBytes()) + h.Write(lgrio.S2B(msg.Attribute.SenderName)) id := int64(h.Sum64()) if id == 0 { id++ @@ -262,10 +262,8 @@ func (s *database) InsertGroupMessage(msg *db.StoredGroupMessage) error { h.Reset() } if msg.QuotedInfo != nil { - h.Write(utils.S2B(msg.QuotedInfo.PrevID)) - h.Write(binary.NewWriterF(func(w *binary.Builder) { - w.WriteU32(uint32(msg.QuotedInfo.PrevGlobalID)) - })) + h.Write(lgrio.S2B(msg.QuotedInfo.PrevID)) + h.Write(binary.NewBuilder().WriteI32(msg.QuotedInfo.PrevGlobalID).ToBytes()) content, err := yaml.Marshal(&msg.QuotedInfo) if err != nil { return errors.Wrap(err, "insert marshal QuotedContent error") @@ -280,7 +278,7 @@ func (s *database) InsertGroupMessage(msg *db.StoredGroupMessage) error { ID: id, PrevID: msg.QuotedInfo.PrevID, PrevGlobalID: msg.QuotedInfo.PrevGlobalID, - QuotedContent: utils.B2S(content), + QuotedContent: lgrio.B2S(content), }) s.Unlock() if err == nil { @@ -291,7 +289,7 @@ func (s *database) InsertGroupMessage(msg *db.StoredGroupMessage) error { if err != nil { return errors.Wrap(err, "insert marshal Content error") } - grpmsg.Content = utils.B2S(content) + grpmsg.Content = lgrio.B2S(content) s.Lock() err = s.db.Insert(Sqlite3GroupMessageTableName, grpmsg) s.Unlock() @@ -311,13 +309,13 @@ func (s *database) InsertPrivateMessage(msg *db.StoredPrivateMessage) error { } h := crc64.New(crc64.MakeTable(crc64.ISO)) if msg.Attribute != nil { - h.Write(binary.NewWriterF(func(w *binary.Builder) { - w.WriteU32(uint32(msg.Attribute.MessageSeq)) - w.WriteU32(uint32(msg.Attribute.InternalID)) - w.WriteU64(uint64(msg.Attribute.SenderUin)) - w.WriteU64(uint64(msg.Attribute.Timestamp)) - })) - h.Write(utils.S2B(msg.Attribute.SenderName)) + h.Write(binary.NewBuilder(). + WriteI32(msg.Attribute.MessageSeq). + WriteI32(msg.Attribute.InternalID). + WriteI64(msg.Attribute.SenderUin). + WriteI64(msg.Attribute.Timestamp). + ToBytes()) + h.Write(lgrio.S2B(msg.Attribute.SenderName)) id := int64(h.Sum64()) if id == 0 { id++ @@ -343,10 +341,8 @@ func (s *database) InsertPrivateMessage(msg *db.StoredPrivateMessage) error { h.Reset() } if msg.QuotedInfo != nil { - h.Write(utils.S2B(msg.QuotedInfo.PrevID)) - h.Write(binary.NewWriterF(func(w *binary.Builder) { - w.WriteU32(uint32(msg.QuotedInfo.PrevGlobalID)) - })) + h.Write(lgrio.S2B(msg.QuotedInfo.PrevID)) + h.Write(binary.NewBuilder().WriteI32(msg.QuotedInfo.PrevGlobalID).ToBytes()) content, err := yaml.Marshal(&msg.QuotedInfo) if err != nil { return errors.Wrap(err, "insert marshal QuotedContent error") @@ -361,7 +357,7 @@ func (s *database) InsertPrivateMessage(msg *db.StoredPrivateMessage) error { ID: id, PrevID: msg.QuotedInfo.PrevID, PrevGlobalID: msg.QuotedInfo.PrevGlobalID, - QuotedContent: utils.B2S(content), + QuotedContent: lgrio.B2S(content), }) s.Unlock() if err == nil { @@ -372,7 +368,7 @@ func (s *database) InsertPrivateMessage(msg *db.StoredPrivateMessage) error { if err != nil { return errors.Wrap(err, "insert marshal Content error") } - privmsg.Content = utils.B2S(content) + privmsg.Content = lgrio.B2S(content) s.Lock() err = s.db.Insert(Sqlite3PrivateMessageTableName, privmsg) s.Unlock() diff --git a/global/buffer.go b/global/buffer.go index 4ff2ff4ee..ef2c68d9a 100644 --- a/global/buffer.go +++ b/global/buffer.go @@ -2,23 +2,18 @@ package global import ( "bytes" - - "github.com/LagrangeDev/LagrangeGo/utils/binary" - "github.com/RomiChan/syncx" + "sync" ) -var bufferTable syncx.Map[*bytes.Buffer, *binary.Builder] +var bufferPool = sync.Pool{New: func() interface{} { return &bytes.Buffer{} }} // NewBuffer 从池中获取新 bytes.Buffer func NewBuffer() *bytes.Buffer { - builder := binary.SelectBuilder(nil) - bufferTable.Store(builder.Buffer(), builder) - return builder.Buffer() + return bufferPool.Get().(*bytes.Buffer) } // PutBuffer 将 Buffer放入池中 func PutBuffer(buf *bytes.Buffer) { - if v, ok := bufferTable.LoadAndDelete(buf); ok { - binary.PutBuilder(v) - } + buf.Reset() + bufferPool.Put(buf) } diff --git a/global/fs.go b/global/fs.go index ab1264f5d..c85e9b193 100644 --- a/global/fs.go +++ b/global/fs.go @@ -12,7 +12,7 @@ import ( "runtime" "strings" - "github.com/LagrangeDev/LagrangeGo/utils" + lgrio "github.com/LagrangeDev/LagrangeGo/utils/io" b14 "github.com/fumiama/go-base16384" "github.com/segmentio/asm/base64" log "github.com/sirupsen/logrus" @@ -63,7 +63,7 @@ func ReadAllText(path string) string { // WriteAllText 将给定text写入给定path func WriteAllText(path, text string) error { - return os.WriteFile(path, utils.S2B(text), 0o644) + return os.WriteFile(path, lgrio.S2B(text), 0o644) } // Check 检测err是否为nil @@ -103,7 +103,7 @@ func FindFile(file, cache, p string) (data []byte, err error) { return nil, err } case strings.HasPrefix(file, "base16384"): - data, err = b14.UTF82UTF16BE(utils.S2B(strings.TrimPrefix(file, "base16384://"))) + data, err = b14.UTF82UTF16BE(lgrio.S2B(strings.TrimPrefix(file, "base16384://"))) if err != nil { return nil, err } diff --git a/go.mod b/go.mod index bf1c9f830..fb0f65fff 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,12 @@ module github.com/Mrs4s/go-cqhttp -go 1.20 +go 1.23.0 + +toolchain go1.24.6 require ( github.com/FloatTech/sqlite v1.6.3 - github.com/LagrangeDev/LagrangeGo v0.1.4-0.20250216101915-d8933a0b7ce3 + github.com/LagrangeDev/LagrangeGo v0.1.5-0.20251001132945-eb83ec64ad9f github.com/Microsoft/go-winio v0.6.2-0.20230724192519-b29bbd58a65a github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7 github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5 @@ -20,10 +22,10 @@ require ( github.com/tidwall/gjson v1.18.0 github.com/wdvxdr1123/go-silk v0.0.0-20210316130616-d47b553def60 go.mongodb.org/mongo-driver v1.12.0 - golang.org/x/crypto v0.33.0 + golang.org/x/crypto v0.39.0 golang.org/x/image v0.24.0 - golang.org/x/sys v0.30.0 - golang.org/x/term v0.29.0 + golang.org/x/sys v0.33.0 + golang.org/x/term v0.32.0 golang.org/x/time v0.3.0 gopkg.ilharper.com/x/isatty v1.1.1 gopkg.in/yaml.v3 v3.0.1 @@ -35,6 +37,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/fumiama/gofastTEA v0.1.3 // indirect github.com/fumiama/imgsz v0.0.4 // indirect + github.com/fumiama/orbyte v0.0.0-20250512155242-23a2b7120589 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/jonboulle/clockwork v0.3.0 // indirect @@ -51,11 +54,11 @@ require ( github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.35.0 // indirect - golang.org/x/sync v0.11.0 // indirect - golang.org/x/text v0.22.0 // indirect - golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + golang.org/x/mod v0.25.0 // indirect + golang.org/x/net v0.41.0 // indirect + golang.org/x/sync v0.15.0 // indirect + golang.org/x/text v0.26.0 // indirect + golang.org/x/tools v0.33.0 // indirect lukechampine.com/uint128 v1.2.0 // indirect modernc.org/cc/v3 v3.40.0 // indirect modernc.org/ccgo/v3 v3.16.13 // indirect diff --git a/go.sum b/go.sum index 6b737bd3b..459f1ed13 100644 --- a/go.sum +++ b/go.sum @@ -2,14 +2,8 @@ github.com/FloatTech/sqlite v1.6.3 h1:MQkqBNlkPuCoKQQgoNLuTL/2Ci3tBTFAnVYBdD0Wy4 github.com/FloatTech/sqlite v1.6.3/go.mod h1:zFbHzRfB+CJ+VidfjuVbrcin3DAz283F7hF1hIeHzpY= github.com/FloatTech/ttl v0.0.0-20230307105452-d6f7b2b647d1 h1:g4pTnDJUW4VbJ9NvoRfUvdjDrHz/6QhfN/LoIIpICbo= github.com/FloatTech/ttl v0.0.0-20230307105452-d6f7b2b647d1/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs= -github.com/LagrangeDev/LagrangeGo v0.1.3 h1:RxN5RuujSwFy1gZneN1xuaES4yXUu502Jino+5/3oiA= -github.com/LagrangeDev/LagrangeGo v0.1.3/go.mod h1:DaPYW9z4rtbdulFPbsWjWbFXPCV3qN727WFvgPxu5a8= -github.com/LagrangeDev/LagrangeGo v0.1.4-0.20250215085534-99664b031878 h1:0d0hvXT3tEbh+7oDtOVtu0SMDHc86hS0QXSnFbKYS3s= -github.com/LagrangeDev/LagrangeGo v0.1.4-0.20250215085534-99664b031878/go.mod h1:DaPYW9z4rtbdulFPbsWjWbFXPCV3qN727WFvgPxu5a8= -github.com/LagrangeDev/LagrangeGo v0.1.4-0.20250215120607-a6a857de8a4b h1:CLTKQUuFfpbdZTcwW9DxYqdQKet2GbM3w/weN7hWubQ= -github.com/LagrangeDev/LagrangeGo v0.1.4-0.20250215120607-a6a857de8a4b/go.mod h1:DaPYW9z4rtbdulFPbsWjWbFXPCV3qN727WFvgPxu5a8= -github.com/LagrangeDev/LagrangeGo v0.1.4-0.20250216101915-d8933a0b7ce3 h1:THjWpicpDICU0fgcTdhaCfP2fd+wCw+DTMlLvQMmLLw= -github.com/LagrangeDev/LagrangeGo v0.1.4-0.20250216101915-d8933a0b7ce3/go.mod h1:DaPYW9z4rtbdulFPbsWjWbFXPCV3qN727WFvgPxu5a8= +github.com/LagrangeDev/LagrangeGo v0.1.5-0.20251001132945-eb83ec64ad9f h1:Ve9BWKDQOXVsnHnIRFzoCco6vzGX4HfdZqOxXDHcoqM= +github.com/LagrangeDev/LagrangeGo v0.1.5-0.20251001132945-eb83ec64ad9f/go.mod h1:qwYPEv+WsrOeAKelGXbNerqY1FBZbOVK5RBRDi/jN4U= github.com/Microsoft/go-winio v0.6.2-0.20230724192519-b29bbd58a65a h1:aU1703IHxupjzipvhu16qYKLMR03e+8WuNR+JMsKfGU= github.com/Microsoft/go-winio v0.6.2-0.20230724192519-b29bbd58a65a/go.mod h1:OZqLNXdYJHmx7aqq/T6wAdFEdoGm5nmIfC4kU7M8P8o= github.com/RomiChan/protobuf v0.1.1-0.20230204044148-2ed269a2e54d h1:/Xuj3fIiMY2ls1TwvPKmaqQrtJsPY+c9s+0lOScVHd8= @@ -22,6 +16,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fumiama/go-base16384 v1.7.0 h1:6fep7XPQWxRlh4Hu+KsdH+6+YdUp+w6CwRXtMWSsXCA= github.com/fumiama/go-base16384 v1.7.0/go.mod h1:OEn+947GV5gsbTAnyuUW/SrfxJYUdYupSIQXOuGOcXM= @@ -31,6 +26,8 @@ github.com/fumiama/gofastTEA v0.1.3 h1:fxOi2D66knV6QN170hb59YiqxPhjlgizvBw+o0Ojx github.com/fumiama/gofastTEA v0.1.3/go.mod h1:RIdbYZyB4MbH6ZBlPymRaXn3cD6SedlCu5W/HHfMPBk= github.com/fumiama/imgsz v0.0.4 h1:Lsasu2hdSSFS+vnD+nvR1UkiRMK7hcpyYCC0FzgSMFI= github.com/fumiama/imgsz v0.0.4/go.mod h1:bISOQVTlw9sRytPwe8ir7tAaEmyz9hSNj9n8mXMBG0E= +github.com/fumiama/orbyte v0.0.0-20250512155242-23a2b7120589 h1:ifo33HcA8HFYWaTe4fsJjozTUaOBlA0dFa1BcTZDEHs= +github.com/fumiama/orbyte v0.0.0-20250512155242-23a2b7120589/go.mod h1:FOjdw7KdCbK2eH3gRPhwFNCoXKpu9sN5vPH4El/8e0c= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -38,7 +35,9 @@ github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= @@ -61,6 +60,7 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -113,25 +113,25 @@ go.mongodb.org/mongo-driver v1.12.0/go.mod h1:AZkxhPnFJUoH7kZlFkVKucV20K387miPfm golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= -golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ= golang.org/x/image v0.24.0/go.mod h1:4b/ITuLfqYq1hqZcjofwctIhi7sZh2WaCjvsBNjjya8= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -144,30 +144,29 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= -golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= +golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.ilharper.com/x/isatty v1.1.1 h1:RAg32Pxq/nIK4AVtdm9RBqxsxZZX1uRKRSS21E5SHMk= gopkg.ilharper.com/x/isatty v1.1.1/go.mod h1:ofpv77Td5qQO6R1dmDd3oNt8TZdRo+l5gYAMxopRyS0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= @@ -188,7 +187,9 @@ modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= modernc.org/libc v1.8.1/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= modernc.org/libc v1.21.5 h1:xBkU9fnHV+hvZuPSRszN0AXDG4M7nwPLwTWwkYcvLCI= modernc.org/libc v1.21.5/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= @@ -206,6 +207,8 @@ modernc.org/sqlite v1.20.0/go.mod h1:EsYz8rfOvLCiYTy5ZFsOYzoCcRMu98YYkwAcCw5YIYw modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.15.0 h1:oY+JeD11qVVSgVvodMJsu7Edf8tr5E/7tuhF5cNYz34= +modernc.org/tcl v1.15.0/go.mod h1:xRoGotBZ6dU+Zo2tca+2EqVEeMmOUBzHnhIwq4YrVnE= modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.7.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE= +modernc.org/z v1.7.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ= diff --git a/internal/msg/element.go b/internal/msg/element.go index e827d9bde..8d7dabdcc 100644 --- a/internal/msg/element.go +++ b/internal/msg/element.go @@ -4,8 +4,6 @@ package msg import ( "strings" "unicode/utf8" - - "github.com/LagrangeDev/LagrangeGo/utils/binary" ) // @@@ CQ码转义处理 @@@ @@ -135,24 +133,22 @@ func (e *Element) WriteCQCodeTo(sb *strings.Builder) { // MarshalJSON see encoding/json.Marshaler func (e *Element) MarshalJSON() ([]byte, error) { - return binary.NewWriterF(func(w *binary.Builder) { - buf := w.Buffer() - // fmt.Fprintf(buf, `{"type":"%s","data":{`, e.Type) - buf.WriteString(`{"type":"`) - buf.WriteString(e.Type) - buf.WriteString(`","data":{`) - for i, data := range e.Data { - if i != 0 { - buf.WriteByte(',') - } - // fmt.Fprintf(buf, `"%s":%q`, data.K, data.V) - buf.WriteByte('"') - buf.WriteString(data.K) - buf.WriteString(`":`) - buf.WriteString(QuoteJSON(data.V)) + var builder strings.Builder + builder.WriteString(`{"type":"`) + builder.WriteString(e.Type) + builder.WriteString(`","data":{`) + for i, data := range e.Data { + if i != 0 { + builder.WriteString(",") } - buf.WriteString(`}}`) - }), nil + // fmt.Fprintf(buf, `"%s":%q`, data.K, data.V) + builder.WriteString(`"`) + builder.WriteString(data.K) + builder.WriteString(`":`) + builder.WriteString(QuoteJSON(data.V)) + } + builder.WriteString("}}") + return []byte(builder.String()), nil } const hex = "0123456789abcdef" diff --git a/server/http.go b/server/http.go index 8f416d25a..3ae6c2c5a 100644 --- a/server/http.go +++ b/server/http.go @@ -19,7 +19,7 @@ import ( "strings" "time" - "github.com/LagrangeDev/LagrangeGo/utils" + lgrio "github.com/LagrangeDev/LagrangeGo/utils/io" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" "gopkg.in/yaml.v3" @@ -177,7 +177,7 @@ func (s *httpServer) ServeHTTP(writer http.ResponseWriter, request *http.Request writer.WriteHeader(http.StatusBadRequest) return } - ctx.json = gjson.Parse(utils.B2S(body)) + ctx.json = gjson.Parse(lgrio.B2S(body)) } if strings.Contains(contentType, "application/x-www-form-urlencoded") { err := request.ParseForm() diff --git a/server/scf.go b/server/scf.go index 9388f2d8b..4f4058348 100644 --- a/server/scf.go +++ b/server/scf.go @@ -11,7 +11,7 @@ import ( "runtime/debug" "strings" - "github.com/LagrangeDev/LagrangeGo/utils" + lgrio "github.com/LagrangeDev/LagrangeGo/utils/io" log "github.com/sirupsen/logrus" "gopkg.in/yaml.v3" @@ -53,7 +53,7 @@ func (l *lambdaResponseWriter) Header() http.Header { func (l *lambdaResponseWriter) flush() error { buffer := global.NewBuffer() defer global.PutBuffer(buffer) - body := utils.B2S(l.buf.Bytes()) + body := lgrio.B2S(l.buf.Bytes()) header := make(map[string]string, len(l.header)) for k, v := range l.header { header[k] = v[0] diff --git a/server/websocket.go b/server/websocket.go index 983dd39b1..1a2e2f0b0 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -14,7 +14,7 @@ import ( "sync" "time" - "github.com/LagrangeDev/LagrangeGo/utils" + lgrio "github.com/LagrangeDev/LagrangeGo/utils/io" "github.com/RomiChan/websocket" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" @@ -473,7 +473,7 @@ func (c *wsConn) handleRequest(_ *coolq.CQBot, payload []byte) { } }() - j := gjson.Parse(utils.B2S(payload)) + j := gjson.Parse(lgrio.B2S(payload)) t := strings.TrimSuffix(j.Get("action").Str, "_async") params := j.Get("params") log.Debugf("WS接收到API调用: %v 参数: %v", t, params.Raw)