Skip to content

Commit 92c9d1d

Browse files
authored
一天一夫一妻制群老婆 (#219)
1 parent de017fc commit 92c9d1d

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed

plugin/qqwife/qqmapwife.go

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
// Package qqwife 娶群友 基于“翻牌”和江林大佬的“群老婆”插件魔改作品
2+
package qqwife
3+
4+
import (
5+
"math/rand"
6+
"sort"
7+
"strconv"
8+
"strings"
9+
"sync"
10+
"time"
11+
12+
zero "github.com/wdvxdr1123/ZeroBot"
13+
"github.com/wdvxdr1123/ZeroBot/message"
14+
15+
control "github.com/FloatTech/zbputils/control"
16+
"github.com/FloatTech/zbputils/ctxext"
17+
"github.com/FloatTech/zbputils/math"
18+
)
19+
20+
var (
21+
setcp = make(map[int64]int64, 60) //初始化中间的map元素,虽然取了30个人数,以防万一翻个倍储存
22+
qqwifegroup = make(map[int64]map[int64]int64, 50) //50个群的预算大小
23+
lastdate time.Time
24+
rock sync.Mutex
25+
)
26+
27+
func init() {
28+
engine := control.Register("qqwife", &control.Options{
29+
DisableOnDefault: false,
30+
Help: "一群一天一夫一妻制群老婆\n" +
31+
"-娶群友",
32+
})
33+
engine.OnFullMatch("娶群友", zero.OnlyGroup).SetBlock(true).Limit(ctxext.LimitByUser).
34+
Handle(func(ctx *zero.Ctx) {
35+
rock.Lock()
36+
defer rock.Unlock()
37+
if time.Now().Day() != lastdate.Day() {
38+
qqwifegroup = make(map[int64]map[int64]int64, 50) //跨天就重新初始化数据
39+
}
40+
//先判断是否已经娶过或者被娶
41+
groupid := ctx.Event.GroupID
42+
uid := ctx.Event.UserID
43+
var status string
44+
//如果娶过
45+
userinfo, ok := qqwifegroup[groupid][uid]
46+
if ok {
47+
ctx.SendChain(
48+
message.At(uid),
49+
message.Text("今天你的群老婆是"),
50+
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(userinfo, 10)+"&s=640"),
51+
message.Text(
52+
"\n",
53+
"[", ctx.CardOrNickName(userinfo), "]",
54+
"(", strconv.FormatInt(userinfo, 10), ")哒",
55+
),
56+
)
57+
return
58+
}
59+
//如果被娶过
60+
for k, v := range qqwifegroup[groupid] {
61+
if v == uid { //如果为0且是在本群抽的就输出
62+
ctx.SendChain(
63+
message.At(uid),
64+
message.Text("今天你被娶了,群老公是"),
65+
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(k, 10)+"&s=640"),
66+
message.Text(
67+
"\n",
68+
"[", ctx.CardOrNickName(k), "]",
69+
"(", strconv.FormatInt(k, 10), ")哒",
70+
),
71+
)
72+
return
73+
}
74+
}
75+
// 无缓存获取群员列表
76+
temp := ctx.GetThisGroupMemberListNoCache().Array()
77+
sort.SliceStable(temp, func(i, j int) bool {
78+
return temp[i].Get("last_sent_time").Int() < temp[j].Get("last_sent_time").Int()
79+
})
80+
temp = temp[math.Max(0, len(temp)-30):]
81+
//将已经娶过的人剔除
82+
var qqgrouplist = []int64{}
83+
if len(qqwifegroup) == 0 {
84+
for k := 0; k < len(temp); k++ {
85+
qqgrouplist = append(qqgrouplist, temp[k].Get("user_id").Int())
86+
}
87+
} else {
88+
for k := 0; k < len(temp); k++ {
89+
_, ok := qqwifegroup[groupid][temp[k].Get("user_id").Int()]
90+
if !ok {
91+
qqgrouplist = append(qqgrouplist, temp[k].Get("user_id").Int())
92+
}
93+
}
94+
}
95+
//没有人(只剩自己)的时候
96+
if len(qqgrouplist) == 0 {
97+
ctx.SendChain(message.Text("噢,此时此刻你还是一只单身狗,等待下一次情缘吧"))
98+
return
99+
}
100+
//随机抽娶
101+
who := qqgrouplist[rand.Intn(len(qqgrouplist))]
102+
if who == uid { //如果是自己
103+
ctx.SendChain(message.Text("噢,此时此刻你还是一只单身狗,等待下一次情缘吧"))
104+
return
105+
}
106+
//绑定CP
107+
setcp[uid] = who
108+
qqwifegroup[groupid] = setcp
109+
//输出结果
110+
ctx.SendChain(
111+
message.Text(status),
112+
message.At(uid),
113+
message.Text("今天你的群老婆是"),
114+
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(who, 10)+"&s=640"),
115+
message.Text(
116+
"\n",
117+
"[", ctx.CardOrNickName(who), "]",
118+
"(", strconv.FormatInt(who, 10), ")哒",
119+
),
120+
)
121+
//更新时间
122+
lastdate = time.Now()
123+
})
124+
engine.OnFullMatch("群老婆列表", zero.OnlyGroup).SetBlock(true).Limit(ctxext.LimitByUser).
125+
Handle(func(ctx *zero.Ctx) {
126+
var cplist = []string{"群老公←———→群老婆\n--------------------------"}
127+
rock.Lock()
128+
defer rock.Unlock()
129+
group, ok := qqwifegroup[ctx.Event.GroupID]
130+
if !ok {
131+
ctx.SendChain(message.Text("你群并没有任何的CP额"))
132+
return
133+
}
134+
for k, v := range group {
135+
if k != 0 {
136+
husband := ctx.CardOrNickName(k)
137+
wife := ctx.CardOrNickName(v)
138+
cplist = append(cplist, husband+" & "+wife)
139+
} else {
140+
ctx.SendChain(message.Text("你群并没有任何的CP额"))
141+
return
142+
}
143+
}
144+
ctx.SendChain(message.Text(strings.Join(cplist, "\n")))
145+
})
146+
}

0 commit comments

Comments
 (0)