Skip to content

Commit c0e8967

Browse files
authored
Update allmessage.go
1 parent fcf73f3 commit c0e8967

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

plugin/allmessage/allmessage.go

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,106 @@
1+
package broadcast
12

3+
import (
4+
"fmt"
5+
"strings"
6+
"time"
7+
8+
ctrl "github.com/FloatTech/zbpctrl"
9+
"github.com/FloatTech/zbputils/control"
10+
"github.com/FloatTech/zbputils/ctxext"
11+
"github.com/wdvxdr1123/ZeroBot"
12+
"github.com/wdvxdr1123/ZeroBot/message"
13+
)
14+
15+
// 黑名单群列表
16+
var blacklist = map[int64]bool{
17+
123456789: true,
18+
987654321: true,
19+
}
20+
21+
// 限速器
22+
var limiter = ctxext.NewLimiterManager(time.Second*10, 1)
23+
24+
func init() {
25+
engine := control.Register("broadcast", &ctrl.Options[*zero.Ctx]{
26+
DisableOnDefault: false,
27+
Brief: "群广播插件",
28+
Help: "- 广播(预览) 图片+文本 或纯文本\n- 支持图文混合广播\n- 支持预览模式",
29+
PublicDataFolder: "Broadcast",
30+
OnEnable: func(ctx *zero.Ctx) {
31+
ctx.Send("广播插件已启用")
32+
},
33+
OnDisable: func(ctx *zero.Ctx) {
34+
ctx.Send("广播插件已禁用")
35+
},
36+
})
37+
38+
engine.OnRegex(`^广播(预览)?\s+(.+)$`).SetBlock(true).Limit(limiter.LimitByGroup).Handle(func(ctx *zero.Ctx) {
39+
matches := ctx.State["regex_matched"].([]string)
40+
isPreview := matches[1] == "预览"
41+
raw := matches[2]
42+
43+
var msg message.Slice
44+
parts := strings.Fields(raw)
45+
46+
if len(parts) >= 2 && parts[0] == "图片" {
47+
for i := 1; i < len(parts); i++ {
48+
part := parts[i]
49+
if strings.HasPrefix(part, "http") {
50+
msg = append(msg, message.Image(part))
51+
} else {
52+
text := strings.Join(parts[i:], " ")
53+
msg = append(msg, message.Text("\n" + text))
54+
break
55+
}
56+
}
57+
} else {
58+
msg = message.Slice{message.Text(raw)}
59+
}
60+
61+
var nodes []message.Node
62+
var successCount, failCount, skipCount int
63+
64+
for _, group := range ctx.Bot.GroupList() {
65+
if blacklist[group.GroupID] {
66+
skipCount++
67+
continue
68+
}
69+
70+
status := "(预览中,不会真的发出去哟~)"
71+
if !isPreview {
72+
err := ctx.SendGroupMessage(group.GroupID, msg)
73+
if err != nil {
74+
status = "呜呜,失败了……"
75+
failCount++
76+
} else {
77+
status = "发送成功啦!✨"
78+
successCount++
79+
}
80+
}
81+
82+
nodes = append(nodes, message.Node{
83+
SenderID: ctx.SelfID,
84+
SenderName: ctx.Bot.Nickname,
85+
Content: message.Text(fmt.Sprintf("群 %d:%s", group.GroupID, status)),
86+
})
87+
}
88+
89+
if ctx.IsGroup {
90+
if isPreview {
91+
ctx.Send(message.Text("来看看广播预览吧~不是真的发出去哦!"))
92+
}
93+
ctx.SendGroupForwardMessage(ctx.GroupID, nodes)
94+
} else {
95+
if isPreview {
96+
ctx.Send(message.Text("这是广播预览结果哒~"))
97+
ctx.SendPrivateForwardMessage(ctx.UserID, nodes)
98+
} else {
99+
ctx.Send(message.Text(fmt.Sprintf(
100+
"广播完成啦~\n成功发送 %d 个群\n失败 %d 个群\n跳过 %d 个黑名单群\n辛苦我啦!(๑•̀ㅂ•́)و✧",
101+
successCount, failCount, skipCount,
102+
)))
103+
}
104+
}
105+
})
106+
}

0 commit comments

Comments
 (0)