From f8461401a7d73bcfe2ccd40fc0cceee3caf76723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E5=90=83=E7=82=B9=E8=8B=B9=E6=9E=9C?= <73388495+eatmoreapple@users.noreply.github.com> Date: Fri, 13 Jan 2023 12:23:15 +0800 Subject: [PATCH] =?UTF-8?q?[feat]:=20=E6=B7=BB=E5=8A=A0=E8=81=94=E7=B3=BB?= =?UTF-8?q?=E4=BA=BA=E6=8E=92=E5=BA=8F=E5=8A=9F=E8=83=BD=20(#200)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/user.go b/user.go index 0347c74..de526e0 100644 --- a/user.go +++ b/user.go @@ -3,10 +3,13 @@ package openwechat import ( "errors" "fmt" + "html" "io" "net/http" "net/url" "os" + "regexp" + "sort" "strconv" "strings" "time" @@ -214,6 +217,25 @@ func (u *User) IsSelf() bool { return u.UserName == u.Self().UserName } +// OrderSymbol 获取用户的排序标识 +func (u *User) OrderSymbol() string { + var symbol string + if u.RemarkPYQuanPin != "" { + symbol = u.RemarkPYQuanPin + } else if u.PYQuanPin != "" { + symbol = u.PYQuanPin + } else { + symbol = u.NickName + } + symbol = html.UnescapeString(symbol) + symbol = strings.ToUpper(symbol) + symbol = regexp.MustCompile("/\\W/ig").ReplaceAllString(symbol, "") + if len(symbol) > 0 && symbol[0] < 'A' { + return "~" + } + return symbol +} + // 格式化emoji表情 func (u *User) formatEmoji() { u.NickName = FormatEmoji(u.NickName) @@ -645,6 +667,19 @@ func (s *Self) SendVideoToGroups(video io.Reader, delay time.Duration, groups .. // Members 抽象的用户组 type Members []*User +func (m Members) Len() int { + return len(m) +} + +// Less 按照微信的规则排序 +func (m Members) Less(i, j int) bool { + return m[i].OrderSymbol() < m[j].OrderSymbol() +} + +func (m Members) Swap(i, j int) { + m[i], m[j] = m[j], m[i] +} + // Uniq Members 去重 func (m Members) Uniq() Members { var uniqMembers = make(map[string]*User) @@ -658,6 +693,12 @@ func (m Members) Uniq() Members { return members } +// Sort 对联系人进行排序 +func (m Members) Sort() Members { + sort.Sort(m) + return m +} + // Count 统计数量 func (m Members) Count() int { return len(m)