优化代码结构

This commit is contained in:
源文雨 2022-05-09 11:23:34 +08:00
parent dec42cc72b
commit 7a8c915e62
3 changed files with 60 additions and 51 deletions

View File

@ -481,6 +481,16 @@ print("run[CQ:image,file="+j["img"]+"]")
- [x] 注:不显式限制时,私聊发送可在所有群抽到,群聊发送仅可在本群抽到,默认频道为 global
</details>
<details>
<summary>一群一天一夫一妻制群老婆</summary>
`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/qqwife"`
- [x] 娶群友
- [x] 群老婆列表
</details>
<details>
<summary>合成emoji</summary>

View File

@ -96,6 +96,7 @@ import (
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/novel" // 铅笔小说网搜索
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/nsfw" // nsfw图片识别
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/omikuji" // 浅草寺求签
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/qqwife" // 一群一天一夫一妻制群老婆
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/reborn" // 投胎
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/runcode" // 在线运行代码
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/saucenao" // 以图搜图

View File

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