From 7a8c915e6245f7acddced0db83fb8db8e5f355ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Mon, 9 May 2022 11:23:34 +0800
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E4=BC=98=E5=8C=96=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 10 ++++
main.go | 1 +
plugin/qqwife/qqmapwife.go | 100 ++++++++++++++++++-------------------
3 files changed, 60 insertions(+), 51 deletions(-)
diff --git a/README.md b/README.md
index 607d564d..8899d681 100644
--- a/README.md
+++ b/README.md
@@ -481,6 +481,16 @@ print("run[CQ:image,file="+j["img"]+"]")
- [x] 注:不显式限制时,私聊发送可在所有群抽到,群聊发送仅可在本群抽到,默认频道为 global
+
+
+ 一群一天一夫一妻制群老婆
+
+ `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/qqwife"`
+
+ - [x] 娶群友
+
+ - [x] 群老婆列表
+
合成emoji
diff --git a/main.go b/main.go
index 4fe0028a..80b05d80 100644
--- a/main.go
+++ b/main.go
@@ -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" // 以图搜图
diff --git a/plugin/qqwife/qqmapwife.go b/plugin/qqwife/qqmapwife.go
index a76ae4a1..3bc62caf 100644
--- a/plugin/qqwife/qqmapwife.go
+++ b/plugin/qqwife/qqmapwife.go
@@ -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")))
})