diff --git a/plugin/chips/rank.go b/plugin/chips/rank.go new file mode 100644 index 0000000..ec16cfe --- /dev/null +++ b/plugin/chips/rank.go @@ -0,0 +1,59 @@ +package chips + +import ( + "amor/proto" + redisrepo "amor/repository/redisRepo" + "encoding/json" + + "github.com/redis/rueidis" + zero "github.com/wdvxdr1123/ZeroBot" +) + +func Rank(ctx *zero.Ctx) { + groupID := ctx.Event.GroupID + groupMemberList := ctx.GetGroupMemberList(groupID) + var list proto.GroupMemberInfoList + err := json.Unmarshal([]byte(groupMemberList.Raw), &list) + if err != nil { + ctx.Send("获取群成员列表失败") + return + } + + type Rank struct { + UserID int64 + Nickname string + Balance int64 + } + var rankList []Rank + for _, member := range list { + balance, err := redisrepo.GetUserBalance(int64(member.UserID)) + if err != nil { + if err == rueidis.Nil { + continue + } else { + ctx.Send("获取余额失败") + return + } + } + rankList = append(rankList, Rank{ + UserID: int64(member.UserID), + Nickname: member.Nickname, + Balance: balance, + }) + } + + // sort rankList + for i := 0; i < len(rankList); i++ { + for j := i + 1; j < len(rankList); j++ { + if rankList[i].Balance < rankList[j].Balance { + rankList[i], rankList[j] = rankList[j], rankList[i] + } + } + } + + var msg string + for i, rank := range rankList { + msg += "第" + string(i+1) + "名: " + rank.Nickname + " 余额: " + string(rank.Balance) + "\n" + } + ctx.Send(msg) +} diff --git a/proto/group.go b/proto/group.go new file mode 100644 index 0000000..e30fb17 --- /dev/null +++ b/proto/group.go @@ -0,0 +1,36 @@ +package proto + +type GroupMemberInfo struct { + GroupID int64 `json:"group_id"` + UserID int64 `json:"user_id"` + Nickname string `json:"nickname"` + Card string `json:"card"` + Sex string `json:"sex"` + Age int64 `json:"age"` + Area string `json:"area"` + JoinTime int32 `json:"join_time"` + LastSentTime int32 `json:"last_sent_time"` + Level string `json:"level"` + Role string `json:"role"` +} + +type GroupMemberInfoList []struct { + GroupID int `json:"group_id"` + UserID int `json:"user_id"` + Nickname string `json:"nickname"` + Card string `json:"card"` + Sex string `json:"sex"` + Age int `json:"age"` + Area string `json:"area"` + Level int `json:"level"` + QqLevel int `json:"qq_level"` + JoinTime int `json:"join_time"` + LastSentTime int `json:"last_sent_time"` + TitleExpireTime int `json:"title_expire_time"` + Unfriendly bool `json:"unfriendly"` + CardChangeable bool `json:"card_changeable"` + IsRobot bool `json:"is_robot"` + ShutUpTimestamp int `json:"shut_up_timestamp"` + Role string `json:"role"` + Title string `json:"title"` +} diff --git a/router/router.go b/router/router.go index cd6be42..846ef61 100644 --- a/router/router.go +++ b/router/router.go @@ -3,6 +3,7 @@ package router import ( "amor/plugin" "amor/plugin/blackjack" + "amor/plugin/chips" "amor/plugin/member" zero "github.com/wdvxdr1123/ZeroBot" @@ -11,6 +12,7 @@ import ( func Router() { zero.OnFullMatch("register").Handle(member.Register) zero.OnFullMatch("chips").Handle(member.GetBalance) + zero.OnFullMatch("rank").Handle(chips.Rank) zero.OnFullMatch("help").Handle(plugin.Help) // 21点游戏