From 19091319cc7dc492e3664f09c92b7457a160acdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=AB=E6=80=9D=E6=BD=8B?= <55676105+shudorcl@users.noreply.github.com> Date: Wed, 4 May 2022 23:19:21 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=8A=BD=E5=A1=94=E7=BD=97?= =?UTF-8?q?=E7=89=8C=20(#213)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 优化在两个命令中使用空格分隔的体验 - fortune的设置底图功能 - b14的加密功能 * 优化四个插件中使用空格分隔的体验 - 加密 - 哔哩哔哩推送 - 藏头诗 - 运势 * 优化并修正了上一个commit - 加上了因为复制粘贴疏忽又没有注意测试遗漏的`?` - 调整藏头诗和加密的正则触发,使其不必多此一举 - 删去了未被发现的测试代码 * - 删去了遗漏的Trim * 优化了更多插件中使用空格的体验 - 优化了music bilibili image_finder 中使用空格的体验 - 补上了plugin_bilibili中未实现的vup开头触发 - 为plugin_bilibili_parse输出的消息加上一个换行符,优化排版 * - 调整funny - 补回readme中bilibili_push的注释说明 * - 简化funny说明 * feat:抽塔罗牌 * 🎨 改进代码样式 * 加上一个换行符 * 🎨 改进代码样式 * - At用户 * 🎨 改进代码样式 * -改进抽塔罗牌 * typo: 小写struct名 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- README.md | 8 +++++ main.go | 1 + plugin/tarot/tarot.go | 77 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 plugin/tarot/tarot.go diff --git a/README.md b/README.md index 50c1692f..b3d04552 100644 --- a/README.md +++ b/README.md @@ -795,6 +795,14 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] 黄油角色[@xxx] + +
+ 抽塔罗牌 + + `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tarot"` + + - [x] 抽塔罗牌 +
搜番 diff --git a/main.go b/main.go index 16cfaba0..4fe0028a 100644 --- a/main.go +++ b/main.go @@ -104,6 +104,7 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin/setutime" // 来份涩图 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/shadiao" // 沙雕app _ "github.com/FloatTech/ZeroBot-Plugin/plugin/shindan" // 测定 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tarot" // 抽塔罗牌 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tiangou" // 舔狗日记 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/tracemoe" // 搜番 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/translation" // 翻译 diff --git a/plugin/tarot/tarot.go b/plugin/tarot/tarot.go new file mode 100644 index 00000000..6a7d5af2 --- /dev/null +++ b/plugin/tarot/tarot.go @@ -0,0 +1,77 @@ +package tarot + +import ( + "encoding/json" + "fmt" + "log" + "math/rand" + "strconv" + + "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" + "github.com/FloatTech/zbputils/file" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" +) + +const bed = "https://gitcode.net/shudorcl/zbp-tarot/-/raw/master/" + +type card struct { + Name string `json:"name"` + Info struct { + Description string `json:"description"` + ReverseDescription string `json:"reverseDescription"` + ImgURL string `json:"imgUrl"` + } `json:"info"` +} +type cardset = map[string]card + +var cardMap = make(cardset, 256) +var reasons = []string{"您抽到的是~\n", "锵锵锵,塔罗牌的预言是~\n", "诶,让我看看您抽到了~\n"} +var position = []string{"正位", "逆位"} + +func init() { + engine := control.Register("tarot", &control.Options{ + DisableOnDefault: false, + Help: "塔罗牌\n" + + "- 抽塔罗牌\n", + // TODO 抽X张塔罗牌 解塔罗牌[牌名] + PublicDataFolder: "Tarot", + }).ApplySingle(ctxext.DefaultSingle) + + engine.OnFullMatch("抽塔罗牌", ctxext.DoOnceOnSuccess( + func(ctx *zero.Ctx) bool { + tarotPath := engine.DataFolder() + "tarots.json" + data, err := file.GetLazyData(tarotPath, true, true) + if err != nil { + ctx.SendChain(message.Text("ERROR:", err)) + return false + } + err = json.Unmarshal(data, &cardMap) + if err != nil { + panic(err) + } + log.Printf("[tarot]读取%d张塔罗牌", len(cardMap)) + return true + }, + )).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { + i := rand.Intn(22) + p := rand.Intn(2) + card := cardMap[(strconv.Itoa(i))] + name := card.Name + var info string + if p == 0 { + info = card.Info.Description + } else { + info = card.Info.ReverseDescription + } + if id := ctx.SendChain( + message.At(ctx.Event.UserID), + message.Text(reasons[rand.Intn(len(reasons))], position[p], " 的 ", name, "\n"), + message.Image(fmt.Sprintf(bed+"MajorArcana/%d.png", i)), + message.Text("\n其意义为:", info), + ); id.ID() == 0 { + ctx.SendChain(message.Text("ERROR:可能被风控了")) + } + }) +}