mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-18 20:50:12 +08:00
114 lines
3.0 KiB
Go
114 lines
3.0 KiB
Go
// Package dress 女装
|
|
package dress
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/FloatTech/floatbox/binary"
|
|
ctrl "github.com/FloatTech/zbpctrl"
|
|
"github.com/FloatTech/zbputils/control"
|
|
"github.com/FloatTech/zbputils/ctxext"
|
|
"github.com/FloatTech/zbputils/img/text"
|
|
zero "github.com/wdvxdr1123/ZeroBot"
|
|
"github.com/wdvxdr1123/ZeroBot/message"
|
|
)
|
|
|
|
func init() { // 插件主体
|
|
engine := control.AutoRegister(&ctrl.Options[*zero.Ctx]{
|
|
DisableOnDefault: false,
|
|
Brief: "女装",
|
|
Help: "女装\n" +
|
|
"- 女装\n" +
|
|
"- 男装\n" +
|
|
"- 随机女装\n" +
|
|
"- 随机男装",
|
|
PrivateDataFolder: "dress",
|
|
})
|
|
engine.OnFullMatchGroup([]string{"女装", "男装"}).SetBlock(true).
|
|
Handle(func(ctx *zero.Ctx) {
|
|
matched := ctx.State["matched"].(string)
|
|
sex := male
|
|
if matched == "男装" {
|
|
sex = female
|
|
}
|
|
next := zero.NewFutureEvent("message", 999, false, ctx.CheckSession())
|
|
recv, cancel := next.Repeat()
|
|
defer cancel()
|
|
nameList, err := dressList(sex)
|
|
if err != nil {
|
|
ctx.SendChain(message.Text("ERROR: ", err))
|
|
return
|
|
}
|
|
tex := "请输入" + matched + "序号\n"
|
|
for i, v := range nameList {
|
|
tex += fmt.Sprintf("%d. %s\n", i, v)
|
|
}
|
|
base64Str, err := text.RenderToBase64(tex, text.FontFile, 400, 20)
|
|
if err != nil {
|
|
ctx.SendChain(message.Text("ERROR: ", err))
|
|
return
|
|
}
|
|
ctx.SendChain(message.Image("base64://" + binary.BytesToString(base64Str)))
|
|
for {
|
|
select {
|
|
case <-time.After(time.Second * 120):
|
|
ctx.SendChain(message.Text(matched, "指令过期"))
|
|
return
|
|
case c := <-recv:
|
|
msg := c.Event.Message.ExtractPlainText()
|
|
num, err := strconv.Atoi(msg)
|
|
if err != nil {
|
|
ctx.SendChain(message.Text("请输入数字!"))
|
|
continue
|
|
}
|
|
if num < 0 || num >= len(nameList) {
|
|
ctx.SendChain(message.Text("序号非法!"))
|
|
continue
|
|
}
|
|
name := nameList[num]
|
|
sendImage(ctx, sex, matched, name)
|
|
return
|
|
}
|
|
}
|
|
})
|
|
engine.OnFullMatchGroup([]string{"随机女装", "随机男装"}).SetBlock(true).
|
|
Handle(func(ctx *zero.Ctx) {
|
|
matched := strings.TrimPrefix(ctx.State["matched"].(string), "随机")
|
|
sex := male
|
|
if matched == "男装" {
|
|
sex = female
|
|
}
|
|
nameList, err := dressList(sex)
|
|
if err != nil {
|
|
ctx.SendChain(message.Text("ERROR: ", err))
|
|
return
|
|
}
|
|
name := nameList[rand.Intn(len(nameList))]
|
|
sendImage(ctx, sex, matched, name)
|
|
})
|
|
}
|
|
|
|
func sendImage(ctx *zero.Ctx, sex, matched, name string) {
|
|
ctx.SendChain(message.Text("请欣赏", matched, ": ", name))
|
|
count, err := detail(sex, name)
|
|
if err != nil {
|
|
ctx.SendChain(message.Text("ERROR: ", err))
|
|
return
|
|
}
|
|
imageList := make([]string, count)
|
|
for i := range imageList {
|
|
imageList[i] = fmt.Sprintf(dressImageURL, sex, name, i+1)
|
|
}
|
|
m := message.Message{}
|
|
for _, v := range imageList {
|
|
m = append(m, ctxext.FakeSenderForwardNode(ctx, message.Image(v)))
|
|
}
|
|
if id := ctx.Send(m).ID(); id == 0 {
|
|
ctx.SendChain(message.Text("ERROR: 可能被风控或下载图片用时过长,请耐心等待"))
|
|
}
|
|
}
|