Skip to content

Commit

Permalink
分离搜图与随机图(随机图需要cgo而搜图不用)
Browse files Browse the repository at this point in the history
  • Loading branch information
fumiama committed Jun 4, 2021
1 parent c199a0a commit 08b2102
Show file tree
Hide file tree
Showing 10 changed files with 82 additions and 70 deletions.
2 changes: 1 addition & 1 deletion setutime/utils/download.go → api/pixiv/download.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package utils
package pixiv

import (
"crypto/md5"
Expand Down
45 changes: 44 additions & 1 deletion setutime/utils/pixiv_api.go → api/pixiv/pixiv_api.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package utils
package pixiv

import (
"crypto/tls"
Expand Down Expand Up @@ -92,3 +92,46 @@ func (this *Illust) IllustInfo(id int64) (err error) {
this.UserName = json.Get("userName").Str
return nil
}

// BigPic 返回一张XML大图CQ码
func (i *Illust) BigPic(file string) string {
var hash = PicHash(file)
return fmt.Sprintf(`[CQ:xml,data=<?xml version='1.0'
encoding='UTF-8' standalone='yes' ?><msg serviceID="5"
templateID="12345" action="" brief="不够涩!"
sourceMsgId="0" url="" flag="0" adverSign="0" multiMsgFlag="0">
<item layout="0" advertiser_id="0" aid="0"><image uuid="%s.jpg" md5="%s"
GroupFiledid="2235033681" filesize="81322" local_path="%s.jpg"
minWidth="200" minHeight="200" maxWidth="500" maxHeight="1000" />
</item><source name="%s⭐(id:%d author:%s)" icon=""
action="" appid="-1" /></msg>]`,
hash,
hash,
hash,
i.Title,
i.Pid,
i.UserName,
)
}

// NormalPic 返回一张普通图CQ码
func (i *Illust) NormalPic(file string) string {
return fmt.Sprintf(`[CQ:image,file=file:///%s]`, file)
}

// DetailPic 返回一张带详细信息的图片CQ码
func (i *Illust) DetailPic(file string) string {
return fmt.Sprintf(`[SetuTime] %s
标题:%s
插画ID:%d
画师:%s
画师ID:%d
直链:https://pixivel.moe/detail?id=%d`,
i.NormalPic(file),
i.Title,
i.Pid,
i.UserName,
i.UserId,
i.Pid,
)
}
2 changes: 1 addition & 1 deletion setutime/utils/utils.go → api/pixiv/utils.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package utils
package pixiv

import (
"os"
Expand Down
2 changes: 1 addition & 1 deletion build_mips.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ go env -w GO111MODULE=auto
go mod tidy
export CCBIN=~/openwrt_with_lean_packages/staging_dir/toolchain-mips_24kc_gcc-8.4.0_musl/bin/mips-openwrt-linux-musl-gcc
export CXXBIN=~/openwrt_with_lean_packages/staging_dir/toolchain-mips_24kc_gcc-8.4.0_musl/bin/mips-openwrt-linux-musl-g++
GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=1 CC=${CCBIN} CXX=${CXXBIN} go build -ldflags "-s -w" -o zerobot
GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=0 CC=${CCBIN} CXX=${CXXBIN} go build -ldflags "-s -w" -o zerobot
9 changes: 5 additions & 4 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@ import (
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/runcode" // 在线运行代码

// 娱乐类
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/music" // 点歌
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/randimg" //简易随机图片
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/setutime" // 涩图
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/shindan" // 测定
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/music" // 点歌
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/picsearcher" // 搜图
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/randimg" //简易随机图片
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/setutime" // 涩图
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/shindan" // 测定
)

func init() {
Expand Down
15 changes: 11 additions & 4 deletions setutime/pic_searcher.go → picsearcher/pic_searcher.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package setutime
package picsearcher

import (
"fmt"
Expand All @@ -9,17 +9,24 @@ import (
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"

utils "github.com/Yiwen-Chan/ZeroBot-Plugin/setutime/utils"
"github.com/Yiwen-Chan/ZeroBot-Plugin/api/pixiv"
utils "github.com/Yiwen-Chan/ZeroBot-Plugin/picsearcher/utils"
)

var (
BOTPATH = pixiv.PathExecute() // 当前bot运行目录
DATAPATH = BOTPATH + "data/SetuTime/" // 数据目录
CACHEPATH = DATAPATH + "cache/" // 缓冲图片路径
)

func init() { // 插件主体
// 根据PID搜图
zero.OnRegex(`^搜图(\d+)$`).SetBlock(true).SetPriority(30).
Handle(func(ctx *zero.Ctx) {
id := utils.Str2Int(ctx.State["regex_matched"].([]string)[1])
id := pixiv.Str2Int(ctx.State["regex_matched"].([]string)[1])
ctx.Send("少女祈祷中......")
// 获取P站插图信息
illust := &utils.Illust{}
illust := &pixiv.Illust{}
if err := illust.IllustInfo(id); err != nil {
ctx.Send(fmt.Sprintf("ERROR: %v", err))
return
Expand Down
5 changes: 3 additions & 2 deletions setutime/utils/ascii2d.go → picsearcher/utils/ascii2d.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"net/url"
"strings"

"github.com/Yiwen-Chan/ZeroBot-Plugin/api/pixiv"
xpath "github.com/antchfx/htmlquery"
"github.com/wdvxdr1123/ZeroBot/message"
)
Expand Down Expand Up @@ -71,12 +72,12 @@ func Ascii2dSearch(pic string) (message.Message, error) {
if link == "" || index == -1 {
return nil, fmt.Errorf("Ascii2d not found")
}
var id = Str2Int(link[index+1:])
var id = pixiv.Str2Int(link[index+1:])
if id == 0 {
return nil, fmt.Errorf("convert to pid error")
}
// 根据PID查询插图信息
var illust = &Illust{}
var illust = &pixiv.Illust{}
if err := illust.IllustInfo(id); err != nil {
return nil, err
}
Expand Down
File renamed without changes.
19 changes: 10 additions & 9 deletions setutime/setu_geter.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ import (
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"

"github.com/Yiwen-Chan/ZeroBot-Plugin/api/pixiv"
"github.com/Yiwen-Chan/ZeroBot-Plugin/setutime/utils"
)

var limit = rate.NewManager(time.Minute*1, 5)

var (
BOTPATH = utils.PathExecute() // 当前bot运行目录
BOTPATH = pixiv.PathExecute() // 当前bot运行目录
DATAPATH = BOTPATH + "data/SetuTime/" // 数据目录
DBPATH = DATAPATH + "SetuTime.db" // 数据库路径

Expand All @@ -33,11 +34,11 @@ func init() {
PoolsCache.Group = CACHEGROUP // 图片缓冲群
PoolsCache.Path = CACHEPATH // 缓冲图片路径

utils.CreatePath(DBPATH)
utils.CreatePath(CACHEPATH)
pixiv.CreatePath(DBPATH)
pixiv.CreatePath(CACHEPATH)

for i := range PoolList {
if err := DB.Create(PoolList[i], &utils.Illust{}); err != nil {
if err := DB.Create(PoolList[i], &pixiv.Illust{}); err != nil {
panic(err)
}
}
Expand All @@ -53,9 +54,9 @@ func init() { // 插件主体
var type_ = ctx.State["regex_matched"].([]string)[1]
// 补充池子
go func() {
times := utils.Min(PoolsCache.Max-PoolsCache.Size(type_), 2)
times := pixiv.Min(PoolsCache.Max-PoolsCache.Size(type_), 2)
for i := 0; i < times; i++ {
illust := &utils.Illust{}
illust := &pixiv.Illust{}
// 查询出一张图片
if err := DB.Select(type_, illust, "ORDER BY RANDOM() limit 1"); err != nil {
ctx.Send(fmt.Sprintf("ERROR: %v", err))
Expand Down Expand Up @@ -96,8 +97,8 @@ func init() { // 插件主体
Handle(func(ctx *zero.Ctx) {
var (
type_ = ctx.State["regex_matched"].([]string)[1]
id = utils.Str2Int(ctx.State["regex_matched"].([]string)[2])
illust = &utils.Illust{}
id = pixiv.Str2Int(ctx.State["regex_matched"].([]string)[2])
illust = &pixiv.Illust{}
)
ctx.Send("少女祈祷中......")
// 查询P站插图信息
Expand Down Expand Up @@ -129,7 +130,7 @@ func init() { // 插件主体
Handle(func(ctx *zero.Ctx) {
var (
type_ = ctx.State["regex_matched"].([]string)[1]
id = utils.Str2Int(ctx.State["regex_matched"].([]string)[2])
id = pixiv.Str2Int(ctx.State["regex_matched"].([]string)[2])
)
// 查询数据库
if err := DB.Delete(type_, fmt.Sprintf("WHERE pid=%d", id)); err != nil {
Expand Down
53 changes: 6 additions & 47 deletions setutime/utils/pic_pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package utils
import (
"fmt"
"sync"

"github.com/Yiwen-Chan/ZeroBot-Plugin/api/pixiv"
)

// PoolsCache 图片缓冲池
Expand All @@ -11,7 +13,7 @@ type PoolsCache struct {
Max int
Path string
Group int64
Pool map[string][]*Illust
Pool map[string][]*pixiv.Illust
}

// NewPoolsCache 返回一个缓冲池对象
Expand All @@ -20,7 +22,7 @@ func NewPoolsCache() *PoolsCache {
Max: 10,
Path: "./data/SetuTime/cache/",
Group: 1048452984,
Pool: map[string][]*Illust{},
Pool: map[string][]*pixiv.Illust{},
}
}

Expand All @@ -35,15 +37,15 @@ func (p *PoolsCache) IsFull(type_ string) bool {
}

// Push 向缓冲池插入一张图片,返回错误
func (p *PoolsCache) Push(type_ string, illust *Illust) (err error) {
func (p *PoolsCache) Push(type_ string, illust *pixiv.Illust) (err error) {
p.Lock.Lock()
defer p.Lock.Unlock()
p.Pool[type_] = append(p.Pool[type_], illust)
return nil
}

// Push 在缓冲池拿出一张图片,返回错误
func (p *PoolsCache) Pop(type_ string) (illust *Illust) {
func (p *PoolsCache) Pop(type_ string) (illust *pixiv.Illust) {
p.Lock.Lock()
defer p.Lock.Unlock()
if p.Size(type_) == 0 {
Expand All @@ -69,46 +71,3 @@ func (p *PoolsCache) GetOnePic(type_ string, form string) string {
return illust.NormalPic(file)
}
}

// BigPic 返回一张XML大图CQ码
func (i *Illust) BigPic(file string) string {
var hash = PicHash(file)
return fmt.Sprintf(`[CQ:xml,data=<?xml version='1.0'
encoding='UTF-8' standalone='yes' ?><msg serviceID="5"
templateID="12345" action="" brief="不够涩!"
sourceMsgId="0" url="" flag="0" adverSign="0" multiMsgFlag="0">
<item layout="0" advertiser_id="0" aid="0"><image uuid="%s.jpg" md5="%s"
GroupFiledid="2235033681" filesize="81322" local_path="%s.jpg"
minWidth="200" minHeight="200" maxWidth="500" maxHeight="1000" />
</item><source name="%s⭐(id:%d author:%s)" icon=""
action="" appid="-1" /></msg>]`,
hash,
hash,
hash,
i.Title,
i.Pid,
i.UserName,
)
}

// NormalPic 返回一张普通图CQ码
func (i *Illust) NormalPic(file string) string {
return fmt.Sprintf(`[CQ:image,file=file:///%s]`, file)
}

// DetailPic 返回一张带详细信息的图片CQ码
func (i *Illust) DetailPic(file string) string {
return fmt.Sprintf(`[SetuTime] %s
标题:%s
插画ID:%d
画师:%s
画师ID:%d
直链:https://pixivel.moe/detail?id=%d`,
i.NormalPic(file),
i.Title,
i.Pid,
i.UserName,
i.UserId,
i.Pid,
)
}

0 comments on commit 08b2102

Please sign in to comment.