[feat]: 添加联系人排序功能 (#200)

This commit is contained in:
多吃点苹果 2023-01-13 12:23:15 +08:00 committed by GitHub
parent 0af4b51d93
commit f8461401a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

41
user.go
View File

@ -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)