mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 11:07:40 +08:00
internal/proto: re-use map[uint64]any
use slice will cause some panic.
This commit is contained in:
parent
733944693c
commit
841fef387a
@ -175,7 +175,7 @@ func (g *GuildInfo) removeChannel(id uint64) {
|
||||
}
|
||||
|
||||
func (s *GuildService) GetUserProfile(tinyId uint64) (*GuildUserProfile, error) {
|
||||
flags := make(proto.DynamicMessage, 101)
|
||||
flags := proto.DynamicMessage{}
|
||||
for i := 3; i <= 29; i++ {
|
||||
flags[uint64(i)] = 1
|
||||
}
|
||||
@ -275,7 +275,7 @@ func (s *GuildService) FetchGuildMemberListWithRole(guildId, channelId uint64, s
|
||||
// FetchGuildMemberProfileInfo 获取单个频道成员资料
|
||||
func (s *GuildService) FetchGuildMemberProfileInfo(guildId, tinyId uint64) (*GuildUserProfile, error) {
|
||||
seq := s.c.nextSeq()
|
||||
flags := make(proto.DynamicMessage, 101)
|
||||
flags := proto.DynamicMessage{}
|
||||
for i := 3; i <= 29; i++ {
|
||||
flags[uint64(i)] = 1
|
||||
}
|
||||
|
@ -3,9 +3,10 @@ package proto
|
||||
import (
|
||||
"encoding/binary"
|
||||
"math"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type DynamicMessage []any
|
||||
type DynamicMessage map[uint64]any
|
||||
|
||||
// zigzag encoding types
|
||||
type (
|
||||
@ -20,10 +21,24 @@ type encoder struct {
|
||||
|
||||
func (msg DynamicMessage) Encode() []byte {
|
||||
en := encoder{}
|
||||
|
||||
// sort all items
|
||||
type pair struct {
|
||||
key uint64
|
||||
value any
|
||||
}
|
||||
var all []pair
|
||||
for k, v := range msg {
|
||||
all = append(all, pair{key: k, value: v})
|
||||
}
|
||||
sort.Slice(all, func(i, j int) bool {
|
||||
return all[i].key < all[j].key
|
||||
})
|
||||
|
||||
//nolint:staticcheck
|
||||
for id, value := range msg {
|
||||
key := uint64(id << 3)
|
||||
switch v := value.(type) {
|
||||
for _, item := range all {
|
||||
key := item.key << 3
|
||||
switch v := item.value.(type) {
|
||||
case bool:
|
||||
en.uvarint(key | 0)
|
||||
vi := uint64(0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user