world: 一大波优化与功能更新

- fix #441
- 优化wsserver解析
- 完善 ctx.this 相关函数
- 自动已读: Config 的 MarkMessage
This commit is contained in:
源文雨 2023-07-28 13:56:48 +08:00
parent ebcd3cdef2
commit c8dcdbb0b2
11 changed files with 47 additions and 72 deletions

View File

@ -17,7 +17,7 @@
[![go](https://goreportcard.com/badge/github.com/FloatTech/ZeroBot-Plugin?style=flat-square&logo=go)](https://goreportcard.com/badge/github.com/FloatTech/ZeroBot-Plugin) [![go](https://goreportcard.com/badge/github.com/FloatTech/ZeroBot-Plugin?style=flat-square&logo=go)](https://goreportcard.com/badge/github.com/FloatTech/ZeroBot-Plugin)
[![onebot](https://img.shields.io/badge/onebot-v11-black?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAMAAADxPgR5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF////29vbr6+vAAAAk1hCcwAAAAR0Uk5T////AEAqqfQAAAKcSURBVHja7NrbctswDATQXfD//zlpO7FlmwAWIOnOtNaTM5JwDMa8E+PNFz7g3waJ24fviyDPgfhz8fHP39cBcBL9KoJbQUxjA2iYqHL3FAnvzhL4GtVNUcoSZe6eSHizBcK5LL7dBr2AUZlev1ARRHCljzRALIEog6H3U6bCIyqIZdAT0eBuJYaGiJaHSjmkYIZd+qSGWAQnIaz2OArVnX6vrItQvbhZJtVGB5qX9wKqCMkb9W7aexfCO/rwQRBzsDIsYx4AOz0nhAtWu7bqkEQBO0Pr+Ftjt5fFCUEbm0Sbgdu8WSgJ5NgH2iu46R/o1UcBXJsFusWF/QUaz3RwJMEgngfaGGdSxJkE/Yg4lOBryBiMwvAhZrVMUUvwqU7F05b5WLaUIN4M4hRocQQRnEedgsn7TZB3UCpRrIJwQfqvGwsg18EnI2uSVNC8t+0QmMXogvbPg/xk+Mnw/6kW/rraUlvqgmFreAA09xW5t0AFlHrQZ3CsgvZm0FbHNKyBmheBKIF2cCA8A600aHPmFtRB1XvMsJAiza7LpPog0UJwccKdzw8rdf8MyN2ePYF896LC5hTzdZqxb6VNXInaupARLDNBWgI8spq4T0Qb5H4vWfPmHo8OyB1ito+AysNNz0oglj1U955sjUN9d41LnrX2D/u7eRwxyOaOpfyevCWbTgDEoilsOnu7zsKhjRCsnD/QzhdkYLBLXjiK4f3UWmcx2M7PO21CKVTH84638NTplt6JIQH0ZwCNuiWAfvuLhdrcOYPVO9eW3A67l7hZtgaY9GZo9AFc6cryjoeFBIWeU+npnk/nLE0OxCHL1eQsc1IciehjpJv5mqCsjeopaH6r15/MrxNnVhu7tmcslay2gO2Z1QfcfX0JMACG41/u0RrI9QAAAABJRU5ErkJggg==)](https://t.me/zerobotplugin) [![onebot](https://img.shields.io/badge/onebot-v11-black?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAMAAADxPgR5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF////29vbr6+vAAAAk1hCcwAAAAR0Uk5T////AEAqqfQAAAKcSURBVHja7NrbctswDATQXfD//zlpO7FlmwAWIOnOtNaTM5JwDMa8E+PNFz7g3waJ24fviyDPgfhz8fHP39cBcBL9KoJbQUxjA2iYqHL3FAnvzhL4GtVNUcoSZe6eSHizBcK5LL7dBr2AUZlev1ARRHCljzRALIEog6H3U6bCIyqIZdAT0eBuJYaGiJaHSjmkYIZd+qSGWAQnIaz2OArVnX6vrItQvbhZJtVGB5qX9wKqCMkb9W7aexfCO/rwQRBzsDIsYx4AOz0nhAtWu7bqkEQBO0Pr+Ftjt5fFCUEbm0Sbgdu8WSgJ5NgH2iu46R/o1UcBXJsFusWF/QUaz3RwJMEgngfaGGdSxJkE/Yg4lOBryBiMwvAhZrVMUUvwqU7F05b5WLaUIN4M4hRocQQRnEedgsn7TZB3UCpRrIJwQfqvGwsg18EnI2uSVNC8t+0QmMXogvbPg/xk+Mnw/6kW/rraUlvqgmFreAA09xW5t0AFlHrQZ3CsgvZm0FbHNKyBmheBKIF2cCA8A600aHPmFtRB1XvMsJAiza7LpPog0UJwccKdzw8rdf8MyN2ePYF896LC5hTzdZqxb6VNXInaupARLDNBWgI8spq4T0Qb5H4vWfPmHo8OyB1ito+AysNNz0oglj1U955sjUN9d41LnrX2D/u7eRwxyOaOpfyevCWbTgDEoilsOnu7zsKhjRCsnD/QzhdkYLBLXjiK4f3UWmcx2M7PO21CKVTH84638NTplt6JIQH0ZwCNuiWAfvuLhdrcOYPVO9eW3A67l7hZtgaY9GZo9AFc6cryjoeFBIWeU+npnk/nLE0OxCHL1eQsc1IciehjpJv5mqCsjeopaH6r15/MrxNnVhu7tmcslay2gO2Z1QfcfX0JMACG41/u0RrI9QAAAABJRU5ErkJggg==)](https://t.me/zerobotplugin)
[![zerobot](https://img.shields.io/badge/zerobot-v1.6.11-black?style=flat-square&logo=go)](https://github.com/wdvxdr1123/ZeroBot) [![zerobot](https://img.shields.io/badge/zerobot-v1.7.2-black?style=flat-square&logo=go)](https://github.com/wdvxdr1123/ZeroBot)
[![license](https://img.shields.io/github/license/FloatTech/ZeroBot-Plugin.svg?style=flat-square&logo=gnu)](https://raw.githubusercontent.com/FloatTech/ZeroBot-Plugin/master/LICENSE) [![license](https://img.shields.io/github/license/FloatTech/ZeroBot-Plugin.svg?style=flat-square&logo=gnu)](https://raw.githubusercontent.com/FloatTech/ZeroBot-Plugin/master/LICENSE)
[![tencent-qq](https://img.shields.io/badge/group-1048452984-red?style=flat-square&logo=tencent-qq)](https://jq.qq.com/?_wv=1027&k=QMb7x1mM) [![tencent-qq](https://img.shields.io/badge/group-1048452984-red?style=flat-square&logo=tencent-qq)](https://jq.qq.com/?_wv=1027&k=QMb7x1mM)
[![telegram](https://img.shields.io/badge/Telegram-click%20me-informational?style=flat-square&logo=telegram)](https://t.me/zerobotplugin) [![telegram](https://img.shields.io/badge/Telegram-click%20me-informational?style=flat-square&logo=telegram)](https://t.me/zerobotplugin)
@ -42,9 +42,10 @@
## 命令行参数 ## 命令行参数
> `[]`代表是可选参数 > `[]`代表是可选参数
```bash ```bash
zerobot [-h] [-n nickname] [-t token] [-u url] [-g url] [-p prefix] [-d|w] [-c|s config.json] [-l latency] [-r ringlen] [-x max process time] [qq1 qq2 qq3 ...] [&] zerobot [-h] [-m] [-n nickname] [-t token] [-u url] [-g url] [-p prefix] [-d|w] [-c|s config.json] [-l latency] [-r ringlen] [-x max process time] [qq1 qq2 qq3 ...] [&]
``` ```
- **-h**: 显示帮助 - **-h**: 显示帮助
- **-m**: 不自动标记消息为已读
- **-n nickname**: 设置默认昵称,默认为`椛椛` - **-n nickname**: 设置默认昵称,默认为`椛椛`
- **-t token**: 设置`AccessToken`,默认为空 - **-t token**: 设置`AccessToken`,默认为空
- **-u url**: 设置`Url`,默认为`ws://127.0.0.1:6700` - **-u url**: 设置`Url`,默认为`ws://127.0.0.1:6700`
@ -62,27 +63,17 @@ zerobot [-h] [-n nickname] [-t token] [-u url] [-g url] [-p prefix] [-d|w] [-c|s
默认配置文件格式如下。当选择从配置文件加载时,将忽略相应命令行参数。 默认配置文件格式如下。当选择从配置文件加载时,将忽略相应命令行参数。
```json ```json
{ {
"zero": { "zero": {
"nickname": [ "nickname": ["椛椛", "ATRI", "atri", "亚托莉", "アトリ"],
"椛椛", "command_prefix": "/",
"ATRI", "super_users": [],
"atri", "ring_len": 4096,
"亚托莉", "latency": 233000000,
"アトリ" "max_process_time": 240000000000,
], "mark_message": true
"command_prefix": "/", },
"super_users": [], "ws": [{ "Url": "ws://127.0.0.1:6700", "AccessToken": "" }],
"ring_len": 4096, "wss": null
"latency": 233000000,
"max_process_time": 240000000000
},
"ws": [
{
"Url": "ws://127.0.0.1:6700",
"AccessToken": ""
}
],
"wss": null
} }
``` ```

2
data

@ -1 +1 @@
Subproject commit d0342c38067c5cc34880bcaf0bab6e88fb5d242e Subproject commit 9cab8a7bae5d076e7440475750cd0b54f19fe558

4
go.mod
View File

@ -12,7 +12,7 @@ require (
github.com/FloatTech/sqlite v1.6.2 github.com/FloatTech/sqlite v1.6.2
github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b
github.com/FloatTech/zbpctrl v1.5.3-0.20230514154630-b74e6fcca380 github.com/FloatTech/zbpctrl v1.5.3-0.20230514154630-b74e6fcca380
github.com/FloatTech/zbputils v1.6.2-0.20230514154857-9363fdb11fd6 github.com/FloatTech/zbputils v1.6.2-0.20230728055141-bf0c1f30e617
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e
github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5 github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5
github.com/antchfx/htmlquery v1.2.5 github.com/antchfx/htmlquery v1.2.5
@ -37,7 +37,7 @@ require (
github.com/sirupsen/logrus v1.9.0 github.com/sirupsen/logrus v1.9.0
github.com/tidwall/gjson v1.14.4 github.com/tidwall/gjson v1.14.4
github.com/wcharczuk/go-chart/v2 v2.1.0 github.com/wcharczuk/go-chart/v2 v2.1.0
github.com/wdvxdr1123/ZeroBot v1.6.11 github.com/wdvxdr1123/ZeroBot v1.7.2
gitlab.com/gomidi/midi/v2 v2.0.25 gitlab.com/gomidi/midi/v2 v2.0.25
golang.org/x/image v0.3.0 golang.org/x/image v0.3.0
golang.org/x/sys v0.4.0 golang.org/x/sys v0.4.0

8
go.sum
View File

@ -18,8 +18,8 @@ github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b h1:tvciXWq2nuvTbFeJG
github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs= github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs=
github.com/FloatTech/zbpctrl v1.5.3-0.20230514154630-b74e6fcca380 h1:qmwoT8xVaND01aCdwy+5/j6z490nehQWZAVyTBN8ahU= github.com/FloatTech/zbpctrl v1.5.3-0.20230514154630-b74e6fcca380 h1:qmwoT8xVaND01aCdwy+5/j6z490nehQWZAVyTBN8ahU=
github.com/FloatTech/zbpctrl v1.5.3-0.20230514154630-b74e6fcca380/go.mod h1:gkGC1C1eEUd/Ld/ja68zas5j2ZktIZCdnj2FMaM+Au0= github.com/FloatTech/zbpctrl v1.5.3-0.20230514154630-b74e6fcca380/go.mod h1:gkGC1C1eEUd/Ld/ja68zas5j2ZktIZCdnj2FMaM+Au0=
github.com/FloatTech/zbputils v1.6.2-0.20230514154857-9363fdb11fd6 h1:uss0/IszBjik7LSM5Q4xQ9FaDXAC7vK7y1dAaOj4UAk= github.com/FloatTech/zbputils v1.6.2-0.20230728055141-bf0c1f30e617 h1:9qDcXB3ILqncMUBVqCXe6dLjNUIYCIMo5kcQHfCAXEU=
github.com/FloatTech/zbputils v1.6.2-0.20230514154857-9363fdb11fd6/go.mod h1:JXRQf2GAzpd7gp853LP6PU3O4pkRoFFuKGykcBChPNk= github.com/FloatTech/zbputils v1.6.2-0.20230728055141-bf0c1f30e617/go.mod h1:x99mMbbJrybb0dSKHL20hHutmjWop8CFP0X6Ywn8V78=
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e h1:wR3MXQ3VbUlPKOOUwLOYgh/QaJThBTYtsl673O3lqSA= github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e h1:wR3MXQ3VbUlPKOOUwLOYgh/QaJThBTYtsl673O3lqSA=
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w= github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w=
@ -203,8 +203,8 @@ github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYm
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/wcharczuk/go-chart/v2 v2.1.0 h1:tY2slqVQ6bN+yHSnDYwZebLQFkphK4WNrVwnt7CJZ2I= github.com/wcharczuk/go-chart/v2 v2.1.0 h1:tY2slqVQ6bN+yHSnDYwZebLQFkphK4WNrVwnt7CJZ2I=
github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA= github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA=
github.com/wdvxdr1123/ZeroBot v1.6.11 h1:44Wr6CsCtWlFensK5IhuVCWkosdRw0rA8SygVD8DgoI= github.com/wdvxdr1123/ZeroBot v1.7.2 h1:aSibGY9X4xXbIF7IAffsf1OqNMIM9WIi1APtFYEVxL0=
github.com/wdvxdr1123/ZeroBot v1.6.11/go.mod h1:y29UIOy0RD3P+0meDNIWRhcJF3jtWPN9xP9hgt/AJAU= github.com/wdvxdr1123/ZeroBot v1.7.2/go.mod h1:y29UIOy0RD3P+0meDNIWRhcJF3jtWPN9xP9hgt/AJAU=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=

View File

@ -231,6 +231,7 @@ func init() {
late := flag.Uint("l", 233, "Response latency (ms).") late := flag.Uint("l", 233, "Response latency (ms).")
rsz := flag.Uint("r", 4096, "Receiving buffer ring size.") rsz := flag.Uint("r", 4096, "Receiving buffer ring size.")
maxpt := flag.Uint("x", 4, "Max process time (min).") maxpt := flag.Uint("x", 4, "Max process time (min).")
markmsg := flag.Bool("m", false, "Don't mark message as read automatically")
flag.Parse() flag.Parse()
@ -277,7 +278,7 @@ func init() {
config.Z.Driver[i] = w config.Z.Driver[i] = w
} }
for i, s := range config.S { for i, s := range config.S {
config.Z.Driver[i+len(config.W)] = driver.NewWebSocketServer(16, s.Url, s.AccessToken) config.Z.Driver[i+len(config.W)] = s
} }
logrus.Infoln("[main] 从", *runcfg, "读取配置文件") logrus.Infoln("[main] 从", *runcfg, "读取配置文件")
return return
@ -290,6 +291,7 @@ func init() {
RingLen: *rsz, RingLen: *rsz,
Latency: time.Duration(*late) * time.Millisecond, Latency: time.Duration(*late) * time.Millisecond,
MaxProcessTime: time.Duration(*maxpt) * time.Minute, MaxProcessTime: time.Duration(*maxpt) * time.Minute,
MarkMessage: !*markmsg,
Driver: []zero.Driver{config.W[0]}, Driver: []zero.Driver{config.W[0]},
} }

View File

@ -70,7 +70,7 @@ func init() {
if err := ctx.State["manager"].(*ctrl.Control[*zero.Ctx]).Manager.DoBlock(uid); err == nil { if err := ctx.State["manager"].(*ctrl.Control[*zero.Ctx]).Manager.DoBlock(uid); err == nil {
t := time.Now().Unix() t := time.Now().Unix()
cache.Set(uid, struct{}{}) cache.Set(uid, struct{}{})
ctx.SetGroupBan(gid, uid, int64(bandur.Minutes())) ctx.SetThisGroupBan(uid, int64(bandur.Minutes()))
ctx.SendChain(message.Text("检测到违禁词, 已封禁/屏蔽", bandur)) ctx.SendChain(message.Text("检测到违禁词, 已封禁/屏蔽", bandur))
db.Lock() db.Lock()
defer db.Unlock() defer db.Unlock()

View File

@ -68,7 +68,7 @@ func (bdres *baiduRes) audit(ctx *zero.Ctx, configpath string) {
bantime = group.BANTime * 60 bantime = group.BANTime * 60
} }
// 执行禁言 // 执行禁言
ctx.SetGroupBan(ctx.Event.GroupID, ctx.Event.UserID, bantime) ctx.SetThisGroupBan(ctx.Event.UserID, bantime)
} }
// 查看是否开启撤回提示 // 查看是否开启撤回提示
if group.DMRemind { if group.DMRemind {

View File

@ -39,8 +39,8 @@ func init() {
userid := ctx.Event.UserID userid := ctx.Event.UserID
username := ctx.CardOrNickName(userid) username := ctx.CardOrNickName(userid)
data := (storage)(c.GetData(-su)) data := (storage)(c.GetData(-su))
groupname := ctx.GetThisGroupInfo(true).Name
groupid := ctx.Event.GroupID groupid := ctx.Event.GroupID
groupname := ctx.GetGroupInfo(groupid, true).Name
logrus.Info("[event]收到来自[", username, "](", userid, ")的群聊邀请,群:[", groupname, "](", groupid, ")") logrus.Info("[event]收到来自[", username, "](", userid, ")的群聊邀请,群:[", groupname, "](", groupid, ")")
if data.isinviteon() || (!data.ismasteroff() && zero.SuperUserPermission(ctx)) { if data.isinviteon() || (!data.ismasteroff() && zero.SuperUserPermission(ctx)) {
ctx.SetGroupAddRequest(ctx.Event.Flag, "invite", true, "") ctx.SetGroupAddRequest(ctx.Event.Flag, "invite", true, "")

View File

@ -527,7 +527,7 @@ func getlist(pathOfMusic string) (list []listinfo, err error) {
// 遍历群文件 // 遍历群文件
func getFileURLbyFileName(ctx *zero.Ctx, fileName string) (fileSearchName, fileURL string) { func getFileURLbyFileName(ctx *zero.Ctx, fileName string) (fileSearchName, fileURL string) {
filesOfGroup := ctx.GetThisGroupRootFiles(ctx.Event.GroupID) filesOfGroup := ctx.GetThisGroupRootFiles()
files := filesOfGroup.Get("files").Array() files := filesOfGroup.Get("files").Array()
folders := filesOfGroup.Get("folders").Array() folders := filesOfGroup.Get("folders").Array()
// 遍历当前目录的文件名 // 遍历当前目录的文件名

View File

@ -95,13 +95,11 @@ func init() { // 插件主体
// 升为管理 // 升为管理
engine.OnRegex(`^升为管理.*?(\d+)`, zero.OnlyGroup, zero.SuperUserPermission).SetBlock(true). engine.OnRegex(`^升为管理.*?(\d+)`, zero.OnlyGroup, zero.SuperUserPermission).SetBlock(true).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
ctx.SetGroupAdmin( ctx.SetThisGroupAdmin(
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
true, true,
) )
nickname := ctx.GetGroupMemberInfo( // 被升为管理的人的昵称 nickname := ctx.GetThisGroupMemberInfo( // 被升为管理的人的昵称
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
false, false,
).Get("nickname").Str ).Get("nickname").Str
@ -110,13 +108,11 @@ func init() { // 插件主体
// 取消管理 // 取消管理
engine.OnRegex(`^取消管理.*?(\d+)`, zero.OnlyGroup, zero.SuperUserPermission).SetBlock(true). engine.OnRegex(`^取消管理.*?(\d+)`, zero.OnlyGroup, zero.SuperUserPermission).SetBlock(true).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
ctx.SetGroupAdmin( ctx.SetThisGroupAdmin(
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
false, false,
) )
nickname := ctx.GetGroupMemberInfo( // 被取消管理的人的昵称 nickname := ctx.GetThisGroupMemberInfo( // 被取消管理的人的昵称
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
false, false,
).Get("nickname").Str ).Get("nickname").Str
@ -125,13 +121,11 @@ func init() { // 插件主体
// 踢出群聊 // 踢出群聊
engine.OnRegex(`^踢出群聊.*?(\d+)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true). engine.OnRegex(`^踢出群聊.*?(\d+)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
ctx.SetGroupKick( ctx.SetThisGroupKick(
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
false, false,
) )
nickname := ctx.GetGroupMemberInfo( // 被踢出群聊的人的昵称 nickname := ctx.GetThisGroupMemberInfo( // 被踢出群聊的人的昵称
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
false, false,
).Get("nickname").Str ).Get("nickname").Str
@ -148,19 +142,13 @@ func init() { // 插件主体
// 开启全体禁言 // 开启全体禁言
engine.OnRegex(`^开启全员禁言$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true). engine.OnRegex(`^开启全员禁言$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
ctx.SetGroupWholeBan( ctx.SetThisGroupWholeBan(true)
ctx.Event.GroupID,
true,
)
ctx.SendChain(message.Text("全员自闭开始~")) ctx.SendChain(message.Text("全员自闭开始~"))
}) })
// 解除全员禁言 // 解除全员禁言
engine.OnRegex(`^解除全员禁言$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true). engine.OnRegex(`^解除全员禁言$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
ctx.SetGroupWholeBan( ctx.SetThisGroupWholeBan(false)
ctx.Event.GroupID,
false,
)
ctx.SendChain(message.Text("全员自闭结束~")) ctx.SendChain(message.Text("全员自闭结束~"))
}) })
// 禁言 // 禁言
@ -180,8 +168,7 @@ func init() { // 插件主体
if duration >= 43200 { if duration >= 43200 {
duration = 43199 // qq禁言最大时长为一个月 duration = 43199 // qq禁言最大时长为一个月
} }
ctx.SetGroupBan( ctx.SetThisGroupBan(
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要禁言的人的qq math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要禁言的人的qq
duration*60, // 要禁言的时间(分钟) duration*60, // 要禁言的时间(分钟)
) )
@ -190,8 +177,7 @@ func init() { // 插件主体
// 解除禁言 // 解除禁言
engine.OnRegex(`^解除禁言.*?(\d+)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true). engine.OnRegex(`^解除禁言.*?(\d+)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
ctx.SetGroupBan( ctx.SetThisGroupBan(
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要解除禁言的人的qq math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要解除禁言的人的qq
0, 0,
) )
@ -214,8 +200,7 @@ func init() { // 插件主体
if duration >= 43200 { if duration >= 43200 {
duration = 43199 // qq禁言最大时长为一个月 duration = 43199 // qq禁言最大时长为一个月
} }
ctx.SetGroupBan( ctx.SetThisGroupBan(
ctx.Event.GroupID,
ctx.Event.UserID, ctx.Event.UserID,
duration*60, // 要自闭的时间(分钟) duration*60, // 要自闭的时间(分钟)
) )
@ -228,8 +213,7 @@ func init() { // 插件主体
ctx.SendChain(message.Text("名字太长啦!")) ctx.SendChain(message.Text("名字太长啦!"))
return return
} }
ctx.SetGroupCard( ctx.SetThisGroupCard(
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被修改群名片的人 math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被修改群名片的人
ctx.State["regex_matched"].([]string)[2], // 修改成的群名片 ctx.State["regex_matched"].([]string)[2], // 修改成的群名片
) )
@ -246,8 +230,7 @@ func init() { // 插件主体
ctx.SendChain(message.Text("头衔太长啦!")) ctx.SendChain(message.Text("头衔太长啦!"))
return return
} }
ctx.SetGroupSpecialTitle( ctx.SetThisGroupSpecialTitle(
ctx.Event.GroupID,
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被修改群头衔的人 math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被修改群头衔的人
sptitle, // 修改成的群头衔 sptitle, // 修改成的群头衔
) )
@ -264,8 +247,7 @@ func init() { // 插件主体
ctx.SendChain(message.Text("头衔太长啦!")) ctx.SendChain(message.Text("头衔太长啦!"))
return return
} }
ctx.SetGroupSpecialTitle( ctx.SetThisGroupSpecialTitle(
ctx.Event.GroupID,
ctx.Event.UserID, // 被修改群头衔的人 ctx.Event.UserID, // 被修改群头衔的人
sptitle, // 修改成的群头衔 sptitle, // 修改成的群头衔
) )
@ -445,7 +427,7 @@ func init() { // 插件主体
case <-time.After(time.Minute): case <-time.After(time.Minute):
cancel() cancel()
ctx.SendChain(message.Text("拜拜啦~")) ctx.SendChain(message.Text("拜拜啦~"))
ctx.SetGroupKick(ctx.Event.GroupID, uid, false) ctx.SetThisGroupKick(uid, false)
case <-recv: case <-recv:
cancel() cancel()
ctx.SendChain(message.Text("答对啦~")) ctx.SendChain(message.Text("答对啦~"))
@ -594,7 +576,7 @@ func init() { // 插件主体
if ok { if ok {
ctx.SetGroupAddRequest(ctx.Event.Flag, "add", true, "") ctx.SetGroupAddRequest(ctx.Event.Flag, "add", true, "")
process.SleepAbout1sTo2s() process.SleepAbout1sTo2s()
ctx.SetGroupCard(ctx.Event.GroupID, ctx.Event.UserID, ghun) ctx.SetThisGroupCard(ctx.Event.UserID, ghun)
} else { } else {
ctx.SetGroupAddRequest(ctx.Event.Flag, "add", false, reason) ctx.SetGroupAddRequest(ctx.Event.Flag, "add", false, reason)
} }
@ -618,7 +600,7 @@ func init() { // 插件主体
} }
}) })
engine.OnCommand("精华列表", zero.OnlyGroup, zero.AdminPermission).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { engine.OnCommand("精华列表", zero.OnlyGroup, zero.AdminPermission).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) {
list := ctx.GetGroupEssenceMessageList(ctx.Event.GroupID).Array() list := ctx.GetThisGroupEssenceMessageList().Array()
msg := message.Message{ctxext.FakeSenderForwardNode(ctx, message.Text("本群精华列表:"))} msg := message.Message{ctxext.FakeSenderForwardNode(ctx, message.Text("本群精华列表:"))}
n := len(list) n := len(list)
if n > 30 { if n > 30 {
@ -675,7 +657,7 @@ func welcometocq(ctx *zero.Ctx, welcome string) string {
at := "[CQ:at,qq=" + uid + "]" // at用户 at := "[CQ:at,qq=" + uid + "]" // at用户
avatar := "[CQ:image,file=" + "http://q4.qlogo.cn/g?b=qq&nk=" + uid + "&s=640]" // 用户头像 avatar := "[CQ:image,file=" + "http://q4.qlogo.cn/g?b=qq&nk=" + uid + "&s=640]" // 用户头像
gid := strconv.FormatInt(ctx.Event.GroupID, 10) // 群id gid := strconv.FormatInt(ctx.Event.GroupID, 10) // 群id
groupname := ctx.GetGroupInfo(ctx.Event.GroupID, true).Name // 群名 groupname := ctx.GetThisGroupInfo(true).Name // 群名
cqstring := strings.ReplaceAll(welcome, "{at}", at) cqstring := strings.ReplaceAll(welcome, "{at}", at)
cqstring = strings.ReplaceAll(cqstring, "{nickname}", nickname) cqstring = strings.ReplaceAll(cqstring, "{nickname}", nickname)
cqstring = strings.ReplaceAll(cqstring, "{avatar}", avatar) cqstring = strings.ReplaceAll(cqstring, "{avatar}", avatar)

View File

@ -44,7 +44,7 @@ func init() {
var secondname string var secondname string
if len(ctx.Event.Message) > 1 && ctx.Event.Message[1].Type == "at" { if len(ctx.Event.Message) > 1 && ctx.Event.Message[1].Type == "at" {
qq, _ := strconv.ParseInt(ctx.Event.Message[1].Data["qq"], 10, 64) qq, _ := strconv.ParseInt(ctx.Event.Message[1].Data["qq"], 10, 64)
secondname = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("nickname").Str secondname = ctx.GetThisGroupMemberInfo(qq, false).Get("nickname").Str
} }
name = ctx.Event.Sender.NickName name = ctx.Event.Sender.NickName
var text string var text string