💩👌 make lint happy

This commit is contained in:
fumiama 2021-08-06 17:11:03 +08:00
parent 40f1b1c618
commit fd64016e19
25 changed files with 548 additions and 126 deletions

3
.gitignore vendored
View File

@ -2,4 +2,5 @@ data/SetuTime/cache
data/SetuTime/search
data/manager
.idea/
.DS_Store
.DS_Store
.vscode

2
go.mod
View File

@ -7,6 +7,7 @@ require (
github.com/FloatTech/ZeroBot-ACGImage v1.5.5
github.com/FloatTech/ZeroBot-Plugin-Timer v1.3.4
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/golang/protobuf v1.5.2
github.com/robfig/cron v1.2.0
github.com/shirou/gopsutil v3.21.7+incompatible
github.com/sirupsen/logrus v1.8.1
@ -17,5 +18,6 @@ require (
github.com/wdvxdr1123/ZeroBot v1.2.2
golang.org/x/text v0.3.6 // indirect
golang.org/x/tools v0.1.5 // indirect
google.golang.org/protobuf v1.27.1 // indirect
modernc.org/sqlite v1.12.0
)

12
go.sum
View File

@ -20,6 +20,8 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@ -38,6 +40,8 @@ github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMW
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
@ -85,23 +89,27 @@ github.com/tklauser/numcpus v0.2.3 h1:nQ0QYpiritP6ViFhrKYsiv6VVxOpum2Gks5GhnJbS/
github.com/tklauser/numcpus v0.2.3/go.mod h1:vpEPS/JC+oZGGQ/My/vJnNsvMDQL6PwOqt8dsCw5j+E=
github.com/wdvxdr1123/ZeroBot v1.2.2 h1:BKEy3l80BMrQWpFWaII0AfFMyf9bqrB0TxfWhTdoV58=
github.com/wdvxdr1123/ZeroBot v1.2.2/go.mod h1:83nHtG8V5TAxPwH/LCDxLpZk4khIgs29dkr5TBWf7fc=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -127,7 +135,9 @@ golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@ -138,6 +148,8 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=

View File

@ -1,7 +1,5 @@
/*
暂时只有服务器监控
*/
package plugin_ai_false
// Package aifalse 暂时只有服务器监控
package aifalse
import (
"math"

View File

@ -1,7 +1,9 @@
// Package atri
// 本文件基于 https://github.com/Kyomotoi/ATRI
// 为 Golang 移植版,语料、素材均来自上述项目
// 本项目遵守 AGPL v3 协议进行开源
/*
Package atri
本文件基于 https://github.com/Kyomotoi/ATRI
Golang 移植版语料素材均来自上述项目
本项目遵守 AGPL v3 协议进行开源
*/
package atri
import (
@ -14,25 +16,25 @@ import (
var (
// ATRI 所有命令的优先级
PRIO = -1
prio = -1
// ATRI 表情的 GitHub 镜像位置
RES = "https://raw.dihe.moe/Yiwen-Chan/ZeroBot-Plugin/master/plugin_atri/"
res = "https://raw.dihe.moe/Yiwen-Chan/ZeroBot-Plugin/master/plugin_atri/"
// ATRI 的总开关
ENABLE = true
enable = true
)
func init() { // 插件主体
zero.OnFullMatch("ATRI醒醒", zero.AdminPermission).SetBlock(true).SetPriority(PRIO).
zero.OnFullMatch("ATRI醒醒", zero.AdminPermission).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
ENABLE = true
enable = true
ctx.SendChain(randText("嗯呜呜……夏生先生……?"))
})
zero.OnFullMatch("ATRI睡吧", zero.AdminPermission).SetBlock(true).SetPriority(PRIO).
zero.OnFullMatch("ATRI睡吧", zero.AdminPermission).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
ENABLE = false
enable = false
ctx.SendChain(randText("Zzz……Zzz……"))
})
zero.OnFullMatch("萝卜子", AtriSwitch(), AtriSleep()).SetBlock(true).SetPriority(PRIO).
zero.OnFullMatch("萝卜子", atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
switch rand.Intn(2) {
case 0:
@ -41,17 +43,17 @@ func init() { // 插件主体
ctx.SendChain(randRecord("RocketPunch.amr"))
}
})
zero.OnKeywordGroup([]string{"喜欢", "爱你", "爱", "suki", "daisuki", "すき", "好き", "贴贴", "老婆", "亲一个", "mua"}, AtriSwitch(), AtriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(PRIO).
zero.OnKeywordGroup([]string{"喜欢", "爱你", "爱", "suki", "daisuki", "すき", "好き", "贴贴", "老婆", "亲一个", "mua"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
if rand.Intn(10) == 0 {
ctx.SendChain(randImage("SUKI.jpg", "SUKI1.jpg", "SUKI2.png"))
}
})
zero.OnKeywordGroup([]string{"草你妈", "操你妈", "脑瘫", "废柴", "fw", "five", "废物", "战斗", "爬", "爪巴", "sb", "SB", "傻B"}, AtriSwitch(), AtriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(PRIO - 1).
zero.OnKeywordGroup([]string{"草你妈", "操你妈", "脑瘫", "废柴", "fw", "five", "废物", "战斗", "爬", "爪巴", "sb", "SB", "傻B"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio - 1).
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(randImage("FN.jpg", "WQ.jpg", "WQ1.jpg"))
})
zero.OnFullMatchGroup([]string{"早安", "早哇", "早上好", "ohayo", "哦哈哟", "お早う"}, AtriSwitch()).SetBlock(true).SetPriority(PRIO).
zero.OnFullMatchGroup([]string{"早安", "早哇", "早上好", "ohayo", "哦哈哟", "お早う"}, atriSwitch()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
now := time.Now().Hour()
switch {
@ -90,7 +92,7 @@ func init() { // 插件主体
))
}
})
zero.OnFullMatchGroup([]string{"中午好", "午安"}, AtriSwitch()).SetBlock(true).SetPriority(PRIO).
zero.OnFullMatchGroup([]string{"中午好", "午安"}, atriSwitch()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
now := time.Now().Hour()
if now > 11 && now < 15 { // 中午
@ -102,7 +104,7 @@ func init() { // 插件主体
))
}
})
zero.OnFullMatchGroup([]string{"晚安", "oyasuminasai", "おやすみなさい"}, AtriSwitch()).SetBlock(true).SetPriority(PRIO).
zero.OnFullMatchGroup([]string{"晚安", "oyasuminasai", "おやすみなさい"}, atriSwitch()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
now := time.Now().Hour()
switch {
@ -144,7 +146,7 @@ func init() { // 插件主体
))
}
})
zero.OnKeywordGroup([]string{"高性能", "太棒了", "すごい", "sugoi", "斯国一", "よかった"}, AtriSwitch(), AtriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(PRIO).
zero.OnKeywordGroup([]string{"高性能", "太棒了", "すごい", "sugoi", "斯国一", "よかった"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(randText(
"当然,我是高性能的嘛~",
@ -164,7 +166,7 @@ func init() { // 插件主体
"呣......我的高性能,毫无遗憾地施展出来了......",
))
})
zero.OnKeywordGroup([]string{"没事", "没关系", "大丈夫", "还好", "不要紧", "没出大问题", "没伤到哪"}, AtriSwitch(), AtriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(PRIO).
zero.OnKeywordGroup([]string{"没事", "没关系", "大丈夫", "还好", "不要紧", "没出大问题", "没伤到哪"}, atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(randText(
"当然,我是高性能的嘛~",
@ -178,23 +180,23 @@ func init() { // 插件主体
))
})
zero.OnKeywordGroup([]string{"好吗", "是吗", "行不行", "能不能", "可不可以"}, AtriSwitch(), AtriSleep()).SetBlock(true).SetPriority(PRIO).
zero.OnKeywordGroup([]string{"好吗", "是吗", "行不行", "能不能", "可不可以"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
if rand.Intn(2) == 0 {
ctx.SendChain(randImage("YES.png", "NO.jpg"))
}
})
zero.OnFullMatchGroup([]string{"啊这"}, AtriSwitch(), AtriSleep()).SetBlock(true).SetPriority(PRIO).
zero.OnFullMatchGroup([]string{"啊这"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
if rand.Intn(2) == 0 {
ctx.SendChain(randImage("AZ.jpg", "AZ1.jpg"))
}
})
zero.OnFullMatchGroup([]string{"我好了"}, AtriSwitch(), AtriSleep()).SetBlock(true).SetPriority(PRIO).
zero.OnFullMatchGroup([]string{"我好了"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(randText("不许好!", "憋回去!"))
})
zero.OnFullMatchGroup([]string{"", "?", "¿"}, AtriSwitch(), AtriSleep()).SetBlock(true).SetPriority(PRIO).
zero.OnFullMatchGroup([]string{"", "?", "¿"}, atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
switch rand.Intn(5) {
case 0:
@ -203,7 +205,7 @@ func init() { // 插件主体
ctx.SendChain(randImage("WH.jpg", "WH1.jpg", "WH2.jpg", "WH3.jpg"))
}
})
zero.OnKeyword("离谱", AtriSwitch(), AtriSleep()).SetBlock(true).SetPriority(PRIO).
zero.OnKeyword("离谱", atriSwitch(), atriSleep()).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
switch rand.Intn(5) {
case 0:
@ -212,7 +214,7 @@ func init() { // 插件主体
ctx.SendChain(randImage("WH.jpg"))
}
})
zero.OnKeyword("答应我", AtriSwitch(), AtriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(PRIO).
zero.OnKeyword("答应我", atriSwitch(), atriSleep(), zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(randText("我无法回应你的请求"))
})
@ -225,23 +227,23 @@ func randText(text ...string) message.MessageSegment {
func randImage(file ...string) message.MessageSegment {
length := len(file)
return message.Image(RES + file[rand.Intn(length)])
return message.Image(res + file[rand.Intn(length)])
}
func randRecord(file ...string) message.MessageSegment {
length := len(file)
return message.Record(RES + file[rand.Intn(length)])
return message.Record(res + file[rand.Intn(length)])
}
// AtriSwitch 控制 ATRI 的开关
func AtriSwitch() zero.Rule {
// atriSwitch 控制 ATRI 的开关
func atriSwitch() zero.Rule {
return func(ctx *zero.Ctx) bool {
return ENABLE
return enable
}
}
// AtriSleep 凌晨0点到6点ATRI 在睡觉,不回应任何请求
func AtriSleep() zero.Rule {
// atriSleep 凌晨0点到6点ATRI 在睡觉,不回应任何请求
func atriSleep() zero.Rule {
return func(ctx *zero.Ctx) bool {
if now := time.Now().Hour(); now >= 1 && now < 6 {
return false

View File

@ -1,4 +1,4 @@
package plugin_bilibili
package bilibili
import (
"encoding/json"
@ -25,12 +25,12 @@ type follower struct {
func init() {
zero.OnFullMatch("/开启粉丝日报", zero.AdminPermission).
Handle(func(ctx *zero.Ctx) {
FansDaily(130591566) // 群号传进去给下面发信息的函数
fansDaily(130591566) // 群号传进去给下面发信息的函数
})
}
// 定时任务每天晚上最后2分钟执行一次
func FansDaily(groupID int64) {
func fansDaily(groupID int64) {
c := cron.New()
_ = c.AddFunc("0 58 23 * * ?", func() { fansData(groupID) })
c.Start()

View File

@ -1,11 +1,12 @@
package plugin_bilibili
package bilibili
import (
"io/ioutil"
"net/http"
"github.com/tidwall/gjson"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"io/ioutil"
"net/http"
)
// 查成分的

View File

@ -1,4 +1,4 @@
package plugin_bilibili
package bilibili
import (
"errors"

View File

@ -1,8 +1,8 @@
/*
Package plugin_chat
Package chat
对话插件 example
*/
package plugin_chat
package chat
import (
"math/rand"

64
plugin_diana/text.go Normal file
View File

@ -0,0 +1,64 @@
package diana
import (
"io"
"os"
"time"
)
const (
datapath = "data/Diana"
pbfile = datapath + "/text.pb"
)
var (
compo Composition
ARRAY []string
)
func init() {
go func() {
time.Sleep(time.Second)
err := os.MkdirAll(datapath, 0755)
if err != nil {
panic(err)
}
loadText()
ARRAY = compo.Array
}()
}
func loadText() {
if _, err := os.Stat(pbfile); err == nil || os.IsExist(err) {
f, err := os.Open(pbfile)
if err == nil {
data, err1 := io.ReadAll(f)
if err1 == nil {
if len(data) > 0 {
compo.Unmarshal(data)
}
}
}
}
}
func addText(txt string) error {
if txt != "" {
ARRAY = append(ARRAY, txt)
data, err := compo.Marshal()
if err == nil {
if _, err := os.Stat(datapath); err == nil || os.IsExist(err) {
f, err1 := os.OpenFile(pbfile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
if err1 != nil {
return err1
} else {
defer f.Close()
_, err2 := f.Write(data)
return err2
}
}
}
return err
}
return nil
}

326
plugin_diana/text.pb.go Normal file
View File

@ -0,0 +1,326 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: text.proto
package diana
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
io "io"
math "math"
math_bits "math/bits"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
type Composition struct {
Array []string `protobuf:"bytes,1,rep,name=array,proto3" json:"array,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Composition) Reset() { *m = Composition{} }
func (m *Composition) String() string { return proto.CompactTextString(m) }
func (*Composition) ProtoMessage() {}
func (*Composition) Descriptor() ([]byte, []int) {
return fileDescriptor_a8e73d1ce47f9297, []int{0}
}
func (m *Composition) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *Composition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_Composition.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *Composition) XXX_Merge(src proto.Message) {
xxx_messageInfo_Composition.Merge(m, src)
}
func (m *Composition) XXX_Size() int {
return m.Size()
}
func (m *Composition) XXX_DiscardUnknown() {
xxx_messageInfo_Composition.DiscardUnknown(m)
}
var xxx_messageInfo_Composition proto.InternalMessageInfo
func (m *Composition) GetArray() []string {
if m != nil {
return m.Array
}
return nil
}
func init() {
proto.RegisterType((*Composition)(nil), "diana.composition")
}
func init() { proto.RegisterFile("text.proto", fileDescriptor_a8e73d1ce47f9297) }
var fileDescriptor_a8e73d1ce47f9297 = []byte{
// 100 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2a, 0x49, 0xad, 0x28,
0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4d, 0xc9, 0x4c, 0xcc, 0x4b, 0x54, 0x52, 0xe6,
0xe2, 0x4e, 0xce, 0xcf, 0x2d, 0xc8, 0x2f, 0xce, 0x2c, 0xc9, 0xcc, 0xcf, 0x13, 0x12, 0xe1, 0x62,
0x4d, 0x2c, 0x2a, 0x4a, 0xac, 0x94, 0x60, 0x54, 0x60, 0xd6, 0xe0, 0x0c, 0x82, 0x70, 0x9c, 0x04,
0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x19, 0x8f, 0xe5,
0x18, 0x92, 0xd8, 0xc0, 0x86, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x22, 0x35, 0x44, 0xcb,
0x52, 0x00, 0x00, 0x00,
}
func (m *Composition) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *Composition) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *Composition) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.XXX_unrecognized != nil {
i -= len(m.XXX_unrecognized)
copy(dAtA[i:], m.XXX_unrecognized)
}
if len(m.Array) > 0 {
for iNdEx := len(m.Array) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Array[iNdEx])
copy(dAtA[i:], m.Array[iNdEx])
i = encodeVarintText(dAtA, i, uint64(len(m.Array[iNdEx])))
i--
dAtA[i] = 0xa
}
}
return len(dAtA) - i, nil
}
func encodeVarintText(dAtA []byte, offset int, v uint64) int {
offset -= sovText(v)
base := offset
for v >= 1<<7 {
dAtA[offset] = uint8(v&0x7f | 0x80)
v >>= 7
offset++
}
dAtA[offset] = uint8(v)
return base
}
func (m *Composition) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if len(m.Array) > 0 {
for _, s := range m.Array {
l = len(s)
n += 1 + l + sovText(uint64(l))
}
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
return n
}
func sovText(x uint64) (n int) {
return (math_bits.Len64(x|1) + 6) / 7
}
func sozText(x uint64) (n int) {
return sovText(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
func (m *Composition) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowText
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: composition: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: composition: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Array", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowText
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthText
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthText
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Array = append(m.Array, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipText(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthText
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipText(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
depth := 0
for iNdEx < l {
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowText
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
wireType := int(wire & 0x7)
switch wireType {
case 0:
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowText
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
iNdEx++
if dAtA[iNdEx-1] < 0x80 {
break
}
}
case 1:
iNdEx += 8
case 2:
var length int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflowText
}
if iNdEx >= l {
return 0, io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
length |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if length < 0 {
return 0, ErrInvalidLengthText
}
iNdEx += length
case 3:
depth++
case 4:
if depth == 0 {
return 0, ErrUnexpectedEndOfGroupText
}
depth--
case 5:
iNdEx += 4
default:
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
}
if iNdEx < 0 {
return 0, ErrInvalidLengthText
}
if depth == 0 {
return iNdEx, nil
}
}
return 0, io.ErrUnexpectedEOF
}
var (
ErrInvalidLengthText = fmt.Errorf("proto: negative length found during unmarshaling")
ErrIntOverflowText = fmt.Errorf("proto: integer overflow")
ErrUnexpectedEndOfGroupText = fmt.Errorf("proto: unexpected end of group")
)

6
plugin_diana/text.proto Normal file
View File

@ -0,0 +1,6 @@
syntax = "proto3";
package diana;
message composition {
repeated string array = 1;
}

View File

@ -1,16 +1,18 @@
package plugin_diana
package diana
import (
"bytes"
"encoding/json"
"github.com/wdvxdr1123/ZeroBot/message"
"math"
"strconv"
"time"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"net/http"
"strings"
zero "github.com/wdvxdr1123/ZeroBot"
)
type zhiwang struct {
@ -26,7 +28,7 @@ type zhiwang struct {
// 小作文查重: 回复要查的消息 查重
func init() {
zero.OnMessage(FullMatchText("查重")).
zero.OnMessage(fullMatchText("查重")).
Handle(func(ctx *zero.Ctx) {
msg := ctx.Event.Message
if msg[0].Type == "reply" {
@ -88,7 +90,7 @@ func zhiwangapi(Text string) *zhiwang {
return result
}
func FullMatchText(src ...string) zero.Rule {
func fullMatchText(src ...string) zero.Rule {
return func(ctx *zero.Ctx) bool {
msg := ctx.Event.Message
for _, elem := range msg {
@ -106,4 +108,4 @@ func FullMatchText(src ...string) zero.Rule {
}
return false
}
}
}

View File

@ -1,7 +1,8 @@
/*
Plugin github
GitHub 仓库搜索
*/
package plugin_github
package github
import (
"errors"

View File

@ -1,4 +1,4 @@
package plugin_image_finder
package imagefinder
import (
"encoding/json"
@ -11,7 +11,7 @@ import (
"github.com/wdvxdr1123/ZeroBot/message"
)
type AutoGenerated struct {
type resultjson struct {
Illusts []struct {
ID int `json:"id"`
Title string `json:"title"`
@ -63,7 +63,7 @@ func init() {
keyword := ctx.State["regex_matched"].([]string)[1]
soutujson := soutuapi(keyword)
pom1 := "https://i.pixiv.cat"
rannum := Suiji()
rannum := rand_int()
pom2 := soutujson.Illusts[rannum].ImageUrls.Large[19:]
ctx.SendChain(message.Image(pom1 + pom2))
})
@ -71,7 +71,7 @@ func init() {
}
// soutuapi 请求api
func soutuapi(keyword string) *AutoGenerated {
func soutuapi(keyword string) *resultjson {
url := "https://api.pixivel.moe/pixiv?type=search&page=0&mode=partial_match_for_tags&word=" + keyword
method := "GET"
@ -90,15 +90,15 @@ func soutuapi(keyword string) *AutoGenerated {
}
defer res.Body.Close()
result := &AutoGenerated{}
result := &resultjson{}
if err := json.NewDecoder(res.Body).Decode(result); err != nil {
panic(err)
}
return result
}
// Suiji 从json里的30条数据中随机获取一条返回
func Suiji() int {
// rand_int 从json里的30条数据中随机获取一条返回
func rand_int() int {
rand.Seed(time.Now().UnixNano())
return rand.Intn(30)
}

View File

@ -1,7 +1,8 @@
/*
Package lolicon
基于 https://api.lolicon.app 随机图片
*/
package plugin_lolicon
package lolicon
import (
"io/ioutil"
@ -14,20 +15,20 @@ import (
)
const (
API = "https://api.lolicon.app/setu/v2"
CAP = 10
api = "https://api.lolicon.app/setu/v2"
capacity = 10
)
var (
QUEUE = make(chan string, CAP)
queue = make(chan string, capacity)
)
func init() {
zero.OnFullMatch("来份萝莉").
Handle(func(ctx *zero.Ctx) {
go func() {
for i := 0; i < min(cap(QUEUE)-len(QUEUE), 2); i++ {
resp, err := http.Get(API)
for i := 0; i < min(cap(queue)-len(queue), 2); i++ {
resp, err := http.Get(api)
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
continue
@ -45,13 +46,13 @@ func init() {
}
url := json.Get("data.0.urls.original").Str
ctx.SendGroupMessage(0, message.Image(url))
QUEUE <- url
queue <- url
}
}()
select {
case <-time.After(time.Second * 10):
ctx.SendChain(message.Text("ERROR: 等待填充,请稍后再试......"))
case url := <-QUEUE:
case url := <-queue:
ctx.SendChain(message.Image(url))
}
})

View File

@ -1,4 +1,4 @@
package plugin_manager
package manager
import (
"fmt"

View File

@ -1,12 +1,13 @@
package plugin_minecraft
package minecraft
import (
"encoding/json"
"fmt"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"net/http"
"strings"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
)
type resultjson struct {

View File

@ -1,11 +1,12 @@
package plugin_minecraft
package minecraft
import (
"fmt"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"io/ioutil"
"net/http"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
)
// 此功能实现依赖MCSManager项目对服务器的管理api,mc服务器如果没有在该管理平台部署此功能无效

View File

@ -1,7 +1,8 @@
/*
Package music
QQ音乐网易云酷狗酷我 点歌
*/
package plugin_music
package music
import (
"crypto/md5"

View File

@ -1,7 +1,8 @@
/*
Package runcode
基于 https://tool.runoob.com 的在线运行代码
*/
package plugin_runcode
package runcode
import (
"errors"

View File

@ -1,8 +1,9 @@
/*
Package saucenao
- 根据 P站 ID 搜图
- 基于 saucenao ascii2d 搜图
*/
package plugin_saucenao
package saucenao
import (
"fmt"

View File

@ -1,4 +1,4 @@
package plugin_setutime
package setutime
import (
"fmt"
@ -16,9 +16,9 @@ import (
)
// Pools 图片缓冲池
type Pool struct {
type imgpool struct {
Lock sync.Mutex
DB *Sqlite
DB *sqlite
Path string
Group int64
List []string
@ -28,9 +28,9 @@ type Pool struct {
}
// NewPoolsCache 返回一个缓冲池对象
func NewPools() *Pool {
cache := &Pool{
DB: &Sqlite{DBPath: "data/SetuTime/SetuTime.db"},
func newPools() *imgpool {
cache := &imgpool{
DB: &sqlite{DBPath: "data/SetuTime/SetuTime.db"},
Path: "data/SetuTime/cache/",
Group: 0,
List: []string{"涩图", "二次元", "风景", "车万"}, // 可以自己加类别,得自己加图片进数据库
@ -43,7 +43,7 @@ func NewPools() *Pool {
panic(err)
}
for i := range cache.List {
if err := cache.DB.Create(cache.List[i], &pixiv.Illust{}); err != nil {
if err := cache.DB.create(cache.List[i], &pixiv.Illust{}); err != nil {
panic(err)
}
}
@ -51,12 +51,12 @@ func NewPools() *Pool {
}
var (
POOL = NewPools()
pool = newPools()
limit = rate.NewManager(time.Minute*1, 5)
)
func init() { // 插件主体
zero.OnRegex(`^来份(.*)$`, firstValueInList(POOL.List)).SetBlock(true).SetPriority(20).
zero.OnRegex(`^来份(.*)$`, firstValueInList(pool.List)).SetBlock(true).SetPriority(20).
Handle(func(ctx *zero.Ctx) {
if !limit.Load(ctx.Event.UserID).Acquire() {
ctx.SendChain(message.Text("请稍后重试0x0..."))
@ -65,43 +65,43 @@ func init() { // 插件主体
var type_ = ctx.State["regex_matched"].([]string)[1]
// 补充池子
go func() {
times := min(POOL.Max-POOL.Size(type_), 2)
times := min(pool.Max-pool.size(type_), 2)
for i := 0; i < times; i++ {
illust := &pixiv.Illust{}
// 查询出一张图片
if err := POOL.DB.Select(type_, illust, "ORDER BY RANDOM() limit 1"); err != nil {
if err := pool.DB.find(type_, illust, "ORDER BY RANDOM() limit 1"); err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
continue
}
// 下载图片
if _, err := download(illust, POOL.Path); err != nil {
if _, err := download(illust, pool.Path); err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
continue
}
ctx.SendGroupMessage(POOL.Group, []message.MessageSegment{message.Image(file(illust))})
ctx.SendGroupMessage(pool.Group, []message.MessageSegment{message.Image(file(illust))})
// 向缓冲池添加一张图片
POOL.Push(type_, illust)
pool.push(type_, illust)
time.Sleep(time.Second * 1)
}
}()
// 如果没有缓存阻塞5秒
if POOL.Size(type_) == 0 {
if pool.size(type_) == 0 {
ctx.SendChain(message.Text("INFO: 正在填充弹药......"))
<-time.After(time.Second * 5)
if POOL.Size(type_) == 0 {
if pool.size(type_) == 0 {
ctx.SendChain(message.Text("ERROR: 等待填充,请稍后再试......"))
return
}
}
// 从缓冲池里抽一张
if id := ctx.SendChain(message.Image(file(POOL.Pop(type_)))); id == 0 {
if id := ctx.SendChain(message.Image(file(pool.pop(type_)))); id == 0 {
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
}
return
})
zero.OnRegex(`^添加(.*?)(\d+)$`, firstValueInList(POOL.List), zero.SuperUserPermission).SetBlock(true).SetPriority(21).
zero.OnRegex(`^添加(.*?)(\d+)$`, firstValueInList(pool.List), zero.SuperUserPermission).SetBlock(true).SetPriority(21).
Handle(func(ctx *zero.Ctx) {
var (
type_ = ctx.State["regex_matched"].([]string)[1]
@ -115,7 +115,7 @@ func init() { // 插件主体
return
}
// 下载插画
if _, err := download(illust, POOL.Path); err != nil {
if _, err := download(illust, pool.Path); err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
@ -125,7 +125,7 @@ func init() { // 插件主体
return
}
// 添加插画到对应的数据库table
if err := POOL.DB.Insert(type_, illust); err != nil {
if err := pool.DB.insert(type_, illust); err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
@ -133,14 +133,14 @@ func init() { // 插件主体
return
})
zero.OnRegex(`^删除(.*?)(\d+)$`, firstValueInList(POOL.List), zero.SuperUserPermission).SetBlock(true).SetPriority(22).
zero.OnRegex(`^删除(.*?)(\d+)$`, firstValueInList(pool.List), zero.SuperUserPermission).SetBlock(true).SetPriority(22).
Handle(func(ctx *zero.Ctx) {
var (
type_ = ctx.State["regex_matched"].([]string)[1]
id, _ = strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64)
)
// 查询数据库
if err := POOL.DB.Delete(type_, fmt.Sprintf("WHERE pid=%d", id)); err != nil {
if err := pool.DB.del(type_, fmt.Sprintf("WHERE pid=%d", id)); err != nil {
ctx.Send(fmt.Sprintf("ERROR: %v", err))
return
}
@ -152,13 +152,13 @@ func init() { // 插件主体
zero.OnFullMatchGroup([]string{">setu status"}).SetBlock(true).SetPriority(23).
Handle(func(ctx *zero.Ctx) {
state := []string{"[SetuTime]"}
for i := range POOL.List {
num, err := POOL.DB.Num(POOL.List[i])
for i := range pool.List {
num, err := pool.DB.num(pool.List[i])
if err != nil {
num = 0
}
state = append(state, "\n")
state = append(state, POOL.List[i])
state = append(state, pool.List[i])
state = append(state, ": ")
state = append(state, fmt.Sprintf("%d", num))
}
@ -192,28 +192,28 @@ func min(a, b int) int {
}
}
// Size 返回缓冲池指定类型的现有大小
func (p *Pool) Size(type_ string) int {
// size 返回缓冲池指定类型的现有大小
func (p *imgpool) size(type_ string) int {
return len(p.Pool[type_])
}
// IsFull 返回缓冲池指定类型是否已满
func (p *Pool) IsFull(type_ string) bool {
// isFull 返回缓冲池指定类型是否已满
func (p *imgpool) isFull(type_ string) bool {
return len(p.Pool[type_]) >= p.Max
}
// Push 向缓冲池插入一张图片
func (p *Pool) Push(type_ string, illust *pixiv.Illust) {
// push 向缓冲池插入一张图片
func (p *imgpool) push(type_ string, illust *pixiv.Illust) {
p.Lock.Lock()
defer p.Lock.Unlock()
p.Pool[type_] = append(p.Pool[type_], illust)
}
// Push 在缓冲池拿出一张图片
func (p *Pool) Pop(type_ string) (illust *pixiv.Illust) {
func (p *imgpool) pop(type_ string) (illust *pixiv.Illust) {
p.Lock.Lock()
defer p.Lock.Unlock()
if p.Size(type_) == 0 {
if p.size(type_) == 0 {
return
}
illust = p.Pool[type_][0]
@ -224,7 +224,7 @@ func (p *Pool) Pop(type_ string) (illust *pixiv.Illust) {
func file(i *pixiv.Illust) string {
filename := fmt.Sprint(i.Pid)
pwd, _ := os.Getwd()
filepath := pwd + `/` + POOL.Path + filename
filepath := pwd + `/` + pool.Path + filename
if _, err := os.Stat(filepath + ".jpg"); err == nil || os.IsExist(err) {
return `file:///` + filepath + ".jpg"
}

View File

@ -1,4 +1,4 @@
package plugin_setutime
package setutime
import (
"database/sql"
@ -8,16 +8,16 @@ import (
_ "modernc.org/sqlite"
)
// Sqlite 数据库对象
type Sqlite struct {
// sqlite 数据库对象
type sqlite struct {
DB *sql.DB
DBPath string
}
// Create 生成数据库
// create 生成数据库
// 默认结构体的第一个元素为主键
// 返回错误
func (db *Sqlite) Create(table string, objptr interface{}) (err error) {
func (db *sqlite) create(table string, objptr interface{}) (err error) {
if db.DB == nil {
database, err := sql.Open("sqlite", db.DBPath)
if err != nil {
@ -53,10 +53,10 @@ func (db *Sqlite) Create(table string, objptr interface{}) (err error) {
return nil
}
// Insert 插入数据集
// insert 插入数据集
// 默认结构体的第一个元素为主键
// 返回错误
func (db *Sqlite) Insert(table string, objptr interface{}) (err error) {
func (db *sqlite) insert(table string, objptr interface{}) (err error) {
rows, err := db.DB.Query("SELECT * FROM " + table)
if err != nil {
return err
@ -109,11 +109,11 @@ func (db *Sqlite) Insert(table string, objptr interface{}) (err error) {
return nil
}
// Select 查询数据库
// find 查询数据库
// condition 可为"WHERE id = 0"
// 默认字段与结构体元素顺序一致
// 返回错误
func (db *Sqlite) Select(table string, objptr interface{}, condition string) (err error) {
func (db *sqlite) find(table string, objptr interface{}, condition string) (err error) {
var cmd = []string{}
cmd = append(cmd, "SELECT * FROM ")
cmd = append(cmd, table)
@ -136,10 +136,10 @@ func (db *Sqlite) Select(table string, objptr interface{}, condition string) (er
return nil
}
// Delete 删除数据库
// del 删除数据库
// condition 可为"WHERE id = 0"
// 返回错误
func (db *Sqlite) Delete(table string, condition string) (err error) {
func (db *sqlite) del(table string, condition string) (err error) {
var cmd = []string{}
cmd = append(cmd, "DELETE FROM")
cmd = append(cmd, table)
@ -155,9 +155,9 @@ func (db *Sqlite) Delete(table string, condition string) (err error) {
return nil
}
// Num 查询数据库行数
// num 查询数据库行数
// 返回行数以及错误
func (db *Sqlite) Num(table string) (num int, err error) {
func (db *sqlite) num(table string) (num int, err error) {
var cmd = []string{}
cmd = append(cmd, "SELECT * FROM")
cmd = append(cmd, table)

View File

@ -1,7 +1,8 @@
/*
Package shindan
基于 https://shindanmaker.com 的测定小功能
*/
package plugin_shindan
package shindan
import (
"strconv"