diff --git a/plugin/gif/gif.go b/plugin/gif/gif.go index c39967d768..99d84e6dea 100644 --- a/plugin/gif/gif.go +++ b/plugin/gif/gif.go @@ -1154,3 +1154,297 @@ func dun(cc *context, value ...string) (string, error) { } return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, dun)) } + +// push 滚高清重置版 过渡 +func push(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + piclen := 16 + name := cc.usrdir + "push.gif" + c := dlrange("push", piclen, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + tou, err := cc.getLogo(0, 0) + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, piclen) + if err != nil { + return "", err + } + push := make([]*image.NRGBA, piclen) + for i := 0; i < piclen; i++ { + push[i] = imgs[i].InsertUpC(img.Rotate(tou, float64(-22*i), 280, 280).Im, 0, 0, 523, 291).Im + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, push)) +} + +// peng 砰 +func peng(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "peng.gif" + c := dlrange("peng", 25, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + tou, err := cc.getLogo(100, 100) + if err != nil { + return "", err + } + m1 := img.Rotate(tou, 1, 80, 80) + m2 := img.Rotate(tou, 30, 80, 80) + m3 := img.Rotate(tou, 45, 85, 85) + m4 := img.Rotate(tou, 90, 80, 80) + + wg.Wait() + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 25) + if err != nil { + return "", err + } + peng := []*image.NRGBA{ + imgs[0].Im, + imgs[1].Im, + imgs[2].Im, + imgs[3].Im, + imgs[4].Im, + imgs[5].Im, + imgs[6].Im, + imgs[7].InsertUp(m1.Im, 0, 0, 205, 80).Im, + imgs[8].InsertUp(m1.Im, 0, 0, 205, 80).Im, + imgs[9].InsertUp(m1.Im, 0, 0, 205, 80).Im, + imgs[10].InsertUp(m1.Im, 0, 0, 205, 80).Im, + imgs[11].InsertUp(m1.Im, 0, 0, 205, 80).Im, + imgs[12].InsertUp(m1.Im, 0, 0, 205, 80).Im, + imgs[13].InsertUp(m1.Im, 0, 0, 205, 80).Im, + imgs[14].InsertUp(m1.Im, 0, 0, 205, 80).Im, + imgs[15].InsertUp(m1.Im, 0, 0, 205, 80).Im, + imgs[16].InsertUp(m1.Im, 0, 0, 200, 80).Im, + imgs[17].InsertUp(m2.Im, 0, 0, 169, 65).Im, + imgs[18].InsertUp(m2.Im, 0, 0, 160, 69).Im, + imgs[19].InsertUp(m3.Im, 0, 0, 113, 90).Im, + imgs[20].InsertUp(m4.Im, 0, 0, 89, 159).Im, + imgs[21].InsertUp(m4.Im, 0, 0, 89, 159).Im, + imgs[22].InsertUp(m4.Im, 0, 0, 86, 160).Im, + imgs[23].InsertUp(m4.Im, 0, 0, 89, 159).Im, + imgs[24].InsertUp(m4.Im, 0, 0, 86, 160).Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, peng)) +} + +// klee 可莉吃 +func klee(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + piclen := 31 + name := cc.usrdir + "klee.gif" + c := dlrange("klee", piclen, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + im, err := img.LoadFirstFrame(cc.headimgsdir[0], 82, 83) + if err != nil { + return "", err + } + locs := [][]int{{0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {12, 160}, {19, 152}, {23, 148}, {26, 145}, {32, 140}, {37, 136}, {42, 131}, {49, 127}, {70, 126}, {88, 128}, {-30, 210}, {-19, 207}, {-14, 200}, {-10, 188}, {-7, 179}, {-3, 170}, {-3, 175}, {-1, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}, {0, 174}} + imgs, err := loadFirstFrames(c, piclen) + if err != nil { + return "", err + } + klee := make([]*image.NRGBA, piclen) + for i := 0; i < piclen; i++ { + klee[i] = imgs[i].InsertBottom(im.Im, 0, 0, locs[i][0], locs[i][1]).Im + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, klee)) +} + +// hutaoken 胡桃啃 +func hutaoken(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "hutaoken.gif" + c := dlrange("hutaoken", 2, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + tou, err := cc.getLogo(55, 55) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 2) + if err != nil { + return "", err + } + hutaoken := []*image.NRGBA{ + imgs[0].InsertBottom(tou, 98, 101, 108, 234).Im, + imgs[1].InsertBottom(tou, 96, 100, 108, 237).Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, hutaoken)) +} + +// lick 2舔 +func lick(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "lick.gif" + c := dlrange("lick", 2, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + tou, err := cc.getLogo(100, 100) + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 2) + if err != nil { + return "", err + } + lick := []*image.NRGBA{ + imgs[0].InsertUp(tou, 44, 44, 10, 138).Im, + imgs[1].InsertUp(tou, 44, 44, 10, 138).Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, lick)) +} + +// tiqiu 踢球 +func tiqiu(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + piclen := 15 + name := cc.usrdir + "tiqiu.gif" + c := dlrange("tiqiu", piclen, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + tou, err := cc.getLogo(78, 78) + if err != nil { + return "", err + } + locs := [][]int{{58, 137}, {57, 118}, {56, 100}, {53, 114}, {51, 127}, {49, 140}, {48, 113}, {48, 86}, {48, 58}, {49, 98}, {51, 137}, {52, 177}, {53, 170}, {56, 182}, {59, 154}} + imgs, err := loadFirstFrames(c, piclen) + if err != nil { + return "", err + } + tiqiu := make([]*image.NRGBA, piclen) + for i := 0; i < piclen; i++ { + tiqiu[i] = imgs[i].InsertUpC(img.Rotate(tou, float64(-24*i), 0, 0).Im, 0, 0, locs[i][0]+38, locs[i][1]+38).Im + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, tiqiu)) +} + +// cai 踩 +func cai(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + name := cc.usrdir + "cai.gif" + c := dlrange("cai", 5, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + tou, err := cc.getLogo(0, 0) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, 5) + if err != nil { + return "", err + } + m1 := img.Rotate(tou, -20, 130, 80) + cai := []*image.NRGBA{ + imgs[0].InsertBottom(m1.Im, 123, 105, 39, 188).Im, + imgs[1].InsertBottom(m1.Im, 123, 105, 39, 188).Im, + imgs[2].InsertBottom(tou, 90, 71, 50, 209).Im, + imgs[3].InsertBottom(tou, 85, 76, 52, 203).Im, + imgs[4].InsertBottom(tou, 88, 82, 49, 198).Im, + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, cai)) +} + +// whir 2转 +func whirl(cc *context, value ...string) (string, error) { + _ = value + var wg sync.WaitGroup + var err error + var m sync.Mutex + piclen := 15 + name := cc.usrdir + "whirl.gif" + c := dlrange("whirl", piclen, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + tou, err := cc.getLogo(0, 0) + if err != nil { + return "", err + } + imgs, err := loadFirstFrames(c, piclen) + if err != nil { + return "", err + } + whirl := make([]*image.NRGBA, piclen) + for i := 0; i < piclen; i++ { + whirl[i] = imgs[i].InsertUpC(img.Rotate(tou, float64(-24*i), 145, 145).Im, 0, 0, 115, 89).Im + } + return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, whirl)) +} diff --git a/plugin/gif/png.go b/plugin/gif/png.go index c03eb563e9..c210232bb1 100644 --- a/plugin/gif/png.go +++ b/plugin/gif/png.go @@ -24,7 +24,7 @@ func pa(cc *context, args ...string) (string, error) { return "", err } // 随机爬图序号 - rand := rand.Intn(60) + 1 + rand := rand.Intn(92) + 1 if file.IsNotExist(datapath + "materials/pa") { err = os.MkdirAll(datapath+"materials/pa", 0755) if err != nil { @@ -39,7 +39,7 @@ func pa(cc *context, args ...string) (string, error) { if err != nil { return "", err } - return "file:///" + name, writer.SavePNG2Path(name, imgf.InsertBottom(tou, 100, 100, 0, 400).Im) + return "file:///" + name, writer.SavePNG2Path(name, imgf.InsertUp(tou, 100, 100, 0, 400).Im) } // si 撕 @@ -1385,3 +1385,139 @@ func eihei(cc *context, args ...string) (string, error) { imgnrgba := imgs[0].InsertBottom(im.Im, 450, 450, 121, 162).Im return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) } + +// fanfa 犯法 +func fanfa(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("fanfa", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + imgs, err := loadFirstFrames(c, 1) + if err != nil { + return "", err + } + name := cc.usrdir + "fanfa.png" + face, err := cc.getLogo(0, 0) + if err != nil { + return "", err + } + m1 := img.Rotate(face, 45, 110, 110) + imgnrgba := imgs[0].InsertUp(m1.Im, 0, 0, 125, 360).Im + return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) +} + +// huai 怀 +func huai(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("huai", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + imgs, err := loadFirstFrames(c, 1) + if err != nil { + return "", err + } + name := cc.usrdir + "huai.png" + im, err := img.LoadFirstFrame(cc.headimgsdir[0], 640, 640) + if err != nil { + return "", err + } + imgnrgba := imgs[0].InsertBottom(im.Im, 640, 640, 0, 0).Im + return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) +} + +// haowan 好玩 +func haowan(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("haowan", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + imgs, err := loadFirstFrames(c, 1) + if err != nil { + return "", err + } + name := cc.usrdir + "haowan.png" + face, err := cc.getLogo(0, 0) + if err != nil { + return "", err + } + imgnrgba := imgs[0].InsertBottom(face, 90, 90, 321, 172).Im + return "file:///" + name, writer.SavePNG2Path(name, imgnrgba) +} + +// mengbi 蒙蔽 +func mengbi(cc *context, args ...string) (string, error) { + _ = args + var wg sync.WaitGroup + var m sync.Mutex + var err error + c := dlrange("mengbi", 1, &wg, func(e error) { + m.Lock() + err = e + m.Unlock() + }) + if err != nil { + return "", err + } + wg.Wait() + name := cc.usrdir + "mengbi.png" + back, err := gg.LoadImage(c[0]) + if err != nil { + return "", err + } + face, err := cc.getLogo(0, 0) + if err != nil { + return "", err + } + wg.Wait() + if err != nil { + return "", err + } + canvas := gg.NewContext(1080, 1080) + canvas.DrawImage(back, 0, 0) + canvas.DrawImage(img.Size(face, 100, 100).Im, 392, 460) + canvas.DrawImage(img.Size(face, 100, 100).Im, 606, 443) + canvas.SetColor(color.Black) + _, err = file.GetLazyData(text.BoldFontFile, true) + if err != nil { + return "", err + } + if err = canvas.LoadFontFace(text.BoldFontFile, 80); err != nil { + return "", err + } + if args[0] == "" { + args[0] = "" + } + l, _ := canvas.MeasureString(args[0]) + if l > 1080 { + return "", errors.New("文字消息太长了") + } + canvas.DrawString(args[0], (1080-l)/2, 1000) + return "file:///" + name, canvas.SavePNG(name) +} diff --git a/plugin/gif/run.go b/plugin/gif/run.go index f7234fc67b..f76e647eeb 100644 --- a/plugin/gif/run.go +++ b/plugin/gif/run.go @@ -92,6 +92,18 @@ var ( "紧贴": tightly, "紧紧贴着": tightly, "转": turn, + "蒙蔽": mengbi, + "踩": cai, + "好玩": haowan, + "2转": whirl, + "2滚": push, + "踢球": tiqiu, + "2舔": lick, + "可莉吃": klee, + "胡桃啃": hutaoken, + "怀": huai, + "砰": peng, + "你犯法了": fanfa, "炖": dun, "2蹭": ceng2, "诶嘿": eihei, @@ -115,12 +127,20 @@ func init() { // 插件主体 } en := control.Register("gif", &ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, - Help: "制图\n- 搓\n- 冲\n- 摸\n- 拍\n- 丢\n- 吃\n- 敲\n- 啃\n- 蹭\n- 爬\n- 撕\n- 灰度\n- 上翻|下翻\n" + - "- 左翻|右翻\n- 反色\n- 浮雕\n- 打码\n- 负片\n- 旋转 45\n- 变形 100 100\n- 亲\n- 结婚申请|结婚登记\n- 阿尼亚喜欢\n- 像只\n" + - "- 我永远喜欢|永远喜欢\n- 像样的亲亲\n- 国旗\n- 不要靠近\n- 万能表情|空白表情\n- 采访\n- 需要|你可能需要\n- 这像画吗\n- 小画家\n" + - "- 完美\n- 玩游戏\n- 出警\n- 警察\n- 舔|舔屏|prpr\n- 安全感\n- 精神支柱\n- 想什么\n- 墙纸\n- 为什么at我\n- 交个朋友\n- 打工人|继续干活\n" + - "- 兑换券\n- 注意力涣散\n- 垃圾桶|垃圾\n- 捶\n- 啾啾\n- 2敲\n- 听音乐\n- 永远爱你\n- 2拍\n- 顶\n- 捣\n- 打拳\n- 滚\n- 吸|嗦\n- 扔\n" + - "- 锤\n- 紧贴|紧紧贴着\n- 转\n- 炖\n- 2蹭\n- 诶嘿\n- 膜拜\n- 吞\n- 揍\n- 给我变\n- 玩一下\n- 不要看\n- 小天使\n- 你的\n- 我老婆\n- 远离\n- 抬棺\n", + Help: "GIF制图,命令后艾特群友/QQ号/一张图方可触发命令\n其中XXX可以为任何文字,可以不写\n对机器人操作请先艾特机器人再执行命令\n" + + "- 搓|-冲|-摸|-拍|-丢|-吃|-敲|-啃|-蹭|-爬|-撕|-灰度|-上翻|-下翻\n" + + "- 左翻|-右翻|-反色|-浮雕|- 打码|- 负片|- 旋转|- 变形|- 亲\n" + + "- 结婚申请|结婚登记|- 阿尼亚喜欢XXX|- 像只|- 我永远喜欢XXX\n" + + "- 像样的亲亲|- 国旗|- 不要靠近|- 万能表情|-空白表情|- 采访\n" + + "- 需要|-你可能需要|- 这像画吗|- 小画家|- 完美|- 玩游戏|- 出警\n" + + "- 警察|- 舔|舔屏|prpr|- 安全感|- 精神支柱|- 想什么|- 墙纸\n" + + "- 为什么at我|- 交个朋友|- 打工人|-继续干活|- 兑换券|- 炖\n" + + "- 垃圾桶|- 垃圾|- 捶|- 啾啾|- 2敲|- 听音乐|- 永远爱你|- 2拍\n" + + "- 顶|- 捣|- 打拳|- 滚|- 吸|- 嗦|- 扔|- 锤|- 紧贴|紧紧贴着|- 转\n" + + "- 抬棺|- 远离|- 我老婆|- 小天使XXX|- 你的XXX|- 不要看\n" + + "- 玩一下XXX|- 给我变|- 揍|- 吞|- 膜拜|- 诶嘿|- 2蹭|- 你犯法了\n" + + "- 砰|- 注意力涣散|- 蒙蔽|- 踩|- 好玩|- 2转|- 踢球|- 2舔|\n" + + "- 可莉吃|- 胡桃啃|- 怀", PrivateDataFolder: "gif", }).ApplySingle(ctxext.DefaultSingle) datapath = file.BOTPATH + "/" + en.DataFolder() diff --git a/plugin/hyaku/main.go b/plugin/hyaku/main.go index f7f93b9621..7947f37d29 100644 --- a/plugin/hyaku/main.go +++ b/plugin/hyaku/main.go @@ -21,7 +21,7 @@ import ( const bed = "https://gitcode.net/u011570312/OguraHyakuninIsshu/-/raw/master/" -//nolint: asciicheck +// nolint: asciicheck type line struct { 番号, 歌人, 上の句, 下の句, 上の句ひらがな, 下の句ひらがな string } diff --git a/plugin/qqwife/qqmapwife.go b/plugin/qqwife/qqmapwife.go index 3392bfe1ce..3fa8fc91c4 100644 --- a/plugin/qqwife/qqmapwife.go +++ b/plugin/qqwife/qqmapwife.go @@ -29,7 +29,7 @@ import ( "github.com/fogleman/gg" ) -//nolint: asciicheck +// nolint: asciicheck type 婚姻登记 struct { db *sql.Sqlite dbmu sync.RWMutex