mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-09 16:50:26 +00:00
Compare commits
31 Commits
v1.7.1-bet
...
v1.7.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
278d7e0cf9 | ||
|
|
821f8d4949 | ||
|
|
436838d2f8 | ||
|
|
30301f1aba | ||
|
|
df1d71b9b2 | ||
|
|
0315718ab7 | ||
|
|
971c179227 | ||
|
|
1c0270fda0 | ||
|
|
5463945b6c | ||
|
|
8eb058fb26 | ||
|
|
33e5b0286f | ||
|
|
296fd60cd7 | ||
|
|
667c9fbcca | ||
|
|
3d8d0ad107 | ||
|
|
f35a89e401 | ||
|
|
c5c63d0b64 | ||
|
|
3e15754031 | ||
|
|
c1e37b293c | ||
|
|
8edc3f6de6 | ||
|
|
416cb3f2b8 | ||
|
|
8050f12d51 | ||
|
|
292fc311d6 | ||
|
|
28cb0491f7 | ||
|
|
1bad611018 | ||
|
|
d49224fd50 | ||
|
|
2324837052 | ||
|
|
35f8458d67 | ||
|
|
8a6b7f65c7 | ||
|
|
7b1d2b7eaa | ||
|
|
7ced79c6bb | ||
|
|
e224bf9252 |
16
README.md
16
README.md
@@ -436,11 +436,11 @@ print("run[CQ:image,file="+j["img"]+"]")
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary>百度百科</summary>
|
||||
<summary>百科</summary>
|
||||
|
||||
`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/baidu"`
|
||||
|
||||
- [x] 百度/百科[xxx]
|
||||
- [x] 百度/百科/维基/wiki[xxx]
|
||||
|
||||
</details>
|
||||
<details>
|
||||
@@ -1386,7 +1386,17 @@ print("run[CQ:image,file="+j["img"]+"]")
|
||||
|
||||
- [x] 来份网易云热评
|
||||
|
||||
</details>
|
||||
</details>
|
||||
<details>
|
||||
<summary>据意查句</summary>
|
||||
|
||||
`import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wantquotes"`
|
||||
|
||||
- [x] 据意查句 大海
|
||||
|
||||
- [x] 登录据意查句
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary>星际战甲</summary>
|
||||
|
||||
|
||||
2
data
2
data
Submodule data updated: 1e64e7cf82...d0342c3806
6
go.mod
6
go.mod
@@ -7,12 +7,12 @@ require (
|
||||
github.com/FloatTech/AnimeAPI v1.6.1-0.20230409024643-f25135dee0da
|
||||
github.com/FloatTech/floatbox v0.0.0-20230331064925-9af336a84944
|
||||
github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08
|
||||
github.com/FloatTech/imgfactory v0.2.2-0.20230322091809-b0ddbe44b94b
|
||||
github.com/FloatTech/imgfactory v0.2.2-0.20230413152719-e101cc3606ef
|
||||
github.com/FloatTech/rendercard v0.0.10-0.20230223064326-45d29fa4ede9
|
||||
github.com/FloatTech/sqlite v1.6.2
|
||||
github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b
|
||||
github.com/FloatTech/zbpctrl v1.5.3-0.20230408032827-50ef967f2849
|
||||
github.com/FloatTech/zbputils v1.6.2-0.20230408085317-f2f525cff6fc
|
||||
github.com/FloatTech/zbpctrl v1.5.3-0.20230411055601-7cdff751dd67
|
||||
github.com/FloatTech/zbputils v1.6.2-0.20230411114057-4c71136244b2
|
||||
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e
|
||||
github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5
|
||||
github.com/antchfx/htmlquery v1.2.5
|
||||
|
||||
14
go.sum
14
go.sum
@@ -2,26 +2,24 @@ github.com/Baidu-AIP/golang-sdk v1.1.1 h1:RQsAmgDSAkiq22I6n7XJ2t3afgzFeqjY46FGhv
|
||||
github.com/Baidu-AIP/golang-sdk v1.1.1/go.mod h1:bXnGw7xPeKt8aF7UCELKrV6UZ/46spItONK1RQBQj1Y=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
||||
github.com/FloatTech/AnimeAPI v1.6.1-0.20230407094656-35c90555daf6 h1:hS5U1Xz6JtVyGdXOl50j9ubQxP446+TjIAhaGapGUpU=
|
||||
github.com/FloatTech/AnimeAPI v1.6.1-0.20230407094656-35c90555daf6/go.mod h1:UnCPjtpIzpNBZ02yeGYp+oYVxgoi5aF2yAK2bkOVxtI=
|
||||
github.com/FloatTech/AnimeAPI v1.6.1-0.20230409024643-f25135dee0da h1:QyH0zpWt3YspNNfZ+5f8+QStvtmxrzld/DoocKjF+rc=
|
||||
github.com/FloatTech/AnimeAPI v1.6.1-0.20230409024643-f25135dee0da/go.mod h1:UnCPjtpIzpNBZ02yeGYp+oYVxgoi5aF2yAK2bkOVxtI=
|
||||
github.com/FloatTech/floatbox v0.0.0-20230331064925-9af336a84944 h1:/eQoMa6Aj3coF5F7yhzZe1+SzX6SItul7MW8//pl18o=
|
||||
github.com/FloatTech/floatbox v0.0.0-20230331064925-9af336a84944/go.mod h1:FwQm6wk+b4wuW54KCKn3zccMX47Q5apnHD/Yakzv0fI=
|
||||
github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08 h1:dPLeoiTVSBlgls+66EB/UJ2e38BaASmBN5nANaycSBU=
|
||||
github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08/go.mod h1:uzPzAeT35egARdRuu+1oyjU3CmTwCceoq3Vvje7LpcI=
|
||||
github.com/FloatTech/imgfactory v0.2.2-0.20230322091809-b0ddbe44b94b h1:VMNci4SWBySdw/6poqF9Dn9zlT5ntTFSJOEEBjRnJ/4=
|
||||
github.com/FloatTech/imgfactory v0.2.2-0.20230322091809-b0ddbe44b94b/go.mod h1:el5hGpj1C1bDRxcTXYRwEivDCr40zZeJpcrLrB1fajs=
|
||||
github.com/FloatTech/imgfactory v0.2.2-0.20230413152719-e101cc3606ef h1:CJbK/2FRwPuZpeb6M4sWK2d7oXDnBEGhpkQuQrgc91A=
|
||||
github.com/FloatTech/imgfactory v0.2.2-0.20230413152719-e101cc3606ef/go.mod h1:el5hGpj1C1bDRxcTXYRwEivDCr40zZeJpcrLrB1fajs=
|
||||
github.com/FloatTech/rendercard v0.0.10-0.20230223064326-45d29fa4ede9 h1:hffajvmQFfP68U6wUwHemPuuwCUoss+SEFfoLYwbGwE=
|
||||
github.com/FloatTech/rendercard v0.0.10-0.20230223064326-45d29fa4ede9/go.mod h1:NBFPhWae4hqVMeG8ELBBnUQkKce3nDjkljVn6PdiUNs=
|
||||
github.com/FloatTech/sqlite v1.6.2 h1:FytbExjpvYalZxxITtmSenHiPGLPUvlz47LY/P0SCCw=
|
||||
github.com/FloatTech/sqlite v1.6.2/go.mod h1:zFbHzRfB+CJ+VidfjuVbrcin3DAz283F7hF1hIeHzpY=
|
||||
github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b h1:tvciXWq2nuvTbFeJGLDNIdRX3BI546D3O7k7vrVueZw=
|
||||
github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs=
|
||||
github.com/FloatTech/zbpctrl v1.5.3-0.20230408032827-50ef967f2849 h1:ARKWV3tXJLENWY6vcwTStEDwJckYnxoHXgZMsuJ3gUw=
|
||||
github.com/FloatTech/zbpctrl v1.5.3-0.20230408032827-50ef967f2849/go.mod h1:IagyEhY38VcbbQgVRzAM9f9mhaUn90rM5BTPfudtl1g=
|
||||
github.com/FloatTech/zbputils v1.6.2-0.20230408085317-f2f525cff6fc h1:myLvTVYvTaBgKoXJW1rHPFfr0W4wWPlJQ5DlKBhfHuw=
|
||||
github.com/FloatTech/zbputils v1.6.2-0.20230408085317-f2f525cff6fc/go.mod h1:GLuSpLdTOCpqkR1oxqjuDz/rOif/ZrH4zGhtMzBqlqo=
|
||||
github.com/FloatTech/zbpctrl v1.5.3-0.20230411055601-7cdff751dd67 h1:KGfXWryE3VGFDC8Z6661d/7xm8oLNPpFB5ODb7DqYJc=
|
||||
github.com/FloatTech/zbpctrl v1.5.3-0.20230411055601-7cdff751dd67/go.mod h1:gkGC1C1eEUd/Ld/ja68zas5j2ZktIZCdnj2FMaM+Au0=
|
||||
github.com/FloatTech/zbputils v1.6.2-0.20230411114057-4c71136244b2 h1:Dx64RjcbxhsOHinykOPAlYqvPd9tE375IQrWqlNmDXs=
|
||||
github.com/FloatTech/zbputils v1.6.2-0.20230411114057-4c71136244b2/go.mod h1:m3IW5z7vLMNgNtVNUfcYtOF1du6PnjckifdRK2hVjA0=
|
||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
|
||||
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e h1:wR3MXQ3VbUlPKOOUwLOYgh/QaJThBTYtsl673O3lqSA=
|
||||
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w=
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
package banner
|
||||
|
||||
// Version ...
|
||||
var Version = "v1.7.1-beta2"
|
||||
var Version = "v1.7.1"
|
||||
|
||||
// Copyright ...
|
||||
var Copyright = "© 2020 - 2023 FloatTech"
|
||||
|
||||
// Banner ...
|
||||
var Banner = "* OneBot + ZeroBot + Golang\n" +
|
||||
"* Version " + Version + " - 2023-04-09 11:01:54 +0800 CST\n" +
|
||||
"* Version " + Version + " - 2023-04-30 13:51:47 +0800 CST\n" +
|
||||
"* Copyright " + Copyright + ". All Rights Reserved.\n" +
|
||||
"* Project: https://github.com/FloatTech/ZeroBot-Plugin"
|
||||
|
||||
7
main.go
7
main.go
@@ -142,6 +142,7 @@ import (
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/vtbmusic" // vtb点歌
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wallet" // 钱包
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wangyiyun" // 网易云音乐热评
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wantquotes" // 据意查句
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/warframeapi" // warframeAPI插件
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wenben" // 文本指令大全
|
||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/wenxinAI" // 百度文心AI画图
|
||||
@@ -257,6 +258,9 @@ func init() {
|
||||
// sus = append(sus, 12345678)
|
||||
// sus = append(sus, 87654321)
|
||||
|
||||
// 启用 webui
|
||||
// go webctrl.RunGui(*g)
|
||||
|
||||
if *runcfg != "" {
|
||||
f, err := os.Open(*runcfg)
|
||||
if err != nil {
|
||||
@@ -302,9 +306,6 @@ func init() {
|
||||
logrus.Infoln("[main] 配置文件已保存到", *save)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// 启用 webui
|
||||
// go webctrl.RunGui(*g)
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
@@ -104,7 +104,7 @@ func init() { // 插件主体
|
||||
}
|
||||
})
|
||||
|
||||
ent.OnRegex(`^设置语音模式\s*(.*)\s+(\d*)$`, zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
ent.OnRegex(`^设置语音模式\s*([\S\D]*)\s+(\d*)$`, zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
param := ctx.State["regex_matched"].([]string)[1]
|
||||
num := ctx.State["regex_matched"].([]string)[2]
|
||||
n := 0
|
||||
@@ -147,7 +147,7 @@ func init() { // 插件主体
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功"))
|
||||
})
|
||||
|
||||
ent.OnRegex(`^设置默认语音模式\s*([\S\D]*)\s*(\d*)$`, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
ent.OnRegex(`^设置默认语音模式\s*([\S\D]*)\s+(\d*)$`, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
param := ctx.State["regex_matched"].([]string)[1]
|
||||
num := ctx.State["regex_matched"].([]string)[2]
|
||||
n := 0
|
||||
|
||||
@@ -13,7 +13,9 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
api = "https://api.a20safe.com/api.php?api=21&key=7d06a110e9e20a684e02934549db1d3d&text=%s" // api地址
|
||||
duURL = "https://api.a20safe.com/api.php?api=21&key=%s&text=%s" // api地址
|
||||
wikiURL = "https://api.a20safe.com/api.php?api=23&key=%s&text=%s"
|
||||
key = "7d06a110e9e20a684e02934549db1d3d"
|
||||
)
|
||||
|
||||
type result struct {
|
||||
@@ -27,11 +29,18 @@ type result struct {
|
||||
func init() { // 主函数
|
||||
en := control.Register("baidu", &ctrl.Options[*zero.Ctx]{
|
||||
DisableOnDefault: false,
|
||||
Help: "百度百科\n" +
|
||||
"- 百度/百科[关键字]",
|
||||
Help: "百科\n" +
|
||||
"- 百度/百科/维基/wiki[关键字]",
|
||||
})
|
||||
en.OnRegex(`^百[度科]\s*(.+)$`).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
es, err := web.GetData(fmt.Sprintf(api, ctx.State["regex_matched"].([]string)[1])) // 将网站返回结果赋值
|
||||
en.OnRegex(`^(百度|维基|百科|wiki)\s*(.+)$`).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
var es []byte
|
||||
var err error
|
||||
switch ctx.State["regex_matched"].([]string)[1] {
|
||||
case "百度", "百科":
|
||||
es, err = web.GetData(fmt.Sprintf(duURL, key, ctx.State["regex_matched"].([]string)[2])) // 将网站返回结果赋值
|
||||
case "wiki", "维基":
|
||||
es, err = web.GetData(fmt.Sprintf(wikiURL, key, ctx.State["regex_matched"].([]string)[2])) // 将网站返回结果赋值
|
||||
}
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("出现错误捏:", err))
|
||||
return
|
||||
|
||||
@@ -27,7 +27,7 @@ func init() {
|
||||
db.DBPath = engine.DataFolder() + "bookreview.db"
|
||||
// os.RemoveAll(dbpath)
|
||||
_, _ = engine.GetLazyData("bookreview.db", true)
|
||||
err := db.Open(time.Hour * 24)
|
||||
err := db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -26,7 +26,7 @@ func init() {
|
||||
db.DBPath = en.DataFolder() + "cxh.db"
|
||||
// os.RemoveAll(dbpath)
|
||||
_, _ = en.GetLazyData("cxh.db", true)
|
||||
err := db.Open(time.Hour * 24)
|
||||
err := db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -27,7 +27,7 @@ func init() {
|
||||
db.DBPath = engine.DataFolder() + "cp.db"
|
||||
// os.RemoveAll(dbpath)
|
||||
_, _ = engine.GetLazyData("cp.db", true)
|
||||
err := db.Open(time.Hour * 24)
|
||||
err := db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -35,7 +35,7 @@ func init() {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
}
|
||||
err = db.Open(time.Hour * 24)
|
||||
err = db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -27,7 +27,7 @@ func LoadText(dbfile string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.Open(time.Hour * 24)
|
||||
err = db.Open(time.Hour)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -41,11 +41,11 @@ func init() {
|
||||
|
||||
if _, err := en.GetLazyData("dishes.db", true); err != nil {
|
||||
logrus.Warnln("[dish]获取菜谱数据库文件失败")
|
||||
} else if err = db.Open(time.Hour * 24); err != nil {
|
||||
} else if err = db.Open(time.Hour); err != nil {
|
||||
logrus.Warnln("[dish]连接菜谱数据库失败")
|
||||
} else if err = db.Create("dishes", &dish{}); err != nil {
|
||||
} else if err = db.Create("dish", &dish{}); err != nil {
|
||||
logrus.Warnln("[dish]同步菜谱数据表失败")
|
||||
} else if count, err := db.Count("dishes"); err != nil {
|
||||
} else if count, err := db.Count("dish"); err != nil {
|
||||
logrus.Warnln("[dish]统计菜谱数据失败")
|
||||
} else {
|
||||
logrus.Infoln("[dish]加载", count, "条菜谱")
|
||||
@@ -77,7 +77,7 @@ func init() {
|
||||
}
|
||||
|
||||
var d dish
|
||||
if err := db.Find("dishes", &d, fmt.Sprintf("WHERE name like %%%s%%", dishName)); err != nil {
|
||||
if err := db.Find("dish", &d, fmt.Sprintf("WHERE name like %%%s%%", dishName)); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ func init() {
|
||||
|
||||
name := ctx.NickName()
|
||||
var d dish
|
||||
if err := db.Pick("dishes", &d); err != nil {
|
||||
if err := db.Pick("dish", &d); err != nil {
|
||||
ctx.SendChain(message.Text("小店好像出错了,暂时端不出菜来惹"))
|
||||
logrus.Warnln("[dish]随机菜谱请求出错:" + err.Error())
|
||||
return
|
||||
|
||||
@@ -40,7 +40,7 @@ func init() {
|
||||
PrivateDataFolder: "driftbottle",
|
||||
})
|
||||
seaSide.DBPath = en.DataFolder() + "sea.db"
|
||||
err := seaSide.Open(time.Hour * 24)
|
||||
err := seaSide.Open(time.Hour)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ func init() {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
}
|
||||
err = db.Open(time.Hour * 24)
|
||||
err = db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -19,7 +19,7 @@ func mo(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "摸.gif"
|
||||
// name := cc.usrdir + "摸.gif"
|
||||
c := dlrange("mo", 5, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -44,7 +44,8 @@ func mo(cc *context, value ...string) (string, error) {
|
||||
imgs[3].InsertBottom(tou, 85, 75, 27, 37).Image(),
|
||||
imgs[4].InsertBottom(tou, 90, 70, 22, 42).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(1, mo))
|
||||
g := imgfactory.MergeGif(1, mo)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// cuo 搓
|
||||
@@ -53,7 +54,7 @@ func cuo(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "搓.gif"
|
||||
// name := cc.usrdir + "搓.gif"
|
||||
c := dlrange("cuo", 5, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -82,7 +83,8 @@ func cuo(cc *context, value ...string) (string, error) {
|
||||
imgs[3].InsertBottomC(m3.Image(), 0, 0, 75, 130).Image(),
|
||||
imgs[4].InsertBottomC(m4.Image(), 0, 0, 75, 130).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(5, cuo))
|
||||
g := imgfactory.MergeGif(5, cuo)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// qiao 敲
|
||||
@@ -91,7 +93,7 @@ func qiao(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "敲.gif"
|
||||
// name := cc.usrdir + "敲.gif"
|
||||
c := dlrange("qiao", 2, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -113,7 +115,8 @@ func qiao(cc *context, value ...string) (string, error) {
|
||||
imgs[0].InsertUp(tou, 40, 33, 57, 52).Image(),
|
||||
imgs[1].InsertUp(tou, 38, 36, 58, 50).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(1, qiao))
|
||||
g := imgfactory.MergeGif(1, qiao)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// chi 吃
|
||||
@@ -122,7 +125,7 @@ func chi(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "吃.gif"
|
||||
// name := cc.usrdir + "吃.gif"
|
||||
c := dlrange("chi", 3, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -145,7 +148,8 @@ func chi(cc *context, value ...string) (string, error) {
|
||||
imgs[1].InsertBottom(tou, 0, 0, 1, 38).Image(),
|
||||
imgs[2].InsertBottom(tou, 0, 0, 1, 38).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(1, chi))
|
||||
g := imgfactory.MergeGif(1, chi)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// ceng 蹭
|
||||
@@ -154,7 +158,7 @@ func ceng(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "蹭.gif"
|
||||
// name := cc.usrdir + "蹭.gif"
|
||||
c := dlrange("ceng", 6, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -184,7 +188,8 @@ func ceng(cc *context, value ...string) (string, error) {
|
||||
imgs[4].InsertUp(tou, 75, 77, 56, 110).InsertUp(imgfactory.Rotate(tou2, -66, 132, 80).Image(), 0, 0, 78, 40).Image(),
|
||||
imgs[5].InsertUp(tou, 75, 77, 62, 102).InsertUp(tou2, 71, 100, 110, 94).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(8, ceng))
|
||||
g := imgfactory.MergeGif(8, ceng)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// ken 啃
|
||||
@@ -193,7 +198,7 @@ func ken(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "啃.gif"
|
||||
// name := cc.usrdir + "啃.gif"
|
||||
c := dlrange("ken", 16, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -229,7 +234,8 @@ func ken(cc *context, value ...string) (string, error) {
|
||||
imgs[14].Image(),
|
||||
imgs[15].Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, ken))
|
||||
g := imgfactory.MergeGif(7, ken)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// pai 拍
|
||||
@@ -238,7 +244,7 @@ func pai(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "拍.gif"
|
||||
// name := cc.usrdir + "拍.gif"
|
||||
c := dlrange("pai", 2, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -260,7 +266,8 @@ func pai(cc *context, value ...string) (string, error) {
|
||||
imgs[0].InsertUp(tou, 0, 0, 1, 47).Image(),
|
||||
imgs[1].InsertUp(tou, 0, 0, 1, 67).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(1, pai))
|
||||
g := imgfactory.MergeGif(1, pai)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// xqe 冲
|
||||
@@ -269,7 +276,7 @@ func xqe(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "冲.gif"
|
||||
// name := cc.usrdir + "冲.gif"
|
||||
c := dlrange("xqe", 2, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -291,7 +298,8 @@ func xqe(cc *context, value ...string) (string, error) {
|
||||
imgs[0].InsertUp(tou, 30, 30, 15, 53).Image(),
|
||||
imgs[1].InsertUp(tou, 30, 30, 40, 53).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(1, chong))
|
||||
g := imgfactory.MergeGif(1, chong)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// diu 丢
|
||||
@@ -300,7 +308,7 @@ func diu(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "丢.gif"
|
||||
// name := cc.usrdir + "丢.gif"
|
||||
c := dlrange("diu", 8, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -328,7 +336,8 @@ func diu(cc *context, value ...string) (string, error) {
|
||||
imgs[6].InsertUp(tou, 35, 35, 259, 31).Image(),
|
||||
imgs[7].InsertUp(tou, 175, 175, -50, 220).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, diu))
|
||||
g := imgfactory.MergeGif(7, diu)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// kiss 亲
|
||||
@@ -338,7 +347,7 @@ func kiss(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 13
|
||||
name := cc.usrdir + "Kiss.gif"
|
||||
// name := cc.usrdir + "Kiss.gif"
|
||||
c := dlrange("kiss", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -367,7 +376,8 @@ func kiss(cc *context, value ...string) (string, error) {
|
||||
kiss[i] = imgs[i].InsertUp(tou, 50, 50, userLocs[i][0], userLocs[i][1]).
|
||||
InsertUp(tou2, 40, 40, selfLocs[i][0], selfLocs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, kiss))
|
||||
g := imgfactory.MergeGif(7, kiss)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// garbage 垃圾 垃圾桶
|
||||
@@ -377,7 +387,7 @@ func garbage(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 25
|
||||
name := cc.usrdir + "Garbage.gif"
|
||||
// name := cc.usrdir + "Garbage.gif"
|
||||
c := dlrange("garbage", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -400,7 +410,8 @@ func garbage(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
garbage[i] = imgs[i].InsertBottom(im.Image(), 0, 0, locs[i][0], locs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, garbage))
|
||||
g := imgfactory.MergeGif(7, garbage)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// thump 捶
|
||||
@@ -410,7 +421,7 @@ func thump(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 4
|
||||
name := cc.usrdir + "Thump.gif"
|
||||
// name := cc.usrdir + "Thump.gif"
|
||||
c := dlrange("thump", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -433,7 +444,8 @@ func thump(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
thump[i] = imgs[i].InsertBottom(im.Image(), locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, thump))
|
||||
g := imgfactory.MergeGif(7, thump)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// jiujiu 啾啾
|
||||
@@ -443,7 +455,7 @@ func jiujiu(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 8
|
||||
name := cc.usrdir + "Jiujiu.gif"
|
||||
// name := cc.usrdir + "Jiujiu.gif"
|
||||
c := dlrange("jiujiu", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -465,7 +477,8 @@ func jiujiu(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
jiujiu[i] = imgs[i].InsertBottom(im.Image(), 0, 0, 0, 0).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, jiujiu))
|
||||
g := imgfactory.MergeGif(7, jiujiu)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// knock 2敲
|
||||
@@ -475,7 +488,7 @@ func knock(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 8
|
||||
name := cc.usrdir + "Knock.gif"
|
||||
// name := cc.usrdir + "Knock.gif"
|
||||
c := dlrange("knock", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -498,7 +511,8 @@ func knock(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
knock[i] = imgs[i].InsertBottom(im.Image(), locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, knock))
|
||||
g := imgfactory.MergeGif(7, knock)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// 听音乐 listenMusic
|
||||
@@ -508,7 +522,7 @@ func listenMusic(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 1
|
||||
name := cc.usrdir + "ListenMusic.gif"
|
||||
// name := cc.usrdir + "ListenMusic.gif"
|
||||
c := dlrange("listen_music", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -530,7 +544,8 @@ func listenMusic(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < 36; i++ {
|
||||
listenmusic[i] = imgs[0].InsertBottomC(imgfactory.Rotate(face, float64(-i*10), 215, 215).Image(), 0, 0, 207, 207).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, listenmusic))
|
||||
g := imgfactory.MergeGif(7, listenmusic)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// loveYou 永远爱你
|
||||
@@ -540,7 +555,7 @@ func loveYou(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 2
|
||||
name := cc.usrdir + "LoveYou.gif"
|
||||
// name := cc.usrdir + "LoveYou.gif"
|
||||
c := dlrange("love_you", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -563,7 +578,8 @@ func loveYou(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
loveyou[i] = imgs[i].InsertBottom(im.Image(), locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, loveyou))
|
||||
g := imgfactory.MergeGif(7, loveyou)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// pat 2拍
|
||||
@@ -573,7 +589,7 @@ func pat(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 10
|
||||
name := cc.usrdir + "Pat.gif"
|
||||
// name := cc.usrdir + "Pat.gif"
|
||||
c := dlrange("pat", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -605,7 +621,8 @@ func pat(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < len(pat); i++ {
|
||||
pat[i] = p[seq[i]]
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, pat))
|
||||
g := imgfactory.MergeGif(7, pat)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// jackUp 顶
|
||||
@@ -615,7 +632,7 @@ func jackUp(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 23
|
||||
name := cc.usrdir + "JackUp.gif"
|
||||
// name := cc.usrdir + "JackUp.gif"
|
||||
c := dlrange("play", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -648,7 +665,8 @@ func jackUp(cc *context, value ...string) (string, error) {
|
||||
play = append(play, p[0:8]...)
|
||||
play = append(play, p[12:18]...)
|
||||
play = append(play, p[18:23]...)
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, play))
|
||||
g := imgfactory.MergeGif(7, play)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// pound 捣
|
||||
@@ -658,7 +676,7 @@ func pound(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 8
|
||||
name := cc.usrdir + "Pound.gif"
|
||||
// name := cc.usrdir + "Pound.gif"
|
||||
c := dlrange("pound", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -681,7 +699,8 @@ func pound(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
pound[i] = imgs[i].InsertBottom(im.Image(), locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, pound))
|
||||
g := imgfactory.MergeGif(7, pound)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// punch 打拳
|
||||
@@ -691,7 +710,7 @@ func punch(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 13
|
||||
name := cc.usrdir + "Punch.gif"
|
||||
// name := cc.usrdir + "Punch.gif"
|
||||
c := dlrange("punch", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -714,7 +733,8 @@ func punch(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
punch[i] = imgs[i].InsertBottom(im.Image(), 0, 0, locs[i][0], locs[i][1]-15).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, punch))
|
||||
g := imgfactory.MergeGif(7, punch)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// roll 滚
|
||||
@@ -724,7 +744,7 @@ func roll(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 8
|
||||
name := cc.usrdir + "roll.gif"
|
||||
// name := cc.usrdir + "roll.gif"
|
||||
c := dlrange("roll", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -747,7 +767,8 @@ func roll(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
roll[i] = imgs[i].InsertBottomC(imgfactory.Rotate(im.Image(), float64(locs[i][2]), 0, 0).Image(), 0, 0, locs[i][0]+105, locs[i][1]+105).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, roll))
|
||||
g := imgfactory.MergeGif(7, roll)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// suck 吸 嗦
|
||||
@@ -757,7 +778,7 @@ func suck(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 12
|
||||
name := cc.usrdir + "Suck.gif"
|
||||
// name := cc.usrdir + "Suck.gif"
|
||||
c := dlrange("suck", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -780,7 +801,8 @@ func suck(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
suck[i] = imgs[i].InsertBottom(im.Image(), locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, suck))
|
||||
g := imgfactory.MergeGif(7, suck)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// hammer 锤
|
||||
@@ -790,7 +812,7 @@ func hammer(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 7
|
||||
name := cc.usrdir + "Hammer.gif"
|
||||
// name := cc.usrdir + "Hammer.gif"
|
||||
c := dlrange("hammer", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -813,7 +835,8 @@ func hammer(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
hammer[i] = imgs[i].InsertBottom(im.Image(), locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, hammer))
|
||||
g := imgfactory.MergeGif(7, hammer)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// tightly 紧贴 紧紧贴着
|
||||
@@ -823,7 +846,7 @@ func tightly(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 20
|
||||
name := cc.usrdir + "Tightly.gif"
|
||||
// name := cc.usrdir + "Tightly.gif"
|
||||
c := dlrange("tightly", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -846,13 +869,14 @@ func tightly(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
tightly[i] = imgs[i].InsertBottom(im.Image(), locs[i][2], locs[i][3], locs[i][0], locs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, tightly))
|
||||
g := imgfactory.MergeGif(7, tightly)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// turn 转
|
||||
func turn(cc *context, value ...string) (string, error) {
|
||||
_ = value
|
||||
name := cc.usrdir + "Turn.gif"
|
||||
// name := cc.usrdir + "Turn.gif"
|
||||
face, err := cc.getLogo(0, 0)
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -865,7 +889,8 @@ func turn(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < 36; i++ {
|
||||
turn[i] = imgfactory.Size(canvas.Image(), 0, 0).InsertUpC(imgfactory.Rotate(face, float64(10*i), 250, 250).Image(), 0, 0, 125, 125).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, turn))
|
||||
g := imgfactory.MergeGif(7, turn)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// taiguan 抬棺
|
||||
@@ -874,7 +899,7 @@ func taiguan(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "taiguan.gif"
|
||||
// name := cc.usrdir + "taiguan.gif"
|
||||
c := dlrange("taiguan", 20, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -914,7 +939,8 @@ func taiguan(cc *context, value ...string) (string, error) {
|
||||
imgs[18].InsertUp(tou, 85, 85, 170, 65).Image(),
|
||||
imgs[19].InsertUp(tou, 85, 85, 175, 65).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, taiguan))
|
||||
g := imgfactory.MergeGif(7, taiguan)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// zou 揍
|
||||
@@ -923,7 +949,7 @@ func zou(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "zou.gif"
|
||||
// name := cc.usrdir + "zou.gif"
|
||||
c := dlrange("zou", 3, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -950,7 +976,8 @@ func zou(cc *context, value ...string) (string, error) {
|
||||
imgs[1].InsertUp(tou, 40, 40, 98, 138).InsertUp(tou2, 55, 55, 101, 45).Image(),
|
||||
imgs[2].InsertUp(tou, 40, 40, 89, 140).InsertUp(tou2, 55, 55, 99, 40).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(8, zou))
|
||||
g := imgfactory.MergeGif(8, zou)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// ci 吞
|
||||
@@ -959,7 +986,7 @@ func ci(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "ci.gif"
|
||||
// name := cc.usrdir + "ci.gif"
|
||||
c := dlrange("ci", 26, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -1005,7 +1032,8 @@ func ci(cc *context, value ...string) (string, error) {
|
||||
imgs[24].Image(),
|
||||
imgs[25].Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, ci))
|
||||
g := imgfactory.MergeGif(7, ci)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// worship 膜拜
|
||||
@@ -1014,7 +1042,7 @@ func worship(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "worship.gif"
|
||||
// name := cc.usrdir + "worship.gif"
|
||||
c := dlrange("worship", 9, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -1043,7 +1071,8 @@ func worship(cc *context, value ...string) (string, error) {
|
||||
imgs[7].InsertBottom(face, 140, 140, 0, 0).Image(),
|
||||
imgs[8].InsertBottom(face, 140, 140, 0, 0).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, worship))
|
||||
g := imgfactory.MergeGif(7, worship)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// 2ceng 2蹭
|
||||
@@ -1052,7 +1081,7 @@ func ceng2(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "ceng2.gif"
|
||||
// name := cc.usrdir + "ceng2.gif"
|
||||
c := dlrange("ceng2", 4, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -1076,7 +1105,8 @@ func ceng2(cc *context, value ...string) (string, error) {
|
||||
imgs[2].InsertBottom(tou, 175, 175, 78, 263).Image(),
|
||||
imgs[3].InsertBottom(tou, 175, 175, 78, 263).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, ceng2))
|
||||
g := imgfactory.MergeGif(7, ceng2)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// dun 炖
|
||||
@@ -1085,7 +1115,7 @@ func dun(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "dun.gif"
|
||||
// name := cc.usrdir + "dun.gif"
|
||||
c := dlrange("dun", 5, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -1110,7 +1140,8 @@ func dun(cc *context, value ...string) (string, error) {
|
||||
imgs[3].InsertBottom(tou, 80, 80, 85, 45).Image(),
|
||||
imgs[4].InsertBottom(tou, 80, 80, 85, 45).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, dun))
|
||||
g := imgfactory.MergeGif(7, dun)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// push 滚高清重置版 过渡
|
||||
@@ -1120,7 +1151,7 @@ func push(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 16
|
||||
name := cc.usrdir + "push.gif"
|
||||
// name := cc.usrdir + "push.gif"
|
||||
c := dlrange("push", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -1142,7 +1173,8 @@ func push(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
push[i] = imgs[i].InsertUpC(imgfactory.Rotate(tou, float64(-22*i), 280, 280).Image(), 0, 0, 523, 291).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, push))
|
||||
g := imgfactory.MergeGif(7, push)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// peng 砰
|
||||
@@ -1151,7 +1183,7 @@ func peng(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "peng.gif"
|
||||
// name := cc.usrdir + "peng.gif"
|
||||
c := dlrange("peng", 25, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -1200,7 +1232,8 @@ func peng(cc *context, value ...string) (string, error) {
|
||||
imgs[23].InsertUp(m4.Image(), 0, 0, 89, 159).Image(),
|
||||
imgs[24].InsertUp(m4.Image(), 0, 0, 86, 160).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(8, peng))
|
||||
g := imgfactory.MergeGif(8, peng)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// klee 可莉吃
|
||||
@@ -1210,7 +1243,7 @@ func klee(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 31
|
||||
name := cc.usrdir + "klee.gif"
|
||||
// name := cc.usrdir + "klee.gif"
|
||||
c := dlrange("klee", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -1233,7 +1266,8 @@ func klee(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
klee[i] = imgs[i].InsertBottom(im.Image(), 0, 0, locs[i][0], locs[i][1]).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, klee))
|
||||
g := imgfactory.MergeGif(7, klee)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// hutaoken 胡桃啃
|
||||
@@ -1242,7 +1276,7 @@ func hutaoken(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "hutaoken.gif"
|
||||
// name := cc.usrdir + "hutaoken.gif"
|
||||
c := dlrange("hutaoken", 2, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -1264,7 +1298,8 @@ func hutaoken(cc *context, value ...string) (string, error) {
|
||||
imgs[0].InsertBottom(tou, 98, 101, 108, 234).Image(),
|
||||
imgs[1].InsertBottom(tou, 96, 100, 108, 237).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(8, hutaoken))
|
||||
g := imgfactory.MergeGif(8, hutaoken)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// lick 2舔
|
||||
@@ -1273,7 +1308,7 @@ func lick(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "lick.gif"
|
||||
// name := cc.usrdir + "lick.gif"
|
||||
c := dlrange("lick", 2, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -1295,7 +1330,8 @@ func lick(cc *context, value ...string) (string, error) {
|
||||
imgs[0].InsertUp(tou, 44, 44, 10, 138).Image(),
|
||||
imgs[1].InsertUp(tou, 44, 44, 10, 138).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(8, lick))
|
||||
g := imgfactory.MergeGif(8, lick)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// tiqiu 踢球
|
||||
@@ -1305,7 +1341,7 @@ func tiqiu(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 15
|
||||
name := cc.usrdir + "tiqiu.gif"
|
||||
// name := cc.usrdir + "tiqiu.gif"
|
||||
c := dlrange("tiqiu", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -1328,7 +1364,8 @@ func tiqiu(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
tiqiu[i] = imgs[i].InsertUpC(imgfactory.Rotate(tou, float64(-24*i), 0, 0).Image(), 0, 0, locs[i][0]+38, locs[i][1]+38).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, tiqiu))
|
||||
g := imgfactory.MergeGif(7, tiqiu)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// cai 踩
|
||||
@@ -1337,7 +1374,7 @@ func cai(cc *context, value ...string) (string, error) {
|
||||
var wg sync.WaitGroup
|
||||
var errwg error
|
||||
var m sync.Mutex
|
||||
name := cc.usrdir + "cai.gif"
|
||||
// name := cc.usrdir + "cai.gif"
|
||||
c := dlrange("cai", 5, &wg, func(e error) {
|
||||
m.Lock()
|
||||
errwg = e
|
||||
@@ -1363,7 +1400,8 @@ func cai(cc *context, value ...string) (string, error) {
|
||||
imgs[3].InsertBottom(tou, 85, 76, 52, 203).Image(),
|
||||
imgs[4].InsertBottom(tou, 88, 82, 49, 198).Image(),
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, cai))
|
||||
g := imgfactory.MergeGif(7, cai)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// whir 2转
|
||||
@@ -1373,7 +1411,7 @@ func whirl(cc *context, value ...string) (string, error) {
|
||||
var err error
|
||||
var m sync.Mutex
|
||||
piclen := 15
|
||||
name := cc.usrdir + "whirl.gif"
|
||||
// name := cc.usrdir + "whirl.gif"
|
||||
c := dlrange("whirl", piclen, &wg, func(e error) {
|
||||
m.Lock()
|
||||
err = e
|
||||
@@ -1395,7 +1433,8 @@ func whirl(cc *context, value ...string) (string, error) {
|
||||
for i := 0; i < piclen; i++ {
|
||||
whirl[i] = imgs[i].InsertUpC(imgfactory.Rotate(tou, float64(-24*i), 145, 145).Image(), 0, 0, 115, 89).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(7, whirl))
|
||||
g := imgfactory.MergeGif(7, whirl)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
// always 一直
|
||||
@@ -1403,7 +1442,7 @@ func alwaysDoGif(cc *context, value ...string) (string, error) {
|
||||
_ = value
|
||||
var err error
|
||||
var face []*imgfactory.Factory
|
||||
name := cc.usrdir + "AlwaysDo.gif"
|
||||
// name := cc.usrdir + "AlwaysDo.gif"
|
||||
face, err = imgfactory.LoadAllTrueFrames(cc.headimgsdir[0], 500, 500)
|
||||
if err != nil {
|
||||
// 载入失败尝试载入第一帧
|
||||
@@ -1444,5 +1483,6 @@ func alwaysDoGif(cc *context, value ...string) (string, error) {
|
||||
canvas.DrawString("吗", 370, 560)
|
||||
turn[i] = imgfactory.Size(canvas.Image(), 0, 0).Image()
|
||||
}
|
||||
return "file:///" + name, imgfactory.SaveGIF2Path(name, imgfactory.MergeGif(8, turn))
|
||||
g := imgfactory.MergeGif(8, turn)
|
||||
return imgfactory.GIF2Base64(g)
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ func init() {
|
||||
getdb := fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
|
||||
db.DBPath = engine.DataFolder() + "pics.db"
|
||||
_, _ = engine.GetLazyData("pics.db", false)
|
||||
err := db.Open(time.Hour * 24)
|
||||
err := db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -32,7 +32,7 @@ func init() { // 插件主体
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
}
|
||||
err = db.Open(time.Hour * 24)
|
||||
err = db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -73,7 +73,7 @@ func init() { // 插件主体
|
||||
|
||||
go func() {
|
||||
db.DBPath = engine.DataFolder() + "config.db"
|
||||
err := db.Open(time.Hour * 24)
|
||||
err := db.Open(time.Hour)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ func (n *nsetu) scanall(path string) error {
|
||||
root := os.DirFS(path)
|
||||
_ = n.db.Close()
|
||||
_ = os.Remove(n.db.DBPath)
|
||||
err := n.db.Open(time.Hour * 24)
|
||||
err := n.db.Open(time.Hour)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ func init() {
|
||||
logrus.Infoln("[nsetu] set setu dir to", setupath)
|
||||
}
|
||||
}
|
||||
err := ns.db.Open(time.Hour * 24)
|
||||
err := ns.db.Open(time.Hour)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ func init() {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
}
|
||||
err = db.Open(time.Hour * 24)
|
||||
err = db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -54,7 +54,7 @@ func init() { // 插件主体
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
}
|
||||
err = db.Open(time.Hour * 24)
|
||||
err = db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -82,7 +82,7 @@ var (
|
||||
))
|
||||
getdb = fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
|
||||
民政局.db.DBPath = engine.DataFolder() + "结婚登记表.db"
|
||||
err := 民政局.db.Open(time.Hour * 24)
|
||||
err := 民政局.db.Open(time.Hour)
|
||||
if err == nil {
|
||||
// 创建群配置表
|
||||
err = 民政局.db.Create("updateinfo", &updateinfo{})
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package quan
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"encoding/json"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@@ -11,13 +11,18 @@ import (
|
||||
"github.com/FloatTech/zbputils/control"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
||||
)
|
||||
|
||||
const (
|
||||
quan = "http://tc.tfkapi.top/API/qqqz.php?qq=%v" // api
|
||||
quan = "http://tfapi.top/API/qqqz.php?type=json&qq=" // api
|
||||
)
|
||||
|
||||
type result struct {
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Qz string `json:"qz"`
|
||||
}
|
||||
|
||||
func init() { // 主函数
|
||||
en := control.Register("quan", &ctrl.Options[*zero.Ctx]{
|
||||
DisableOnDefault: false,
|
||||
@@ -31,28 +36,25 @@ func init() { // 主函数
|
||||
if str == "" { // user
|
||||
str = strconv.FormatInt(ctx.Event.UserID, 10)
|
||||
}
|
||||
es, err := web.GetData(fmt.Sprintf(quan, str)) // 将网站返回结果赋值
|
||||
es, err := web.GetData(quan + str) // 将网站返回结果赋值
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("出现错误捏:", err))
|
||||
ctx.SendChain(message.Text("出现错误捏: ", err))
|
||||
return
|
||||
}
|
||||
if len(helper.BytesToString(es)) <= 24 {
|
||||
ctx.SendChain(message.Text("网站维护中")) // 输出结果
|
||||
return
|
||||
}
|
||||
f := helper.BytesToString(es)[24:]
|
||||
_, err = strconv.Atoi(f)
|
||||
var data result
|
||||
err = json.Unmarshal(es, &data)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("网站维护中")) // 输出结果
|
||||
ctx.SendChain(message.Text("解析json错误: ", err))
|
||||
return
|
||||
}
|
||||
var msg strings.Builder
|
||||
msg.WriteString("查询账号:")
|
||||
msg.WriteString("查询账号: ")
|
||||
msg.WriteString(str)
|
||||
msg.WriteString("\n")
|
||||
msg.WriteString("查询状态:成功\n")
|
||||
msg.WriteString("您的权重为:")
|
||||
msg.WriteString(f)
|
||||
msg.WriteString("查询状态: ")
|
||||
msg.WriteString(data.Msg)
|
||||
msg.WriteString("\n您的权重为: ")
|
||||
msg.WriteString(data.Qz)
|
||||
ctx.SendChain(message.Text(msg.String())) // 输出结果
|
||||
})
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ func init() { // 插件主体
|
||||
// 如果数据库不存在则下载
|
||||
pool.db.DBPath = engine.DataFolder() + "SetuTime.db"
|
||||
_, _ = engine.GetLazyData("SetuTime.db", false)
|
||||
err := pool.db.Open(time.Hour * 24)
|
||||
err := pool.db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -20,7 +20,7 @@ func init() {
|
||||
Help: "- 今天是什么少女[@xxx]\n" +
|
||||
"- 异世界转生[@xxx]\n" +
|
||||
"- 卖萌[@xxx]\n" +
|
||||
"- 抽老婆[@xxx]\n" +
|
||||
"- 今日老婆[@xxx]\n" +
|
||||
"- 黄油角色[@xxx]",
|
||||
})
|
||||
engine.OnPrefix("异世界转生", number(587874)).SetBlock(true).Limit(ctxext.LimitByUser).Handle(handlepic)
|
||||
|
||||
@@ -17,7 +17,7 @@ var (
|
||||
// 开启并检查数据库链接
|
||||
getDB = fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
|
||||
database.db.DBPath = engine.DataFolder() + "steam.db"
|
||||
err := database.db.Open(time.Hour * 24)
|
||||
err := database.db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[steam] ERROR: ", err))
|
||||
return false
|
||||
|
||||
@@ -5,10 +5,17 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/FloatTech/floatbox/binary"
|
||||
"github.com/FloatTech/floatbox/ctxext"
|
||||
"github.com/FloatTech/floatbox/file"
|
||||
"github.com/FloatTech/floatbox/process"
|
||||
"github.com/FloatTech/floatbox/web"
|
||||
ctrl "github.com/FloatTech/zbpctrl"
|
||||
"github.com/FloatTech/zbputils/control"
|
||||
"github.com/fumiama/jieba"
|
||||
@@ -22,10 +29,33 @@ func init() {
|
||||
engine := control.Register("thesaurus", &ctrl.Options[*zero.Ctx]{
|
||||
DisableOnDefault: false,
|
||||
Brief: "词典匹配回复",
|
||||
Help: "- 切换[kimo|傲娇|可爱]词库\n- 设置词库触发概率0.x (0<x<9)",
|
||||
Help: "- 切换[kimo|傲娇|可爱|🦙]词库\n- 设置词库触发概率0.x (0<x<9)",
|
||||
PublicDataFolder: "Chat",
|
||||
})
|
||||
engine.OnRegex(`^切换(kimo|傲娇|可爱)词库$`, zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
alpacafolder := engine.DataFolder() + "alpaca/"
|
||||
err := os.MkdirAll(alpacafolder, 0755)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
alpacapifile := alpacafolder + "api.txt"
|
||||
alpacapiurl := ""
|
||||
if file.IsExist(alpacapifile) {
|
||||
data, err := os.ReadFile(alpacapifile)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
alpacapiurl = binary.BytesToString(data)
|
||||
}
|
||||
alpacatokenfile := alpacafolder + "token.txt"
|
||||
alpacatoken := ""
|
||||
if file.IsExist(alpacatokenfile) {
|
||||
data, err := os.ReadFile(alpacatokenfile)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
alpacatoken = binary.BytesToString(data)
|
||||
}
|
||||
engine.OnRegex(`^切换(kimo|傲娇|可爱|🦙)词库$`, zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
c, ok := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
|
||||
if !ok {
|
||||
ctx.SendChain(message.Text("ERROR: 找不到 manager"))
|
||||
@@ -44,6 +74,8 @@ func init() {
|
||||
t = tDERE
|
||||
case "可爱":
|
||||
t = tKAWA
|
||||
case "🦙":
|
||||
t = tALPACA
|
||||
}
|
||||
err := c.SetData(gid, (d&^3)|t)
|
||||
if err != nil {
|
||||
@@ -76,6 +108,24 @@ func init() {
|
||||
}
|
||||
ctx.SendChain(message.Text("成功!"))
|
||||
})
|
||||
engine.OnRegex(`^设置🦙API地址\s*(http.*)\s*$`, zero.SuperUserPermission, zero.OnlyPrivate).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
alpacapiurl = ctx.State["regex_matched"].([]string)[1]
|
||||
err := os.WriteFile(alpacapifile, binary.StringToBytes(alpacapiurl), 0644)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("成功!"))
|
||||
})
|
||||
engine.OnRegex(`^设置🦙token\s*([0-9a-f]{112})\s*$`, zero.SuperUserPermission, zero.OnlyPrivate).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
alpacatoken = ctx.State["regex_matched"].([]string)[1]
|
||||
err := os.WriteFile(alpacatokenfile, binary.StringToBytes(alpacatoken), 0644)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("成功!"))
|
||||
})
|
||||
go func() {
|
||||
data, err := engine.GetLazyData("dict.txt", false)
|
||||
if err != nil {
|
||||
@@ -128,6 +178,57 @@ func init() {
|
||||
engine.OnMessage(canmatch(tKAWA), match(chatListK, seg)).
|
||||
SetBlock(false).
|
||||
Handle(randreply(sm.K))
|
||||
engine.OnMessage(canmatch(tALPACA), func(ctx *zero.Ctx) bool {
|
||||
return alpacapiurl != "" && alpacatoken != ""
|
||||
}).SetBlock(false).Handle(func(ctx *zero.Ctx) {
|
||||
msg := ctx.ExtractPlainText()
|
||||
if msg != "" {
|
||||
data, err := web.RequestDataWithHeaders(http.DefaultClient, alpacapiurl+"/reply", "POST",
|
||||
func(r *http.Request) error {
|
||||
r.Header.Set("Authorization", alpacatoken)
|
||||
return nil
|
||||
}, bytes.NewReader(binary.NewWriterF(func(writer *binary.Writer) {
|
||||
_ = json.NewEncoder(writer).Encode(&[]alpacamsg{{
|
||||
Name: ctx.CardOrNickName(ctx.Event.UserID),
|
||||
Message: msg,
|
||||
}})
|
||||
})))
|
||||
if err != nil {
|
||||
logrus.Warnln("[chat] 🦙 err:", err)
|
||||
return
|
||||
}
|
||||
type reply struct {
|
||||
ID int
|
||||
Msg string
|
||||
}
|
||||
m := reply{}
|
||||
err = json.Unmarshal(data, &m)
|
||||
if err != nil {
|
||||
logrus.Warnln("[chat] 🦙 unmarshal err:", err)
|
||||
return
|
||||
}
|
||||
for i := 0; i < 60; i++ {
|
||||
time.Sleep(time.Second * 4)
|
||||
data, err := web.RequestDataWithHeaders(http.DefaultClient, alpacapiurl+"/get?id="+strconv.Itoa(m.ID), "GET",
|
||||
func(r *http.Request) error {
|
||||
r.Header.Set("Authorization", alpacatoken)
|
||||
return nil
|
||||
}, nil)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
err = json.Unmarshal(data, &m)
|
||||
if err != nil {
|
||||
logrus.Warnln("[chat] 🦙 unmarshal err:", err)
|
||||
return
|
||||
}
|
||||
if len(m.Msg) > 0 {
|
||||
ctx.Send(message.Text(m.Msg))
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
})
|
||||
}()
|
||||
}
|
||||
|
||||
@@ -138,10 +239,16 @@ type simai struct {
|
||||
K map[string][]string `yaml:"可爱"`
|
||||
}
|
||||
|
||||
type alpacamsg struct {
|
||||
Name string
|
||||
Message string
|
||||
}
|
||||
|
||||
const (
|
||||
tKIMO = iota
|
||||
tDERE
|
||||
tKAWA
|
||||
tALPACA
|
||||
)
|
||||
|
||||
func match(l []string, seg *jieba.Segmenter) zero.Rule {
|
||||
|
||||
@@ -37,7 +37,7 @@ func init() {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
}
|
||||
err = db.Open(time.Hour * 24)
|
||||
err = db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return false
|
||||
|
||||
203
plugin/wantquotes/wantquotes.go
Normal file
203
plugin/wantquotes/wantquotes.go
Normal file
@@ -0,0 +1,203 @@
|
||||
// Package wantquotes 据意查句
|
||||
package wantquotes
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/FloatTech/floatbox/binary"
|
||||
"github.com/FloatTech/floatbox/web"
|
||||
ctrl "github.com/FloatTech/zbpctrl"
|
||||
"github.com/FloatTech/zbputils/control"
|
||||
"github.com/FloatTech/zbputils/ctxext"
|
||||
"github.com/FloatTech/zbputils/img/text"
|
||||
"github.com/sirupsen/logrus"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
)
|
||||
|
||||
const (
|
||||
wantquotesURL = "https://wantquotes.net"
|
||||
getQrcode = "/api/get_qrcode/"
|
||||
showqrcode = "https://mp.weixin.qq.com/cgi-bin/showqrcode"
|
||||
loginCheck = "/api/login_check/"
|
||||
semantic = "/api/semantic/"
|
||||
semanticURL = wantquotesURL + semantic + "?query=%s&type=%s&unionid=%s&secret=%s"
|
||||
)
|
||||
|
||||
var (
|
||||
typeList = [...]string{"现", "现-名言", "现-佳句", "现-佳句-文学", "现-佳句-诗歌", "现-佳句-其他", "现-网络", "现-台词", "现-台词-影视剧", "现-台词-动漫", "现-台词-综艺",
|
||||
"古", "谚", "谚-谚语", "谚-俗语", "谚-惯用语", "歇"}
|
||||
)
|
||||
|
||||
type getQrcodeRsp struct {
|
||||
Ticket string `json:"ticket"`
|
||||
SceneID string `json:"scene_id"`
|
||||
}
|
||||
|
||||
type loginCheckRsp struct {
|
||||
Login int `json:"login"`
|
||||
Secret string `json:"secret"`
|
||||
Unionid string `json:"unionid"`
|
||||
}
|
||||
|
||||
type semanticRsp struct {
|
||||
Quotes []Quotes `json:"quotes"`
|
||||
TopSim float64 `json:"top_sim"`
|
||||
}
|
||||
|
||||
// Quotes 名句结构体
|
||||
type Quotes struct {
|
||||
Quote string `json:"quote"`
|
||||
SourceType string `json:"source_type"`
|
||||
Author string `json:"author"`
|
||||
Work string `json:"work"`
|
||||
ID int `json:"id"`
|
||||
}
|
||||
|
||||
func init() {
|
||||
engine := control.Register("wantquotes", &ctrl.Options[*zero.Ctx]{
|
||||
DisableOnDefault: false,
|
||||
Extra: control.ExtraFromString("wantquotes"),
|
||||
Brief: "据意查句",
|
||||
Help: "- 据意查句 大海 (需登录据意查句)\n" +
|
||||
"- 登录据意查句",
|
||||
PrivateDataFolder: "wantquotes",
|
||||
})
|
||||
|
||||
// 开启
|
||||
engine.OnRegex(`^据意查句\s?(.{1,25})$`, getPara).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
keyword := ctx.State["regex_matched"].([]string)[1]
|
||||
quotesType := ctx.State["quotesType"].(string)
|
||||
var key string
|
||||
manager := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
|
||||
err := manager.GetExtra(&key)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
logrus.Debugln("[wantquotes] get api key:", key)
|
||||
unionid, secret, _ := strings.Cut(key, "|")
|
||||
apiURL := fmt.Sprintf(semanticURL, url.QueryEscape(keyword), url.QueryEscape(quotesType), url.QueryEscape(unionid), url.QueryEscape(secret))
|
||||
data, err := web.RequestDataWith(web.NewDefaultClient(), apiURL, "GET", wantquotesURL, web.RandUA(), nil)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
var rsp semanticRsp
|
||||
err = json.Unmarshal(data, &rsp)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
m := make(message.Message, 0, len(rsp.Quotes))
|
||||
text := strings.Builder{}
|
||||
for _, v := range rsp.Quotes {
|
||||
text.WriteString(v.Quote)
|
||||
text.WriteString("\n—— ")
|
||||
text.WriteString(v.Author)
|
||||
text.WriteString(" 《")
|
||||
text.WriteString(v.Work)
|
||||
text.WriteString("》")
|
||||
m = append(m, ctxext.FakeSenderForwardNode(ctx, message.Text(text.String())))
|
||||
text.Reset()
|
||||
}
|
||||
if id := ctx.Send(m).ID(); id == 0 {
|
||||
ctx.SendChain(message.Text("ERROR: 可能被风控或下载图片用时过长,请耐心等待"))
|
||||
}
|
||||
})
|
||||
engine.OnFullMatch(`登录据意查句`, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
getQrcodeData, err := web.RequestDataWith(web.NewDefaultClient(), wantquotesURL+getQrcode, "GET", wantquotesURL, web.RandUA(), nil)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
var qrRsp getQrcodeRsp
|
||||
err = json.Unmarshal(getQrcodeData, &qrRsp)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
showQrcodeData, err := web.RequestDataWith(web.NewDefaultClient(), showqrcode+"?ticket="+qrRsp.Ticket, "GET", "", web.RandUA(), nil)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("WantQuotes\n微信扫码登录\n首次登录需关注公众号"))
|
||||
ctx.SendChain(message.ImageBytes(showQrcodeData))
|
||||
|
||||
ticker := time.NewTicker(2 * time.Second) // 创建每秒触发一次的定时器
|
||||
defer ticker.Stop()
|
||||
count := 0
|
||||
for range ticker.C {
|
||||
count++
|
||||
if count == 60 {
|
||||
ctx.SendChain(message.Text("据意查句登录超时,请重新登录"))
|
||||
return
|
||||
}
|
||||
loginCheckData, err := web.RequestDataWith(web.NewDefaultClient(), wantquotesURL+loginCheck+"?scene_id="+qrRsp.SceneID, "GET", "", web.RandUA(), nil)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
var lcr loginCheckRsp
|
||||
err = json.Unmarshal(loginCheckData, &lcr)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
if lcr.Login == 1 {
|
||||
manager := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
|
||||
err := manager.SetExtra(lcr.Unionid + "|" + lcr.Secret)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("据意查句登录成功"))
|
||||
return
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func getPara(ctx *zero.Ctx) bool {
|
||||
next := zero.NewFutureEvent("message", 999, false, ctx.CheckSession())
|
||||
recv, cancel := next.Repeat()
|
||||
defer cancel()
|
||||
tex := strings.Builder{}
|
||||
tex.WriteString("请下列选择查询名句的类型\n")
|
||||
for i, v := range typeList {
|
||||
tex.WriteString(strconv.Itoa(i))
|
||||
tex.WriteString(". ")
|
||||
tex.WriteString(v)
|
||||
tex.WriteString("\n")
|
||||
}
|
||||
base64Str, err := text.RenderToBase64(tex.String(), text.FontFile, 400, 20)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("图片生成错误了, ", zero.BotConfig.NickName[0], "帮你选择查询名句类型"))
|
||||
ctx.State["quotesType"] = typeList[0]
|
||||
return true
|
||||
}
|
||||
ctx.SendChain(message.Image("base64://" + binary.BytesToString(base64Str)))
|
||||
for {
|
||||
select {
|
||||
case <-time.After(time.Second * 10):
|
||||
ctx.SendChain(message.Text("时间太久啦!", zero.BotConfig.NickName[0], "帮你选择查询名句类型"))
|
||||
ctx.State["quotesType"] = typeList[0]
|
||||
return true
|
||||
case c := <-recv:
|
||||
msg := c.Event.Message.ExtractPlainText()
|
||||
num, _ := strconv.Atoi(msg)
|
||||
if num < 0 || num >= len(typeList) {
|
||||
ctx.SendChain(message.Text("序号非法!"))
|
||||
continue
|
||||
}
|
||||
ctx.State["quotesType"] = typeList[num]
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package warframeapi
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@@ -30,7 +31,11 @@ func newwfapi() (w wfapi, err error) {
|
||||
// 获取Warframe市场的售价表,并进行排序,cn_name为物品中文名称,onlyMaxRank表示只取最高等级的物品,返回物品售价表,物品信息,物品英文
|
||||
func getitemsorder(cnName string, onlyMaxRank bool) (od orders, it *itemsInSet, n string, err error) {
|
||||
var wfapiio wfAPIItemsOrders
|
||||
data, err := web.RequestDataWithHeaders(&http.Client{}, fmt.Sprintf("https://api.warframe.market/v1/items/%s/orders?include=item", cnName), "GET", func(request *http.Request) error {
|
||||
data, err := web.RequestDataWithHeaders(&http.Client{Transport: &http.Transport{
|
||||
TLSClientConfig: &tls.Config{
|
||||
MinVersion: tls.VersionTLS12,
|
||||
},
|
||||
}}, fmt.Sprintf("https://api.warframe.market/v1/items/%s/orders?include=item", cnName), "GET", func(request *http.Request) error {
|
||||
request.Header.Add("Accept", "application/json")
|
||||
request.Header.Add("Platform", "pc")
|
||||
return nil
|
||||
@@ -87,7 +92,11 @@ var (
|
||||
func newwm() (*wmdata, error) {
|
||||
var itemapi wfAPIItem // WarFrame市场的数据实例
|
||||
var wd wmdata
|
||||
data, err := web.RequestDataWithHeaders(&http.Client{}, wfitemurl, "GET", func(request *http.Request) error {
|
||||
data, err := web.RequestDataWithHeaders(&http.Client{Transport: &http.Transport{
|
||||
TLSClientConfig: &tls.Config{
|
||||
MinVersion: tls.VersionTLS12,
|
||||
},
|
||||
}}, wfitemurl, "GET", func(request *http.Request) error {
|
||||
request.Header.Add("Accept", "application/json")
|
||||
request.Header.Add("Language", "zh-hans")
|
||||
return nil
|
||||
|
||||
@@ -81,6 +81,9 @@ func (w *world) refresh(api *wfapi) {
|
||||
|
||||
w.w[2].NextTime = api.CambionCycle.Expiry.Local()
|
||||
w.w[2].IsDay = api.CambionCycle.Active == "fass"
|
||||
for _, t := range w.w {
|
||||
t.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
// 游戏时间更新
|
||||
|
||||
@@ -100,7 +100,7 @@ func init() { // 插件主体
|
||||
))
|
||||
getdb := fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
|
||||
vilginfo.db.DBPath = engine.DataFolder() + "ernieVilg.db"
|
||||
err := vilginfo.db.Open(time.Hour * 24)
|
||||
err := vilginfo.db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text(serviceErr, err))
|
||||
return false
|
||||
@@ -302,7 +302,7 @@ func init() { // 插件主体
|
||||
))
|
||||
getmodeldb := fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
|
||||
modelinfo.db.DBPath = engine.DataFolder() + "ernieModel.db"
|
||||
err := modelinfo.db.Open(time.Hour * 24)
|
||||
err := modelinfo.db.Open(time.Hour)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text(modelErr, err))
|
||||
return false
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"0409": {
|
||||
"identity": {
|
||||
"name": "ZeroBot-Plugin",
|
||||
"version": "1.7.1.1789"
|
||||
"version": "1.7.1.1820"
|
||||
},
|
||||
"description": "",
|
||||
"minimum-os": "vista",
|
||||
@@ -36,23 +36,23 @@
|
||||
"#1": {
|
||||
"0000": {
|
||||
"fixed": {
|
||||
"file_version": "1.7.1.1789",
|
||||
"product_version": "v1.7.1-beta2",
|
||||
"timestamp": "2023-04-09T11:02:07+08:00"
|
||||
"file_version": "1.7.1.1820",
|
||||
"product_version": "v1.7.1",
|
||||
"timestamp": "2023-04-30T13:52:06+08:00"
|
||||
},
|
||||
"info": {
|
||||
"0409": {
|
||||
"Comments": "OneBot plugins based on ZeroBot",
|
||||
"CompanyName": "FloatTech",
|
||||
"FileDescription": "https://github.com/FloatTech/ZeroBot-Plugin",
|
||||
"FileVersion": "1.7.1.1789",
|
||||
"FileVersion": "1.7.1.1820",
|
||||
"InternalName": "",
|
||||
"LegalCopyright": "© 2020 - 2023 FloatTech. All Rights Reserved.",
|
||||
"LegalTrademarks": "",
|
||||
"OriginalFilename": "ZBP.EXE",
|
||||
"PrivateBuild": "",
|
||||
"ProductName": "ZeroBot-Plugin",
|
||||
"ProductVersion": "v1.7.1-beta2",
|
||||
"ProductVersion": "v1.7.1",
|
||||
"SpecialBuild": ""
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user