diff --git a/api/msgext/msgext.go b/api/msgext/msgext.go
new file mode 100644
index 00000000..b0f1dacb
--- /dev/null
+++ b/api/msgext/msgext.go
@@ -0,0 +1,26 @@
+package msgext
+
+import (
+ "github.com/wdvxdr1123/ZeroBot/message"
+)
+
+//@全体成员
+func AtAll() message.MessageSegment {
+ return message.MessageSegment{
+ Type: "at",
+ Data: map[string]string{
+ "qq": "all",
+ },
+ }
+}
+
+//无缓存发送图片
+func ImageNoCache(url string) message.MessageSegment {
+ return message.MessageSegment{
+ Type: "image",
+ Data: map[string]string{
+ "file": url,
+ "cache": "0",
+ },
+ }
+}
diff --git a/setutime/utils/download.go b/api/pixiv/download.go
similarity index 99%
rename from setutime/utils/download.go
rename to api/pixiv/download.go
index 3c0ee9a7..3640e86b 100644
--- a/setutime/utils/download.go
+++ b/api/pixiv/download.go
@@ -1,4 +1,4 @@
-package utils
+package pixiv
import (
"crypto/md5"
diff --git a/setutime/utils/pixiv_api.go b/api/pixiv/pixiv_api.go
similarity index 67%
rename from setutime/utils/pixiv_api.go
rename to api/pixiv/pixiv_api.go
index 09a20307..7b027277 100644
--- a/setutime/utils/pixiv_api.go
+++ b/api/pixiv/pixiv_api.go
@@ -1,4 +1,4 @@
-package utils
+package pixiv
import (
"crypto/tls"
@@ -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=
+-
+
]`,
+ 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,
+ )
+}
diff --git a/setutime/utils/utils.go b/api/pixiv/utils.go
similarity index 96%
rename from setutime/utils/utils.go
rename to api/pixiv/utils.go
index 24d75f74..21e1733d 100644
--- a/setutime/utils/utils.go
+++ b/api/pixiv/utils.go
@@ -1,4 +1,4 @@
-package utils
+package pixiv
import (
"os"
@@ -39,7 +39,7 @@ func CreatePath(path string) {
//
}
if !PathExists(path) {
- err := os.MkdirAll(path, 0644)
+ err := os.MkdirAll(path, 0755)
if err != nil {
panic(err)
}
diff --git a/build_mips.sh b/build_mips.sh
new file mode 100755
index 00000000..98abb55e
--- /dev/null
+++ b/build_mips.sh
@@ -0,0 +1,7 @@
+go version
+go env -w GOPROXY=https://goproxy.cn,direct
+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=0 CC=${CCBIN} CXX=${CXXBIN} go build -ldflags "-s -w" -o zerobot
\ No newline at end of file
diff --git a/main.go b/main.go
index 84919165..a431de5f 100644
--- a/main.go
+++ b/main.go
@@ -2,6 +2,7 @@ package main
import (
"fmt"
+ "os"
log "github.com/sirupsen/logrus"
easy "github.com/t-tomalak/logrus-easy-formatter"
@@ -22,9 +23,11 @@ import (
_ "github.com/Yiwen-Chan/ZeroBot-Plugin/runcode" // 在线运行代码
// 娱乐类
- _ "github.com/Yiwen-Chan/ZeroBot-Plugin/music" // 点歌
- _ "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() {
@@ -47,7 +50,7 @@ func main() {
zero.Run(zero.Config{
NickName: []string{"椛椛", "ATRI", "atri", "亚托莉", "アトリ"},
CommandPrefix: "/",
- SuperUsers: []string{"825111790", "213864964"}, // 必须修改,否则无权限
+ SuperUsers: os.Args[1:], // 必须修改,否则无权限
Driver: []zero.Driver{
driver.NewWebSocketClient("127.0.0.1", "6700", ""),
},
diff --git a/manager/manager.go b/manager/manager.go
index 7e103974..31dbe9a8 100644
--- a/manager/manager.go
+++ b/manager/manager.go
@@ -4,6 +4,7 @@ import (
"strconv"
"strings"
+ "github.com/Yiwen-Chan/ZeroBot-Plugin/api/msgext"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
)
@@ -238,9 +239,9 @@ func init() { // 插件主体
if ts.enable {
go timer(ts, func() {
if ts.url == "" {
- ctx.SendChain(AtAll(), message.Text(ts.alert))
+ ctx.SendChain(msgext.AtAll(), message.Text(ts.alert))
} else {
- ctx.SendChain(AtAll(), message.Text(ts.alert), ImageNoCache(ts.url))
+ ctx.SendChain(msgext.AtAll(), message.Text(ts.alert), msgext.ImageNoCache(ts.url))
}
})
ctx.Send("记住了~")
diff --git a/manager/timer.go b/manager/timer.go
index a42916da..5bed7bae 100644
--- a/manager/timer.go
+++ b/manager/timer.go
@@ -6,8 +6,6 @@ import (
"strings"
"time"
"unicode"
-
- "github.com/wdvxdr1123/ZeroBot/message"
)
type TimeStamp struct {
@@ -175,24 +173,3 @@ func chineseChar2Int(c rune) int {
return 0
}
}
-
-//@全体成员
-func AtAll() message.MessageSegment {
- return message.MessageSegment{
- Type: "at",
- Data: map[string]string{
- "qq": "all",
- },
- }
-}
-
-//无缓存发送图片
-func ImageNoCache(url string) message.MessageSegment {
- return message.MessageSegment{
- Type: "image",
- Data: map[string]string{
- "file": url,
- "cache": "0",
- },
- }
-}
diff --git a/setutime/pic_searcher.go b/picsearcher/pic_searcher.go
similarity index 88%
rename from setutime/pic_searcher.go
rename to picsearcher/pic_searcher.go
index 5b9a6840..09904be3 100644
--- a/setutime/pic_searcher.go
+++ b/picsearcher/pic_searcher.go
@@ -1,4 +1,4 @@
-package setutime
+package picsearcher
import (
"fmt"
@@ -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
diff --git a/setutime/utils/ascii2d.go b/picsearcher/utils/ascii2d.go
similarity index 95%
rename from setutime/utils/ascii2d.go
rename to picsearcher/utils/ascii2d.go
index 82ecbec6..d4c3a6ef 100644
--- a/setutime/utils/ascii2d.go
+++ b/picsearcher/utils/ascii2d.go
@@ -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"
)
@@ -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
}
diff --git a/setutime/utils/saucenao.go b/picsearcher/utils/saucenao.go
similarity index 100%
rename from setutime/utils/saucenao.go
rename to picsearcher/utils/saucenao.go
diff --git a/randimg/setu_geter.go b/randimg/setu_geter.go
new file mode 100644
index 00000000..2bf3a960
--- /dev/null
+++ b/randimg/setu_geter.go
@@ -0,0 +1,36 @@
+package randimg
+
+import (
+ "strings"
+
+ "github.com/Yiwen-Chan/ZeroBot-Plugin/api/msgext"
+ zero "github.com/wdvxdr1123/ZeroBot"
+)
+
+var RANDOM_API_URL = "https://api.pixivweb.com/anime18r.php?return=img"
+var BLOCK_REQUEST = false
+
+func init() { // 插件主体
+ zero.OnRegex(`^设置随机图片网址(.*)$`, zero.SuperUserPermission).SetBlock(true).SetPriority(20).
+ Handle(func(ctx *zero.Ctx) {
+ url := ctx.State["regex_matched"].([]string)[1]
+ if !strings.HasPrefix(url, "http") {
+ ctx.Send("URL非法!")
+ } else {
+ RANDOM_API_URL = url
+ }
+ return
+ })
+ // 随机图片
+ zero.OnFullMatchGroup([]string{"随机图片"}).SetBlock(true).SetPriority(24).
+ Handle(func(ctx *zero.Ctx) {
+ if BLOCK_REQUEST {
+ ctx.Send("请稍后再试哦")
+ } else {
+ BLOCK_REQUEST = true
+ ctx.Send(msgext.ImageNoCache(RANDOM_API_URL))
+ BLOCK_REQUEST = false
+ }
+ return
+ })
+}
diff --git a/setutime/setu_geter.go b/setutime/setu_geter.go
index c8e4f0d5..cb0a44fa 100644
--- a/setutime/setu_geter.go
+++ b/setutime/setu_geter.go
@@ -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" // 数据库路径
@@ -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)
}
}
@@ -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))
@@ -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站插图信息
@@ -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 {
diff --git a/setutime/utils/pic_pool.go b/setutime/utils/pic_pool.go
index 7692a2bd..17ab21a0 100644
--- a/setutime/utils/pic_pool.go
+++ b/setutime/utils/pic_pool.go
@@ -3,6 +3,8 @@ package utils
import (
"fmt"
"sync"
+
+ "github.com/Yiwen-Chan/ZeroBot-Plugin/api/pixiv"
)
// PoolsCache 图片缓冲池
@@ -11,7 +13,7 @@ type PoolsCache struct {
Max int
Path string
Group int64
- Pool map[string][]*Illust
+ Pool map[string][]*pixiv.Illust
}
// NewPoolsCache 返回一个缓冲池对象
@@ -20,7 +22,7 @@ func NewPoolsCache() *PoolsCache {
Max: 10,
Path: "./data/SetuTime/cache/",
Group: 1048452984,
- Pool: map[string][]*Illust{},
+ Pool: map[string][]*pixiv.Illust{},
}
}
@@ -35,7 +37,7 @@ 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)
@@ -43,7 +45,7 @@ func (p *PoolsCache) Push(type_ string, illust *Illust) (err error) {
}
// 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 {
@@ -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=
--
-
]`,
- 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,
- )
-}
diff --git a/shindan/shindan.go b/shindan/shindan.go
index f1f776b2..b48f9a6b 100644
--- a/shindan/shindan.go
+++ b/shindan/shindan.go
@@ -119,6 +119,9 @@ func shindanmaker(id, name string) (string, error) {
return "", err
}
defer resp.Body.Close()
+ if resp.ContentLength <= 0 {
+ return "出错啦", nil
+ }
// 解析XPATH
doc, err := xpath.Parse(resp.Body)
if err != nil {