From e812d2a074b52bb75d761efb776bfb5b7079182e Mon Sep 17 00:00:00 2001 From: himawari <54976075+guohuiyuan@users.noreply.github.com> Date: Sat, 20 Nov 2021 13:34:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0vtb=E8=AF=AD=E9=9F=B3?= =?UTF-8?q?=E5=8C=85=20(#74)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix:给msg进行url编码,解决青云客接口返回错误 * feat:增加一个vtbkeyboard.moe接口 * fix:id添加映射 * feat:优化逻辑 * feat:优化逻辑 * feat:优化逻辑 * feat:优化逻辑 * feat:增加一个随机vtb * feat:增加一个随机vtb * refactor:更改代码逻辑 * feat:更新数据库 * feat:更新数据库 * feat:更新数据库 * feat:更新数据库 * feat:更新数据库驱动 * feat:增加定时更新数据脚本 * feat:更换驱动 * fix:更新zerobot * fix:修改全局变量 * fix:微调位置 * fix:解决modernc.org/sqlite版本冲突 * fix:解决go.sum冲突,更换cron库 --- README.md | 3 + data/VtbQuotation/vtb.db | Bin 0 -> 319488 bytes go.mod | 2 + go.sum | 26 +++ main.go | 15 +- plugin_vtb_quotation/cron.go | 50 ++++++ plugin_vtb_quotation/firstVtb/firstVtb.go | 78 +++++++++ plugin_vtb_quotation/model/model.go | 169 ++++++++++++++++++++ plugin_vtb_quotation/secondVtb/secondVtb.go | 108 +++++++++++++ plugin_vtb_quotation/utils/utils.go | 24 +++ plugin_vtb_quotation/vtb_quotation.go | 161 +++++++++++++++++++ 11 files changed, 629 insertions(+), 7 deletions(-) create mode 100644 data/VtbQuotation/vtb.db create mode 100644 plugin_vtb_quotation/cron.go create mode 100644 plugin_vtb_quotation/firstVtb/firstVtb.go create mode 100644 plugin_vtb_quotation/model/model.go create mode 100644 plugin_vtb_quotation/secondVtb/secondVtb.go create mode 100644 plugin_vtb_quotation/utils/utils.go create mode 100644 plugin_vtb_quotation/vtb_quotation.go diff --git a/README.md b/README.md index 56de53c2..44e341b0 100644 --- a/README.md +++ b/README.md @@ -171,6 +171,9 @@ zerobot -h -t token -u url [-d|w] [-g] qq1 qq2 qq3 ... - 注:本插件来源于[tgbot](https://github.com/YukariChiba/tgbot/blob/main/modules/Reborn.py) - **翻译** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_translation"` - [x] >TL 你好 +- **vtb语录** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation"` + - [x] vtb语录 + - [x] 随机vtb - **TODO...** ## 使用方法 diff --git a/data/VtbQuotation/vtb.db b/data/VtbQuotation/vtb.db new file mode 100644 index 0000000000000000000000000000000000000000..97d2c6d674c5092f5e3d5b8a1d0315a2c224573a GIT binary patch literal 319488 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 literal 0 HcmV?d00001 diff --git a/go.mod b/go.mod index 8c0e56d4..72900144 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,8 @@ require ( github.com/gin-gonic/gin v1.7.4 github.com/golang/protobuf v1.5.2 github.com/gorilla/websocket v1.4.2 + github.com/jinzhu/gorm v1.9.16 + github.com/logoove/sqlite v1.13.0 github.com/mroth/weightedrand v0.4.1 github.com/shirou/gopsutil v3.21.10+incompatible github.com/sirupsen/logrus v1.8.1 diff --git a/go.sum b/go.sum index eb12167b..047e62ba 100644 --- a/go.sum +++ b/go.sum @@ -11,8 +11,10 @@ github.com/FloatTech/bot-manager v1.0.1-0.20211112011524-85b9895271ed h1:GEOgDVb github.com/FloatTech/bot-manager v1.0.1-0.20211112011524-85b9895271ed/go.mod h1:8YYRJ16oroGHQGD2En0oVnmcKJkxR9O/jd5BPSfWfOQ= github.com/FloatTech/imgfactory v0.1.1 h1:ooL2+fV8yrMhv1ShGGKsN0Rm/flWoKnvqXaUD+dC3DQ= github.com/FloatTech/imgfactory v0.1.1/go.mod h1:ThDALab8aOuU6KVYESVWFqmjcqtm03e0SvGlTw6s+aw= +github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= 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/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/antchfx/htmlquery v1.2.3 h1:sP3NFDneHx2stfNXCKbhHFo8XgNjCACnU/4AO5gWz6M= github.com/antchfx/htmlquery v1.2.3/go.mod h1:B0ABL+F5irhhMWg54ymEZinzMSi0Kt3I2if0BLYa3V0= github.com/antchfx/xpath v1.1.6 h1:6sVh6hB5T6phw1pFpHRQ+C4bd8sNI+O58flqtg7h0R0= @@ -20,12 +22,16 @@ github.com/antchfx/xpath v1.1.6/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNY github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM= +github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4 h1:BBade+JlV/f7JstZ4pitd4tHhpN+w+6I+LyOS7B4fyU= github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4/go.mod h1:H7chHJglrhPPzetLdzBleF8d22WYOv7UM/lEKYiwlKM= +github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y= +github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -49,6 +55,10 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= @@ -69,6 +79,12 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imroc/req v0.3.0/go.mod h1:F+NZ+2EFSo6EFXdeIbpfE9hcC233id70kf0byW97Caw= +github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= +github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M= +github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -77,8 +93,13 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:C github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/logoove/sqlite v1.13.0 h1:XM7QKK9R3tm8o7bI75R3zmwYBFQ5S3Jqg+XCaqsAMQQ= +github.com/logoove/sqlite v1.13.0/go.mod h1:MRpE/o3qQhT7AgfIdnBue5c63+//xT+KXV0gHeVAUAg= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU= github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= @@ -142,7 +163,9 @@ github.com/wdvxdr1123/ZeroBot v1.4.1 h1:fk/8RH2D1gB3YeC1eI/SZi/kG31Rh7Z8lAiDc60V github.com/wdvxdr1123/ZeroBot v1.4.1/go.mod h1:7t9m4vDZPwWAmzKlhP6IvUoisOIiqNdm/3AJgiY3+ew= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/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-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -150,9 +173,12 @@ golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jp golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= diff --git a/main.go b/main.go index c259ef61..51337018 100644 --- a/main.go +++ b/main.go @@ -42,13 +42,14 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin_diana" // 嘉心糖发病 // 二次元图片 - _ "github.com/FloatTech/ZeroBot-Plugin/plugin_acgimage" // 随机图片与AI点评 - _ "github.com/FloatTech/ZeroBot-Plugin/plugin_aiwife" // 随机老婆 - _ "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" // 来份涩图 - _ "github.com/FloatTech/ZeroBot-Plugin/plugin_tracemoe" // 搜番 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_acgimage" // 随机图片与AI点评 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_aiwife" // 随机老婆 + _ "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" // 来份涩图 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_tracemoe" // 搜番 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation" // vtb语录 // 以下为内置依赖,勿动 "github.com/sirupsen/logrus" diff --git a/plugin_vtb_quotation/cron.go b/plugin_vtb_quotation/cron.go new file mode 100644 index 00000000..9514c248 --- /dev/null +++ b/plugin_vtb_quotation/cron.go @@ -0,0 +1,50 @@ +package plugin_vtb_quotation + +import ( + "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/firstVtb" + "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/model" + "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/secondVtb" + "github.com/fumiama/cron" + log "github.com/sirupsen/logrus" + zero "github.com/wdvxdr1123/ZeroBot" +) + +var ( + AtriRule = true +) + +func init() { + engine.OnMessage(atriRule).SetBlock(false).Handle(func(ctx *zero.Ctx) { + log.Println("定时任务只创建一次") + AtriRule = false + log.Println("开启vtb数据库日常更新") + vtbDaily() + }) +} + +func vtbDaily() { + log.Println("创建vtb数据库定时任务") + c := cron.New() + _, err := c.AddFunc("37 11 * * *", func() { vtbData() }) + if err != nil { + log.Println("定时任务有错误:", err) + } else { + log.Println("开启vtb数据库定时任务") + c.Start() + } +} +func vtbData() { + model.Init() + vtbListStr := firstVtb.GetVtbListStr() + uidList := firstVtb.DealVtbListStr(vtbListStr) + log.Println(uidList) + for _, v := range uidList { + vtbStr := secondVtb.GetVtbStr(v) + secondVtb.DealVtbStr(vtbStr, v) + } + model.Db.Close() +} + +func atriRule(ctx *zero.Ctx) bool { + return AtriRule +} diff --git a/plugin_vtb_quotation/firstVtb/firstVtb.go b/plugin_vtb_quotation/firstVtb/firstVtb.go new file mode 100644 index 00000000..755ad519 --- /dev/null +++ b/plugin_vtb_quotation/firstVtb/firstVtb.go @@ -0,0 +1,78 @@ +package firstVtb + +import ( + "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/model" + "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/utils" + "github.com/jinzhu/gorm" + log "github.com/sirupsen/logrus" + "github.com/tidwall/gjson" + "io/ioutil" + "net/http" + "strconv" + "strings" +) + +var vtbUrl = "https://vtbkeyboard.moe/api/get_vtb_list" + +func GetVtbListStr() string { + client := &http.Client{} + req, err := http.NewRequest("GET", vtbUrl, nil) + if err != nil { + log.Println(err) + } + // 自定义Header + req.Header.Set("User-Agent", utils.GetAgent()) + resp, err := client.Do(req) + if err != nil { + log.Println(err) + } + + defer resp.Body.Close() + bytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + log.Println(err) + } + //log.Println(string(bytes)) + vtbListStr, err := strconv.Unquote(strings.Replace(strconv.Quote(string(bytes)), `\\u`, `\u`, -1)) + if err != nil { + log.Println(err) + } + log.Println(vtbListStr) + return vtbListStr +} +func DealVtbListStr(vtbListStr string) []string { + uidList := make([]string, 0) + count := gjson.Get(vtbListStr, "#").Int() + for i := int64(0); i < count; i++ { + item := gjson.Get(vtbListStr, strconv.FormatInt(i, 10)) + log.Println(item) + fc := model.FirstCategory{ + FirstCategoryIndex: i, + FirstCategoryName: item.Get("name").String(), + FirstCategoryDescription: item.Get("description").String(), + FirstCategoryIconPath: item.Get("icon_path").String(), + FirstCategoryUid: item.Get("uid").String(), + } + log.Println(fc) + //model.Db.Model(FirstCategory{}).Where("first_category_uid = ?", fc.FirstCategoryUid).FirstOrCreate(&fc) + if err := model.Db.Debug().Model(&model.FirstCategory{}).Where("first_category_uid = ?", fc.FirstCategoryUid).First(&fc).Error; err != nil { + // error handling... + if gorm.IsRecordNotFoundError(err) { + model.Db.Debug().Model(&model.FirstCategory{}).Create(&fc) // newUser not user + } + } else { + model.Db.Debug().Model(&model.FirstCategory{}).Where("first_category_uid = ?", fc.FirstCategoryUid).Update( + map[string]interface{}{ + "first_category_index": i, + "first_category_name": item.Get("name").String(), + "first_category_description": item.Get("description").String(), + "first_category_icon_path": item.Get("icon_path").String(), + }) + } + uidList = append(uidList, fc.FirstCategoryUid) + + } + + log.Println(uidList) + return uidList +} diff --git a/plugin_vtb_quotation/model/model.go b/plugin_vtb_quotation/model/model.go new file mode 100644 index 00000000..0de4aa62 --- /dev/null +++ b/plugin_vtb_quotation/model/model.go @@ -0,0 +1,169 @@ +package model + +import ( + "github.com/jinzhu/gorm" + _ "github.com/logoove/sqlite" + log "github.com/sirupsen/logrus" + + "math/rand" + "os" + "strconv" + "time" +) + +var ( + Db *gorm.DB + path = "data/VtbQuotation/vtb.db" +) + +func Init() { + var err error + if _, err = os.Stat(path); err != nil || os.IsNotExist(err) { + // 生成文件 + f, err := os.Create(path) + if err != nil { + return + } + defer f.Close() + } + Db, err = gorm.Open("sqlite3", path) + if err != nil { + panic("failed to connect database") + } + Db.AutoMigrate(FirstCategory{}).AutoMigrate(SecondCategory{}).AutoMigrate(ThirdCategory{}) +} + +//第一品类 +type FirstCategory struct { + gorm.Model + FirstCategoryIndex int64 `gorm:"column:first_category_index"` + FirstCategoryName string `gorm:"column:first_category_name"` + FirstCategoryUid string `gorm:"column:first_category_uid"` + FirstCategoryDescription string `gorm:"column:first_category_description;type:varchar(1024)"` + FirstCategoryIconPath string `gorm:"column:first_category_icon_path"` +} + +func (FirstCategory) TableName() string { + return "first_category" +} + +//第二品类 +type SecondCategory struct { + gorm.Model + SecondCategoryIndex int64 `gorm:"column:second_category_index"` + FirstCategoryUid string `gorm:"column:first_category_uid;association_foreignkey:first_category_uid"` + SecondCategoryName string `gorm:"column:second_category_name"` + SecondCategoryAuthor string `gorm:"column:second_category_author"` + SecondCategoryDescription string `gorm:"column:second_category_description"` +} + +func (SecondCategory) TableName() string { + return "second_category" +} + +//第三品类 +type ThirdCategory struct { + gorm.Model + ThirdCategoryIndex int64 `gorm:"column:third_category_index"` + SecondCategoryIndex int64 `gorm:"column:second_category_index"` + FirstCategoryUid string `gorm:"column:first_category_uid"` + ThirdCategoryName string `gorm:"column:third_category_name"` + ThirdCategoryPath string `gorm:"column:third_category_path"` + ThirdCategoryAuthor string `gorm:"column:third_category_author"` + ThirdCategoryDescription string `gorm:"column:third_category_description"` +} + +func (ThirdCategory) TableName() string { + return "third_category" +} + +//取出所有vtb +func GetAllFirstCategoryMessage(db *gorm.DB) string { + firstStepMessage := "请选择一个vtb并发送序号:\n" + var fc FirstCategory + rows, err := db.Model(&FirstCategory{}).Rows() + if err != nil { + log.Println("数据库读取错误", err) + } + if rows == nil { + return "" + } + for rows.Next() { + db.ScanRows(rows, &fc) + log.Println(fc) + firstStepMessage = firstStepMessage + strconv.FormatInt(fc.FirstCategoryIndex, 10) + ". " + fc.FirstCategoryName + "\n" + } + return firstStepMessage +} + +//取得同一个vtb所有语录类别 +func GetAllSecondCategoryMessageByFirstIndex(db *gorm.DB, firstIndex int) string { + SecondStepMessage := "请选择一个语录类别并发送序号:\n" + var sc SecondCategory + var count int + var fc FirstCategory + db.Model(FirstCategory{}).Where("first_category_index = ?", firstIndex).First(&fc) + db.Model(&SecondCategory{}).Where("first_category_uid = ?", fc.FirstCategoryUid).Count(&count) + if count == 0 { + return "" + } + rows, err := db.Model(&SecondCategory{}).Where("first_category_uid = ?", fc.FirstCategoryUid).Rows() + if err != nil { + log.Println("数据库读取错误", err) + } + + for rows.Next() { + db.ScanRows(rows, &sc) + log.Println(sc) + SecondStepMessage = SecondStepMessage + strconv.FormatInt(sc.SecondCategoryIndex, 10) + ". " + sc.SecondCategoryName + "\n" + } + return SecondStepMessage +} + +//取得同一个vtb同个类别的所有语录 +func GetAllThirdCategoryMessageByFirstIndexAndSecondIndex(db *gorm.DB, firstIndex, secondIndex int) string { + ThirdStepMessage := "请选择一个语录并发送序号:\n" + var fc FirstCategory + db.Model(FirstCategory{}).Where("first_category_index = ?", firstIndex).First(&fc) + var count int + db.Model(&ThirdCategory{}).Where("first_category_uid = ? and second_category_index = ?", fc.FirstCategoryUid, secondIndex).Count(&count) + if count == 0 { + return "" + } + var tc ThirdCategory + rows, err := db.Model(&ThirdCategory{}).Where("first_category_uid = ? and second_category_index = ?", fc.FirstCategoryUid, secondIndex).Rows() + if err != nil { + log.Println("数据库读取错误", err) + } + for rows.Next() { + db.ScanRows(rows, &tc) + log.Println(tc) + ThirdStepMessage = ThirdStepMessage + strconv.FormatInt(tc.ThirdCategoryIndex, 10) + ". " + tc.ThirdCategoryName + "\n" + } + return ThirdStepMessage +} +func GetThirdCategory(db *gorm.DB, firstIndex, secondIndex, thirdIndex int) ThirdCategory { + var fc FirstCategory + db.Model(FirstCategory{}).Where("first_category_index = ?", firstIndex).First(&fc) + var tc ThirdCategory + db.Model(&ThirdCategory{}).Where("first_category_uid = ? and second_category_index = ? and third_category_index = ?", fc.FirstCategoryUid, secondIndex, thirdIndex).Take(&tc) + return tc +} + +func RandomVtb(db *gorm.DB) ThirdCategory { + rand.Seed(time.Now().UnixNano()) + var count int + db.Model(&ThirdCategory{}).Count(&count) + log.Info("一共有", count, "个") + var tc ThirdCategory + db.Model(&ThirdCategory{}).Offset(rand.Intn(count)).Take(&tc) + log.Info(tc) + return tc +} + +func GetFirstCategoryByFirstUid(db *gorm.DB, firstUid string) FirstCategory { + var fc FirstCategory + db.Model(FirstCategory{}).Where("first_category_uid = ?", firstUid).Take(&fc) + log.Info(fc) + return fc +} diff --git a/plugin_vtb_quotation/secondVtb/secondVtb.go b/plugin_vtb_quotation/secondVtb/secondVtb.go new file mode 100644 index 00000000..ab109e24 --- /dev/null +++ b/plugin_vtb_quotation/secondVtb/secondVtb.go @@ -0,0 +1,108 @@ +package secondVtb + +import ( + "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/model" + "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/utils" + "github.com/jinzhu/gorm" + log "github.com/sirupsen/logrus" + "github.com/tidwall/gjson" + "io/ioutil" + "net/http" + "strconv" + "strings" +) + +func GetVtbStr(uid string) string { + vtbUrl := "https://vtbkeyboard.moe/api/get_vtb_page?uid=" + uid + client := &http.Client{} + req, err := http.NewRequest("GET", vtbUrl, nil) + if err != nil { + log.Println(err) + } + // 自定义Header + req.Header.Set("User-Agent", utils.GetAgent()) + resp, err := client.Do(req) + if err != nil { + log.Println(err) + } + + defer resp.Body.Close() + bytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + log.Println(err) + } + //log.Println(string(bytes)) + vtbListStr, err := strconv.Unquote(strings.Replace(strconv.Quote(string(bytes)), `\\u`, `\u`, -1)) + if err != nil { + log.Println(err) + } + log.Println(vtbListStr) + return vtbListStr + +} + +func DealVtbStr(vtbStr, uid string) { + secondCount := gjson.Get(vtbStr, "data.voices.#").Int() + log.Println("二级品类一共有", secondCount) + for secondIndex := int64(0); secondIndex < secondCount; secondIndex++ { + secondItem := gjson.Get(vtbStr, "data.voices."+strconv.FormatInt(secondIndex, 10)) + log.Println(secondItem) + sc := model.SecondCategory{ + SecondCategoryName: secondItem.Get("categoryName").String(), + SecondCategoryIndex: secondIndex, + SecondCategoryAuthor: secondItem.Get("author").String(), + SecondCategoryDescription: secondItem.Get("categoryDescription.zh-CN").String(), + FirstCategoryUid: uid, + } + log.Println(sc) + //model.Db.Model(SecondCategory{}).Where("first_category_uid = ? and second_category_index = ?", uid, secondIndex).FirstOrCreate(&sc) + if err := model.Db.Debug().Model(&model.SecondCategory{}).Where("first_category_uid = ? and second_category_index = ?", uid, secondIndex).First(&sc).Error; err != nil { + // error handling... + if gorm.IsRecordNotFoundError(err) { + model.Db.Debug().Model(&model.SecondCategory{}).Create(&sc) // newUser not user + } + } else { + model.Db.Debug().Model(&model.SecondCategory{}).Where("first_category_uid = ? and second_category_index = ?", uid, secondIndex).Update( + map[string]interface{}{ + "second_category_name": secondItem.Get("categoryName").String(), + "second_category_author": secondItem.Get("author").String(), + "second_category_description": secondItem.Get("categoryDescription.zh-CN").String(), + }) + } + thirdCount := secondItem.Get("voiceList.#").Int() + log.Println("三级品类一共有", thirdCount) + for thirdIndex := int64(0); thirdIndex < thirdCount; thirdIndex++ { + thirdItem := secondItem.Get("voiceList." + strconv.FormatInt(thirdIndex, 10)) + log.Println(thirdItem) + tc := model.ThirdCategory{ + ThirdCategoryName: thirdItem.Get("name").String(), + ThirdCategoryIndex: thirdIndex, + ThirdCategoryDescription: thirdItem.Get("description.zh-CN").String(), + FirstCategoryUid: uid, + SecondCategoryIndex: secondIndex, + ThirdCategoryPath: thirdItem.Get("path").String(), + ThirdCategoryAuthor: thirdItem.Get("author").String(), + } + log.Println(tc) + //model.Db.Model(ThirdCategory{}).Where("first_category_uid = ? and second_category_index = ? and third_category_index = ?", + // uid, secondIndex, thirdIndex).FirstOrCreate(&tc) + if err := model.Db.Debug().Model(&model.ThirdCategory{}).Where("first_category_uid = ? and second_category_index = ? and third_category_index = ?", + uid, secondIndex, thirdIndex).First(&tc).Error; err != nil { + // error handling... + if gorm.IsRecordNotFoundError(err) { + model.Db.Debug().Model(&model.ThirdCategory{}).Create(&tc) // newUser not user + } + } else { + model.Db.Debug().Model(&model.ThirdCategory{}).Where("first_category_uid = ? and second_category_index = ? and third_category_index = ?", + uid, secondIndex, thirdIndex).Update( + map[string]interface{}{ + "third_category_name": thirdItem.Get("name").String(), + "third_category_description": thirdItem.Get("description.zh-CN").String(), + "third_category_path": thirdItem.Get("path").String(), + "third_category_author": thirdItem.Get("author").String(), + }) + } + } + } + +} diff --git a/plugin_vtb_quotation/utils/utils.go b/plugin_vtb_quotation/utils/utils.go new file mode 100644 index 00000000..21434437 --- /dev/null +++ b/plugin_vtb_quotation/utils/utils.go @@ -0,0 +1,24 @@ +package utils + +import ( + "math/rand" + "time" +) + +var agent = [...]string{ + "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0", + "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11", + "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)", + "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)", + "User-Agent,Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", + "User-Agent, Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)", + "User-Agent,Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", +} + +func GetAgent() string { + r := rand.New(rand.NewSource(time.Now().UnixNano())) + len1 := len(agent) + return agent[r.Intn(len1)] +} diff --git a/plugin_vtb_quotation/vtb_quotation.go b/plugin_vtb_quotation/vtb_quotation.go new file mode 100644 index 00000000..74ef3c4e --- /dev/null +++ b/plugin_vtb_quotation/vtb_quotation.go @@ -0,0 +1,161 @@ +package plugin_vtb_quotation + +import ( + "fmt" + "github.com/FloatTech/ZeroBot-Plugin/control" + "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/model" + "github.com/jinzhu/gorm" + _ "github.com/logoove/sqlite" + log "github.com/sirupsen/logrus" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" + "net/url" + "regexp" + "strconv" + "strings" + "time" +) + +var ( + regStr = ".*/(.*)" +) + +var engine = control.Register("vtbquotation", &control.Options{ + DisableOnDefault: false, + Help: "vtb语录\n" + + "随机vtb\n", +}) + +func init() { + engine.OnFullMatch("vtb语录").SetBlock(true). + Handle(func(ctx *zero.Ctx) { + var firstIndex int + var secondIndex int + var thirdIndex int + echo, cancel := ctx.FutureEvent("message", + ctx.CheckSession()). // 只复读开启复读模式的人的消息 + Repeat() // 不断监听复读 + db, err := gorm.Open("sqlite3", "data/VtbQuotation/vtb.db") + if err != nil { + panic("failed to connect database") + } + defer db.Close() + firstStepMessage := model.GetAllFirstCategoryMessage(db) + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(firstStepMessage)) + //步骤1,2,3,依次选择3个类别 + step := 1 + //错误次数 + errorCount := 0 + for { + select { + case e := <-echo: // 接收到需要复读的消息 + //错误次数达到3次,结束命令 + if errorCount == 3 { + ctx.SendChain(message.Reply(e.MessageID), message.Text("输入错误太多,请重新发指令")) + cancel() + return + } + if step == 1 { + firstIndex, err = strconv.Atoi(e.RawMessage) + log.Println(fmt.Sprintf("当前在第%d步", step)) + log.Println(fmt.Sprintf("firstIndex:%d,secondIndex:%d,thirdIndex:%d", firstIndex, secondIndex, thirdIndex)) + if err != nil { + ctx.SendChain(message.Reply(e.MessageID), message.Text("请输入正确的序号,三次输入错误,指令可退出重输")) + errorCount++ + } else { + SecondStepMessage := model.GetAllSecondCategoryMessageByFirstIndex(db, firstIndex) + log.Println(SecondStepMessage) + if SecondStepMessage == "" { + ctx.SendChain(message.Reply(e.MessageID), message.Text("你选择的序号没有内容,请重新选择,三次输入错误,指令可退出重输")) + ctx.SendChain(message.Reply(e.MessageID), message.Text(model.GetAllFirstCategoryMessage(db))) + errorCount++ + } else { + ctx.SendChain(message.Reply(e.MessageID), message.Text(SecondStepMessage)) + step++ + } + + } + } else if step == 2 { + secondIndex, err = strconv.Atoi(e.RawMessage) + log.Println(fmt.Sprintf("当前在第%d步", step)) + log.Println(fmt.Sprintf("firstIndex:%d,secondIndex:%d,thirdIndex:%d", firstIndex, secondIndex, thirdIndex)) + if err != nil { + ctx.SendChain(message.Reply(e.MessageID), message.Text("请输入正确的序号,三次输入错误,指令可退出重输")) + errorCount++ + } else { + ThirdStepMessage := model.GetAllThirdCategoryMessageByFirstIndexAndSecondIndex(db, firstIndex, secondIndex) + log.Println(ThirdStepMessage) + if ThirdStepMessage == "" { + ctx.SendChain(message.Reply(e.MessageID), message.Text("你选择的序号没有内容,请重新选择,三次输入错误,指令可退出重输")) + ctx.SendChain(message.Reply(e.MessageID), message.Text(model.GetAllSecondCategoryMessageByFirstIndex(db, firstIndex))) + errorCount++ + } else { + ctx.SendChain(message.Reply(e.MessageID), message.Text(ThirdStepMessage)) + step++ + } + + } + } else if step == 3 { + thirdIndex, err = strconv.Atoi(e.RawMessage) + log.Println(fmt.Sprintf("当前在第%d步", step)) + log.Println(fmt.Sprintf("firstIndex:%d,secondIndex:%d,thirdIndex:%d", firstIndex, secondIndex, thirdIndex)) + if err != nil { + ctx.SendChain(message.Reply(e.MessageID), message.Text("请输入正确的序号,三次输入错误,指令可退出重输")) + errorCount++ + } else { + tc := model.GetThirdCategory(db, firstIndex, secondIndex, thirdIndex) + reg := regexp.MustCompile(regStr) + recordUrl := tc.ThirdCategoryPath + if recordUrl == "" { + ctx.SendChain(message.Reply(e.MessageID), message.Text("没有内容请重新选择,三次输入错误,指令可退出重输")) + ctx.SendChain(message.Reply(e.MessageID), message.Text(model.GetAllFirstCategoryMessage(db))) + errorCount++ + step = 1 + } else { + if reg.MatchString(recordUrl) { + log.Println(reg.FindStringSubmatch(recordUrl)[1]) + log.Println(url.QueryEscape(reg.FindStringSubmatch(recordUrl)[1])) + recordUrl = strings.Replace(recordUrl, reg.FindStringSubmatch(recordUrl)[1], url.QueryEscape(reg.FindStringSubmatch(recordUrl)[1]), -1) + recordUrl = strings.Replace(recordUrl, "+", "%20", -1) + log.Println(recordUrl) + } + ctx.SendChain(message.Reply(e.MessageID), message.Text("请欣赏《"+tc.ThirdCategoryName+"》")) + ctx.SendChain(message.Record(recordUrl)) + cancel() + return + } + + } + } + case <-time.After(time.Second * 60): + cancel() + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("vtb语录指令过期")) + return + } + } + }) + engine.OnFullMatch("随机vtb").SetBlock(true). + Handle(func(ctx *zero.Ctx) { + db, err := gorm.Open("sqlite3", "data/VtbQuotation/vtb.db") + if err != nil { + panic("failed to connect database") + } + defer db.Close() + tc := model.RandomVtb(db) + fc := model.GetFirstCategoryByFirstUid(db, tc.FirstCategoryUid) + if (tc != model.ThirdCategory{}) && (fc != model.FirstCategory{}) { + reg := regexp.MustCompile(regStr) + recordUrl := tc.ThirdCategoryPath + if reg.MatchString(recordUrl) { + log.Println(reg.FindStringSubmatch(recordUrl)[1]) + log.Println(url.QueryEscape(reg.FindStringSubmatch(recordUrl)[1])) + recordUrl = strings.Replace(recordUrl, reg.FindStringSubmatch(recordUrl)[1], url.QueryEscape(reg.FindStringSubmatch(recordUrl)[1]), -1) + recordUrl = strings.Replace(recordUrl, "+", "%20", -1) + log.Println(recordUrl) + } + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("请欣赏"+fc.FirstCategoryName+"的《"+tc.ThirdCategoryName+"》")) + ctx.SendChain(message.Record(recordUrl)) + } + + }) +}