Add plugin setutime

This commit is contained in:
Yiwen-Chan
2021-02-14 19:15:47 +08:00
parent 2ad5102297
commit e667720694
10 changed files with 1301 additions and 0 deletions

339
setutime/setu_geter.go Normal file
View File

@@ -0,0 +1,339 @@
package setutime
import (
"errors"
"fmt"
utils "bot/setutime/utils"
zero "github.com/wdvxdr1123/ZeroBot"
)
type setuGet struct{} // setuGet 来份色图
func (_ setuGet) GetPluginInfo() zero.PluginInfo { // 返回插件信息
return zero.PluginInfo{
Author: "kanri",
PluginName: "SetuGet",
Version: "0.0.1",
Details: "来份色图",
}
}
var (
BOTPATH = utils.PathExecute() // 当前bot运行目录
DATAPATH = BOTPATH + "data/SetuTime/" // 数据目录
DBPATH = DATAPATH + "SetuTime.db" // 数据库路径
CACHEPATH = DATAPATH + "cache/" // 缓冲图片路径
DB = utils.Sqlite{DBPath: DBPATH} // 涩图数据库
pool = utils.PicsCache{Max: 10} // 图片缓冲池子
)
func init() {
zero.RegisterPlugin(setuGet{}) // 注册插件
utils.CACHE_GROUP = 868047498 // 图片缓冲群
utils.CACHEPATH = CACHEPATH // 缓冲图片路径
utils.CreatePath(DBPATH)
utils.CreatePath(CACHEPATH)
ecy := &ecy{}
setu := &setu{}
scenery := &scenery{}
DB.DBCreate(ecy)
DB.DBCreate(setu)
DB.DBCreate(scenery)
}
// ecy 二次元
type ecy struct {
utils.Illust
}
// setu 涩图
type setu struct {
utils.Illust
}
// scenery 风景
type scenery struct {
utils.Illust
}
func (_ setuGet) Start() { // 插件主体
zero.OnFullMatchGroup([]string{"来份涩图", "setu", "来份色图"}).SetBlock(true).SetPriority(20).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
var (
type_ = "setu"
illust = &setu{}
)
// TODO 池子无图片则立刻下载
length := illust.Len(type_, &pool)
if length == 0 {
zero.Send(event, "[SetuTime] 正在填充弹药......")
if err := DB.DBSelect(illust, "ORDER BY RANDOM() limit 1"); err != nil {
utils.SendError(event, err) // 查询出一张图片
return zero.FinishResponse
}
if err := illust.Add(type_, &pool); err != nil {
utils.SendError(event, err) // 向缓冲池添加一张图片
return zero.FinishResponse
}
}
// TODO 补充池子
go func() {
times := utils.Min(pool.Max-length, 2)
for i := 0; i < times; i++ {
if err := DB.DBSelect(illust, "ORDER BY RANDOM() limit 1"); err != nil {
utils.SendError(event, err) // 查询出一张图片
}
if err := illust.Add(type_, &pool); err != nil {
utils.SendError(event, err) // 向缓冲池添加一张图片
}
}
}()
// TODO 从缓冲池里抽一张
hash := illust.Get(type_, &pool)
if utils.XML {
if id := zero.Send(event, illust.BigPic(hash)); id == 0 {
utils.SendError(event, errors.New("可能被风控了"))
}
} else {
if id := zero.Send(event, illust.NormalPic()); id == 0 {
utils.SendError(event, errors.New("可能被风控了"))
}
}
return zero.FinishResponse
})
zero.OnFullMatchGroup([]string{"二次元", "ecy", "来份二次元"}).SetBlock(true).SetPriority(20).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
var (
type_ = "ecy"
illust = &ecy{}
)
// TODO 池子无图片则立刻下载
length := illust.Len(type_, &pool)
if length == 0 {
zero.Send(event, "[SetuTime] 正在填充弹药......")
if err := DB.DBSelect(illust, "ORDER BY RANDOM() limit 1"); err != nil {
utils.SendError(event, err) // 查询出一张图片
return zero.FinishResponse
}
if err := illust.Add(type_, &pool); err != nil {
utils.SendError(event, err) // 向缓冲池添加一张图片
return zero.FinishResponse
}
}
// TODO 补充池子
go func() {
times := utils.Min(pool.Max-length, 2)
for i := 0; i < times; i++ {
if err := DB.DBSelect(illust, "ORDER BY RANDOM() limit 1"); err != nil {
utils.SendError(event, err) // 查询出一张图片
}
if err := illust.Add(type_, &pool); err != nil {
utils.SendError(event, err) // 向缓冲池添加一张图片
}
}
}()
// TODO 从缓冲池里抽一张
hash := illust.Get(type_, &pool)
if utils.XML {
if id := zero.Send(event, illust.BigPic(hash)); id == 0 {
utils.SendError(event, errors.New("可能被风控了"))
}
} else {
if id := zero.Send(event, illust.NormalPic()); id == 0 {
utils.SendError(event, errors.New("可能被风控了"))
}
}
return zero.FinishResponse
})
zero.OnFullMatchGroup([]string{"风景", "来份风景"}).SetBlock(true).SetPriority(20).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
var (
type_ = "scenery"
illust = &scenery{}
)
// TODO 池子无图片则立刻下载
length := illust.Len(type_, &pool)
if length == 0 {
zero.Send(event, "[SetuTime] 正在填充弹药......")
if err := DB.DBSelect(illust, "ORDER BY RANDOM() limit 1"); err != nil {
utils.SendError(event, err) // 查询出一张图片
return zero.FinishResponse
}
if err := illust.Add(type_, &pool); err != nil {
utils.SendError(event, err) // 向缓冲池添加一张图片
return zero.FinishResponse
}
}
// TODO 补充池子
go func() {
times := utils.Min(pool.Max-length, 2)
for i := 0; i < times; i++ {
if err := DB.DBSelect(illust, "ORDER BY RANDOM() limit 1"); err != nil {
utils.SendError(event, err) // 查询出一张图片
}
if err := illust.Add(type_, &pool); err != nil {
utils.SendError(event, err) // 向缓冲池添加一张图片
}
}
}()
// TODO 从缓冲池里抽一张
hash := illust.Get(type_, &pool)
if utils.XML {
if id := zero.Send(event, illust.BigPic(hash)); id == 0 {
utils.SendError(event, errors.New("可能被风控了"))
}
} else {
if id := zero.Send(event, illust.NormalPic()); id == 0 {
utils.SendError(event, errors.New("可能被风控了"))
}
}
return zero.FinishResponse
})
zero.OnRegex(`添加涩图(\d+)`, zero.SuperUserPermission).SetBlock(true).SetPriority(21).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
var illust = &setu{}
zero.Send(event, "少女祈祷中......")
// TODO 查询P站插图信息
id := utils.Str2Int(state["regex_matched"].([]string)[1])
if err := illust.IllustInfo(id); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
// TODO 下载插画
if _, err := illust.PixivPicDown(CACHEPATH); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
if id := zero.Send(event, illust.DetailPic()); id == 0 {
utils.SendError(event, errors.New("可能被风控了"))
return zero.FinishResponse
}
// TODO 添加插画到对应的数据库table
if err := DB.DBInsert(illust); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
zero.Send(event, "添加成功")
return zero.FinishResponse
})
zero.OnRegex(`添加二次元(\d+)`, zero.SuperUserPermission).SetBlock(true).SetPriority(21).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
var illust = &ecy{}
zero.Send(event, "少女祈祷中......")
// TODO 查询P站插图信息
id := utils.Str2Int(state["regex_matched"].([]string)[1])
if err := illust.IllustInfo(id); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
// TODO 下载插画
if _, err := illust.PixivPicDown(CACHEPATH); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
if id := zero.Send(event, illust.DetailPic()); id == 0 {
utils.SendError(event, errors.New("可能被风控了"))
return zero.FinishResponse
}
// TODO 添加插画到对应的数据库table
if err := DB.DBInsert(illust); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
zero.Send(event, "添加成功")
return zero.FinishResponse
})
zero.OnRegex(`添加风景(\d+)`, zero.SuperUserPermission).SetBlock(true).SetPriority(21).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
var illust = &scenery{}
zero.Send(event, "少女祈祷中......")
// TODO 查询P站插图信息
id := utils.Str2Int(state["regex_matched"].([]string)[1])
if err := illust.IllustInfo(id); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
// TODO 下载插画
if _, err := illust.PixivPicDown(CACHEPATH); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
if id := zero.Send(event, illust.DetailPic()); id == 0 {
utils.SendError(event, errors.New("可能被风控了"))
return zero.FinishResponse
}
// TODO 添加插画到对应的数据库table
if err := DB.DBInsert(illust); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
zero.Send(event, "添加成功")
return zero.FinishResponse
})
zero.OnRegex(`删除涩图(\d+)`, zero.SuperUserPermission).SetBlock(true).SetPriority(22).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
var illust = &setu{}
// TODO 查询数据库
id := utils.Str2Int(state["regex_matched"].([]string)[1])
if err := DB.DBDelete(illust, fmt.Sprintf("WHERE pid=%d", id)); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
zero.Send(event, "删除成功")
return zero.FinishResponse
})
zero.OnRegex(`删除二次元(\d+)`, zero.SuperUserPermission).SetBlock(true).SetPriority(22).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
var illust = &ecy{}
// TODO 查询数据库
id := utils.Str2Int(state["regex_matched"].([]string)[1])
if err := DB.DBDelete(illust, fmt.Sprintf("WHERE pid=%d", id)); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
zero.Send(event, "删除成功")
return zero.FinishResponse
})
zero.OnRegex(`删除风景(\d+)`, zero.SuperUserPermission).SetBlock(true).SetPriority(22).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
var illust = &scenery{}
// TODO 查询数据库
id := utils.Str2Int(state["regex_matched"].([]string)[1])
if err := DB.DBDelete(illust, fmt.Sprintf("WHERE pid=%d", id)); err != nil {
utils.SendError(event, err)
return zero.FinishResponse
}
zero.Send(event, "删除成功")
return zero.FinishResponse
})
// TODO 查询数据库涩图数量
zero.OnFullMatchGroup([]string{"setu -s", "setu --status"}, zero.SuperUserPermission).SetBlock(true).SetPriority(23).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
setu, _ := DB.DBNum(&setu{})
ecy, _ := DB.DBNum(&ecy{})
scenery, _ := DB.DBNum(&scenery{})
zero.Send(event, fmt.Sprintf("[SetuTime] \n风景%d \n二次元%d \n涩图%d", scenery, ecy, setu))
return zero.FinishResponse
})
// TODO 开xml模式
zero.OnFullMatchGroup([]string{"setu -x", "setu --xml"}, zero.AdminPermission).SetBlock(true).SetPriority(24).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
utils.XML = true
zero.Send(event, "[SetuTime] XML->ON")
return zero.FinishResponse
})
// TODO 关xml模式
zero.OnFullMatchGroup([]string{"setu -p", "setu --pic"}, zero.AdminPermission).SetBlock(true).SetPriority(24).
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
utils.XML = false
zero.Send(event, "[SetuTime] XML->OFF")
return zero.FinishResponse
})
}