mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-05 23:09:37 +00:00
parent
13b6614dc2
commit
fc91b69b55
@ -1,6 +1,6 @@
|
|||||||
# ZeroBot-Plugin-Gif
|
# ZeroBot-Plugin-Gif
|
||||||
[ZeroBot QQ机器人](https://github.com/wdvxdr1123/ZeroBot)插件,可以制作各种沙雕gif图
|
[ZeroBot QQ机器人](https://github.com/wdvxdr1123/ZeroBot)插件,可以制作各种沙雕gif图
|
||||||
> 素材包地址: https://gitcode.net/u011570312/imagematerials
|
> 素材包地址: https://gitcode.net/anto_july/imagematerials
|
||||||
|
|
||||||
## 触发方式
|
## 触发方式
|
||||||
1. [指令词]+[qq号] 如:爬123456
|
1. [指令词]+[qq号] 如:爬123456
|
||||||
@ -29,3 +29,62 @@
|
|||||||
- [x] 浮雕
|
- [x] 浮雕
|
||||||
- [x] 打码
|
- [x] 打码
|
||||||
- [x] 负片
|
- [x] 负片
|
||||||
|
- [x] 旋转45
|
||||||
|
- [x] 变形100 100
|
||||||
|
- [x] 亲
|
||||||
|
- [x] 娶|结婚申请|结婚登记
|
||||||
|
- [x] 像只
|
||||||
|
- [x] 阿尼亚喜欢
|
||||||
|
- [x] 我永远喜欢|永远喜欢
|
||||||
|
- [x] 像样的亲亲
|
||||||
|
- [x] 国旗
|
||||||
|
- [x] 不要靠近
|
||||||
|
- [x] 万能表情|空白表情
|
||||||
|
- [x] 采访
|
||||||
|
- [x] 需要|你可能需要
|
||||||
|
- [x] 这像画吗
|
||||||
|
- [x] 小画家
|
||||||
|
- [x] 完美
|
||||||
|
- [x] 玩游戏 (应该使用透视变换)
|
||||||
|
- [x] 出警
|
||||||
|
- [x] 警察
|
||||||
|
- [x] 舔|舔屏|prpr (应该使用透视变换)
|
||||||
|
- [x] 安全感
|
||||||
|
- [x] 精神支柱
|
||||||
|
- [x] 想什么
|
||||||
|
- [x] 墙纸
|
||||||
|
- [x] 为什么at我
|
||||||
|
- [x] 交个朋友
|
||||||
|
- [x] 打工人|继续干活
|
||||||
|
- [x] 兑换券
|
||||||
|
- [ ] 捂脸 (使用了透视变换, 需要研究矩阵变换)
|
||||||
|
- [x] 注意力涣散
|
||||||
|
- [x] 垃圾桶|垃圾
|
||||||
|
- [x] 锤
|
||||||
|
- [x] 啾啾
|
||||||
|
- [x] 2敲
|
||||||
|
- [x] 听音乐
|
||||||
|
- [ ] 群青 (需要mask)
|
||||||
|
- [ ] 加载中 (需要mask)
|
||||||
|
- [x] 永远爱你 (未加闪光)
|
||||||
|
- [ ] 关注 (处理文字麻烦)
|
||||||
|
- [x] 2拍
|
||||||
|
- [x] 顶
|
||||||
|
- [x] 捣
|
||||||
|
- [x] 打拳 (未加闪光)
|
||||||
|
- [ ] 复读 (处理文字麻烦)
|
||||||
|
- [x] 滚
|
||||||
|
- [x] 吸
|
||||||
|
- [x] 扔
|
||||||
|
- [x] 捶
|
||||||
|
- [x] 紧贴
|
||||||
|
- [ ] 膜拜 (使用了透视变换, 需要研究矩阵变换)
|
||||||
|
- [ ] 小天使 (摆)
|
||||||
|
- [ ] 一直 (摆)
|
||||||
|
- [x] 转
|
||||||
|
- [ ] 问问 (摆)
|
||||||
|
- [ ] 典中典 (摆)
|
||||||
|
- [ ] 震惊 (摆)
|
||||||
|
- [ ] 哈哈镜 (摆)
|
||||||
|
- [ ] 对称 (猎奇, 不整)
|
||||||
|
- [ ] 远离 (摆)
|
||||||
|
|||||||
@ -20,7 +20,7 @@ func dlchan(name string, s *string, wg *sync.WaitGroup, exit func(error)) {
|
|||||||
target := datapath + `materials/` + name
|
target := datapath + `materials/` + name
|
||||||
var err error
|
var err error
|
||||||
if file.IsNotExist(target) {
|
if file.IsNotExist(target) {
|
||||||
err = file.DownloadTo(`https://gitcode.net/u011570312/imagematerials/-/raw/main/`+name, target, true)
|
err = file.DownloadTo(`https://gitcode.net/anto_july/imagematerials/-/raw/main/`+name, target, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
exit(err)
|
exit(err)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -2,14 +2,16 @@ package gif
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"image"
|
"image"
|
||||||
|
"image/color"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/FloatTech/zbputils/img"
|
"github.com/FloatTech/zbputils/img"
|
||||||
"github.com/FloatTech/zbputils/img/writer"
|
"github.com/FloatTech/zbputils/img/writer"
|
||||||
|
"github.com/fogleman/gg"
|
||||||
)
|
)
|
||||||
|
|
||||||
// A摸
|
// mo 摸
|
||||||
func (cc *context) A摸() (string, error) {
|
func mo(cc *context, value ...string) (string, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var err error
|
var err error
|
||||||
var m sync.Mutex
|
var m sync.Mutex
|
||||||
@ -44,8 +46,8 @@ func (cc *context) A摸() (string, error) {
|
|||||||
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, mo))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, mo))
|
||||||
}
|
}
|
||||||
|
|
||||||
// A搓
|
// cuo 搓
|
||||||
func (cc *context) A搓() (string, error) {
|
func cuo(cc *context, value ...string) (string, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var err error
|
var err error
|
||||||
var m sync.Mutex
|
var m sync.Mutex
|
||||||
@ -84,8 +86,8 @@ func (cc *context) A搓() (string, error) {
|
|||||||
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(5, cuo))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(5, cuo))
|
||||||
}
|
}
|
||||||
|
|
||||||
// A敲
|
// qiao 敲
|
||||||
func (cc *context) A敲() (string, error) {
|
func qiao(cc *context, value ...string) (string, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var err error
|
var err error
|
||||||
var m sync.Mutex
|
var m sync.Mutex
|
||||||
@ -117,8 +119,8 @@ func (cc *context) A敲() (string, error) {
|
|||||||
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, qiao))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, qiao))
|
||||||
}
|
}
|
||||||
|
|
||||||
// A吃
|
// chi 吃
|
||||||
func (cc *context) A吃() (string, error) {
|
func chi(cc *context, value ...string) (string, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var err error
|
var err error
|
||||||
var m sync.Mutex
|
var m sync.Mutex
|
||||||
@ -151,8 +153,8 @@ func (cc *context) A吃() (string, error) {
|
|||||||
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, chi))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, chi))
|
||||||
}
|
}
|
||||||
|
|
||||||
// A蹭
|
// ceng 蹭
|
||||||
func (cc *context) A蹭() (string, error) {
|
func ceng(cc *context, value ...string) (string, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var err error
|
var err error
|
||||||
var m sync.Mutex
|
var m sync.Mutex
|
||||||
@ -192,8 +194,8 @@ func (cc *context) A蹭() (string, error) {
|
|||||||
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, ceng))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(8, ceng))
|
||||||
}
|
}
|
||||||
|
|
||||||
// A啃
|
// ken 啃
|
||||||
func (cc *context) A啃() (string, error) {
|
func ken(cc *context, value ...string) (string, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var err error
|
var err error
|
||||||
var m sync.Mutex
|
var m sync.Mutex
|
||||||
@ -239,8 +241,8 @@ func (cc *context) A啃() (string, error) {
|
|||||||
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, ken))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, ken))
|
||||||
}
|
}
|
||||||
|
|
||||||
// A拍
|
// pai 拍
|
||||||
func (cc *context) A拍() (string, error) {
|
func pai(cc *context, value ...string) (string, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var err error
|
var err error
|
||||||
var m sync.Mutex
|
var m sync.Mutex
|
||||||
@ -272,8 +274,8 @@ func (cc *context) A拍() (string, error) {
|
|||||||
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, pai))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, pai))
|
||||||
}
|
}
|
||||||
|
|
||||||
// A冲
|
// xqe 冲
|
||||||
func (cc *context) A冲() (string, error) {
|
func xqe(cc *context, value ...string) (string, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var err error
|
var err error
|
||||||
var m sync.Mutex
|
var m sync.Mutex
|
||||||
@ -305,8 +307,8 @@ func (cc *context) A冲() (string, error) {
|
|||||||
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, chong))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(1, chong))
|
||||||
}
|
}
|
||||||
|
|
||||||
// A丢
|
// diu 丢
|
||||||
func (cc *context) A丢() (string, error) {
|
func diu(cc *context, value ...string) (string, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var err error
|
var err error
|
||||||
var m sync.Mutex
|
var m sync.Mutex
|
||||||
@ -343,3 +345,524 @@ func (cc *context) A丢() (string, error) {
|
|||||||
}
|
}
|
||||||
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, diu))
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, diu))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// kiss 亲
|
||||||
|
func kiss(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 13
|
||||||
|
name := cc.usrdir + "Kiss.gif"
|
||||||
|
c := dlrange("kiss", 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
|
||||||
|
}
|
||||||
|
tou2, err := cc.getLogo2(0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
userLocs := [][]int{{58, 90}, {62, 95}, {42, 100}, {50, 100}, {56, 100}, {18, 120}, {28, 110}, {54, 100}, {46, 100}, {60, 100}, {35, 115}, {20, 120}, {40, 96}}
|
||||||
|
selfLocs := [][]int{{92, 64}, {135, 40}, {84, 105}, {80, 110}, {155, 82}, {60, 96}, {50, 80}, {98, 55}, {35, 65}, {38, 100}, {70, 80}, {84, 65}, {75, 65}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
kiss := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
kiss[i] = imgs[i].InsertUp(tou, 50, 50, userLocs[i][0], userLocs[i][1]).
|
||||||
|
InsertUp(tou2, 40, 40, selfLocs[i][0], selfLocs[i][1]).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, kiss))
|
||||||
|
}
|
||||||
|
|
||||||
|
// garbage 垃圾 垃圾桶
|
||||||
|
func garbage(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 25
|
||||||
|
name := cc.usrdir + "Garbage.gif"
|
||||||
|
c := dlrange("garbage", 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], 79, 79)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{39, 40}, {39, 40}, {39, 40}, {39, 30}, {39, 30}, {39, 32}, {39, 32}, {39, 32}, {39, 32}, {39, 32}, {39, 32}, {39, 32}, {39, 32}, {39, 32}, {39, 32}, {39, 30}, {39, 27}, {39, 32}, {37, 49}, {37, 64}, {37, 67}, {37, 67}, {39, 69}, {37, 70}, {37, 70}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
garbage := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
garbage[i] = imgs[i].InsertBottom(im.Im, 0, 0, locs[i][0], locs[i][1]).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, garbage))
|
||||||
|
}
|
||||||
|
|
||||||
|
// thump 捶
|
||||||
|
func thump(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 4
|
||||||
|
name := cc.usrdir + "Thump.gif"
|
||||||
|
c := dlrange("thump", 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], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{65, 128, 77, 72}, {67, 128, 73, 72}, {54, 139, 94, 61}, {57, 135, 86, 65}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
thump := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
thump[i] = imgs[i].InsertBottom(im.Im, locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, thump))
|
||||||
|
}
|
||||||
|
|
||||||
|
// jiujiu 啾啾
|
||||||
|
func jiujiu(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 8
|
||||||
|
name := cc.usrdir + "Jiujiu.gif"
|
||||||
|
c := dlrange("jiujiu", 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], 75, 51)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
jiujiu := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
jiujiu[i] = imgs[i].InsertBottom(im.Im, 0, 0, 0, 0).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, jiujiu))
|
||||||
|
}
|
||||||
|
|
||||||
|
// knock 2敲
|
||||||
|
func knock(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 8
|
||||||
|
name := cc.usrdir + "Knock.gif"
|
||||||
|
c := dlrange("knock", 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], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{60, 308, 210, 195}, {60, 308, 210, 198}, {45, 330, 250, 172}, {58, 320, 218, 180}, {60, 310, 215, 193}, {40, 320, 250, 285}, {48, 308, 226, 192}, {51, 301, 223, 200}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
knock := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
knock[i] = imgs[i].InsertBottom(im.Im, locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, knock))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 听音乐 listenMusic
|
||||||
|
func listenMusic(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 1
|
||||||
|
name := cc.usrdir + "ListenMusic.gif"
|
||||||
|
c := dlrange("listen_music", piclen, &wg, func(e error) {
|
||||||
|
m.Lock()
|
||||||
|
err = e
|
||||||
|
m.Unlock()
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
face, err := cc.getLogo(0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
listenmusic := make([]*image.NRGBA, 36)
|
||||||
|
for i := 0; i < 36; i++ {
|
||||||
|
listenmusic[i] = imgs[0].InsertBottomC(img.Rotate(face, float64(-i*10), 215, 215).Im, 0, 0, 207, 207).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, listenmusic))
|
||||||
|
}
|
||||||
|
|
||||||
|
// loveYou 永远爱你
|
||||||
|
func loveYou(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 2
|
||||||
|
name := cc.usrdir + "LoveYou.gif"
|
||||||
|
c := dlrange("love_you", 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], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{68, 65, 70, 70}, {63, 59, 80, 80}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
loveyou := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
loveyou[i] = imgs[i].InsertBottom(im.Im, locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, loveyou))
|
||||||
|
}
|
||||||
|
|
||||||
|
// pat 2拍
|
||||||
|
func pat(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 10
|
||||||
|
name := cc.usrdir + "Pat.gif"
|
||||||
|
c := dlrange("pat", 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], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{11, 73, 106, 100}, {8, 79, 112, 96}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
p := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
if i == 2 {
|
||||||
|
p[i] = imgs[i].InsertBottom(im.Im, locs[1][2], locs[1][3], locs[1][0], locs[1][1]).Im
|
||||||
|
} else {
|
||||||
|
p[i] = imgs[i].InsertBottom(im.Im, locs[0][2], locs[0][3], locs[0][0], locs[0][1]).Im
|
||||||
|
}
|
||||||
|
}
|
||||||
|
seq := []int{0, 1, 2, 3, 1, 2, 3, 0, 1, 2, 3, 0, 0, 1, 2, 3, 0, 0, 0, 0, 4, 5, 5, 5, 6, 7, 8, 9}
|
||||||
|
pat := make([]*image.NRGBA, len(seq))
|
||||||
|
for i := 0; i < len(pat); i++ {
|
||||||
|
pat[i] = p[seq[i]]
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, pat))
|
||||||
|
}
|
||||||
|
|
||||||
|
// jackUp 顶
|
||||||
|
func jackUp(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 23
|
||||||
|
name := cc.usrdir + "JackUp.gif"
|
||||||
|
c := dlrange("play", 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], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{180, 60, 100, 100}, {184, 75, 100, 100}, {183, 98, 100, 100}, {179, 118, 110, 100}, {156, 194, 150, 48}, {178, 136, 122, 69}, {175, 66, 122, 85}, {170, 42, 130, 96}, {175, 34, 118, 95}, {179, 35, 110, 93}, {180, 54, 102, 93}, {183, 58, 97, 92}, {174, 35, 120, 94}, {179, 35, 109, 93}, {181, 54, 101, 92}, {182, 59, 98, 92}, {183, 71, 90, 96}, {180, 131, 92, 101}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
p := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
if i < len(locs) {
|
||||||
|
p[i] = imgs[i].InsertBottom(im.Im, locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Im
|
||||||
|
} else {
|
||||||
|
p[i] = imgs[i].Im
|
||||||
|
}
|
||||||
|
}
|
||||||
|
play := make([]*image.NRGBA, 0, 16)
|
||||||
|
play = append(play, p[0:12]...)
|
||||||
|
play = append(play, p[0:12]...)
|
||||||
|
play = append(play, p[0:8]...)
|
||||||
|
play = append(play, p[12:18]...)
|
||||||
|
play = append(play, p[18:23]...)
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, play))
|
||||||
|
}
|
||||||
|
|
||||||
|
// pound 捣
|
||||||
|
func pound(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 8
|
||||||
|
name := cc.usrdir + "Pound.gif"
|
||||||
|
c := dlrange("pound", 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], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{135, 240, 138, 47}, {135, 240, 138, 47}, {150, 190, 105, 95}, {150, 190, 105, 95}, {148, 188, 106, 98}, {146, 196, 110, 88}, {145, 223, 112, 61}, {145, 223, 112, 61}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
pound := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
pound[i] = imgs[i].InsertBottom(im.Im, locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, pound))
|
||||||
|
}
|
||||||
|
|
||||||
|
// punch 打拳
|
||||||
|
func punch(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 13
|
||||||
|
name := cc.usrdir + "Punch.gif"
|
||||||
|
c := dlrange("punch", 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], 260, 260)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{-50, 20}, {-40, 10}, {-30, 0}, {-20, -10}, {-10, -10}, {0, 0}, {10, 10}, {20, 20}, {10, 10}, {0, 0}, {-10, -10}, {10, 0}, {-30, 10}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
punch := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
punch[i] = imgs[i].InsertBottom(im.Im, 0, 0, locs[i][0], locs[i][1]-15).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, punch))
|
||||||
|
}
|
||||||
|
|
||||||
|
// roll 滚
|
||||||
|
func roll(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 8
|
||||||
|
name := cc.usrdir + "roll.gif"
|
||||||
|
c := dlrange("roll", 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], 210, 210)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{87, 77, 0}, {96, 85, -45}, {92, 79, -90}, {92, 78, -135}, {92, 75, -180}, {92, 75, -225}, {93, 76, -270}, {90, 80, -315}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
roll := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
roll[i] = imgs[i].InsertBottomC(img.Rotate(im.Im, float64(locs[i][2]), 0, 0).Im, 0, 0, locs[i][0]+105, locs[i][1]+105).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, roll))
|
||||||
|
}
|
||||||
|
|
||||||
|
// suck 吸 嗦
|
||||||
|
func suck(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 12
|
||||||
|
name := cc.usrdir + "Suck.gif"
|
||||||
|
c := dlrange("suck", 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], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{82, 100, 130, 119}, {82, 94, 126, 125}, {82, 120, 128, 99}, {81, 164, 132, 55}, {79, 163, 132, 55}, {82, 140, 127, 79}, {83, 152, 125, 67}, {75, 157, 140, 62}, {72, 165, 144, 54}, {80, 132, 128, 87}, {81, 127, 127, 92}, {79, 111, 132, 108}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
suck := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
suck[i] = imgs[i].InsertBottom(im.Im, locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, suck))
|
||||||
|
}
|
||||||
|
|
||||||
|
// hammer 锤
|
||||||
|
func hammer(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 7
|
||||||
|
name := cc.usrdir + "Hammer.gif"
|
||||||
|
c := dlrange("hammer", 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], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{62, 143, 158, 113}, {52, 177, 173, 105}, {42, 192, 192, 92}, {46, 182, 184, 100}, {54, 169, 174, 110}, {69, 128, 144, 135}, {65, 130, 152, 124}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
hammer := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
hammer[i] = imgs[i].InsertBottom(im.Im, locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, hammer))
|
||||||
|
}
|
||||||
|
|
||||||
|
// tightly 紧贴 紧紧贴着
|
||||||
|
func tightly(cc *context, value ...string) (string, error) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var err error
|
||||||
|
var m sync.Mutex
|
||||||
|
piclen := 20
|
||||||
|
name := cc.usrdir + "Tightly.gif"
|
||||||
|
c := dlrange("tightly", 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], 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
locs := [][]int{{39, 169, 267, 141}, {40, 167, 264, 143}, {38, 174, 270, 135}, {40, 167, 264, 143}, {38, 174, 270, 135}, {40, 167, 264, 143}, {38, 174, 270, 135}, {40, 167, 264, 143}, {38, 174, 270, 135}, {28, 176, 293, 134}, {5, 215, 333, 96}, {10, 210, 321, 102}, {3, 210, 330, 104}, {4, 210, 328, 102}, {4, 212, 328, 100}, {4, 212, 328, 100}, {4, 212, 328, 100}, {4, 212, 328, 100}, {4, 212, 328, 100}, {29, 195, 285, 120}}
|
||||||
|
imgs, err := loadFirstFrames(c, piclen)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
tightly := make([]*image.NRGBA, piclen)
|
||||||
|
for i := 0; i < piclen; i++ {
|
||||||
|
tightly[i] = imgs[i].InsertBottom(im.Im, locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, tightly))
|
||||||
|
}
|
||||||
|
|
||||||
|
// turn 转
|
||||||
|
func turn(cc *context, value ...string) (string, error) {
|
||||||
|
name := cc.usrdir + "Turn.gif"
|
||||||
|
face, err := cc.getLogo(0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
canvas := gg.NewContext(250, 250)
|
||||||
|
canvas.SetColor(color.White)
|
||||||
|
canvas.DrawRectangle(0, 0, 250, 250)
|
||||||
|
canvas.Fill()
|
||||||
|
turn := make([]*image.NRGBA, 36)
|
||||||
|
for i := 0; i < 36; i++ {
|
||||||
|
turn[i] = img.Size(canvas.Image(), 0, 0).InsertUpC(img.Rotate(face, float64(10*i), 250, 250).Im, 0, 0, 125, 125).Im
|
||||||
|
}
|
||||||
|
return "file:///" + name, writer.SaveGIF2Path(name, img.MergeGif(7, turn))
|
||||||
|
}
|
||||||
|
|||||||
1037
plugin/gif/png.go
1037
plugin/gif/png.go
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,6 @@
|
|||||||
package gif
|
package gif
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -15,19 +14,103 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
cmds = []string{"搓", "冲", "摸", "拍", "丢", "吃", "敲", "啃", "蹭", "爬", "撕",
|
cmd = make([]string, 0)
|
||||||
"灰度", "上翻", "下翻", "左翻", "右翻", "反色", "浮雕", "打码", "负片"}
|
|
||||||
datapath string
|
datapath string
|
||||||
|
cmdMap = map[string]func(cc *context, args ...string) (string, error){
|
||||||
|
"搓": cuo,
|
||||||
|
"冲": xqe,
|
||||||
|
"摸": mo,
|
||||||
|
"拍": pai,
|
||||||
|
"丢": diu,
|
||||||
|
"吃": chi,
|
||||||
|
"敲": qiao,
|
||||||
|
"啃": ken,
|
||||||
|
"蹭": ceng,
|
||||||
|
"爬": pa,
|
||||||
|
"撕": si,
|
||||||
|
"灰度": grayscale,
|
||||||
|
"上翻": flipV,
|
||||||
|
"下翻": flipV,
|
||||||
|
"左翻": flipH,
|
||||||
|
"右翻": flipH,
|
||||||
|
"反色": invert,
|
||||||
|
"浮雕": convolve3x3,
|
||||||
|
"打码": blur,
|
||||||
|
"负片": invertAndGrayscale,
|
||||||
|
"旋转": rotate,
|
||||||
|
"变形": deformation,
|
||||||
|
"亲": kiss,
|
||||||
|
"结婚申请": marriage,
|
||||||
|
"结婚登记": marriage,
|
||||||
|
"阿尼亚喜欢": anyasuki,
|
||||||
|
"像只": alike,
|
||||||
|
"我永远喜欢": alwaysLike,
|
||||||
|
"永远喜欢": alwaysLike,
|
||||||
|
"像样的亲亲": decentKiss,
|
||||||
|
"国旗": chinaFlag,
|
||||||
|
"不要靠近": dontTouch,
|
||||||
|
"万能表情": universal,
|
||||||
|
"空白表情": universal,
|
||||||
|
"采访": interview,
|
||||||
|
"需要": need,
|
||||||
|
"你可能需要": need,
|
||||||
|
"这像画吗": paint,
|
||||||
|
"小画家": painter,
|
||||||
|
"完美": perfect,
|
||||||
|
"玩游戏": playGame,
|
||||||
|
"出警": police,
|
||||||
|
"警察": police1,
|
||||||
|
"舔": prpr,
|
||||||
|
"舔屏": prpr,
|
||||||
|
"prpr": prpr,
|
||||||
|
"安全感": safeSense,
|
||||||
|
"精神支柱": support,
|
||||||
|
"想什么": thinkwhat,
|
||||||
|
"墙纸": wallpaper,
|
||||||
|
"为什么at我": whyatme,
|
||||||
|
"交个朋友": makeFriend,
|
||||||
|
"打工人": backToWork,
|
||||||
|
"继续干活": backToWork,
|
||||||
|
"兑换券": coupon,
|
||||||
|
"注意力涣散": distracted,
|
||||||
|
"垃圾桶": garbage,
|
||||||
|
"垃圾": garbage,
|
||||||
|
"捶": thump,
|
||||||
|
"啾啾": jiujiu,
|
||||||
|
"2敲": knock,
|
||||||
|
"听音乐": listenMusic,
|
||||||
|
"永远爱你": loveYou,
|
||||||
|
"2拍": pat,
|
||||||
|
"顶": jackUp,
|
||||||
|
"捣": pound,
|
||||||
|
"打拳": punch,
|
||||||
|
"滚": roll,
|
||||||
|
"吸": suck,
|
||||||
|
"嗦": suck,
|
||||||
|
"扔": throw,
|
||||||
|
"锤": hammer,
|
||||||
|
"紧贴": tightly,
|
||||||
|
"紧紧贴着": tightly,
|
||||||
|
"转": turn,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() { // 插件主体
|
func init() { // 插件主体
|
||||||
|
for k := range cmdMap {
|
||||||
|
cmd = append(cmd, k)
|
||||||
|
}
|
||||||
en := control.Register("gif", &ctrl.Options[*zero.Ctx]{
|
en := control.Register("gif", &ctrl.Options[*zero.Ctx]{
|
||||||
DisableOnDefault: false,
|
DisableOnDefault: false,
|
||||||
Help: "制图\n- " + strings.Join(cmds, "\n- "),
|
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",
|
||||||
PrivateDataFolder: "gif",
|
PrivateDataFolder: "gif",
|
||||||
}).ApplySingle(ctxext.DefaultSingle)
|
}).ApplySingle(ctxext.DefaultSingle)
|
||||||
datapath = file.BOTPATH + "/" + en.DataFolder()
|
datapath = file.BOTPATH + "/" + en.DataFolder()
|
||||||
en.OnRegex(`^(` + strings.Join(cmds, "|") + `)\D*?(\[CQ:(image\,file=([0-9a-zA-Z]{32}).*|at.+?(\d{5,11}))\].*|(\d+))$`).
|
en.OnRegex(`^(` + strings.Join(cmd, "|") + `)[\s\S]*?(\[CQ:(image\,file=([0-9a-zA-Z]{32}).*|at.+?(\d{5,11}))\].*|(\d+))$`).
|
||||||
SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||||
c := newContext(ctx.Event.UserID)
|
c := newContext(ctx.Event.UserID)
|
||||||
list := ctx.State["regex_matched"].([]string)
|
list := ctx.State["regex_matched"].([]string)
|
||||||
@ -36,16 +119,8 @@ func init() { // 插件主体
|
|||||||
ctx.SendChain(message.Text("ERROR:", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var picurl string
|
argslist := strings.Split(strings.TrimSuffix(strings.TrimPrefix(list[0], list[1]), list[2]), " ")
|
||||||
if len([]rune(list[1])) == 1 {
|
picurl, err := cmdMap[list[1]](c, argslist...)
|
||||||
r := reflect.ValueOf(c).MethodByName("A" + list[1]).Call(nil)
|
|
||||||
picurl = r[0].String()
|
|
||||||
if !r[1].IsNil() {
|
|
||||||
err = r[1].Interface().(error)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
picurl, err = c.other(list[1]) // "灰度", "上翻", "下翻", "左翻", "右翻", "反色", "倒放", "浮雕", "打码", "负片"
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR:", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user