mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 22:00:11 +08:00
Update chat.go
This commit is contained in:
parent
69394377d0
commit
ed7bbf54a7
4
go.mod
4
go.mod
@ -3,9 +3,9 @@ module github.com/FloatTech/ZeroBot-Plugin
|
|||||||
go 1.17
|
go 1.17
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/FloatTech/AnimeAPI v1.3.0-beta6
|
github.com/FloatTech/AnimeAPI v1.3.0-beta7
|
||||||
github.com/FloatTech/sqlite v0.1.0
|
github.com/FloatTech/sqlite v0.1.0
|
||||||
github.com/FloatTech/zbputils v1.3.0-beta6
|
github.com/FloatTech/zbputils v1.3.0-beta7
|
||||||
github.com/antchfx/htmlquery v1.2.4
|
github.com/antchfx/htmlquery v1.2.4
|
||||||
github.com/corona10/goimagehash v1.0.3
|
github.com/corona10/goimagehash v1.0.3
|
||||||
github.com/fogleman/gg v1.3.0
|
github.com/fogleman/gg v1.3.0
|
||||||
|
|||||||
8
go.sum
8
go.sum
@ -1,10 +1,10 @@
|
|||||||
github.com/FloatTech/AnimeAPI v1.3.0-beta6 h1:u4I6I4HvIyJZqmRgvPtguvopEenjdxk4fXIjpqzdRyE=
|
github.com/FloatTech/AnimeAPI v1.3.0-beta7 h1:IdusxP4eFRk3ghU/+4CtAd5xPe0xGa6pK/k2CzlYORM=
|
||||||
github.com/FloatTech/AnimeAPI v1.3.0-beta6/go.mod h1:MXGvC1Od3MuycW825f7HBaaIO7YPaFjdh+CnJeO7Cmw=
|
github.com/FloatTech/AnimeAPI v1.3.0-beta7/go.mod h1:vqOt05nnc7vwEvAJfnRw37OLmrxoMCzLzDdCBLYknXg=
|
||||||
github.com/FloatTech/bot-manager v1.0.0/go.mod h1:8YYRJ16oroGHQGD2En0oVnmcKJkxR9O/jd5BPSfWfOQ=
|
github.com/FloatTech/bot-manager v1.0.0/go.mod h1:8YYRJ16oroGHQGD2En0oVnmcKJkxR9O/jd5BPSfWfOQ=
|
||||||
github.com/FloatTech/sqlite v0.1.0 h1:Geh6Z+DWZXmyXVOhM0U2oXT7b1Ob6sQtuyjInk+MCUk=
|
github.com/FloatTech/sqlite v0.1.0 h1:Geh6Z+DWZXmyXVOhM0U2oXT7b1Ob6sQtuyjInk+MCUk=
|
||||||
github.com/FloatTech/sqlite v0.1.0/go.mod h1:XS0oeSqtH6lFzpPRiDE9fV6+zMcuUF5/6o+tQVO1QZE=
|
github.com/FloatTech/sqlite v0.1.0/go.mod h1:XS0oeSqtH6lFzpPRiDE9fV6+zMcuUF5/6o+tQVO1QZE=
|
||||||
github.com/FloatTech/zbputils v1.3.0-beta6 h1:dqmsBoC6xnPf05aFr+OA4ru8iqXKktkIxLw6LOUOMnk=
|
github.com/FloatTech/zbputils v1.3.0-beta7 h1:An+//viWflHwuG/1Z3NPbUjOO0XNsd60+b0c4vJm9I0=
|
||||||
github.com/FloatTech/zbputils v1.3.0-beta6/go.mod h1:P3tTFIIQJs/cijG80jwxrs0NBGISEDkXtrZhiev/eMk=
|
github.com/FloatTech/zbputils v1.3.0-beta7/go.mod h1:P3tTFIIQJs/cijG80jwxrs0NBGISEDkXtrZhiev/eMk=
|
||||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
||||||
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc h1:AAx50/fb/xS4lvsdQg+bFbGvqSDhyV1MF+p2PLCamZ0=
|
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc h1:AAx50/fb/xS4lvsdQg+bFbGvqSDhyV1MF+p2PLCamZ0=
|
||||||
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc/go.mod h1:OMmITAib6POA37xCichWM0aRnoVpSMZO1rB/G01wrr0=
|
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc/go.mod h1:OMmITAib6POA37xCichWM0aRnoVpSMZO1rB/G01wrr0=
|
||||||
|
|||||||
@ -5,8 +5,8 @@ import (
|
|||||||
"github.com/wdvxdr1123/ZeroBot/message"
|
"github.com/wdvxdr1123/ZeroBot/message"
|
||||||
|
|
||||||
"github.com/FloatTech/AnimeAPI/aireply"
|
"github.com/FloatTech/AnimeAPI/aireply"
|
||||||
"github.com/FloatTech/AnimeAPI/mockingbird"
|
"github.com/FloatTech/AnimeAPI/tts/mockingbird"
|
||||||
control "github.com/FloatTech/zbputils/control"
|
"github.com/FloatTech/zbputils/control"
|
||||||
"github.com/FloatTech/zbputils/ctxext"
|
"github.com/FloatTech/zbputils/ctxext"
|
||||||
|
|
||||||
"github.com/FloatTech/zbputils/control/order"
|
"github.com/FloatTech/zbputils/control/order"
|
||||||
@ -20,7 +20,7 @@ func init() {
|
|||||||
Handle(func(ctx *zero.Ctx) {
|
Handle(func(ctx *zero.Ctx) {
|
||||||
msg := ctx.ExtractPlainText()
|
msg := ctx.ExtractPlainText()
|
||||||
r := aireply.NewAIReply(getReplyMode(ctx))
|
r := aireply.NewAIReply(getReplyMode(ctx))
|
||||||
ctx.SendChain(message.Record(mockingbird.Speak(ctx.Event.UserID, func() string {
|
ctx.SendChain(message.Record(mockingbird.NewMockingBirdTTS(1).Speak(ctx.Event.UserID, func() string {
|
||||||
return r.TalkPlain(msg, zero.BotConfig.NickName[0])
|
return r.TalkPlain(msg, zero.BotConfig.NickName[0])
|
||||||
})))
|
})))
|
||||||
})
|
})
|
||||||
|
|||||||
@ -3,8 +3,10 @@ package gif
|
|||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/FloatTech/zbputils/file"
|
"github.com/FloatTech/zbputils/file"
|
||||||
|
"github.com/FloatTech/zbputils/img"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -13,36 +15,51 @@ type context struct {
|
|||||||
headimgsdir []string
|
headimgsdir []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func dlchan(name string, c *chan *string) {
|
func dlchan(name string, s *string, wg *sync.WaitGroup, exit func(error)) {
|
||||||
|
defer wg.Done()
|
||||||
target := datapath + `materials/` + name
|
target := datapath + `materials/` + name
|
||||||
|
var err error
|
||||||
if file.IsNotExist(target) {
|
if file.IsNotExist(target) {
|
||||||
_ = file.DownloadTo(`https://codechina.csdn.net/u011570312/imagematerials/-/raw/main/`+name, target, true)
|
err = file.DownloadTo(`https://codechina.csdn.net/u011570312/imagematerials/-/raw/main/`+name, target, true)
|
||||||
|
if err != nil {
|
||||||
|
exit(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logrus.Debugln("[gif] dl", name, "to", target, "succeeded")
|
||||||
} else {
|
} else {
|
||||||
logrus.Debugln("[gif] dl", name, "exists")
|
logrus.Debugln("[gif] dl", name, "exists at", target)
|
||||||
}
|
}
|
||||||
*c <- &target
|
*s = target
|
||||||
}
|
}
|
||||||
|
|
||||||
func dlblock(name string) string {
|
func dlblock(name string) (string, error) {
|
||||||
target := datapath + `materials/` + name
|
target := datapath + `materials/` + name
|
||||||
if file.IsNotExist(target) {
|
if file.IsNotExist(target) {
|
||||||
_ = file.DownloadTo(`https://codechina.csdn.net/u011570312/imagematerials/-/raw/main/`+name, target, true)
|
err := file.DownloadTo(`https://codechina.csdn.net/u011570312/imagematerials/-/raw/main/`+name, target, true)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
logrus.Debugln("[gif] dl", name, "to", target, "succeeded")
|
||||||
} else {
|
} else {
|
||||||
logrus.Debugln("[gif] dl", name, "exists")
|
logrus.Debugln("[gif] dl", name, "exists at", target)
|
||||||
}
|
}
|
||||||
return target
|
return target, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dlrange(prefix string, end int) *[]chan *string {
|
func dlrange(prefix string, end int, wg *sync.WaitGroup, exit func(error)) []string {
|
||||||
if file.IsNotExist(datapath + `materials/` + prefix) {
|
if file.IsNotExist(datapath + `materials/` + prefix) {
|
||||||
_ = os.MkdirAll(datapath+`materials/`+prefix, 0755)
|
err := os.MkdirAll(datapath+`materials/`+prefix, 0755)
|
||||||
|
if err != nil {
|
||||||
|
exit(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
c := make([]chan *string, end)
|
c := make([]string, end)
|
||||||
for i := range c {
|
for i := range c {
|
||||||
c[i] = make(chan *string)
|
wg.Add(1)
|
||||||
go dlchan(prefix+"/"+strconv.Itoa(i)+".png", &c[i])
|
go dlchan(prefix+"/"+strconv.Itoa(i)+".png", &c[i], wg, exit)
|
||||||
}
|
}
|
||||||
return &c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新的上下文
|
// 新的上下文
|
||||||
@ -55,3 +72,14 @@ func newContext(user int64) *context {
|
|||||||
c.headimgsdir[1] = c.usrdir + "1.gif"
|
c.headimgsdir[1] = c.usrdir + "1.gif"
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func LoadFirstFrames(paths []string, size int) (imgs []*img.ImgFactory, err error) {
|
||||||
|
imgs = make([]*img.ImgFactory, size)
|
||||||
|
for i := range imgs {
|
||||||
|
imgs[i], err = img.LoadFirstFrame(paths[i], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return imgs, nil
|
||||||
|
}
|
||||||
|
|||||||
@ -2,160 +2,344 @@ package gif
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"image"
|
"image"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/FloatTech/zbputils/img"
|
"github.com/FloatTech/zbputils/img"
|
||||||
"github.com/FloatTech/zbputils/img/writer"
|
"github.com/FloatTech/zbputils/img/writer"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 摸
|
// A摸
|
||||||
func (cc *context) mo() string {
|
func (cc *context) A摸() (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
name := cc.usrdir + "摸.gif"
|
name := cc.usrdir + "摸.gif"
|
||||||
c := dlrange("mo", 5)
|
c := dlrange("mo", 5, &wg, func(e error) {
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Circle(0).Im
|
m.Lock()
|
||||||
mo := []*image.NRGBA{
|
err = e
|
||||||
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertBottom(tou, 80, 80, 32, 32).Im,
|
m.Unlock()
|
||||||
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertBottom(tou, 70, 90, 42, 22).Im,
|
})
|
||||||
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertBottom(tou, 75, 85, 37, 27).Im,
|
if err != nil {
|
||||||
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertBottom(tou, 85, 75, 27, 37).Im,
|
return "", err
|
||||||
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertBottom(tou, 90, 70, 22, 42).Im,
|
|
||||||
}
|
}
|
||||||
_ = writer.SaveGIF2Path(name, img.MergeGif(1, mo))
|
tou, err := cc.getLogo(0, 0)
|
||||||
return "file:///" + name
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := LoadFirstFrames(c, 5)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
mo := []*image.NRGBA{
|
||||||
|
imgs[0].InsertBottom(tou, 80, 80, 32, 32).Im,
|
||||||
|
imgs[1].InsertBottom(tou, 70, 90, 42, 22).Im,
|
||||||
|
imgs[2].InsertBottom(tou, 75, 85, 37, 27).Im,
|
||||||
|
imgs[3].InsertBottom(tou, 85, 75, 27, 37).Im,
|
||||||
|
imgs[4].InsertBottom(tou, 90, 70, 22, 42).Im,
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, mo))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搓
|
// A搓
|
||||||
func (cc *context) cuo() string {
|
func (cc *context) A搓() (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
name := cc.usrdir + "搓.gif"
|
name := cc.usrdir + "搓.gif"
|
||||||
c := dlrange("cuo", 5)
|
c := dlrange("cuo", 5, &wg, func(e error) {
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 110, 110).Circle(0).Im
|
m.Lock()
|
||||||
|
err = e
|
||||||
|
m.Unlock()
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
tou, err := cc.getLogo(110, 110)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
m1 := img.Rotate(tou, 72, 0, 0)
|
m1 := img.Rotate(tou, 72, 0, 0)
|
||||||
m2 := img.Rotate(tou, 144, 0, 0)
|
m2 := img.Rotate(tou, 144, 0, 0)
|
||||||
m3 := img.Rotate(tou, 216, 0, 0)
|
m3 := img.Rotate(tou, 216, 0, 0)
|
||||||
m4 := img.Rotate(tou, 288, 0, 0)
|
m4 := img.Rotate(tou, 288, 0, 0)
|
||||||
|
wg.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := LoadFirstFrames(c, 5)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
cuo := []*image.NRGBA{
|
cuo := []*image.NRGBA{
|
||||||
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertBottomC(tou, 0, 0, 75, 130).Im,
|
imgs[0].InsertBottomC(tou, 0, 0, 75, 130).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertBottomC(m1.Im, 0, 0, 75, 130).Im,
|
imgs[1].InsertBottomC(m1.Im, 0, 0, 75, 130).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertBottomC(m2.Im, 0, 0, 75, 130).Im,
|
imgs[2].InsertBottomC(m2.Im, 0, 0, 75, 130).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertBottomC(m3.Im, 0, 0, 75, 130).Im,
|
imgs[3].InsertBottomC(m3.Im, 0, 0, 75, 130).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertBottomC(m4.Im, 0, 0, 75, 130).Im,
|
imgs[4].InsertBottomC(m4.Im, 0, 0, 75, 130).Im,
|
||||||
}
|
}
|
||||||
_ = writer.SaveGIF2Path(name, img.MergeGif(5, cuo))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(5, cuo))
|
||||||
return "file:///" + name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 敲
|
// A敲
|
||||||
func (cc *context) qiao() string {
|
func (cc *context) A敲() (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
name := cc.usrdir + "敲.gif"
|
name := cc.usrdir + "敲.gif"
|
||||||
c := dlrange("qiao", 2)
|
c := dlrange("qiao", 2, &wg, func(e error) {
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 40, 40).Circle(0).Im
|
m.Lock()
|
||||||
|
err = e
|
||||||
|
m.Unlock()
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
tou, err := cc.getLogo(40, 40)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := LoadFirstFrames(c, 2)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
qiao := []*image.NRGBA{
|
qiao := []*image.NRGBA{
|
||||||
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 40, 33, 57, 52).Im,
|
imgs[0].InsertUp(tou, 40, 33, 57, 52).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 38, 36, 58, 50).Im,
|
imgs[1].InsertUp(tou, 38, 36, 58, 50).Im,
|
||||||
}
|
}
|
||||||
_ = writer.SaveGIF2Path(name, img.MergeGif(1, qiao))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, qiao))
|
||||||
return "file:///" + name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 吃
|
// A吃
|
||||||
func (cc *context) chi() string {
|
func (cc *context) A吃() (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
name := cc.usrdir + "吃.gif"
|
name := cc.usrdir + "吃.gif"
|
||||||
c := dlrange("chi", 3)
|
c := dlrange("chi", 3, &wg, func(e error) {
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 32, 32).Im
|
m.Lock()
|
||||||
|
err = e
|
||||||
|
m.Unlock()
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
tou, err := cc.getLogo(32, 32)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := LoadFirstFrames(c, 3)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
chi := []*image.NRGBA{
|
chi := []*image.NRGBA{
|
||||||
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertBottom(tou, 0, 0, 1, 38).Im,
|
imgs[0].InsertBottom(tou, 0, 0, 1, 38).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertBottom(tou, 0, 0, 1, 38).Im,
|
imgs[1].InsertBottom(tou, 0, 0, 1, 38).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertBottom(tou, 0, 0, 1, 38).Im,
|
imgs[2].InsertBottom(tou, 0, 0, 1, 38).Im,
|
||||||
}
|
}
|
||||||
_ = writer.SaveGIF2Path(name, img.MergeGif(1, chi))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, chi))
|
||||||
return "file:///" + name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 蹭
|
// A蹭
|
||||||
func (cc *context) ceng() string {
|
func (cc *context) A蹭() (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
name := cc.usrdir + "蹭.gif"
|
name := cc.usrdir + "蹭.gif"
|
||||||
c := dlrange("ceng", 6)
|
c := dlrange("ceng", 6, &wg, func(e error) {
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 100, 100).Circle(0).Im
|
m.Lock()
|
||||||
tou2 := img.LoadFirstFrame(cc.headimgsdir[1], 100, 100).Circle(0).Im
|
err = e
|
||||||
|
m.Unlock()
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
tou, err := cc.getLogo(100, 100)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
tou2, err := cc.getLogo2(100, 100)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := LoadFirstFrames(c, 6)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
ceng := []*image.NRGBA{
|
ceng := []*image.NRGBA{
|
||||||
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 75, 77, 40, 88).InsertUp(tou2, 77, 103, 102, 81).Im,
|
imgs[0].InsertUp(tou, 75, 77, 40, 88).InsertUp(tou2, 77, 103, 102, 81).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 75, 77, 46, 100).InsertUp(img.Rotate(tou2, 10, 62, 127).Im, 0, 0, 92, 40).Im,
|
imgs[1].InsertUp(tou, 75, 77, 46, 100).InsertUp(img.Rotate(tou2, 10, 62, 127).Im, 0, 0, 92, 40).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertUp(tou, 75, 77, 67, 99).InsertUp(tou2, 76, 117, 90, 8).Im,
|
imgs[2].InsertUp(tou, 75, 77, 67, 99).InsertUp(tou2, 76, 117, 90, 8).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertUp(tou, 75, 77, 52, 83).InsertUp(img.Rotate(tou2, -40, 94, 94).Im, 0, 0, 53, -20).Im,
|
imgs[3].InsertUp(tou, 75, 77, 52, 83).InsertUp(img.Rotate(tou2, -40, 94, 94).Im, 0, 0, 53, -20).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertUp(tou, 75, 77, 56, 110).InsertUp(img.Rotate(tou2, -66, 132, 80).Im, 0, 0, 78, 40).Im,
|
imgs[4].InsertUp(tou, 75, 77, 56, 110).InsertUp(img.Rotate(tou2, -66, 132, 80).Im, 0, 0, 78, 40).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[5], 0, 0).InsertUp(tou, 75, 77, 62, 102).InsertUp(tou2, 71, 100, 110, 94).Im,
|
imgs[5].InsertUp(tou, 75, 77, 62, 102).InsertUp(tou2, 71, 100, 110, 94).Im,
|
||||||
}
|
}
|
||||||
_ = writer.SaveGIF2Path(name, img.MergeGif(8, ceng))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, ceng))
|
||||||
return "file:///" + name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 啃
|
// A啃
|
||||||
func (cc *context) ken() string {
|
func (cc *context) A啃() (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
name := cc.usrdir + "啃.gif"
|
name := cc.usrdir + "啃.gif"
|
||||||
c := dlrange("ken", 16)
|
c := dlrange("ken", 16, &wg, func(e error) {
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 100, 100).Im
|
m.Lock()
|
||||||
|
err = e
|
||||||
|
m.Unlock()
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
tou, err := cc.getLogo(100, 100)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := LoadFirstFrames(c, 16)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
ken := []*image.NRGBA{
|
ken := []*image.NRGBA{
|
||||||
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertBottom(tou, 90, 90, 105, 150).Im,
|
imgs[0].InsertBottom(tou, 90, 90, 105, 150).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertBottom(tou, 90, 83, 96, 172).Im,
|
imgs[1].InsertBottom(tou, 90, 83, 96, 172).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertBottom(tou, 90, 90, 106, 148).Im,
|
imgs[2].InsertBottom(tou, 90, 90, 106, 148).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertBottom(tou, 88, 88, 97, 167).Im,
|
imgs[3].InsertBottom(tou, 88, 88, 97, 167).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertBottom(tou, 90, 85, 89, 179).Im,
|
imgs[4].InsertBottom(tou, 90, 85, 89, 179).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[5], 0, 0).InsertBottom(tou, 90, 90, 106, 151).Im,
|
imgs[5].InsertBottom(tou, 90, 90, 106, 151).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[6], 0, 0).Im,
|
imgs[6].Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[7], 0, 0).Im,
|
imgs[7].Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[8], 0, 0).Im,
|
imgs[8].Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[9], 0, 0).Im,
|
imgs[9].Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[10], 0, 0).Im,
|
imgs[10].Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[11], 0, 0).Im,
|
imgs[11].Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[12], 0, 0).Im,
|
imgs[12].Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[13], 0, 0).Im,
|
imgs[13].Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[14], 0, 0).Im,
|
imgs[14].Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[15], 0, 0).Im,
|
imgs[15].Im,
|
||||||
}
|
}
|
||||||
_ = writer.SaveGIF2Path(name, img.MergeGif(7, ken))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, ken))
|
||||||
return "file:///" + name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 拍
|
// A拍
|
||||||
func (cc *context) pai() string {
|
func (cc *context) A拍() (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
name := cc.usrdir + "拍.gif"
|
name := cc.usrdir + "拍.gif"
|
||||||
c := dlrange("pai", 2)
|
c := dlrange("pai", 2, &wg, func(e error) {
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 30, 30).Circle(0).Im
|
m.Lock()
|
||||||
|
err = e
|
||||||
|
m.Unlock()
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
tou, err := cc.getLogo(30, 30)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := LoadFirstFrames(c, 2)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
pai := []*image.NRGBA{
|
pai := []*image.NRGBA{
|
||||||
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 0, 0, 1, 47).Im,
|
imgs[0].InsertUp(tou, 0, 0, 1, 47).Im,
|
||||||
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 0, 0, 1, 67).Im,
|
imgs[1].InsertUp(tou, 0, 0, 1, 67).Im,
|
||||||
}
|
}
|
||||||
_ = writer.SaveGIF2Path(name, img.MergeGif(1, pai))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, pai))
|
||||||
return "file:///" + name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 冲
|
// A冲
|
||||||
func (cc *context) chong() string {
|
func (cc *context) A冲() (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
name := cc.usrdir + "冲.gif"
|
name := cc.usrdir + "冲.gif"
|
||||||
c := dlrange("xqe", 2)
|
c := dlrange("xqe", 2, &wg, func(e error) {
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Circle(0).Im
|
m.Lock()
|
||||||
chong := []*image.NRGBA{
|
err = e
|
||||||
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 30, 30, 15, 53).Im,
|
m.Unlock()
|
||||||
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 30, 30, 40, 53).Im,
|
})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
}
|
}
|
||||||
_ = writer.SaveGIF2Path(name, img.MergeGif(1, chong))
|
tou, err := cc.getLogo(0, 0)
|
||||||
return "file:///" + name
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := LoadFirstFrames(c, 2)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
chong := []*image.NRGBA{
|
||||||
|
imgs[0].InsertUp(tou, 30, 30, 15, 53).Im,
|
||||||
|
imgs[1].InsertUp(tou, 30, 30, 40, 53).Im,
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, chong))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 丢
|
// A丢
|
||||||
func (cc *context) diu() string {
|
func (cc *context) A丢() (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
name := cc.usrdir + "丢.gif"
|
name := cc.usrdir + "丢.gif"
|
||||||
c := dlrange("diu", 8)
|
c := dlrange("diu", 8, &wg, func(e error) {
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Circle(0).Im
|
m.Lock()
|
||||||
diu := []*image.NRGBA{
|
err = e
|
||||||
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 32, 32, 108, 36).Im,
|
m.Unlock()
|
||||||
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 32, 32, 122, 36).Im,
|
})
|
||||||
img.LoadFirstFrame(*<-(*c)[2], 0, 0).Im,
|
if err != nil {
|
||||||
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertUp(tou, 123, 123, 19, 129).Im,
|
return "", err
|
||||||
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertUp(tou, 185, 185, -50, 200).InsertUp(tou, 33, 33, 289, 70).Im,
|
|
||||||
img.LoadFirstFrame(*<-(*c)[5], 0, 0).InsertUp(tou, 32, 32, 280, 73).Im,
|
|
||||||
img.LoadFirstFrame(*<-(*c)[6], 0, 0).InsertUp(tou, 35, 35, 259, 31).Im,
|
|
||||||
img.LoadFirstFrame(*<-(*c)[7], 0, 0).InsertUp(tou, 175, 175, -50, 220).Im,
|
|
||||||
}
|
}
|
||||||
_ = writer.SaveGIF2Path(name, img.MergeGif(7, diu))
|
tou, err := cc.getLogo(0, 0)
|
||||||
return "file:///" + name
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := LoadFirstFrames(c, 8)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
diu := []*image.NRGBA{
|
||||||
|
imgs[0].InsertUp(tou, 32, 32, 108, 36).Im,
|
||||||
|
imgs[1].InsertUp(tou, 32, 32, 122, 36).Im,
|
||||||
|
imgs[2].Im,
|
||||||
|
imgs[3].InsertUp(tou, 123, 123, 19, 129).Im,
|
||||||
|
imgs[4].InsertUp(tou, 185, 185, -50, 200).InsertUp(tou, 33, 33, 289, 70).Im,
|
||||||
|
imgs[5].InsertUp(tou, 32, 32, 280, 73).Im,
|
||||||
|
imgs[6].InsertUp(tou, 35, 35, 259, 31).Im,
|
||||||
|
imgs[7].InsertUp(tou, 175, 175, -50, 220).Im,
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, diu))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,19 +1,41 @@
|
|||||||
package gif
|
package gif
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"image"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/FloatTech/zbputils/file"
|
"github.com/FloatTech/zbputils/file"
|
||||||
|
"github.com/FloatTech/zbputils/img"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (cc *context) prepareLogos(s ...string) {
|
func (cc *context) prepareLogos(s ...string) error {
|
||||||
for i, v := range s {
|
for i, v := range s {
|
||||||
_, err := strconv.Atoi(v)
|
_, err := strconv.Atoi(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = file.DownloadTo("https://gchat.qpic.cn/gchatpic_new//--"+strings.ToUpper(v)+"/0", cc.usrdir+strconv.Itoa(i)+".gif", true)
|
err = file.DownloadTo("https://gchat.qpic.cn/gchatpic_new//--"+strings.ToUpper(v)+"/0", cc.usrdir+strconv.Itoa(i)+".gif", true)
|
||||||
} else {
|
} else {
|
||||||
_ = file.DownloadTo("http://q4.qlogo.cn/g?b=qq&nk="+v+"&s=640", cc.usrdir+strconv.Itoa(i)+".gif", true)
|
err = file.DownloadTo("http://q4.qlogo.cn/g?b=qq&nk="+v+"&s=640", cc.usrdir+strconv.Itoa(i)+".gif", true)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cc *context) getLogo(w int, h int) (*image.NRGBA, error) {
|
||||||
|
frame, err := img.LoadFirstFrame(cc.headimgsdir[0], w, h)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return frame.Circle(0).Im, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cc *context) getLogo2(w int, h int) (*image.NRGBA, error) {
|
||||||
|
frame, err := img.LoadFirstFrame(cc.headimgsdir[1], w, h)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return frame.Circle(0).Im, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package gif
|
package gif
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"image"
|
"image"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -9,62 +10,85 @@ import (
|
|||||||
"github.com/FloatTech/zbputils/img/writer"
|
"github.com/FloatTech/zbputils/img/writer"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 爬
|
// A爬
|
||||||
func (cc *context) pa() string {
|
func (cc *context) A爬() (string, error) {
|
||||||
name := cc.usrdir + `爬.png`
|
name := cc.usrdir + `爬.png`
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Circle(0).Im
|
tou, err := cc.getLogo(0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
// 随机爬图序号
|
// 随机爬图序号
|
||||||
rand := rand.Intn(60) + 1
|
rand := rand.Intn(60) + 1
|
||||||
dc := img.LoadFirstFrame(dlblock(`pa/`+strconv.Itoa(rand)+`.png`), 0, 0).
|
f, err := dlblock(`pa/` + strconv.Itoa(rand) + `.png`)
|
||||||
InsertBottom(tou, 100, 100, 0, 400).Im
|
if err != nil {
|
||||||
_ = writer.SavePNG2Path(name, dc)
|
return "", err
|
||||||
return "file:///" + name
|
}
|
||||||
|
imgf, err := img.LoadFirstFrame(f, 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SavePNG2Path(name, imgf.InsertBottom(tou, 100, 100, 0, 400).Im)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 撕
|
// A撕
|
||||||
func (cc *context) si() string {
|
func (cc *context) A撕() (string, error) {
|
||||||
name := cc.usrdir + `撕.png`
|
name := cc.usrdir + `撕.png`
|
||||||
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Im
|
tou, err := cc.getLogo(0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
im1 := img.Rotate(tou, 20, 380, 380)
|
im1 := img.Rotate(tou, 20, 380, 380)
|
||||||
im2 := img.Rotate(tou, -12, 380, 380)
|
im2 := img.Rotate(tou, -12, 380, 380)
|
||||||
dc := img.LoadFirstFrame(dlblock(`si/0.png`), 0, 0).
|
f, err := dlblock(`si/0.png`)
|
||||||
InsertBottom(im1.Im, im1.W, im1.H, -3, 370).
|
if err != nil {
|
||||||
InsertBottom(im2.Im, im2.W, im2.H, 653, 310).Im
|
return "", err
|
||||||
_ = writer.SavePNG2Path(name, dc)
|
}
|
||||||
return "file:///" + name
|
imgf, err := img.LoadFirstFrame(f, 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SavePNG2Path(name, imgf.InsertBottom(im1.Im, im1.W, im1.H, -3, 370).InsertBottom(im2.Im, im2.W, im2.H, 653, 310).Im)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 简单
|
// 简单
|
||||||
func (cc *context) other(value ...string) string {
|
func (cc *context) other(value ...string) (string, error) {
|
||||||
name := cc.usrdir + value[0] + `.png`
|
name := cc.usrdir + value[0] + `.png`
|
||||||
// 加载图片
|
// 加载图片
|
||||||
im := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0)
|
im, err := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0)
|
||||||
var a *image.NRGBA
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
var imgnrgba *image.NRGBA
|
||||||
switch value[0] {
|
switch value[0] {
|
||||||
case "上翻", "下翻":
|
case "上翻", "下翻":
|
||||||
a = im.FlipV().Im
|
imgnrgba = im.FlipV().Im
|
||||||
case "左翻", "右翻":
|
case "左翻", "右翻":
|
||||||
a = im.FlipH().Im
|
imgnrgba = im.FlipH().Im
|
||||||
case "反色":
|
case "反色":
|
||||||
a = im.Invert().Im
|
imgnrgba = im.Invert().Im
|
||||||
case "灰度":
|
case "灰度":
|
||||||
a = im.Grayscale().Im
|
imgnrgba = im.Grayscale().Im
|
||||||
case "负片":
|
case "负片":
|
||||||
a = im.Invert().Grayscale().Im
|
imgnrgba = im.Invert().Grayscale().Im
|
||||||
case "浮雕":
|
case "浮雕":
|
||||||
a = im.Convolve3x3().Im
|
imgnrgba = im.Convolve3x3().Im
|
||||||
case "打码":
|
case "打码":
|
||||||
a = im.Blur(10).Im
|
imgnrgba = im.Blur(10).Im
|
||||||
case "旋转":
|
case "旋转":
|
||||||
r, _ := strconv.ParseFloat(value[1], 64)
|
r, _ := strconv.ParseFloat(value[1], 64)
|
||||||
a = img.Rotate(im.Im, r, 0, 0).Im
|
imgnrgba = img.Rotate(im.Im, r, 0, 0).Im
|
||||||
case "变形":
|
case "变形":
|
||||||
w, _ := strconv.Atoi(value[1])
|
w, err := strconv.Atoi(value[1])
|
||||||
h, _ := strconv.Atoi(value[2])
|
if err != nil {
|
||||||
a = img.Size(im.Im, w, h).Im
|
return "", err
|
||||||
|
}
|
||||||
|
h, err := strconv.Atoi(value[2])
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgnrgba = img.Size(im.Im, w, h).Im
|
||||||
|
default:
|
||||||
|
return "", errors.New("no such method")
|
||||||
}
|
}
|
||||||
|
return "file:///" + name, writer.SavePNG2Path(name, imgnrgba)
|
||||||
_ = writer.SavePNG2Path(name, a)
|
|
||||||
return "file:///" + name
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,7 @@ package gif
|
|||||||
import (
|
import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -24,11 +25,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() { // 插件主体
|
func init() { // 插件主体
|
||||||
_ = os.RemoveAll(datapath) // 清除缓存图片
|
_ = os.MkdirAll(datapath, 0755)
|
||||||
err := os.MkdirAll(datapath, 0755)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
rand.Seed(time.Now().UnixNano()) // 设置种子
|
rand.Seed(time.Now().UnixNano()) // 设置种子
|
||||||
control.Register("gif", order.AcquirePrio(), &control.Options{
|
control.Register("gif", order.AcquirePrio(), &control.Options{
|
||||||
DisableOnDefault: false,
|
DisableOnDefault: false,
|
||||||
@ -39,31 +36,19 @@ func init() { // 插件主体
|
|||||||
list := ctx.State["regex_matched"].([]string)
|
list := ctx.State["regex_matched"].([]string)
|
||||||
c.prepareLogos(list[4]+list[5]+list[6], strconv.FormatInt(ctx.Event.UserID, 10))
|
c.prepareLogos(list[4]+list[5]+list[6], strconv.FormatInt(ctx.Event.UserID, 10))
|
||||||
var picurl string
|
var picurl string
|
||||||
switch list[1] {
|
var err error
|
||||||
case "爬":
|
if len([]rune(list[1])) == 1 {
|
||||||
picurl = c.pa()
|
r := reflect.ValueOf(c).MethodByName("A" + list[1]).Call(nil)
|
||||||
case "摸":
|
picurl = r[0].String()
|
||||||
picurl = c.mo()
|
if !r[1].IsNil() {
|
||||||
case "吃":
|
err = r[1].Interface().(error)
|
||||||
picurl = c.chi()
|
}
|
||||||
case "啃":
|
} else {
|
||||||
picurl = c.ken()
|
picurl, err = c.other(list[1]) // "灰度", "上翻", "下翻", "左翻", "右翻", "反色", "倒放", "浮雕", "打码", "负片"
|
||||||
case "蹭":
|
}
|
||||||
picurl = c.ceng()
|
if err != nil {
|
||||||
case "敲":
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
picurl = c.qiao()
|
return
|
||||||
case "搓":
|
|
||||||
picurl = c.cuo()
|
|
||||||
case "拍":
|
|
||||||
picurl = c.pai()
|
|
||||||
case "丢":
|
|
||||||
picurl = c.diu()
|
|
||||||
case "撕":
|
|
||||||
picurl = c.si()
|
|
||||||
case "冲":
|
|
||||||
picurl = c.chong()
|
|
||||||
default:
|
|
||||||
picurl = c.other(list[1]) // "灰度", "上翻", "下翻", "左翻", "右翻", "反色", "倒放", "浮雕", "打码", "负片"
|
|
||||||
}
|
}
|
||||||
ctx.SendChain(message.Image(picurl))
|
ctx.SendChain(message.Image(picurl))
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user