diff --git a/.github/workflows/golint.yml b/.github/workflows/golint.yml new file mode 100644 index 00000000..c07742d4 --- /dev/null +++ b/.github/workflows/golint.yml @@ -0,0 +1,31 @@ +name: PushLint +on: [push] +jobs: + golangci: + name: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: golangci-lint + uses: golangci/golangci-lint-action@v2 + with: + # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version + version: latest + + # Optional: working directory, useful for monorepos + # working-directory: somedir + + # Optional: golangci-lint command line arguments. + # args: --issues-exit-code=0 + + # Optional: show only new issues if it's a pull request. The default value is `false`. + # only-new-issues: true + + # Optional: if set to true then the action will use pre-installed Go. + # skip-go-installation: true + + # Optional: if set to true then the action don't cache or restore ~/go/pkg. + # skip-pkg-cache: true + + # Optional: if set to true then the action don't cache or restore ~/.cache/go-build. + # skip-build-cache: true diff --git a/.gitignore b/.gitignore index e063b380..9842d743 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,3 @@ data/manager .idea/ .DS_Store .vscode -.github/workflows/golint.yml diff --git a/.golangci.yml b/.golangci.yml index c26e2510..cc973e9c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -4,7 +4,7 @@ linters-settings: ignoretests: true goimports: - local-prefixes: github.com/Yiwen-Chan/ZeroBot-Plugin + local-prefixes: github.com/FloatTech/ZeroBot-Plugin gocritic: disabled-checks: diff --git a/go.mod b/go.mod index 405ee98b..d3dbf0f7 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,8 @@ module github.com/FloatTech/ZeroBot-Plugin go 1.16 require ( - github.com/FloatTech/AnimeAPI v0.0.0-20210713044920-63367fe18ccd - github.com/FloatTech/ZeroBot-ACGImage v1.5.5 - github.com/FloatTech/ZeroBot-Plugin-Timer v1.3.4 + github.com/FloatTech/AnimeAPI v1.1.2 + github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.2 github.com/StackExchange/wmi v1.2.1 // indirect github.com/golang/protobuf v1.5.2 github.com/robfig/cron v1.2.0 diff --git a/go.sum b/go.sum index c1ac735d..0ad5ea4e 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,11 @@ -github.com/FloatTech/AnimeAPI v0.0.0-20210713044920-63367fe18ccd h1:rvV66DIEqNJMEKwYXDJvw6kpJuGg+Pz/BooewuTBjXs= -github.com/FloatTech/AnimeAPI v0.0.0-20210713044920-63367fe18ccd/go.mod h1:GYrQD70HvBzry1XiZ1tHFNOsOqRkR+ao4XGYZqV4I9c= -github.com/FloatTech/ZeroBot-ACGImage v1.5.5 h1:cmAsXHl99RHJR38vQXL+q/U0BGWg5LyMHxBw5Mf8f1o= -github.com/FloatTech/ZeroBot-ACGImage v1.5.5/go.mod h1:TDGCgGHKjgcnA0akLaEwUcFwL+/ya7p6PZITdJQ1vnQ= -github.com/FloatTech/ZeroBot-Plugin-Timer v1.3.4 h1:nRJqY/S7TRlN32MQGIBH3UWfVrpjxpJXCnp42pd2O2Q= -github.com/FloatTech/ZeroBot-Plugin-Timer v1.3.4/go.mod h1:NuODdnVhf9AClsJBdYFqnL9sQE7VIRZyZos37J286n0= -github.com/FloatTech/Zerobot-ACGImage-Classify v1.3.3 h1:mMaBe23yg8mk5U0yb9OS9iX/9hju6Dj+Z+Fty18vIhU= -github.com/FloatTech/Zerobot-ACGImage-Classify v1.3.3/go.mod h1:swPvVKyXu1YFWZ7Kt6R79LgIa16hs4cE1E5LroBB2SQ= +github.com/FloatTech/AnimeAPI v1.1.0 h1:X6UMkl6eC8NHHeInt40x0AHb8a3GiQSmE1HigyTG/Qg= +github.com/FloatTech/AnimeAPI v1.1.0/go.mod h1:CC+vF30UGBlcIUxwFOcXIEHoJ4r7c5x2iLQsnUCVdDI= +github.com/FloatTech/AnimeAPI v1.1.1 h1:SPyrVlqRVQHfYOm9x8eGBJWlT+3gj1wtFsbH1bCgkXs= +github.com/FloatTech/AnimeAPI v1.1.1/go.mod h1:CC+vF30UGBlcIUxwFOcXIEHoJ4r7c5x2iLQsnUCVdDI= +github.com/FloatTech/AnimeAPI v1.1.2 h1:u+aVY1HlRi6jCvOQ9dePNGtCv71ESt79SG1Y4JZNx38= +github.com/FloatTech/AnimeAPI v1.1.2/go.mod h1:CC+vF30UGBlcIUxwFOcXIEHoJ4r7c5x2iLQsnUCVdDI= +github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.2 h1:w/JerL8DwdyoxZYB4HRMaHANRV2j+r5XxaQhVB0sjBw= +github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.2/go.mod h1:MVOQQ4e6AVGFm993blXXU4Sd6bAsLY2+Zb+/HMrEeEc= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/antchfx/htmlquery v1.2.3 h1:sP3NFDneHx2stfNXCKbhHFo8XgNjCACnU/4AO5gWz6M= @@ -20,8 +20,6 @@ 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= @@ -40,8 +38,6 @@ 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= @@ -89,27 +85,23 @@ 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= @@ -135,9 +127,7 @@ 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= @@ -146,7 +136,6 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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= diff --git a/main.go b/main.go index 38bb2959..6903eabe 100644 --- a/main.go +++ b/main.go @@ -17,37 +17,38 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin_runcode" // 在线运行代码 // 娱乐类 - _ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false" // 服务器监控 - _ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" - _ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌 - _ "github.com/FloatTech/ZeroBot-Plugin/plugin_shindan" // 测定 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false" // 服务器监控 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" // MCSManager + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_shindan" // 测定 // b站相关 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili" // 查询b站用户信息 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_diana" // 嘉心糖发病 // 二次元图片 - _ "github.com/FloatTech/ZeroBot-ACGImage" // 随机图片与AI点评 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_acgimage" // 随机图片与AI点评 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_image_finder" // 关键字搜图 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_lolicon" // lolicon 随机图片 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_saucenao" // 以图搜图 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_setutime" // 来份涩图 // 以下为内置依赖,勿动 - zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/driver" - "github.com/wdvxdr1123/ZeroBot/message" - log "github.com/sirupsen/logrus" easy "github.com/t-tomalak/logrus-easy-formatter" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/driver" ) -var content = []string{ - "* OneBot + ZeroBot + Golang ", - "* Version 1.0.4 - 2021-07-14 14:09:58.581489207 +0800 CST", - "* Copyright © 2020 - 2021 Kanri, DawnNights, Fumiama, Suika", - "* Project: https://github.com/FloatTech/ZeroBot-Plugin", -} +var ( + contents = []string{ + "* OneBot + ZeroBot + Golang ", + "* Version 1.1.0 - 2021-08-06 23:36:29 +0800 CST", + "* Copyright © 2020 - 2021 Kanri, DawnNights, Fumiama, Suika", + "* Project: https://github.com/FloatTech/ZeroBot-Plugin", + } + banner = strings.Join(contents, "\n") +) func init() { log.SetFormatter(&easy.Formatter{ @@ -59,9 +60,9 @@ func init() { func main() { fmt.Print( - "====================[ZeroBot-Plugin]====================", - "\n", strings.Join(content, "\n"), "\n", - "========================================================", + "======================[ZeroBot-Plugin]======================", + "\n", banner, "\n", + "============================================================\n", ) // 启动打印 zero.Run(zero.Config{ NickName: []string{"椛椛", "ATRI", "atri", "亚托莉", "アトリ"}, @@ -84,9 +85,7 @@ func main() { // 帮助 zero.OnFullMatchGroup([]string{"help", "/help", ".help", "菜单", "帮助"}, zero.OnlyToMe).SetBlock(true).SetPriority(999). Handle(func(ctx *zero.Ctx) { - ctx.SendChain( - message.Text(strings.Join(content, "\n")), - ) + ctx.Send(banner) }) select {} } diff --git a/plugin_acgimage/classify.go b/plugin_acgimage/classify.go new file mode 100644 index 00000000..2a590d81 --- /dev/null +++ b/plugin_acgimage/classify.go @@ -0,0 +1,128 @@ +// Package acgimage 随机图片与AI点评 +package acgimage + +import ( + "net/url" + "os" + "strconv" + "strings" + + "github.com/FloatTech/AnimeAPI/classify" + "github.com/FloatTech/AnimeAPI/picture" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" +) + +const ( + lolipxy = "http://sayuri.fumiama.top:62002/dice?class=0&loli=true&r18=true" +) + +var ( + botpath, _ = os.Getwd() + datapath = botpath + "/data/acgimage/" + cacheuri = "file:///" + datapath + "cache" + // r18有一定保护,一般不会发出图片 + randapi = "&loli=true&r18=true" + msgof = make(map[int64]int64) + block = false +) + +func init() { // 插件主体 + // 初始化 classify + classify.Init(datapath) + 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 { + randapi = url + } + }) + // 有保护的随机图片 + zero.OnFullMatch("随机图片").SetBlock(true).SetPriority(24). + Handle(func(ctx *zero.Ctx) { + if ctx.Event.GroupID > 0 { + if classify.CanVisit(5) { + go func() { + class, lastvisit, dhash, comment := classify.Classify(randapi, false) + replyClass(ctx, dhash, class, false, lastvisit, comment) + }() + } else { + ctx.Send("你太快啦!") + } + } + }) + // 直接随机图片,无r18保护,后果自负。如果出r18图可尽快通过发送"太涩了"撤回 + zero.OnFullMatch("直接随机", zero.AdminPermission).SetBlock(true).SetPriority(24). + Handle(func(ctx *zero.Ctx) { + if ctx.Event.GroupID > 0 { + if block { + ctx.Send("请稍后再试哦") + } else if randapi != "" { + block = true + var url string + if randapi[0] == '&' { + url = lolipxy + } else { + url = randapi + } + setLastMsg(ctx.Event.GroupID, ctx.Send(message.Image(url).Add("cache", "0"))) + block = false + } + } + }) + // 撤回最后的直接随机图片 + zero.OnFullMatch("太涩了").SetBlock(true).SetPriority(24). + Handle(func(ctx *zero.Ctx) { + go cancel(ctx) + }) + // 上传一张图进行评价 + zero.OnKeywordGroup([]string{"评价图片"}, picture.CmdMatch(), picture.MustGiven()).SetBlock(true).SetPriority(24). + Handle(func(ctx *zero.Ctx) { + if ctx.Event.GroupID > 0 { + ctx.Send("少女祈祷中...") + for _, url := range ctx.State["image_url"].([]string) { + go func(target string) { + class, lastvisit, dhash, comment := classify.Classify(target, true) + replyClass(ctx, dhash, class, true, lastvisit, comment) + }(url) + } + } + }) +} + +func setLastMsg(id int64, msg int64) { + msgof[id] = msg +} + +func cancel(ctx *zero.Ctx) { + msg, ok := msgof[ctx.Event.GroupID] + if ok { + ctx.DeleteMessage(msg) + delete(msgof, ctx.Event.GroupID) + } +} + +func replyClass(ctx *zero.Ctx, dhash string, class int, noimg bool, lv int64, comment string) { + img := message.Image(cacheuri + strconv.FormatInt(lv, 10)) + if class > 5 { + if dhash != "" && !noimg { + b14, err3 := url.QueryUnescape(dhash) + if err3 == nil { + ctx.Send(comment + "\n给你点提示哦:" + b14) + ctx.Event.GroupID = 0 + ctx.Send(img) + } + } else { + ctx.Send(comment) + } + } else { + comment := message.Text(comment) + if !noimg { + ctx.SendChain(img, comment) + } else { + ctx.SendChain(message.Reply(ctx.Event.MessageID), comment) + } + } +} diff --git a/plugin_diana/bing.go b/plugin_diana/bing.go index 3faf6f71..12cde0bf 100644 --- a/plugin_diana/bing.go +++ b/plugin_diana/bing.go @@ -17,13 +17,13 @@ func init() { Handle(func(ctx *zero.Ctx) { rand.Seed(time.Now().UnixNano()) // 绕过第一行发病 - ctx.SendChain(message.Text(data.Array[rand.Intn(len(data.Array)-1)+1])) + ctx.SendChain(message.Text((*data.Array)[rand.Intn(len(*data.Array)-1)+1])) }) // 逆天 zero.OnFullMatch("发大病", zero.OnlyToMe). Handle(func(ctx *zero.Ctx) { // 第一行是发病 - ctx.Send(data.Array[0]) + ctx.Send((*data.Array)[0]) }) // 增加小作文 zero.OnRegex(`^教你一篇小作文(.*)$`, zero.AdminPermission). diff --git a/plugin_diana/data/text.go b/plugin_diana/data/text.go index 24187ac4..10a87e26 100644 --- a/plugin_diana/data/text.go +++ b/plugin_diana/data/text.go @@ -2,10 +2,11 @@ package data import ( - "fmt" "io" "os" "time" + + log "github.com/sirupsen/logrus" ) const ( @@ -15,8 +16,8 @@ const ( var ( compo Composition - // Array 小作文数组 - Array []string + // Array 小作文数组指针 + Array = &compo.Array ) func init() { @@ -26,10 +27,12 @@ func init() { if err != nil { panic(err) } - if LoadText() == nil { - Array = compo.Array + err1 := LoadText() + if err1 == nil { + log.Printf("[Diana]读取%d条小作文", len(*Array)) + } else { + log.Printf("[Diana]读取小作文错误:%v", err1) } - fmt.Printf("[Diana]读取%d条小作文\n", len(Array)) }() } diff --git a/plugin_saucenao/searcher.go b/plugin_saucenao/searcher.go index 847ceb5a..99e66a7b 100644 --- a/plugin_saucenao/searcher.go +++ b/plugin_saucenao/searcher.go @@ -5,12 +5,12 @@ import ( "fmt" "strconv" "strings" - "time" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" "github.com/FloatTech/AnimeAPI/ascii2d" + "github.com/FloatTech/AnimeAPI/picture" "github.com/FloatTech/AnimeAPI/pixiv" "github.com/FloatTech/AnimeAPI/saucenao" ) @@ -44,49 +44,8 @@ func init() { // 插件主体 ) }) // 以图搜图 - zero.OnKeywordGroup([]string{"以图搜图", "搜索图片", "以图识图"}).SetBlock(true).FirstPriority(). + zero.OnKeywordGroup([]string{"以图搜图", "搜索图片", "以图识图"}, picture.CmdMatch(), picture.MustGiven()).SetBlock(true).FirstPriority(). Handle(func(ctx *zero.Ctx) { - // 匹配命令 - for _, elem := range ctx.Event.Message { - if elem.Type == "text" { - text := strings.ReplaceAll(elem.Data["text"], " ", "") - if text != ctx.State["keyword"].(string) { - return - } - } - } - // 匹配图片 - rule := func() zero.Rule { - return func(ctx *zero.Ctx) bool { - var urls = []string{} - for _, elem := range ctx.Event.Message { - if elem.Type == "image" { - urls = append(urls, elem.Data["url"]) - } - } - if len(urls) > 0 { - ctx.State["image_url"] = urls - return true - } - return false - } - } - // 索取图片 - if !rule()(ctx) { - ctx.SendChain(message.Text("请发送一张图片")) - next := zero.NewFutureEvent("message", 999, false, zero.CheckUser(ctx.Event.UserID), rule()) - recv, cancel := next.Repeat() - select { - case <-time.After(time.Second * 120): - return - case e := <-recv: - cancel() - newCtx := &zero.Ctx{Event: e, State: zero.State{}} - if rule()(newCtx) { - ctx.State["image_url"] = newCtx.State["image_url"] - } - } - } // 开始搜索图片 ctx.Send("少女祈祷中......") for _, pic := range ctx.State["image_url"].([]string) {