// Package wife 抽老婆 package wife import ( "encoding/json" "fmt" "os" "regexp" "strings" fcext "github.com/FloatTech/floatbox/ctxext" ctrl "github.com/FloatTech/zbpctrl" "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" ) func init() { engine := control.AutoRegister(&ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Help: "- 抽老婆", Brief: "从老婆库抽每日老婆", PublicDataFolder: "Wife", }).ApplySingle(ctxext.DefaultSingle) _ = os.MkdirAll(engine.DataFolder()+"wives", 0755) cards := []string{} engine.OnFullMatch("抽老婆", fcext.DoOnceOnSuccess( func(ctx *zero.Ctx) bool { data, err := engine.GetLazyData("wife.json", true) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return false } err = json.Unmarshal(data, &cards) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return false } logrus.Infof("[wife]加载%d个老婆", len(cards)) return true }, )).SetBlock(true). Handle(func(ctx *zero.Ctx) { card := cards[fcext.RandSenderPerDayN(ctx.Event.UserID, len(cards))] data, err := engine.GetLazyData("wives/"+card, true) card, _, _ = strings.Cut(card, ".") if err != nil { ctx.SendChain( message.At(ctx.Event.UserID), message.Text("今天的二次元老婆是~【", card, "】哒\n【图片下载失败: ", err, "】"), ) return } re := regexp.MustCompile(`^\[(.*?)\](.*)\..*$`) match := re.FindStringSubmatch(card) var msgText string if len(match) == 3 { work, name := match[1], match[2] msgText = fmt.Sprintf("今天的二次元老婆是~来自【%s】的【%s】哒", work, name) } else { msgText = fmt.Sprintf("今天的二次元老婆是~【%s】哒", card) } if id := ctx.SendChain( message.At(ctx.Event.UserID), message.Text(msgText), message.ImageBytes(data), ); id.ID() == 0 { ctx.SendChain( message.At(ctx.Event.UserID), message.Text(msgText, "\n【图片发送失败, 多半是被夹了,请联系维护者】"), ) } }) }