🎨 改进代码样式

This commit is contained in:
github-actions[bot] 2022-05-09 03:09:45 +00:00
parent 92c9d1d2ce
commit dec42cc72b

View File

@ -1,146 +1,146 @@
// Package qqwife 娶群友 基于“翻牌”和江林大佬的“群老婆”插件魔改作品 // Package qqwife 娶群友 基于“翻牌”和江林大佬的“群老婆”插件魔改作品
package qqwife package qqwife
import ( import (
"math/rand" "math/rand"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
"time" "time"
zero "github.com/wdvxdr1123/ZeroBot" zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/message"
control "github.com/FloatTech/zbputils/control" control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/ctxext"
"github.com/FloatTech/zbputils/math" "github.com/FloatTech/zbputils/math"
) )
var ( var (
setcp = make(map[int64]int64, 60) //初始化中间的map元素虽然取了30个人数以防万一翻个倍储存 setcp = make(map[int64]int64, 60) //初始化中间的map元素虽然取了30个人数以防万一翻个倍储存
qqwifegroup = make(map[int64]map[int64]int64, 50) //50个群的预算大小 qqwifegroup = make(map[int64]map[int64]int64, 50) //50个群的预算大小
lastdate time.Time lastdate time.Time
rock sync.Mutex rock sync.Mutex
) )
func init() { func init() {
engine := control.Register("qqwife", &control.Options{ engine := control.Register("qqwife", &control.Options{
DisableOnDefault: false, DisableOnDefault: false,
Help: "一群一天一夫一妻制群老婆\n" + Help: "一群一天一夫一妻制群老婆\n" +
"-娶群友", "-娶群友",
}) })
engine.OnFullMatch("娶群友", zero.OnlyGroup).SetBlock(true).Limit(ctxext.LimitByUser). engine.OnFullMatch("娶群友", zero.OnlyGroup).SetBlock(true).Limit(ctxext.LimitByUser).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
rock.Lock() rock.Lock()
defer rock.Unlock() defer rock.Unlock()
if time.Now().Day() != lastdate.Day() { if time.Now().Day() != lastdate.Day() {
qqwifegroup = make(map[int64]map[int64]int64, 50) //跨天就重新初始化数据 qqwifegroup = make(map[int64]map[int64]int64, 50) //跨天就重新初始化数据
} }
//先判断是否已经娶过或者被娶 //先判断是否已经娶过或者被娶
groupid := ctx.Event.GroupID groupid := ctx.Event.GroupID
uid := ctx.Event.UserID uid := ctx.Event.UserID
var status string var status string
//如果娶过 //如果娶过
userinfo, ok := qqwifegroup[groupid][uid] userinfo, ok := qqwifegroup[groupid][uid]
if ok { if ok {
ctx.SendChain( ctx.SendChain(
message.At(uid), message.At(uid),
message.Text("今天你的群老婆是"), message.Text("今天你的群老婆是"),
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(userinfo, 10)+"&s=640"), message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(userinfo, 10)+"&s=640"),
message.Text( message.Text(
"\n", "\n",
"[", ctx.CardOrNickName(userinfo), "]", "[", ctx.CardOrNickName(userinfo), "]",
"(", strconv.FormatInt(userinfo, 10), ")哒", "(", strconv.FormatInt(userinfo, 10), ")哒",
), ),
) )
return return
} }
//如果被娶过 //如果被娶过
for k, v := range qqwifegroup[groupid] { for k, v := range qqwifegroup[groupid] {
if v == uid { //如果为0且是在本群抽的就输出 if v == uid { //如果为0且是在本群抽的就输出
ctx.SendChain( ctx.SendChain(
message.At(uid), message.At(uid),
message.Text("今天你被娶了,群老公是"), message.Text("今天你被娶了,群老公是"),
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(k, 10)+"&s=640"), message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(k, 10)+"&s=640"),
message.Text( message.Text(
"\n", "\n",
"[", ctx.CardOrNickName(k), "]", "[", ctx.CardOrNickName(k), "]",
"(", strconv.FormatInt(k, 10), ")哒", "(", strconv.FormatInt(k, 10), ")哒",
), ),
) )
return return
} }
} }
// 无缓存获取群员列表 // 无缓存获取群员列表
temp := ctx.GetThisGroupMemberListNoCache().Array() temp := ctx.GetThisGroupMemberListNoCache().Array()
sort.SliceStable(temp, func(i, j int) bool { sort.SliceStable(temp, func(i, j int) bool {
return temp[i].Get("last_sent_time").Int() < temp[j].Get("last_sent_time").Int() return temp[i].Get("last_sent_time").Int() < temp[j].Get("last_sent_time").Int()
}) })
temp = temp[math.Max(0, len(temp)-30):] temp = temp[math.Max(0, len(temp)-30):]
//将已经娶过的人剔除 //将已经娶过的人剔除
var qqgrouplist = []int64{} var qqgrouplist = []int64{}
if len(qqwifegroup) == 0 { if len(qqwifegroup) == 0 {
for k := 0; k < len(temp); k++ { for k := 0; k < len(temp); k++ {
qqgrouplist = append(qqgrouplist, temp[k].Get("user_id").Int()) qqgrouplist = append(qqgrouplist, temp[k].Get("user_id").Int())
} }
} else { } else {
for k := 0; k < len(temp); k++ { for k := 0; k < len(temp); k++ {
_, ok := qqwifegroup[groupid][temp[k].Get("user_id").Int()] _, ok := qqwifegroup[groupid][temp[k].Get("user_id").Int()]
if !ok { if !ok {
qqgrouplist = append(qqgrouplist, temp[k].Get("user_id").Int()) qqgrouplist = append(qqgrouplist, temp[k].Get("user_id").Int())
} }
} }
} }
//没有人(只剩自己)的时候 //没有人(只剩自己)的时候
if len(qqgrouplist) == 0 { if len(qqgrouplist) == 0 {
ctx.SendChain(message.Text("噢,此时此刻你还是一只单身狗,等待下一次情缘吧")) ctx.SendChain(message.Text("噢,此时此刻你还是一只单身狗,等待下一次情缘吧"))
return return
} }
//随机抽娶 //随机抽娶
who := qqgrouplist[rand.Intn(len(qqgrouplist))] who := qqgrouplist[rand.Intn(len(qqgrouplist))]
if who == uid { //如果是自己 if who == uid { //如果是自己
ctx.SendChain(message.Text("噢,此时此刻你还是一只单身狗,等待下一次情缘吧")) ctx.SendChain(message.Text("噢,此时此刻你还是一只单身狗,等待下一次情缘吧"))
return return
} }
//绑定CP //绑定CP
setcp[uid] = who setcp[uid] = who
qqwifegroup[groupid] = setcp qqwifegroup[groupid] = setcp
//输出结果 //输出结果
ctx.SendChain( ctx.SendChain(
message.Text(status), message.Text(status),
message.At(uid), message.At(uid),
message.Text("今天你的群老婆是"), message.Text("今天你的群老婆是"),
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(who, 10)+"&s=640"), message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(who, 10)+"&s=640"),
message.Text( message.Text(
"\n", "\n",
"[", ctx.CardOrNickName(who), "]", "[", ctx.CardOrNickName(who), "]",
"(", strconv.FormatInt(who, 10), ")哒", "(", strconv.FormatInt(who, 10), ")哒",
), ),
) )
//更新时间 //更新时间
lastdate = time.Now() lastdate = time.Now()
}) })
engine.OnFullMatch("群老婆列表", zero.OnlyGroup).SetBlock(true).Limit(ctxext.LimitByUser). engine.OnFullMatch("群老婆列表", zero.OnlyGroup).SetBlock(true).Limit(ctxext.LimitByUser).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
var cplist = []string{"群老公←———→群老婆\n--------------------------"} var cplist = []string{"群老公←———→群老婆\n--------------------------"}
rock.Lock() rock.Lock()
defer rock.Unlock() defer rock.Unlock()
group, ok := qqwifegroup[ctx.Event.GroupID] group, ok := qqwifegroup[ctx.Event.GroupID]
if !ok { if !ok {
ctx.SendChain(message.Text("你群并没有任何的CP额")) ctx.SendChain(message.Text("你群并没有任何的CP额"))
return return
} }
for k, v := range group { for k, v := range group {
if k != 0 { if k != 0 {
husband := ctx.CardOrNickName(k) husband := ctx.CardOrNickName(k)
wife := ctx.CardOrNickName(v) wife := ctx.CardOrNickName(v)
cplist = append(cplist, husband+" & "+wife) cplist = append(cplist, husband+" & "+wife)
} else { } else {
ctx.SendChain(message.Text("你群并没有任何的CP额")) ctx.SendChain(message.Text("你群并没有任何的CP额"))
return return
} }
} }
ctx.SendChain(message.Text(strings.Join(cplist, "\n"))) ctx.SendChain(message.Text(strings.Join(cplist, "\n")))
}) })
} }