-
Notifications
You must be signed in to change notification settings - Fork 2k
提交新插件牛牛大作战 #944
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
提交新插件牛牛大作战 #944
Changes from 56 commits
Commits
Show all changes
64 commits
Select commit
Hold shift + click to select a range
910b6a2
Add files via upload
xyy0411 68356a0
Delete plugin/main.go
xyy0411 a48c9f5
Delete plugin/go.sum
xyy0411 c2bf903
Delete plugin/go.mod
xyy0411 02500b8
Update main.go
xyy0411 667f9e1
Update model.go
xyy0411 97be553
Update main.go
xyy0411 a7d3fc9
Update main.go
xyy0411 e048296
Update main.go
xyy0411 699b80c
Update result.go
xyy0411 9da476f
Update main.go
xyy0411 2a913e0
Update main.go
xyy0411 25ebd17
Update model.go
xyy0411 b1ce060
Update result.go
xyy0411 7637a52
Update main.go
xyy0411 32d3a1b
Update main.go
xyy0411 a80fd77
Update main.go
xyy0411 d708204
Update model.go
xyy0411 c229063
Update result.go
xyy0411 88e059b
Update main.go
xyy0411 ce5cc5c
Update result.go
xyy0411 17cdf28
Update result.go
xyy0411 b5d51f0
Update result.go
xyy0411 634a866
Merge branch 'FloatTech:master' into master
xyy0411 2fef3b6
Update main.go
xyy0411 f4b2da2
Update main.go
xyy0411 5b7ad7c
Merge branch 'master' into master
fumiama 83c6624
Merge branch 'master' into master
fumiama e5da406
Update and rename result.go to untils.go
xyy0411 11396a7
Update model.go
xyy0411 1110a99
Update main.go
xyy0411 79b84cb
Update main.go
xyy0411 37b3f48
Update main.go
xyy0411 804b724
Update main.go
xyy0411 d7a08f4
Merge branch 'master' into master
fumiama 46f9131
Rename untils.go to utils.go
xyy0411 b46cd4d
Update main.go
xyy0411 ef21807
Update model.go
xyy0411 4d00448
Update utils.go
xyy0411 992f9a8
Update main.go
xyy0411 d9255df
Update model.go
xyy0411 11ec958
Update utils.go
xyy0411 d929941
Update utils.go
xyy0411 e83e2dc
Update main.go
xyy0411 bc63eb0
Merge branch 'FloatTech:master' into master
xyy0411 117d56b
Update model.go
xyy0411 1c3fbea
Update main.go
xyy0411 0ffe2d4
Update main.go
xyy0411 a9c9234
Update main.go
xyy0411 e70f473
Update main.go
xyy0411 bbeaf04
Update model.go
xyy0411 0344d41
Update main.go
xyy0411 35a2d11
Update README.md
xyy0411 a0a28a2
Update main.go
xyy0411 df6e95d
Update README.md
xyy0411 92721a5
Update README.md
xyy0411 903392c
Update README.md
fumiama 15a1837
Update main.go
xyy0411 c3f6406
Update main.go
xyy0411 1e96eca
Update main.go
xyy0411 e65f816
Update model.go
xyy0411 78669d5
Update utils.go
xyy0411 f198271
Update main.go
xyy0411 95d0c69
Merge branch 'master' into master
fumiama File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,239 @@ | ||
// Package niuniu 牛牛大作战 | ||
package niuniu | ||
|
||
import ( | ||
"fmt" | ||
ctrl "github.com/FloatTech/zbpctrl" | ||
"github.com/FloatTech/zbputils/control" | ||
"github.com/FloatTech/zbputils/ctxext" | ||
zero "github.com/wdvxdr1123/ZeroBot" | ||
"github.com/wdvxdr1123/ZeroBot/extension/rate" | ||
"github.com/wdvxdr1123/ZeroBot/message" | ||
"golang.org/x/exp/rand" | ||
"strconv" | ||
"strings" | ||
"time" | ||
) | ||
|
||
var ( | ||
en = control.AutoRegister(&ctrl.Options[*zero.Ctx]{ | ||
DisableOnDefault: false, | ||
Brief: "牛牛大作战", | ||
Help: "- 打胶\n" + | ||
"- 注册牛牛\n" + | ||
"- 注销牛牛\n" + | ||
"- 查看我的牛牛\n" + | ||
"- jj@xxx\n" + | ||
"- 牛子长度排行\n" + | ||
"- 牛子深度排行\n", | ||
PrivateDataFolder: "niuniu", | ||
}) | ||
dajiaoLimiter = rate.NewManager[string](time.Second*90, 1) | ||
jjLimiter = rate.NewManager[string](time.Second*150, 1) | ||
) | ||
|
||
func init() { | ||
en.OnFullMatch("牛子长度排行", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) { | ||
gid := ctx.Event.GroupID | ||
niuniuList, err := db.readAllTable(gid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("ERROR: ", err)) | ||
return | ||
} | ||
m := niuniuList.positive() | ||
if m == nil { | ||
ctx.SendChain(message.Text("暂时没有男孩子哦")) | ||
return | ||
} | ||
var messages strings.Builder | ||
messages.WriteString("牛子长度排行\n") | ||
for i, user := range niuniuList.sort(true) { | ||
messages.WriteString(fmt.Sprintf("第%d名 id:%s 长度:%.2fcm\n", i+1, | ||
ctx.CardOrNickName(user.UID), user.Length)) | ||
} | ||
msg := ctxext.FakeSenderForwardNode(ctx, message.Text(&messages)) | ||
if id := ctx.Send(message.Message{msg}).ID(); id == 0 { | ||
ctx.Send(message.Text("发送排行失败")) | ||
} | ||
}) | ||
en.OnFullMatch("牛子深度排行", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) { | ||
gid := ctx.Event.GroupID | ||
niuniuList, err := db.readAllTable(gid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("ERROR: ", err)) | ||
return | ||
} | ||
m := niuniuList.negative() | ||
if m == nil { | ||
ctx.SendChain(message.Text("暂时没有女孩子哦")) | ||
fumiama marked this conversation as resolved.
Show resolved
Hide resolved
|
||
return | ||
} | ||
var messages strings.Builder | ||
messages.WriteString("牛牛深度排行榜\n") | ||
for i, user := range niuniuList.sort(false) { | ||
messages.WriteString(fmt.Sprintf("第%d名 id:%s 长度:%.2fcm\n", i+1, | ||
ctx.CardOrNickName(user.UID), user.Length)) | ||
} | ||
msg := ctxext.FakeSenderForwardNode(ctx, message.Text(&messages)) | ||
if id := ctx.Send(message.Message{msg}).ID(); id == 0 { | ||
ctx.Send(message.Text("发送排行失败")) | ||
} | ||
}) | ||
en.OnFullMatch("查看我的牛牛", getdb, zero.OnlyGroup).SetBlock(true).Handle(func(ctx *zero.Ctx) { | ||
uid := ctx.Event.UserID | ||
gid := ctx.Event.GroupID | ||
niuniu, err := db.findniuniu(gid, uid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("你还没有牛牛呢不能查看!")) | ||
return | ||
} | ||
var result strings.Builder | ||
sexLong := "长" | ||
sex := "♂️" | ||
if niuniu < 0 { | ||
sexLong = "深" | ||
sex = "♀️" | ||
} | ||
niuniuList, err := db.readAllTable(gid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("ERROR:", err)) | ||
return | ||
} | ||
result.WriteString(fmt.Sprintf("\n📛%s<%s>的牛牛信息\n⭕性别:%s\n⭕%s度:%.2fcm\n⭕排行:%d\n⭕%s ", | ||
ctx.CardOrNickName(uid), strconv.FormatInt(uid, 10), | ||
sex, sexLong, niuniu, niuniuList.ranking(niuniu, uid), generateRandomString(niuniu))) | ||
ctx.SendChain(message.At(uid), message.Text(&result)) | ||
}) | ||
en.OnFullMatchGroup([]string{"dj", "打胶"}, zero.OnlyGroup, | ||
getdb).SetBlock(true).Limit(func(ctx *zero.Ctx) *rate.Limiter { | ||
lt := dajiaoLimiter.Load(fmt.Sprintf("%d_%d", ctx.Event.GroupID, ctx.Event.UserID)) | ||
ctx.State["dajiao_last_touch"] = lt.LastTouch() | ||
return lt | ||
}, func(ctx *zero.Ctx) { | ||
timePass := int(time.Since(time.Unix(ctx.State["dajiao_last_touch"].(int64), 0)).Seconds()) | ||
ctx.SendChain(message.Text(randomChoice([]string{ | ||
fmt.Sprintf("才过去了%ds时间,你就又要打🦶了,身体受得住吗", timePass), | ||
fmt.Sprintf("不行不行,你的身体会受不了的,歇%ds再来吧", 90-timePass), | ||
fmt.Sprintf("休息一下吧,会炸膛的!%ds后再来吧", 90-timePass), | ||
fmt.Sprintf("打咩哟,你的牛牛会爆炸的,休息%ds再来吧", 90-timePass), | ||
}))) | ||
}).Handle(func(ctx *zero.Ctx) { | ||
// 获取群号和用户ID | ||
gid := ctx.Event.GroupID | ||
uid := ctx.Event.UserID | ||
niuniu, err := db.findniuniu(gid, uid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("请先注册牛牛!")) | ||
return | ||
} | ||
messages, f := generateRandomStingTwo(niuniu) | ||
u := userInfo{ | ||
UID: uid, | ||
Length: f, | ||
} | ||
ctx.SendChain(message.Text(messages)) | ||
if err = db.insertniuniu(&u, gid); err != nil { | ||
ctx.SendChain(message.Text("ERROR:", err)) | ||
return | ||
} | ||
}) | ||
en.OnFullMatch("注册牛牛", zero.OnlyGroup, getdb).SetBlock(true).Handle(func(ctx *zero.Ctx) { | ||
gid := ctx.Event.GroupID | ||
uid := ctx.Event.UserID | ||
if _, err := db.findniuniu(gid, uid); err == nil { | ||
ctx.SendChain(message.Text("你已经注册过了")) | ||
return | ||
} | ||
//获取初始长度 | ||
long := db.randLength().InexactFloat64() | ||
u := userInfo{ | ||
UID: uid, | ||
Length: long, | ||
UserCount: 0, | ||
} | ||
//添加数据进入表 | ||
err := db.insertniuniu(&u, gid) | ||
if err != nil { | ||
err = db.createGIDTable(gid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("ERROR:", err)) | ||
return | ||
} | ||
err = db.insertniuniu(&u, gid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("ERROR:", err)) | ||
return | ||
} | ||
} | ||
ctx.SendChain(message.Reply(ctx.Event.GroupID), | ||
message.Text("注册成功,你的牛牛现在有", u.Length, "cm")) | ||
}) | ||
en.OnRegex(`jj\[CQ:at,qq=(\d+),name=[\s\S]*\]$`, getdb, | ||
zero.OnlyGroup).SetBlock(true).Limit(func(ctx *zero.Ctx) *rate.Limiter { | ||
lt := jjLimiter.Load(fmt.Sprintf("%d_%d", ctx.Event.GroupID, ctx.Event.UserID)) | ||
ctx.State["jj_last_touch"] = lt.LastTouch() | ||
return lt | ||
}, func(ctx *zero.Ctx) { | ||
timePass := int(time.Since(time.Unix(ctx.State["jj_last_touch"].(int64), 0)).Seconds()) | ||
ctx.SendChain(message.Text(randomChoice([]string{ | ||
fmt.Sprintf("才过去了%ds时间,你就又要击剑了,真是饥渴难耐啊", timePass), | ||
fmt.Sprintf("不行不行,你的身体会受不了的,歇%ds再来吧", 150-timePass), | ||
fmt.Sprintf("你这种男同就应该被送去集中营!等待%ds再来吧", 150-timePass), | ||
fmt.Sprintf("打咩哟!你的牛牛会炸的,休息%ds再来吧", 150-timePass), | ||
}))) | ||
}, | ||
).Handle(func(ctx *zero.Ctx) { | ||
adduser, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) | ||
if err != nil { | ||
ctx.SendChain(message.Text("ERROR:", err)) | ||
return | ||
} | ||
uid := ctx.Event.UserID | ||
gid := ctx.Event.GroupID | ||
myniuniu, err := db.findniuniu(gid, uid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("你还没有牛牛快去注册一个吧!")) | ||
return | ||
} | ||
adduserniuniu, err := db.findniuniu(gid, adduser) | ||
if err != nil { | ||
ctx.SendChain(message.At(uid), message.Text("对方还没有牛牛呢,不能🤺")) | ||
return | ||
} | ||
if uid == adduser { | ||
ctx.SendChain(message.Text("你要和谁🤺?你自己吗?")) | ||
return | ||
} | ||
fencingResult, f, f1 := fencing(myniuniu, adduserniuniu) | ||
err = db.insertniuniu(&userInfo{UID: uid, Length: f}, gid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("ERROR:", err)) | ||
return | ||
} | ||
err = db.insertniuniu(&userInfo{UID: adduser, Length: f1}, gid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("ERROR:", err)) | ||
return | ||
} | ||
ctx.SendChain(message.At(uid), message.Text(fencingResult)) | ||
}) | ||
en.OnFullMatch("注销牛牛", getdb, zero.OnlyGroup).SetBlock(true).Handle(func(ctx *zero.Ctx) { | ||
uid := ctx.Event.UserID | ||
gid := ctx.Event.GroupID | ||
_, err := db.findniuniu(gid, uid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("你还没有牛牛呢,咋的你想凭空造一个啊")) | ||
return | ||
} | ||
err = db.deleteniuniu(gid, uid) | ||
if err != nil { | ||
ctx.SendChain(message.Text("注销失败")) | ||
return | ||
} | ||
ctx.SendChain(message.Text("注销成功,你已经没有牛牛了")) | ||
}) | ||
} | ||
|
||
func randomChoice(options []string) string { | ||
return options[rand.Intn(len(options))] | ||
} |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.