mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 13:59:39 +08:00
153 lines
4.7 KiB
Go
153 lines
4.7 KiB
Go
package setutime
|
|
|
|
import (
|
|
utils "bot/setutime/utils"
|
|
|
|
zero "github.com/wdvxdr1123/ZeroBot"
|
|
)
|
|
|
|
func init() {
|
|
zero.RegisterPlugin(picSearch{}) // 注册插件
|
|
}
|
|
|
|
type picSearch struct{} // pixivSearch 搜索P站插图
|
|
|
|
func (_ picSearch) GetPluginInfo() zero.PluginInfo { // 返回插件信息
|
|
return zero.PluginInfo{
|
|
Author: "kanri",
|
|
PluginName: "PicSearch",
|
|
Version: "0.0.1",
|
|
Details: "以图搜图",
|
|
}
|
|
}
|
|
|
|
func (_ picSearch) Start() { // 插件主体
|
|
// TODO 根据PID搜图
|
|
zero.OnRegex(`搜图(\d+)`).SetBlock(true).SetPriority(30).
|
|
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
|
|
id := utils.Str2Int(state["regex_matched"].([]string)[1])
|
|
zero.Send(event, "少女祈祷中......")
|
|
// TODO 获取P站插图信息
|
|
illust := &utils.Illust{}
|
|
if err := illust.IllustInfo(id); err != nil {
|
|
utils.SendError(event, err)
|
|
return zero.FinishResponse
|
|
}
|
|
// TODO 下载P站插图
|
|
if _, err := illust.PixivPicDown(CACHEPATH); err != nil {
|
|
utils.SendError(event, err)
|
|
return zero.FinishResponse
|
|
}
|
|
// TODO 发送搜索结果
|
|
zero.Send(event, illust.DetailPic)
|
|
return zero.FinishResponse
|
|
})
|
|
// TODO 通过回复以图搜图
|
|
zero.OnRegex(`\[CQ:reply,id=(.*?)\](.*)搜索图片`).SetBlock(true).SetPriority(32).
|
|
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
|
|
var pics []string // 图片搜索池子
|
|
// TODO 获取回复的上文图片链接
|
|
id := utils.Str2Int(state["regex_matched"].([]string)[1])
|
|
for _, elem := range zero.GetMessage(id).Elements {
|
|
if elem.Type == "image" {
|
|
pics = append(pics, elem.Data["url"])
|
|
}
|
|
}
|
|
// TODO 没有收到图片则向用户索取
|
|
if len(pics) == 0 {
|
|
zero.Send(event, "请发送多张图片!")
|
|
next := matcher.FutureEvent("message", zero.CheckUser(event.UserID))
|
|
recv, cancel := next.Repeat()
|
|
for e := range recv { // 循环获取channel发来的信息
|
|
if len(e.Message) == 1 && e.Message[0].Type == "text" {
|
|
cancel() // 如果是纯文本则退出索取
|
|
break
|
|
}
|
|
for _, elem := range e.Message {
|
|
if elem.Type == "image" { // 将信息中的图片添加到搜索池子
|
|
pics = append(pics, elem.Data["url"])
|
|
}
|
|
}
|
|
if len(pics) >= 5 {
|
|
cancel() // 如果是图片数量大于等于5则退出索取
|
|
break
|
|
}
|
|
}
|
|
}
|
|
if len(pics) == 0 {
|
|
zero.Send(event, "没有收到图片,搜图结束......")
|
|
return zero.FinishResponse
|
|
}
|
|
// TODO 开始搜索图片
|
|
zero.Send(event, "少女祈祷中......")
|
|
for _, pic := range pics {
|
|
if text, err := utils.SauceNaoSearch(pic); err == nil {
|
|
zero.Send(event, text) // 返回SauceNAO的结果
|
|
continue
|
|
} else {
|
|
utils.SendError(event, err)
|
|
}
|
|
if text, err := utils.Ascii2dSearch(pic); err == nil {
|
|
zero.Send(event, text) // 返回Ascii2d的结果
|
|
continue
|
|
} else {
|
|
utils.SendError(event, err)
|
|
}
|
|
}
|
|
return zero.FinishResponse
|
|
})
|
|
// TODO 通过命令以图搜图
|
|
zero.OnKeywordGroup([]string{"以图识图", "以图搜图", "搜索图片"}).SetBlock(true).SetPriority(33).
|
|
Handle(func(matcher *zero.Matcher, event zero.Event, state zero.State) zero.Response {
|
|
var pics []string // 图片搜索池子
|
|
// TODO 获取信息中图片链接
|
|
for _, elem := range event.Message {
|
|
if elem.Type == "image" {
|
|
pics = append(pics, elem.Data["url"])
|
|
}
|
|
}
|
|
// TODO 没有收到图片则向用户索取
|
|
if len(pics) == 0 {
|
|
zero.Send(event, "请发送多张图片!")
|
|
next := matcher.FutureEvent("message", zero.CheckUser(event.UserID))
|
|
recv, cancel := next.Repeat()
|
|
for e := range recv { // 循环获取channel发来的信息
|
|
if len(e.Message) == 1 && e.Message[0].Type == "text" {
|
|
cancel() // 如果是纯文本则退出索取
|
|
break
|
|
}
|
|
for _, elem := range e.Message {
|
|
if elem.Type == "image" { // 将信息中的图片添加到搜索池子
|
|
pics = append(pics, elem.Data["url"])
|
|
}
|
|
}
|
|
if len(pics) >= 5 {
|
|
cancel() // 如果是图片数量大于等于5则退出索取
|
|
break
|
|
}
|
|
}
|
|
}
|
|
if len(pics) == 0 {
|
|
zero.Send(event, "没有收到图片,搜图结束......")
|
|
return zero.FinishResponse
|
|
}
|
|
// TODO 开始搜索图片
|
|
zero.Send(event, "少女祈祷中......")
|
|
for _, pic := range pics {
|
|
if text, err := utils.SauceNaoSearch(pic); err == nil {
|
|
zero.Send(event, text) // 返回SauceNAO的结果
|
|
continue
|
|
} else {
|
|
utils.SendError(event, err)
|
|
}
|
|
if text, err := utils.Ascii2dSearch(pic); err == nil {
|
|
zero.Send(event, text) // 返回Ascii2d的结果
|
|
continue
|
|
} else {
|
|
utils.SendError(event, err)
|
|
}
|
|
}
|
|
return zero.FinishResponse
|
|
})
|
|
}
|