diff --git a/README.md b/README.md index b98a2b41ba..5da037c1f7 100644 --- a/README.md +++ b/README.md @@ -122,8 +122,9 @@ zerobot [-h] [-n nickname] [-t token] [-u url] [-p prefix] [-d|w] [-c|s config.j - [x] /服务列表 - - [x] /服务详情 + - [x] /设置服务列表显示行数 xx + 默认值为9,该设置仅运行时有效,zbp重启后重置 - [x] @Bot 插件冲突检测 (会在本群发送一条消息并在约 1s 后撤回以检测其它同类 bot 中已启用的插件并禁用) @@ -250,7 +251,8 @@ zerobot [-h] [-n nickname] [-t token] [-u url] [-p prefix] [-d|w] [-c|s config.j `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/thesaurus"` - - [x] @Bot 关键词 + - [x] 切换[kimo|傲娇|可爱]词库 + - [x] 设置词库触发概率0.x (0
@@ -751,7 +753,7 @@ print("run[CQ:image,file="+j["img"]+"]") ------插 件 扩 展------ -NeteaseCloudMusicApi项目地址:https://binaryify.github.io/NeteaseCloudMusicApi/#/ + - 本插件内置了[NeteaseCloudMusicApi](https://binaryify.github.io/NeteaseCloudMusicApi/#/)框架的一些功能 - [x] 设置猜歌API帮助 - [x] 设置猜歌API [API首页网址] - [x] 猜歌[开启/关闭][歌单/歌词]自动下载 @@ -1065,6 +1067,10 @@ NeteaseCloudMusicApi项目地址:https://binaryify.github.io/NeteaseCloudMusicAp - [x] 群老婆列表 + - [x] 查好感度[对方Q号|@对方QQ] + + - [x] 好感度列表 + - [x] 重置花名册
@@ -1348,6 +1354,29 @@ NeteaseCloudMusicApi项目地址:https://binaryify.github.io/NeteaseCloudMusicAp - [x] 团队七阶猜单词 + +
+ 一些游戏王插件 + + `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ygo"` + + ##### 白鸽API卡查 + + ###### `"github.com/FloatTech/ZeroBot-Plugin/plugin/ygo/ygocdb.go"` + - [x] /ydp [xxx] + - [x] /yds [xxx] + - [x] /ydb [xxx] + - 注:[xxx]为搜索内容;p:返回一张图片;s:返回一张效果描述;b:高级搜索 + + ##### 集换社卡价查询 + + ###### `"github.com/FloatTech/ZeroBot-Plugin/plugin/ygo/ygotrade.go"` + - [x] 查卡价 [卡名] + - [x] 查卡价 [卡名] -r [稀有度 稀有度 ...] + - [x] 查卡店 [卡名] + - [x] 查卡店 [卡名] -r [稀有度] + - 注:卡店只支持单个稀有度查询 +
鬼东西 @@ -1446,3 +1475,9 @@ GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=0 go build -ldflags "-s -w" - [ZeroBot](https://github.com/wdvxdr1123/ZeroBot) - [ATRI](https://github.com/Kyomotoi/ATRI) + +同时感谢以下开发者对 ZeroBot-Plugin 作出的贡献: + + + + diff --git a/data b/data index 8920298a4f..e8d06b150b 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit 8920298a4fab8a64e6b7da157c2152f5868390c2 +Subproject commit e8d06b150b2cf84d9c7dc2f8a9f573da2b2290fd diff --git a/go.mod b/go.mod index a7ed6b3f44..3ceb710b20 100644 --- a/go.mod +++ b/go.mod @@ -5,14 +5,14 @@ go 1.19 require ( github.com/Baidu-AIP/golang-sdk v1.1.1 github.com/Coloured-glaze/gg v1.3.4 - github.com/FloatTech/AnimeAPI v1.6.1-0.20221121151451-9c3b88bc325d - github.com/FloatTech/floatbox v0.0.0-20221121151328-cac4af114b44 - github.com/FloatTech/sqlite v0.5.1 + github.com/FloatTech/AnimeAPI v1.6.1-0.20221203040820-0dda47e61cd8 + github.com/FloatTech/floatbox v0.0.0-20221203040505-d7352e564906 + github.com/FloatTech/sqlite v1.5.7 github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b - github.com/FloatTech/zbpctrl v1.5.3-0.20221110070900-b2888434e9fc - github.com/FloatTech/zbputils v1.6.1-0.20221121151417-290a1a584dd0 - github.com/RomiChan/syncx v0.0.0-20220404072119-d7ea0ae15a4c - github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc + github.com/FloatTech/zbpctrl v1.5.3-0.20221203040611-11f118e1d5ec + github.com/FloatTech/zbputils v1.6.1-0.20221203040741-3bc28d5e3cd1 + github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e + github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5 github.com/antchfx/htmlquery v1.2.5 github.com/corona10/goimagehash v1.1.0 github.com/fumiama/ahsai v0.1.0 @@ -20,31 +20,31 @@ require ( github.com/fumiama/go-base16384 v1.6.1 github.com/fumiama/go-registry v0.2.5-0.20221121111817-44b0846bdce6 github.com/fumiama/gotracemoe v0.0.3 - github.com/fumiama/sqlite3 v1.14.6 - github.com/fumiama/unibase2n v0.0.0-20221003115227-e7db987de949 + github.com/fumiama/jieba v0.0.0-20221203025406-36c17a10b565 + github.com/fumiama/unibase2n v0.0.0-20221020155353-02876e777430 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 github.com/jinzhu/gorm v1.9.16 github.com/jozsefsallai/gophersauce v1.0.1 - github.com/lucas-clemente/quic-go v0.29.0 - github.com/mroth/weightedrand v0.4.1 + github.com/lucas-clemente/quic-go v0.31.0 + github.com/mroth/weightedrand v1.0.0 github.com/pkg/errors v0.9.1 github.com/pkumza/numcn v1.0.0 - github.com/shirou/gopsutil/v3 v3.22.8 + github.com/shirou/gopsutil/v3 v3.22.11 github.com/sirupsen/logrus v1.9.0 - github.com/tidwall/gjson v1.14.3 + github.com/tidwall/gjson v1.14.4 github.com/wcharczuk/go-chart/v2 v2.1.0 - github.com/wdvxdr1123/ZeroBot v1.6.3 + github.com/wdvxdr1123/ZeroBot v1.6.5 gitlab.com/gomidi/midi/v2 v2.0.25 golang.org/x/image v0.1.0 + gopkg.in/yaml.v3 v3.0.1 ) require ( - github.com/FloatTech/rendercard v0.0.2-0.20221116145901-79858ddd4cad // indirect + github.com/FloatTech/rendercard v0.0.2-0.20221128165614-a41216d2422e // indirect github.com/antchfx/xpath v1.2.1 // indirect github.com/disintegration/imaging v1.6.2 // indirect github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4 // indirect github.com/faiface/beep v1.1.0 // indirect - github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/fumiama/go-simple-protobuf v0.1.0 // indirect github.com/fumiama/gofastTEA v0.0.10 // indirect github.com/gabriel-vasile/mimetype v1.0.4 // indirect @@ -52,37 +52,42 @@ require ( github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect github.com/golang/mock v1.6.0 // indirect + github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect github.com/google/uuid v1.3.0 // indirect github.com/hajimehoshi/oto v0.7.1 // indirect github.com/jfreymuth/oggvorbis v1.0.1 // indirect github.com/jfreymuth/vorbis v1.0.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect - github.com/marten-seemann/qpack v0.2.1 // indirect - github.com/marten-seemann/qtls-go1-18 v0.1.2 // indirect - github.com/marten-seemann/qtls-go1-19 v0.1.0 // indirect + github.com/marten-seemann/qpack v0.3.0 // indirect + github.com/marten-seemann/qtls-go1-18 v0.1.3 // indirect + github.com/marten-seemann/qtls-go1-19 v0.1.1 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect - github.com/nxadm/tail v1.4.8 // indirect - github.com/onsi/ginkgo v1.16.4 // indirect + github.com/onsi/ginkgo/v2 v2.2.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect - github.com/tklauser/go-sysconf v0.3.10 // indirect - github.com/tklauser/numcpus v0.4.0 // indirect + github.com/tklauser/go-sysconf v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.0 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/exp/shiny v0.0.0-20221004215720-b9f4876ce741 // indirect + golang.org/x/exp/shiny v0.0.0-20221126150942-6ab00d035af9 // indirect golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f // indirect golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 // indirect + golang.org/x/sys v0.2.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/tools v0.1.12 // indirect - gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect - modernc.org/libc v1.19.0 // indirect + modernc.org/libc v1.21.5 // indirect modernc.org/mathutil v1.5.0 // indirect modernc.org/memory v1.4.0 // indirect + modernc.org/sqlite v1.20.0 // indirect ) + +replace modernc.org/sqlite => github.com/fumiama/sqlite3 v1.20.0-with-win386 + +replace github.com/remyoudompheng/bigfft => github.com/fumiama/bigfft v0.0.0-20211011143303-6e0bfa3c836b diff --git a/go.sum b/go.sum index 5f28879a12..32333e724f 100644 --- a/go.sum +++ b/go.sum @@ -4,32 +4,36 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/Coloured-glaze/gg v1.3.4 h1:l31zIF/HaVwkzjrj+A56RGQoSKyKuR1IWtIrqXGFStI= github.com/Coloured-glaze/gg v1.3.4/go.mod h1:Ih5NLNNDHOy3RJbB0EPqGTreIzq/H02TGThIagh8HJg= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/FloatTech/AnimeAPI v1.6.1-0.20221121151451-9c3b88bc325d h1:CCT9Ab9cs4StPOTjuRN5YeDNWIkLfMnYgb7s1vcyfK8= -github.com/FloatTech/AnimeAPI v1.6.1-0.20221121151451-9c3b88bc325d/go.mod h1:8u8x5GEZsRh4wXdpAxO1Tdp0CA/3kUZ1SMSS44/nqFw= -github.com/FloatTech/floatbox v0.0.0-20221121151328-cac4af114b44 h1:/Er1NIsb3giFG0rQqA2TO1JkN8TTBDRcmaektAvEfK8= -github.com/FloatTech/floatbox v0.0.0-20221121151328-cac4af114b44/go.mod h1:DUd62cKBBLBK+8HEABQ6hM2bfZ3TMLOAMKaf1R2w7Pw= -github.com/FloatTech/rendercard v0.0.2-0.20221116145901-79858ddd4cad h1:Bidfkufddy52ywvjCpXwSnZqgcQgv7xF1rBDZYhbSOc= -github.com/FloatTech/rendercard v0.0.2-0.20221116145901-79858ddd4cad/go.mod h1:e2M5OWspdblwq182zbVgRefiOc+gXtB1XzTW/2z86/I= -github.com/FloatTech/sqlite v0.5.1 h1:IjTdnqMVIVIoIEFXhvh/KKBfYxFvG0tk7Rghz65/DAU= -github.com/FloatTech/sqlite v0.5.1/go.mod h1:i33d92OtR8jcp5fBUvQtospf27+MkfUxnGwnZ95E/dA= +github.com/FloatTech/AnimeAPI v1.6.1-0.20221203040820-0dda47e61cd8 h1:HlJDqBlEuS1337zBhjjyutf+GESQJ6wMIk9zBoOVgBI= +github.com/FloatTech/AnimeAPI v1.6.1-0.20221203040820-0dda47e61cd8/go.mod h1:9d56SRgNBXZrs2mnndEMBuctdFHhxoTwGBvOK3jIVi0= +github.com/FloatTech/floatbox v0.0.0-20221203040505-d7352e564906 h1:Rxc/7zh/dR96prmq/mOjmtam261CSRwZPFXi/+oU7d8= +github.com/FloatTech/floatbox v0.0.0-20221203040505-d7352e564906/go.mod h1:i8k21EWZVoSz7/0PB2reDQXnGR6eEL9VytEev2XuqLc= +github.com/FloatTech/rendercard v0.0.2-0.20221128165614-a41216d2422e h1:7bF01RHsYS99Zp+OWfob1W/Cymho6fcggoRSpiuiYB8= +github.com/FloatTech/rendercard v0.0.2-0.20221128165614-a41216d2422e/go.mod h1:e2M5OWspdblwq182zbVgRefiOc+gXtB1XzTW/2z86/I= +github.com/FloatTech/sqlite v1.5.7 h1:Bvo4LSojcZ6dVtbHrkqvt6z4v8e+sj0G5PSUIvdawsk= +github.com/FloatTech/sqlite v1.5.7/go.mod h1:zFbHzRfB+CJ+VidfjuVbrcin3DAz283F7hF1hIeHzpY= github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b h1:tvciXWq2nuvTbFeJGLDNIdRX3BI546D3O7k7vrVueZw= github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs= -github.com/FloatTech/zbpctrl v1.5.3-0.20221110070900-b2888434e9fc h1:jNHQsG7kKKkRwey4u9XpQIIBfNXX3SLBCeiTyjhBRQc= -github.com/FloatTech/zbpctrl v1.5.3-0.20221110070900-b2888434e9fc/go.mod h1:zfrIWujK6ORPhOuUUzeKGNOLGI/XXz+78FRHRF9zEFo= -github.com/FloatTech/zbputils v1.6.1-0.20221121151417-290a1a584dd0 h1:0AnaF4d7BCMfdeozhaQvHF2Jr8lYkm7J65FzWIETGsc= -github.com/FloatTech/zbputils v1.6.1-0.20221121151417-290a1a584dd0/go.mod h1:7Nydmv+4LXfsjy6fxan7z0nK7kzQ7C0NvXR7nVDQa48= +github.com/FloatTech/zbpctrl v1.5.3-0.20221203040611-11f118e1d5ec h1:7v8vUn83DTD8mKRNmBFS4tp7OczWikrZPxEolrpMUWI= +github.com/FloatTech/zbpctrl v1.5.3-0.20221203040611-11f118e1d5ec/go.mod h1:9K0wS8sj6H8goHniT0zpaqd2rCrVbSbbCIDLrQKvCns= +github.com/FloatTech/zbputils v1.6.1-0.20221203040741-3bc28d5e3cd1 h1:b/DKfa17Q0FnNe01LyyPLHK80kIUK4ZZ0DNDwZ0PoVc= +github.com/FloatTech/zbputils v1.6.1-0.20221203040741-3bc28d5e3cd1/go.mod h1:0ds7lVGqlctA6u6S7vbLRr4w7SQIaVJCdIGKFXS0u2g= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/RomiChan/syncx v0.0.0-20220404072119-d7ea0ae15a4c h1:cNPOdTNiVwxLpROLjXCgbIPvdkE+BwvxDvgmdYmWx6Q= -github.com/RomiChan/syncx v0.0.0-20220404072119-d7ea0ae15a4c/go.mod h1:KqZzu7slNKROh3TSYEH/IUMG6f4M+1qubZ5e52QypsE= -github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc h1:AAx50/fb/xS4lvsdQg+bFbGvqSDhyV1MF+p2PLCamZ0= -github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc/go.mod h1:OMmITAib6POA37xCichWM0aRnoVpSMZO1rB/G01wrr0= +github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e h1:wR3MXQ3VbUlPKOOUwLOYgh/QaJThBTYtsl673O3lqSA= +github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w= +github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5 h1:bBmmB7he0iVN4m5mcehfheeRUEer/Avo4ujnxI3uCqs= +github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5/go.mod h1:0UcFaCkhp6vZw6l5Dpq0Dp673CoF9GdvA8lTfst0GiU= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/antchfx/htmlquery v1.2.5 h1:1lXnx46/1wtv1E/kzmH8vrfMuUKYgkdDBA9pIdMJnk4= github.com/antchfx/htmlquery v1.2.5/go.mod h1:2MCVBzYVafPBmKbrmwB9F5xdd+IEgRY61ci2oOsOQVw= github.com/antchfx/xpath v1.2.1 h1:qhp4EW6aCOVr5XIkT+l6LJ9ck/JsUH/yyauNgTQkBF8= github.com/antchfx/xpath v1.2.1/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/corona10/goimagehash v1.1.0 h1:teNMX/1e+Wn/AYSbLHX8mj+mF9r60R1kBeqE9MkoYwI= github.com/corona10/goimagehash v1.1.0/go.mod h1:VkvE0mLn84L4aF8vCb6mafVajEb6QYMHl2ZJLn0mOGI= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/d4l3k/messagediff v1.2.2-0.20190829033028-7e0a312ae40b/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo= 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= @@ -38,18 +42,16 @@ github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6RO 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/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/faiface/beep v1.1.0 h1:A2gWP6xf5Rh7RG/p9/VAW2jRSDEGQm5sbOb38sf5d4c= github.com/faiface/beep v1.1.0/go.mod h1:6I8p6kK2q4opL/eWb+kAkk38ehnTunWeToJB+s51sT4= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fumiama/ahsai v0.1.0 h1:LXD61Kaj6kJHa3AEGsLIfKNzcgaVxg7JB72OR4yNNZ4= github.com/fumiama/ahsai v0.1.0/go.mod h1:fFeNnqgo44i8FIaguK659aQryuZeFy+4klYLQu/rfdk= +github.com/fumiama/bigfft v0.0.0-20211011143303-6e0bfa3c836b h1:Zt3pFQditAdWTHCOVkiloc9ZauBoWrb37guFV4iIRvE= +github.com/fumiama/bigfft v0.0.0-20211011143303-6e0bfa3c836b/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/fumiama/cron v1.3.0 h1:ZWlwuexF+HQHl3cYytEE5HNwD99q+3vNZF1GrEiXCFo= github.com/fumiama/cron v1.3.0/go.mod h1:bz5Izvgi/xEUI8tlBN8BI2jr9Moo8N4or0KV8xXuPDY= github.com/fumiama/go-base16384 v1.6.1 h1:4yb4JgmBJDnQtq3XGXXdLrVwEnRpjhMUt4eAcsNeA30= @@ -62,10 +64,12 @@ github.com/fumiama/gofastTEA v0.0.10 h1:JJJ+brWD4kie+mmK2TkspDXKzqq0IjXm89aGYfoG github.com/fumiama/gofastTEA v0.0.10/go.mod h1:RIdbYZyB4MbH6ZBlPymRaXn3cD6SedlCu5W/HHfMPBk= github.com/fumiama/gotracemoe v0.0.3 h1:iI5EbE9A3UUbfukG6+/soYPjp1S31eCNYf4tw7s6/Jc= github.com/fumiama/gotracemoe v0.0.3/go.mod h1:tyqahdUzHf0bQIAVY/GYmDWvYYe5ik1ZbhnGYh+zl40= -github.com/fumiama/sqlite3 v1.14.6 h1:+e+iygyiDXQJVi7xeXIviBvR7hAc5y20WA9hRwfKn10= -github.com/fumiama/sqlite3 v1.14.6/go.mod h1:Xx9a2/OtHuy9pBjow0N+bE/RhNeZ7zZz5xh25vqbA5A= -github.com/fumiama/unibase2n v0.0.0-20221003115227-e7db987de949 h1:VAzR8aoS2SCEBmRF9rqCPyXgXoP8mZ1viNL4mLWUg0Q= -github.com/fumiama/unibase2n v0.0.0-20221003115227-e7db987de949/go.mod h1:lEaZsT4FRSqcjnQ5q8y+mkenkzR/r1D3BJmfdp0vqDg= +github.com/fumiama/jieba v0.0.0-20221203025406-36c17a10b565 h1:sQuR2+N5HurnvsZhiKdEg+Ig354TaqgCQRxd/0KgIOQ= +github.com/fumiama/jieba v0.0.0-20221203025406-36c17a10b565/go.mod h1:UUEvyLTJ7yoOA/viKG4wEis4ERydM7+Ny6gZUWgkS80= +github.com/fumiama/sqlite3 v1.20.0-with-win386 h1:ZR1AXGBEtkfq9GAXehOVcwn+aaCG8itrkgEsz4ggx5k= +github.com/fumiama/sqlite3 v1.20.0-with-win386/go.mod h1:Os58MHwYCcYZCy2PGChBrQtBAw5/LS1ZZOkfc+C/I7s= +github.com/fumiama/unibase2n v0.0.0-20221020155353-02876e777430 h1:XL4SnagpaVHYybnnj6whQxmt8Ps9/kaG6sCNn4X1GGA= +github.com/fumiama/unibase2n v0.0.0-20221020155353-02876e777430/go.mod h1:lEaZsT4FRSqcjnQ5q8y+mkenkzR/r1D3BJmfdp0vqDg= github.com/gabriel-vasile/mimetype v1.0.4 h1:uBejfH8l3/2f+5vjl1e4xIaSyNEhRBZ5N/ij7ohpNd8= github.com/gabriel-vasile/mimetype v1.0.4/go.mod h1:6CDPel/o/3/s4+bp6kIbsWATq8pmgOisOPG40CJa6To= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= @@ -88,28 +92,19 @@ github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18h github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hajimehoshi/go-mp3 v0.3.0/go.mod h1:qMJj/CSDxx6CGHiZeCgbiq2DSUkbK0UbtXShQcnfyMM= github.com/hajimehoshi/oto v0.6.1/go.mod h1:0QXGEkbuJRohbJaxr7ZQSxnju7hEhseiPx2hrh6raOI= github.com/hajimehoshi/oto v0.7.1 h1:I7maFPz5MBCwiutOrz++DLdbr4rTzBsbBuV2VpgU9kk= github.com/hajimehoshi/oto v0.7.1/go.mod h1:wovJ8WWMfFKvP587mhHgot/MBr4DnNy9m6EepeVGnos= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/icza/bitio v1.0.0/go.mod h1:0jGnlLAx8MKMr9VGnn/4YrvZiprkvBelsVIbA9Jjr9A= github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6/go.mod h1:xQig96I1VNBDIWGCdTt54nHt6EeI639SmHycLYL7FkA= github.com/jfreymuth/oggvorbis v1.0.1 h1:NT0eXBgE2WHzu6RT/6zcb2H10Kxj6Fm3PccT0LE6bqw= @@ -124,21 +119,23 @@ 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/jozsefsallai/gophersauce v1.0.1 h1:BA3ovtQRrAb1qYU9JoRLbDHpxnDunlNcEkEfhCvDDCM= github.com/jozsefsallai/gophersauce v1.0.1/go.mod h1:YVEI7djliMTmZ1Vh01YPF8bUHi+oKhe3yXgKf1T49vg= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 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/lucas-clemente/quic-go v0.29.0 h1:Vw0mGTfmWqGzh4jx/kMymsIkFK6rErFVmg+t9RLrnZE= -github.com/lucas-clemente/quic-go v0.29.0/go.mod h1:CTcNfLYJS2UuRNB+zcNlgvkjBhxX6Hm3WUxxAQx2mgE= +github.com/lucas-clemente/quic-go v0.31.0 h1:MfNp3fk0wjWRajw6quMFA3ap1AVtlU+2mtwmbVogB2M= +github.com/lucas-clemente/quic-go v0.31.0/go.mod h1:0wFbizLgYzqHqtlyxyCaJKlE7bYgE6JQ+54TLd/Dq2g= github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/marten-seemann/qpack v0.2.1 h1:jvTsT/HpCn2UZJdP+UUB53FfUUgeOyG5K1ns0OJOGVs= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM= -github.com/marten-seemann/qtls-go1-18 v0.1.2/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= -github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU= -github.com/marten-seemann/qtls-go1-19 v0.1.0/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/marten-seemann/qpack v0.3.0 h1:UiWstOgT8+znlkDPOg2+3rIuYXJ2CnGDkGUXN6ki6hE= +github.com/marten-seemann/qpack v0.3.0/go.mod h1:cGfKPBiP4a9EQdxCwEwI/GEeWAsjSekBvx/X8mh58+g= +github.com/marten-seemann/qtls-go1-18 v0.1.3 h1:R4H2Ks8P6pAtUagjFty2p7BVHn3XiwDAl7TTQf5h7TI= +github.com/marten-seemann/qtls-go1-18 v0.1.3/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= +github.com/marten-seemann/qtls-go1-19 v0.1.1 h1:mnbxeq3oEyQxQXwI4ReCgW9DPoPR94sNlqWoDZnjRIE= +github.com/marten-seemann/qtls-go1-19 v0.1.1/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -146,21 +143,14 @@ github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/ github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mewkiz/flac v1.0.7/go.mod h1:yU74UH277dBUpqxPouHSQIar3G1X/QIclVbFahSd1pU= github.com/mewkiz/pkg v0.0.0-20190919212034-518ade7978e2/go.mod h1:3E2FUC/qYUfM8+r9zAwpeHJzqRVVMIYnpzD/clwWxyA= -github.com/mroth/weightedrand v0.4.1 h1:rHcbUBopmi/3x4nnrvwGJBhX9d0vk+KgoLUZeDP6YyI= -github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= +github.com/mroth/weightedrand v1.0.0 h1:V8JeHChvl2MP1sAoXq4brElOcza+jxLkRuwvtQu8L3E= +github.com/mroth/weightedrand v1.0.0/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= +github.com/onsi/ginkgo/v2 v2.2.0 h1:3ZNA3L1c5FYDFTTxbFeVGGD8jYvjYauHD30YgLxVsNI= +github.com/onsi/ginkgo/v2 v2.2.0/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= +github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -170,34 +160,35 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/shirou/gopsutil/v3 v3.22.8 h1:a4s3hXogo5mE2PfdfJIonDbstO/P+9JszdfhAHSzD9Y= -github.com/shirou/gopsutil/v3 v3.22.8/go.mod h1:s648gW4IywYzUfE/KjXxUsqrqx/T2xO5VqOXxONeRfI= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/shirou/gopsutil/v3 v3.22.11 h1:kxsPKS+Eeo+VnEQ2XCaGJepeP6KY53QoRTETx3+1ndM= +github.com/shirou/gopsutil/v3 v3.22.11/go.mod h1:xl0EeL4vXJ+hQMAGN8B9VFpxukEMA0XdevQOe5MZ1oY= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw= -github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= +github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= +github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= +github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= +github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= +github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/wcharczuk/go-chart/v2 v2.1.0 h1:tY2slqVQ6bN+yHSnDYwZebLQFkphK4WNrVwnt7CJZ2I= github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA= -github.com/wdvxdr1123/ZeroBot v1.6.3 h1:Xf+rM8fR9Etc7ydcGHuqCk0ulAAn7Oa7nD9Zy/qZ6Pk= -github.com/wdvxdr1123/ZeroBot v1.6.3/go.mod h1:shG/ruauisKaVcov4amrFJtkeDl7nl+Q00IXB2PqFsc= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/wdvxdr1123/ZeroBot v1.6.5 h1:w2dwDnMqYpwVAO3DPESznavAJ5T2jrqgU46owd3PFi4= +github.com/wdvxdr1123/ZeroBot v1.6.5/go.mod h1:T5kD5vLi/YxL/fyDOCOaawi96LRBdJjcXh2CIjDyFfg= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= @@ -209,15 +200,14 @@ golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp/shiny v0.0.0-20221004215720-b9f4876ce741 h1:b7y8iQCnzOE0NhgpMj2yHw17Us+lhXxFbdzKlTpqm5I= -golang.org/x/exp/shiny v0.0.0-20221004215720-b9f4876ce741/go.mod h1:VjAR7z0ngyATZTELrBSkxOOHhhlnVUxDye4mcjx5h/8= +golang.org/x/exp/shiny v0.0.0-20221126150942-6ab00d035af9 h1:tLxpBz7qD8qFkRDC159unetNbxKp4zeqsqw2rLwvdxc= +golang.org/x/exp/shiny v0.0.0-20221126150942-6ab00d035af9/go.mod h1:VjAR7z0ngyATZTELrBSkxOOHhhlnVUxDye4mcjx5h/8= golang.org/x/image v0.0.0-20190220214146-31aff87c08e9/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -232,12 +222,10 @@ golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -245,54 +233,35 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL 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-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -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-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/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 h1:ohgcoMbSofXygzo6AD2I1kz3BFmW1QArPYTtwEM3UXc= -golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= @@ -301,8 +270,6 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= @@ -310,138 +277,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.20/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/cc/v3 v3.35.22/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60= -modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw= -modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI= -modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag= -modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw= -modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ= -modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c= -modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo= -modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg= -modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I= -modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs= -modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8= -modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE= -modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk= -modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w= -modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE= -modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8= -modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc= -modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU= -modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE= -modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk= -modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI= -modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE= -modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg= -modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74= -modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU= -modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU= -modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc= -modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM= -modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ= -modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84= -modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ= -modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY= -modernc.org/ccgo/v3 v3.12.84/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w= -modernc.org/ccgo/v3 v3.12.86/go.mod h1:dN7S26DLTgVSni1PVA3KxxHTcykyDurf3OgUzNqTSrU= -modernc.org/ccgo/v3 v3.12.90/go.mod h1:obhSc3CdivCRpYZmrvO88TXlW0NvoSVvdh/ccRjJYko= -modernc.org/ccgo/v3 v3.12.92/go.mod h1:5yDdN7ti9KWPi5bRVWPl8UNhpEAtCjuEE7ayQnzzqHA= -modernc.org/ccgo/v3 v3.13.1/go.mod h1:aBYVOUfIlcSnrsRVU8VRS35y2DIfpgkmVkYZ0tpIXi4= -modernc.org/ccgo/v3 v3.15.9/go.mod h1:md59wBwDT2LznX/OTCPoVS6KIsdRgY8xqQwBV+hkTH0= -modernc.org/ccgo/v3 v3.15.10/go.mod h1:wQKxoFn0ynxMuCLfFD09c8XPUCc8obfchoVR9Cn0fI8= -modernc.org/ccgo/v3 v3.15.12/go.mod h1:VFePOWoCd8uDGRJpq/zfJ29D0EVzMSyID8LCMWYbX6I= -modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= -modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q= -modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg= -modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M= -modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU= -modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE= -modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso= -modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8= -modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8= -modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I= -modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk= -modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY= -modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE= -modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg= -modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM= -modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg= -modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo= -modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8= -modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ= -modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA= -modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM= -modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg= -modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE= -modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM= -modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU= -modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw= -modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M= -modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18= -modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8= -modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= -modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0= -modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI= -modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE= -modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY= -modernc.org/libc v1.11.88/go.mod h1:h3oIVe8dxmTcchcFuCcJ4nAWaoiwzKCdv82MM0oiIdQ= -modernc.org/libc v1.11.98/go.mod h1:ynK5sbjsU77AP+nn61+k+wxUGRx9rOFcIqWYYMaDZ4c= -modernc.org/libc v1.11.101/go.mod h1:wLLYgEiY2D17NbBOEp+mIJJJBGSiy7fLL4ZrGGZ+8jI= -modernc.org/libc v1.12.0/go.mod h1:2MH3DaF/gCU8i/UBiVE1VFRos4o523M7zipmwH8SIgQ= -modernc.org/libc v1.14.1/go.mod h1:npFeGWjmZTjFeWALQLrvklVmAxv4m80jnG3+xI8FdJk= -modernc.org/libc v1.14.2/go.mod h1:MX1GBLnRLNdvmK9azU9LCxZ5lMyhrbEMK8rG3X/Fe34= -modernc.org/libc v1.14.3/go.mod h1:GPIvQVOVPizzlqyRX3l756/3ppsAgg1QgPxjr5Q4agQ= -modernc.org/libc v1.14.5/go.mod h1:2PJHINagVxO4QW/5OQdRrvMYo+bm5ClpUFfyXCYl9ak= -modernc.org/libc v1.19.0 h1:bXyVhGQg6KIClTr8FMVIDPl7jtbcs7aS5WP7vLDaxPs= -modernc.org/libc v1.19.0/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= -modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/libc v1.21.5 h1:xBkU9fnHV+hvZuPSRszN0AXDG4M7nwPLwTWwkYcvLCI= +modernc.org/libc v1.21.5/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= -modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM= modernc.org/memory v1.4.0 h1:crykUfNSnMAXaOJnnxcSzbUGMqkLWjklJKkBK2nwZwk= modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/kanban/banner.go b/kanban/banner.go index 2c90f2142c..34c0a277be 100644 --- a/kanban/banner.go +++ b/kanban/banner.go @@ -10,7 +10,7 @@ import ( var ( // Banner ... Banner = "* OneBot + ZeroBot + Golang\n" + - "* Version 1.6.0-beta1 - 2022-11-15 11:13:42 +0800 CST\n" + + "* Version 1.6.0-beta3 - 2022-12-03 13:42:40 +0800 CST\n" + "* Copyright © 2020 - 2022 FloatTech. All Rights Reserved.\n" + "* Project: https://github.com/FloatTech/ZeroBot-Plugin" reg = registry.NewRegReader("reilia.fumiama.top:32664", control.Md5File, "fumiama") diff --git a/main.go b/main.go index fcf323afcc..df2699c54d 100644 --- a/main.go +++ b/main.go @@ -136,6 +136,7 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wenxinAI" // 百度文心AI画图 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/word_count" // 聊天热词 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wordle" // 猜单词 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ygo" // 游戏王相关插件 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ymgal" // 月幕galgame // _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wtf" // 鬼东西 diff --git a/plugin/ai_reply/ai_tts.go b/plugin/ai_reply/ai_tts.go index eeb4f46e4f..a69c5eb3a2 100644 --- a/plugin/ai_reply/ai_tts.go +++ b/plugin/ai_reply/ai_tts.go @@ -12,7 +12,7 @@ import ( ) const ( - cnapi = "https://genshin.azurewebsites.net/api/speak?format=mp3&id=%d&text=%s" + cnapi = "https://genshin.azurewebsites.net/api/speak?format=mp3&id=%d&text=%s&code=%s" ) // 每个角色的测试文案 @@ -132,7 +132,8 @@ func getReplyMode(ctx *zero.Ctx) (name string) { *************************************************************/ type ttsmode struct { sync.RWMutex - mode map[int64]int64 + apikey string + mode map[int64]int64 } func list(list []string, num int) string { @@ -164,6 +165,24 @@ func newttsmode() *ttsmode { return tts } +func (tts *ttsmode) getAPIKey() string { + return tts.apikey +} + +func (tts *ttsmode) setAPIKey(ctx *zero.Ctx, key string) error { + gid := ctx.Event.GroupID + if gid == 0 { + gid = -ctx.Event.UserID + } + m := ctx.State["manager"].(*ctrl.Control[*zero.Ctx]) + err := m.Manager.SetExtra(gid, &key) + if err != nil { + return errors.New("内部错误") + } + tts.apikey = key + return nil +} + func (tts *ttsmode) setSoundMode(ctx *zero.Ctx, name string) error { gid := ctx.Event.GroupID if gid == 0 { diff --git a/plugin/ai_reply/main.go b/plugin/ai_reply/main.go index 23acf9de1f..7ff19268e8 100644 --- a/plugin/ai_reply/main.go +++ b/plugin/ai_reply/main.go @@ -20,7 +20,7 @@ import ( var replyModes = [...]string{"青云客", "小爱"} func init() { // 插件主体 - enOftts := control.Register("tts", &ctrl.Options[*zero.Ctx]{ + ent := control.Register("tts", &ctrl.Options[*zero.Ctx]{ DisableOnDefault: true, Brief: "人工智能语音回复", Help: "- @Bot 任意文本(任意一句话回复)\n" + @@ -30,7 +30,7 @@ func init() { // 插件主体 "当前适用的原神人物含有以下:\n" + list(soundList[:], 5), }) tts := newttsmode() - enOfreply := control.Register("aireply", &ctrl.Options[*zero.Ctx]{ + enr := control.Register("aireply", &ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Brief: "人工智能回复", Help: "- @Bot 任意文本(任意一句话回复)\n- 设置回复模式[青云客|小爱]", @@ -38,7 +38,7 @@ func init() { // 插件主体 /************************************************************* *******************************AIreply************************ *************************************************************/ - enOfreply.OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser). + enr.OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { aireply := aireply.NewAIReply(getReplyMode(ctx)) reply := message.ParseMessageFromString(aireply.Talk(ctx.ExtractPlainText(), zero.BotConfig.NickName[0])) @@ -51,7 +51,7 @@ func init() { // 插件主体 } ctx.Send(reply) }) - enOfreply.OnPrefix("设置回复模式", zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { + enr.OnPrefix("设置回复模式", zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { param := ctx.State["args"].(string) err := setReplyMode(ctx, param) if err != nil { @@ -63,7 +63,7 @@ func init() { // 插件主体 /************************************************************* ***********************tts************************************ *************************************************************/ - enOftts.OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser). + ent.OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { msg := ctx.ExtractPlainText() // 获取回复模式 @@ -82,13 +82,13 @@ func init() { // 插件主体 } return numcn.EncodeFromFloat64(f) }), - ))).Add("cache", 0) + ), tts.getAPIKey())).Add("cache", 0) // 发送语音 if ID := ctx.SendChain(record); ID.ID() == 0 { ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(reply)) } }) - enOftts.OnRegex(`^设置语音模式(.*)$`, zero.AdminPermission, func(ctx *zero.Ctx) bool { + ent.OnRegex(`^设置语音模式(.*)$`, zero.AdminPermission, func(ctx *zero.Ctx) bool { param := ctx.State["regex_matched"].([]string)[1] if _, ok := testRecord[param]; !ok { return false @@ -108,7 +108,7 @@ func init() { // 插件主体 ctx.SendChain(message.Text("配置的语音人物数据丢失!请重新设置语音人物。")) return } - record := message.Record(fmt.Sprintf(cnapi, i, url.QueryEscape(testRecord[soundList[i]]))).Add("cache", 0) + record := message.Record(fmt.Sprintf(cnapi, i, url.QueryEscape(testRecord[soundList[i]]), tts.getAPIKey())).Add("cache", 0) if ID := ctx.SendChain(record); ID.ID() == 0 { ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置失败!无法发送测试语音,请重试。")) return @@ -116,7 +116,7 @@ func init() { // 插件主体 time.Sleep(time.Second * 2) ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功")) }) - enOftts.OnRegex(`^设置默认语音模式(.*)$`, zero.SuperUserPermission, func(ctx *zero.Ctx) bool { + ent.OnRegex(`^设置默认语音模式(.*)$`, zero.SuperUserPermission, func(ctx *zero.Ctx) bool { param := ctx.State["regex_matched"].([]string)[1] if _, ok := testRecord[param]; !ok { return false @@ -132,7 +132,7 @@ func init() { // 插件主体 } ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功")) }) - enOftts.OnFullMatch("恢复成默认语音模式", zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { + ent.OnFullMatch("恢复成默认语音模式", zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { err := tts.resetSoundMode(ctx) if err != nil { ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err)) @@ -142,4 +142,12 @@ func init() { // 插件主体 index := tts.getSoundMode(ctx) ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功,当前为", soundList[index])) }) + ent.OnRegex(`^设置原神语音\s*api\s*key\s*([0-9a-zA-Z-_]{54}==)$`, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { + err := tts.setAPIKey(ctx, ctx.State["regex_matched"].([]string)[1]) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + ctx.SendChain(message.Text("设置成功")) + }) } diff --git a/plugin/bilibili/bilibilimodel.go b/plugin/bilibili/bilibilimodel.go index b0138771ca..3fce1d01b1 100644 --- a/plugin/bilibili/bilibilimodel.go +++ b/plugin/bilibili/bilibilimodel.go @@ -5,7 +5,6 @@ import ( "github.com/FloatTech/floatbox/binary" "github.com/FloatTech/floatbox/web" - _ "github.com/fumiama/sqlite3" // use sql "github.com/jinzhu/gorm" "github.com/tidwall/gjson" ) diff --git a/plugin/bilibili/bilibilipushmodel.go b/plugin/bilibili/bilibilipushmodel.go index 067422bced..70f6c9ee0c 100644 --- a/plugin/bilibili/bilibilipushmodel.go +++ b/plugin/bilibili/bilibilipushmodel.go @@ -4,7 +4,6 @@ import ( "encoding/json" "os" - _ "github.com/fumiama/sqlite3" // import sql "github.com/jinzhu/gorm" ) diff --git a/plugin/moegoe/main.go b/plugin/moegoe/main.go index 83d189fbaf..6cff5aebfc 100644 --- a/plugin/moegoe/main.go +++ b/plugin/moegoe/main.go @@ -16,7 +16,7 @@ import ( const ( jpapi = "https://moegoe.azurewebsites.net/api/speak?text=%s&id=%d" krapi = "https://moegoe.azurewebsites.net/api/speakkr?text=%s&id=%d" - cnapi = "https://genshin.azurewebsites.net/api/speak?format=mp3&text=%s&id=%d" + cnapi = "https://genshin.azurewebsites.net/api/speak?format=mp3&text=%s&id=%d&code=%s" ) var speakers = map[string]uint{ @@ -49,6 +49,21 @@ func init() { Handle(func(ctx *zero.Ctx) { text := ctx.State["regex_matched"].([]string)[2] id := speakers[ctx.State["regex_matched"].([]string)[1]] - ctx.SendChain(message.Record(fmt.Sprintf(cnapi, url.QueryEscape(text), id))) + c, ok := control.Lookup("tts") + if !ok { + ctx.SendChain(message.Text("ERROR: plugin tts not found")) + return + } + var key string + gid := ctx.Event.GroupID + if gid == 0 { + gid = -ctx.Event.UserID + } + err := c.Manager.GetExtra(gid, &key) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + ctx.SendChain(message.Record(fmt.Sprintf(cnapi, url.QueryEscape(text), id, key))) }) } diff --git a/plugin/nativesetu/data.go b/plugin/nativesetu/data.go index 6d3aa05a21..b1cbe72e6c 100644 --- a/plugin/nativesetu/data.go +++ b/plugin/nativesetu/data.go @@ -33,10 +33,8 @@ type nsetu struct { func (n *nsetu) List() (l []string) { if file.IsExist(n.db.DBPath) { - err := n.db.Open(time.Hour * 24) - if err == nil { - l, err = n.db.ListTables() - } + var err error + l, err = n.db.ListTables() if err != nil { logrus.Errorln("[nsetu]", err) } @@ -49,6 +47,10 @@ func (n *nsetu) scanall(path string) error { root := os.DirFS(path) _ = n.db.Close() _ = os.Remove(n.db.DBPath) + err := n.db.Open(time.Hour * 24) + if err != nil { + return err + } return fs.WalkDir(root, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err diff --git a/plugin/nativesetu/main.go b/plugin/nativesetu/main.go index 802ea2e7a0..cec363d847 100644 --- a/plugin/nativesetu/main.go +++ b/plugin/nativesetu/main.go @@ -4,6 +4,7 @@ package nativesetu import ( "fmt" "os" + "time" "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" @@ -42,6 +43,10 @@ func init() { logrus.Infoln("[nsetu] set setu dir to", setupath) } } + err := ns.db.Open(time.Hour * 24) + if err != nil { + panic(err) + } engine.OnRegex(`^本地(.*)$`, fcext.ValueInList(func(ctx *zero.Ctx) string { return ctx.State["regex_matched"].([]string)[1] }, ns)).SetBlock(true). Handle(func(ctx *zero.Ctx) { diff --git a/plugin/qqwife/command.go b/plugin/qqwife/command.go index 151f76f595..dca75f11d7 100644 --- a/plugin/qqwife/command.go +++ b/plugin/qqwife/command.go @@ -5,6 +5,8 @@ import ( "math/rand" "sort" "strconv" + "strings" + "sync" "time" "github.com/FloatTech/floatbox/math" @@ -24,46 +26,45 @@ import ( "github.com/FloatTech/floatbox/file" "github.com/FloatTech/floatbox/img/writer" "github.com/FloatTech/zbputils/img/text" - // 货币系统 - "github.com/FloatTech/AnimeAPI/wallet" ) // nolint: asciicheck -// nolint: asciicheck +//nolint: asciicheck +type 婚姻登记 struct { + db *sql.Sqlite + sync.RWMutex +} + +// 群设置 +type updateinfo struct { + GID int64 + Updatetime string // 登记时间 + CanMatch int // 嫁婚开关 + CanNtr int // Ntr开关 + CDtime float64 // CD时间 +} + +// 结婚证信息 +type userinfo struct { + User int64 // 用户身份证 + Target int64 // 对象身份证号 + Username string // 户主名称 + Targetname string // 对象名称 + Updatetime string // 登记时间 + +} + var ( + // nolint: asciicheck + //nolint: asciicheck 民政局 = &婚姻登记{ db: &sql.Sqlite{}, } - sendtext = [...][]string{ - { // 表白成功 - "是个勇敢的孩子(*/ω\*) 今天的运气都降临在你的身边~\n\n", - "(´・ω・`)对方答应了你 并表示愿意当今天的CP\n\n", - }, - { // 表白失败 - "今天的运气有一点背哦~明天再试试叭", - "_(:з」∠)_下次还有机会 咱抱抱你w", - "今天失败了惹. 摸摸头~咱明天还有机会", - }, - { // ntr成功 - "因为你的个人魅力~~今天他就是你的了w\n\n", - }, - { // 离婚失败 - "打是情,骂是爱,不打不亲不相爱。答应我不要分手。", - "床头打架床尾和,夫妻没有隔夜仇。安啦安啦,不要闹变扭。", - }, - { // 离婚成功 - "离婚成功力\n话说你不考虑当个1?", - "离婚成功力\n天涯何处无芳草,何必单恋一枝花?不如再摘一支(bushi", - }, - } -) - -func init() { - engine := control.Register("qqwife", &ctrl.Options[*zero.Ctx]{ + engine = control.Register("qqwife", &ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Brief: "一群一天一夫一妻制群老婆", - Help: "- 娶群友\n- 群老婆列表\n- [允许|禁止]自由恋爱\n- [允许|禁止]牛头人\n- 设置CD为xx小时 →(默认12小时)\n- 重置花名册\n- 重置所有花名册(用于清除所有群数据及其设置)\n" + + Help: "- 娶群友\n- 群老婆列表\n- [允许|禁止]自由恋爱\n- [允许|禁止]牛头人\n- 设置CD为xx小时 →(默认12小时)\n- 重置花名册\n- 重置所有花名册(用于清除所有群数据及其设置)\n- 查好感度[对方Q号|@对方QQ]\n- 好感度列表\n" + "--------------------------------\n以下指令存在CD,不跨天刷新,前两个受指令开关\n--------------------------------\n" + "- (娶|嫁)@对方QQ\n自由选择对象, 自由恋爱(好感度越高成功率越高,保底30%概率)\n" + "- 当[对方Q号|@对方QQ]的小三\n我和你才是真爱, 为了你我愿意付出一切(好感度越高成功率越高,保底10%概率)\n" + @@ -84,106 +85,71 @@ func init() { ) }), )) - getdb := fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool { + getdb = fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool { 民政局.db.DBPath = engine.DataFolder() + "结婚登记表.db" err := 民政局.db.Open(time.Hour * 24) - if err != nil { - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) - return false - } - return true - }) - // 技能CD设置 - engine.OnRegex(`^设置CD为(\d+)小时`, zero.OnlyGroup, zero.AdminPermission, getdb).SetBlock(true).Limit(ctxext.LimitByUser). - Handle(func(ctx *zero.Ctx) { - cdTime, err := strconv.ParseFloat(ctx.State["regex_matched"].([]string)[1], 64) + if err == nil { + // 创建群配置表 + err = 民政局.db.Create("updateinfo", &updateinfo{}) if err != nil { - ctx.SendChain(message.Text("[qqwife]请设置纯数字\n", err)) - return - } - gid := ctx.Event.GroupID - err = 民政局.setCDtime(gid, cdTime) - if err != nil { - ctx.SendChain(message.Text("[qqwife]设置CD时长失败\n", err)) - return - } - ctx.SendChain(message.Text("设置成功")) - }) - engine.OnRegex(`^(允许|禁止)(自由恋爱|牛头人)$`, zero.OnlyGroup, zero.AdminPermission, getdb).SetBlock(true). - Handle(func(ctx *zero.Ctx) { - status := ctx.State["regex_matched"].([]string)[1] - mode := ctx.State["regex_matched"].([]string)[2] - gid := ctx.Event.GroupID - statusBool := 1 - if status == "禁止" { - statusBool = 0 - } - err := 民政局.修改模式(gid, mode, statusBool) - if err != nil { - ctx.SendChain(message.Text("[qqwife]群状态查询失败\n", err)) - return + ctx.SendChain(message.Text("[ERROR]:", err)) + return false } - ctx.SendChain(message.Text("设置成功")) - }) - // 好感度系统 - engine.OnRegex(`^查好感度\s?\[CQ:at,qq=(\d+)\]`, zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser). - Handle(func(ctx *zero.Ctx) { - fiancee, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) + // 创建CD表 + err = 民政局.db.Create("cdsheet", &cdsheet{}) if err != nil { - ctx.SendChain(message.Text("[qqwife]你对象好像不存在?\n", err)) - return + ctx.SendChain(message.Text("[ERROR]:", err)) + return false } - uid := ctx.Event.UserID - favor, err := 民政局.getFavorability(uid, fiancee) + // 创建好感度表 + err = 民政局.db.Create("favorability", &favorability{}) if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - return + ctx.SendChain(message.Text("[ERROR]:", err)) + return false } - // 输出结果 - ctx.SendChain( - message.At(uid), - message.Text("\n当前你们好感度为", favor), - ) - }) + return true + } + ctx.SendChain(message.Text("[ERROR]:", err)) + return false + }) +) + +func init() { engine.OnFullMatch("娶群友", zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { gid := ctx.Event.GroupID - _, err := 民政局.开门时间(gid) + err := 民政局.开门时间(gid) if err != nil { - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) return } uid := ctx.Event.UserID - targetinfo, status, err := 民政局.查户口(gid, uid) + userInfo, _ := 民政局.查户口(gid, uid) switch { - case status == "错": - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) - return - case (status == "攻" && targetinfo.Target == 0) || - (status == "受" && targetinfo.User == 0): // 如果是单身贵族 + case userInfo != (userinfo{}) && (userInfo.Target == 0 || userInfo.User == 0): // 如果是单身贵族 ctx.SendChain(message.Text("今天你是单身贵族噢")) return - case status == "攻": // 娶过别人 + case userInfo.User == uid: // 娶过别人 ctx.SendChain( message.At(uid), - message.Text("\n今天你在", targetinfo.Updatetime, "娶了群友"), - message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(targetinfo.Target, 10)+"&s=640").Add("cache", 0), + message.Text("\n今天你在", userInfo.Updatetime, "娶了群友"), + message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(userInfo.Target, 10)+"&s=640").Add("cache", 0), message.Text( "\n", - "[", targetinfo.Targetname, "]", - "(", targetinfo.Target, ")哒", + "[", userInfo.Targetname, "]", + "(", userInfo.Target, ")哒", ), ) return - case status == "受": // 嫁给别人 + case userInfo.Target == uid: // 嫁给别人 ctx.SendChain( message.At(uid), - message.Text("\n今天你在", targetinfo.Updatetime, "被群友"), - message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(targetinfo.User, 10)+"&s=640").Add("cache", 0), + message.Text("\n今天你在", userInfo.Updatetime, "被群友"), + message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(userInfo.User, 10)+"&s=640").Add("cache", 0), message.Text( "\n", - "[", targetinfo.Username, "]", - "(", targetinfo.User, ")娶了", + "[", userInfo.Username, "]", + "(", userInfo.User, ")娶了", ), ) return @@ -198,12 +164,8 @@ func init() { qqgrouplist := make([]int64, 0, len(temp)) for k := 0; k < len(temp); k++ { usr := temp[k].Get("user_id").Int() - _, status, err := 民政局.查户口(gid, usr) - if status == "错" { - ctx.SendChain(message.Text("[qqwife]花名册数据读取有误,请重试\n", err)) - return - } - if status != "单" { + usrInfo, _ := 民政局.查户口(gid, usr) + if usrInfo != (userinfo{}) { continue } qqgrouplist = append(qqgrouplist, usr) @@ -216,181 +178,33 @@ func init() { // 随机抽娶 fiancee := qqgrouplist[rand.Intn(len(qqgrouplist))] if fiancee == uid { // 如果是自己 - ctx.SendChain(message.Text("呜...没娶到,你可以再尝试一次")) - return - } - // 去民政局办证 - err = 民政局.登记(gid, uid, fiancee, ctx.CardOrNickName(uid), ctx.CardOrNickName(fiancee)) - if err != nil { - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) - return - } - favor, err := 民政局.setFavorability(uid, fiancee, 1+rand.Intn(5)) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - } - // 请大家吃席 - ctx.SendChain( - message.At(uid), - message.Text("今天你的群老婆是"), - message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(fiancee, 10)+"&s=640").Add("cache", 0), - message.Text( - "\n", - "[", ctx.CardOrNickName(fiancee), "]", - "(", fiancee, ")哒\n当前你们好感度为", favor, - ), - ) - }) - // 单身技能 - engine.OnRegex(`^(娶|嫁)\[CQ:at,qq=(\d+)\]`, zero.OnlyGroup, getdb, checkdog).SetBlock(true).Limit(ctxext.LimitByUser). - Handle(func(ctx *zero.Ctx) { - gid := ctx.Event.GroupID - uid := ctx.Event.UserID - choice := ctx.State["regex_matched"].([]string)[1] - fiancee, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64) - // 写入CD - err := 民政局.writeCDtime(gid, uid, 1) - if err != nil { - ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err)) - } - if uid == fiancee { // 如果是自己 - switch rand.Intn(3) { + switch rand.Intn(10) { case 1: err := 民政局.登记(gid, uid, 0, "", "") if err != nil { - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) return } ctx.SendChain(message.Text("今日获得成就:单身贵族")) default: - ctx.SendChain(message.Text("今日获得成就:自恋狂")) - } - return - } - favor, err := 民政局.getFavorability(uid, fiancee) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - return - } - if favor < 30 { - favor = 30 // 保底30%概率 - } - if rand.Intn(101) >= favor { - ctx.SendChain(message.Text(sendtext[1][rand.Intn(len(sendtext[1]))])) - return - } - // 去民政局登记 - var choicetext string - switch choice { - case "娶": - err := 民政局.登记(gid, uid, fiancee, ctx.CardOrNickName(uid), ctx.CardOrNickName(fiancee)) - if err != nil { - ctx.SendChain(message.Text("[qqwife]结婚登记失败力\n", err)) + ctx.SendChain(message.Text("呜...没娶到,你可以再尝试一次")) return } - choicetext = "\n今天你的群老婆是" - default: - err := 民政局.登记(gid, fiancee, uid, ctx.CardOrNickName(fiancee), ctx.CardOrNickName(uid)) - if err != nil { - ctx.SendChain(message.Text("[qqwife]结婚登记失败力\n", err)) - return - } - choicetext = "\n今天你的群老公是" } - // 请大家吃席 - ctx.SendChain( - message.Text(sendtext[0][rand.Intn(len(sendtext[0]))]), - message.At(uid), - message.Text(choicetext), - message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(fiancee, 10)+"&s=640").Add("cache", 0), - message.Text( - "\n", - "[", ctx.CardOrNickName(fiancee), "]", - "(", fiancee, ")哒", - ), - ) - }) - // NTR技能 - engine.OnRegex(`^当(\[CQ:at,qq=(\d+)\]\s?|(\d+))的小三`, zero.OnlyGroup, getdb, checkcp).SetBlock(true).Limit(ctxext.LimitByUser). - Handle(func(ctx *zero.Ctx) { - gid := ctx.Event.GroupID - uid := ctx.Event.UserID - fid := ctx.State["regex_matched"].([]string) - fiancee, _ := strconv.ParseInt(fid[2]+fid[3], 10, 64) - // 写入CD - err := 民政局.writeCDtime(gid, uid, 2) - if err != nil { - ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err)) - } - if fiancee == uid { - ctx.SendChain(message.Text("今日获得成就:自我攻略")) - return - } - favor, err := 民政局.getFavorability(uid, fiancee) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - return - } - if favor < 30 { - favor = 30 // 保底10%概率 - } - if rand.Intn(101) >= favor/3 { - ctx.SendChain(message.Text("失败了!可惜")) - return - } - // 判断target是老公还是老婆 - var choicetext string - userAID := uid //攻的 - var userBID int64 //被牛的 - userCID := fiancee //受的 - fianceeinfo, gender, err := 民政局.查户口(gid, userCID) - switch gender { - case "单": - ctx.SendChain(message.Text("ta现在还是单身哦,快向ta表白吧!")) - return - case "错": - ctx.SendChain(message.Text("[qqwife]对象状态查询失败\n", err)) - return - case "攻": - err = 民政局.离婚休妻(gid, fianceeinfo.Target) - if err != nil { - ctx.SendChain(message.Text("ta不想和原来的对象分手...\n[error]", err)) - return - } - userAID = fiancee - userCID = uid - userBID = fianceeinfo.Target - choicetext = "老公" - case "受": - err = 民政局.离婚休夫(gid, fianceeinfo.User) - if err != nil { - ctx.SendChain(message.Text("ta不想和原来的对象分手...\n[error]", err)) - return - } - userBID = fianceeinfo.User - choicetext = "老婆" - default: - ctx.SendChain(message.Text("数据库发生问题力")) - return - } - err = 民政局.登记(gid, userAID, userCID, ctx.CardOrNickName(userAID), ctx.CardOrNickName(userCID)) + // 去民政局办证 + err = 民政局.登记(gid, uid, fiancee, ctx.CardOrNickName(uid), ctx.CardOrNickName(fiancee)) if err != nil { - ctx.SendChain(message.Text("[qqwife]复婚登记失败力\n", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) return } - favor, err = 民政局.setFavorability(userAID, userCID, -5) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - } - _, err = 民政局.setFavorability(userAID, userBID, 5) + favor, err := 民政局.更新好感度(uid, fiancee, 1+rand.Intn(5)) if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) } - // 输出结果 + // 请大家吃席 ctx.SendChain( - message.Text(sendtext[2][rand.Intn(len(sendtext[2]))]), message.At(uid), - message.Text("今天你的群"+choicetext+"是"), + message.Text("今天你的群老婆是"), message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(fiancee, 10)+"&s=640").Add("cache", 0), message.Text( "\n", @@ -399,210 +213,20 @@ func init() { ), ) }) - // 做媒技能 - engine.OnRegex(`^做媒\s?\[CQ:at,qq=(\d+)\]\s?\[CQ:at,qq=(\d+)\]`, zero.OnlyGroup, zero.AdminPermission, getdb, checkCondition).SetBlock(true).Limit(ctxext.LimitByUser). - Handle(func(ctx *zero.Ctx) { - gid := ctx.Event.GroupID - uid := ctx.Event.UserID - gayOne, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) - gayZero, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64) - // 写入CD - err := 民政局.writeCDtime(gid, uid, 3) - if err != nil { - ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err)) - } - favor, err := 民政局.getFavorability(gayOne, gayZero) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - return - } - if favor < 30 { - favor = 30 // 保底30%概率 - } - if rand.Intn(101) >= favor { - _, err = 民政局.setFavorability(uid, gayOne, -1) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - } - _, err = 民政局.setFavorability(uid, gayZero, -1) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - } - ctx.SendChain(message.Text(sendtext[1][rand.Intn(len(sendtext[1]))])) - return - } - // 去民政局登记 - err = 民政局.登记(gid, gayOne, gayZero, ctx.CardOrNickName(gayOne), ctx.CardOrNickName(gayZero)) - if err != nil { - ctx.SendChain(message.Text("[qqwife]结婚登记失败力\n", err)) - return - } - _, err = 民政局.setFavorability(uid, gayOne, 1) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - } - _, err = 民政局.setFavorability(uid, gayZero, 1) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - } - _, err = 民政局.setFavorability(gayOne, gayZero, 1) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - } - // 请大家吃席 - ctx.SendChain( - message.At(uid), - message.Text("恭喜你成功撮合了一对CP\n\n"), - message.At(gayOne), - message.Text("今天你的群老婆是"), - message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(gayZero, 10)+"&s=640").Add("cache", 0), - message.Text( - "\n", - "[", ctx.CardOrNickName(gayZero), "]", - "(", gayZero, ")哒", - ), - ) - }) - // 礼物系统 - engine.OnRegex(`^买礼物给\s?(\[CQ:at,qq=(\d+)\]|(\d+))`, getdb).SetBlock(true).Limit(ctxext.LimitByUser). - Handle(func(ctx *zero.Ctx) { - gid := ctx.Event.GroupID - uid := ctx.Event.UserID - fiancee := ctx.State["regex_matched"].([]string) - gay, _ := strconv.ParseInt(fiancee[2]+fiancee[3], 10, 64) - if gay == uid { - ctx.Send(message.ReplyWithMessage(ctx.Event.MessageID, message.At(uid), message.Text("[qqwife]你想给自己买什么礼物呢?"))) - return - } - // 获取CD - cdTime, err := 民政局.getCDtime(gid) - if err != nil { - ctx.SendChain(message.Text("[qqwife]获取该群技能CD错误(将以CD12H计算)\n", err)) - } - ok, err := 民政局.compareCDtime(gid, uid, 5, cdTime) - if err != nil { - ctx.SendChain(message.Text("[qqwife]查询用户CD状态失败,请重试\n", err)) - return - } - if !ok { - ctx.SendChain(message.Text("舔狗,今天你已经送过礼物了。")) - return - } - // 获取好感度 - favor, err := 民政局.getFavorability(uid, gay) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - return - } - // 对接小熊饼干 - walletinfo := wallet.GetWalletOf(uid) - if walletinfo < 1 { - ctx.SendChain(message.Text("你钱包没钱啦!")) - return - } - moneyToFavor := rand.Intn(math.Min(walletinfo, 100)) + 1 - // 计算钱对应的好感值 - newFavor := 1 - if favor > 50 { - newFavor = moneyToFavor % 10 // 礼物厌倦 - } else { - newFavor += rand.Intn(moneyToFavor) - } - // 随机对方心情 - mood := rand.Intn(2) - if mood == 0 { - newFavor = -newFavor - } - // 记录结果 - err = wallet.InsertWalletOf(uid, -moneyToFavor) - if err != nil { - ctx.SendChain(message.Text("[qqwife]钱包坏掉力:\n", err)) - return - } - lastfavor, err := 民政局.setFavorability(uid, gay, newFavor) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度数据库发生问题力\n", err)) - return - } - // 写入CD - err = 民政局.writeCDtime(gid, uid, 5) - if err != nil { - ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err)) - } - // 输出结果 - if mood == 0 { - ctx.SendChain(message.Text("你花了", moneyToFavor, "ATRI币买了一件女装送给了ta,ta很不喜欢,你们的好感度降低至", lastfavor)) - } else { - ctx.SendChain(message.Text("你花了", moneyToFavor, "ATRI币买了一件女装送给了ta,ta很喜欢,你们的好感度升至", lastfavor)) - } - }) - engine.OnFullMatchGroup([]string{"闹离婚", "办离婚"}, zero.OnlyGroup, getdb, checkdivorce).Limit(ctxext.LimitByUser).SetBlock(true). - Handle(func(ctx *zero.Ctx) { - gid := ctx.Event.GroupID - uid := ctx.Event.UserID - // 写入CD - err := 民政局.writeCDtime(gid, uid, 4) - if err != nil { - ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err)) - } - info, uidstatus, err := 民政局.查户口(gid, uid) - mun := 2 - var fiancee int64 - switch uidstatus { - case "错": - ctx.SendChain(message.Text("[qqwife]用户状态查询失败\n", err)) - return - case "攻": - mun = 1 - fiancee = info.Target - case "受": - mun = 0 - fiancee = info.User - } - favor, err := 民政局.getFavorability(uid, fiancee) - if err != nil { - ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err)) - return - } - if favor < 20 { - favor = 10 - } - if rand.Intn(101) > 100-favor { - ctx.SendChain(message.Text(sendtext[3][rand.Intn(len(sendtext[3]))])) - return - } - switch mun { - case 1: - err = 民政局.离婚休妻(gid, fiancee) - case 0: - err = 民政局.离婚休夫(gid, fiancee) - default: - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) - return - } - if err != nil { - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) - return - } - ctx.SendChain(message.Text(sendtext[4][mun])) - }) engine.OnFullMatch("群老婆列表", zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { gid := ctx.Event.GroupID - ok, err := 民政局.开门时间(gid) + err := 民政局.开门时间(gid) if err != nil { - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) - return - } - if ok { - ctx.SendChain(message.Text("今天还没有人结婚哦")) + ctx.SendChain(message.Text("[ERROR]:", err)) return } - list, number, err := 民政局.花名册(gid) + list, err := 民政局.花名册(gid) if err != nil { - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) return } + number := len(list) if number <= 0 { ctx.SendChain(message.Text("今天还没有人结婚哦")) return @@ -650,30 +274,192 @@ func init() { }) engine.OnRegex(`^重置(所有|本群|/d+)?花名册$`, zero.SuperUserPermission, getdb).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - cmd := "0" + var err error switch ctx.State["regex_matched"].([]string)[1] { - case "": - if ctx.Event.GroupID == 0 { - ctx.SendChain(message.Text("该功能只能在群组使用或者指定群组")) - return - } - cmd = strconv.FormatInt(ctx.Event.GroupID, 10) case "所有": - break - case "本群": + err = 民政局.清理花名册() + case "本群", "": if ctx.Event.GroupID == 0 { ctx.SendChain(message.Text("该功能只能在群组使用或者指定群组")) return } - cmd = strconv.FormatInt(ctx.Event.GroupID, 10) + err = 民政局.清理花名册("group" + strconv.FormatInt(ctx.Event.GroupID, 10)) default: - cmd = ctx.State["regex_matched"].([]string)[1] + cmd := ctx.State["regex_matched"].([]string)[1] + gid, _ := strconv.ParseInt(cmd, 10, 64) //判断是否为群号 + if gid == 0 { + ctx.SendChain(message.Text("请输入正确的群号")) + return + } + err = 民政局.清理花名册("group" + cmd) } - err := 民政局.清理花名册(cmd) if err != nil { - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) return } ctx.SendChain(message.Text("重置成功")) }) } + +// nolint: asciicheck +//nolint: asciicheck +func (sql *婚姻登记) 查看设置(gid int64) (dbinfo updateinfo, err error) { + sql.Lock() + defer sql.Unlock() + // 创建群表哥 + err = sql.db.Create("updateinfo", &updateinfo{}) + if err != nil { + return + } + if !sql.db.CanFind("updateinfo", "where gid is "+strconv.FormatInt(gid, 10)) { + // 没有记录 + return updateinfo{ + GID: gid, + CanMatch: 1, + CanNtr: 1, + CDtime: 12, + }, nil + } + _ = sql.db.Find("updateinfo", &dbinfo, "where gid is "+strconv.FormatInt(gid, 10)) + return +} + +// nolint: asciicheck +//nolint: asciicheck +func (sql *婚姻登记) 更新设置(dbinfo updateinfo) error { + sql.Lock() + defer sql.Unlock() + return sql.db.Insert("updateinfo", &dbinfo) +} + +// nolint: asciicheck +//nolint: asciicheck +func (sql *婚姻登记) 开门时间(gid int64) error { + grouInfo, err := sql.查看设置(gid) + if err != nil { + return err + } + sql.Lock() + defer sql.Unlock() + dbinfo := updateinfo{} + _ = sql.db.Find("updateinfo", &dbinfo, "where gid is "+strconv.FormatInt(gid, 10)) + if time.Now().Format("2006/01/02") != dbinfo.Updatetime { + // 如果跨天了就删除 + _ = sql.db.Drop("group" + strconv.FormatInt(gid, 10)) + // 更新数据时间 + grouInfo.GID = gid + grouInfo.Updatetime = time.Now().Format("2006/01/02") + return sql.db.Insert("updateinfo", &grouInfo) + } + return nil +} + +// nolint: asciicheck +//nolint: asciicheck +func (sql *婚姻登记) 查户口(gid, uid int64) (info userinfo, err error) { + sql.Lock() + defer sql.Unlock() + gidstr := "group" + strconv.FormatInt(gid, 10) + // 创建群表哥 + err = sql.db.Create(gidstr, &userinfo{}) + if err != nil { + return + } + uidstr := strconv.FormatInt(uid, 10) + err = sql.db.Find(gidstr, &info, "where user = "+uidstr) + if err != nil { + err = sql.db.Find(gidstr, &info, "where target = "+uidstr) + } + return +} + +// nolint: asciicheck +//nolint: asciicheck +// 民政局登记数据 +func (sql *婚姻登记) 登记(gid, uid, target int64, username, targetname string) error { + sql.Lock() + defer sql.Unlock() + gidstr := "group" + strconv.FormatInt(gid, 10) + uidinfo := userinfo{ + User: uid, + Username: username, + Target: target, + Targetname: targetname, + Updatetime: time.Now().Format("15:04:05"), + } + return sql.db.Insert(gidstr, &uidinfo) +} + +// nolint: asciicheck +//nolint: asciicheck +func (sql *婚姻登记) 花名册(gid int64) (list [][4]string, err error) { + sql.Lock() + defer sql.Unlock() + gidstr := "group" + strconv.FormatInt(gid, 10) + number, _ := sql.db.Count(gidstr) + if number <= 0 { + return + } + var info userinfo + err = sql.db.FindFor(gidstr, &info, "GROUP BY user", func() error { + if info.Target == 0 { + return nil + } + dbinfo := [4]string{ + info.Username, + strconv.FormatInt(info.User, 10), + info.Targetname, + strconv.FormatInt(info.Target, 10), + } + list = append(list, dbinfo) + return nil + }) + return +} + +func slicename(name string, canvas *gg.Context) (resultname string) { + usermane := []rune(name) // 将每个字符单独放置 + widthlen := 0 + numberlen := 0 + for i, v := range usermane { + width, _ := canvas.MeasureString(string(v)) // 获取单个字符的宽度 + widthlen += int(width) + if widthlen > 350 { + break // 总宽度不能超过350 + } + numberlen = i + } + if widthlen > 350 { + resultname = string(usermane[:numberlen-1]) + "......" // 名字切片 + } else { + resultname = name + } + return +} + +// nolint: asciicheck +//nolint: asciicheck +func (sql *婚姻登记) 清理花名册(gid ...string) error { + sql.Lock() + defer sql.Unlock() + switch gid { + case nil: + grouplist, err := sql.db.ListTables() + if err == nil { + for _, listName := range grouplist { + if listName == "favorability" { + continue + + } + err = sql.db.Drop(listName) + } + } + return err + default: + err := sql.db.Drop(gid[0]) + if err == nil { + _ = sql.db.Del("cdsheet", "where GroupID is "+strings.ReplaceAll(gid[0], "group", "")) + } + return err + } +} diff --git a/plugin/qqwife/favorSystem.go b/plugin/qqwife/favorSystem.go new file mode 100644 index 0000000000..9ec5fe7b23 --- /dev/null +++ b/plugin/qqwife/favorSystem.go @@ -0,0 +1,272 @@ +package qqwife + +import ( + "errors" + "math/rand" + "sort" + "strconv" + "strings" + + "github.com/FloatTech/floatbox/math" + control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" + // 画图 + "github.com/Coloured-glaze/gg" + "github.com/FloatTech/floatbox/file" + "github.com/FloatTech/floatbox/img/writer" + "github.com/FloatTech/zbputils/img/text" + + // 货币系统 + "github.com/FloatTech/AnimeAPI/wallet" +) + +// 好感度系统 +type favorability struct { + Userinfo string // 记录用户 + Favor int // 好感度 +} + +func init() { + // 好感度系统 + engine.OnRegex(`^查好感度\s*(\[CQ:at,qq=)?(\d+)`, zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser). + Handle(func(ctx *zero.Ctx) { + fiancee, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64) + uid := ctx.Event.UserID + favor, err := 民政局.查好感度(uid, fiancee) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + // 输出结果 + ctx.SendChain( + message.At(uid), + message.Text("\n当前你们好感度为", favor), + ) + }) + // 礼物系统 + engine.OnRegex(`^买礼物给\s?(\[CQ:at,qq=(\d+)\]|(\d+))`, getdb).SetBlock(true).Limit(ctxext.LimitByUser). + Handle(func(ctx *zero.Ctx) { + gid := ctx.Event.GroupID + uid := ctx.Event.UserID + fiancee := ctx.State["regex_matched"].([]string) + gay, _ := strconv.ParseInt(fiancee[2]+fiancee[3], 10, 64) + if gay == uid { + ctx.Send(message.ReplyWithMessage(ctx.Event.MessageID, message.At(uid), message.Text("你想给自己买什么礼物呢?"))) + return + } + // 获取CD + groupInfo, err := 民政局.查看设置(gid) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + ok, err := 民政局.判断CD(gid, uid, "买礼物", groupInfo.CDtime) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + if !ok { + ctx.SendChain(message.Text("舔狗,今天你已经送过礼物了。")) + return + } + // 获取好感度 + favor, err := 民政局.查好感度(uid, gay) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:好感度库发生问题力\n", err)) + return + } + // 对接小熊饼干 + walletinfo := wallet.GetWalletOf(uid) + if walletinfo < 1 { + ctx.SendChain(message.Text("你钱包没钱啦!")) + return + } + moneyToFavor := rand.Intn(math.Min(walletinfo, 100)) + // 计算钱对应的好感值 + newFavor := 1 + if favor > 50 { + newFavor = moneyToFavor % 10 // 礼物厌倦 + } else { + newFavor += rand.Intn(moneyToFavor) + } + // 随机对方心情 + mood := rand.Intn(2) + if mood == 0 { + newFavor = -newFavor + } + // 记录结果 + err = wallet.InsertWalletOf(uid, -moneyToFavor) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:钱包坏掉力:\n", err)) + return + } + lastfavor, err := 民政局.更新好感度(uid, gay, newFavor) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:好感度数据库发生问题力\n", err)) + return + } + // 写入CD + err = 民政局.记录CD(gid, uid, "买礼物") + if err != nil { + ctx.SendChain(message.At(uid), message.Text("[ERROR]:你的技能CD记录失败\n", err)) + } + // 输出结果 + if mood == 0 { + ctx.SendChain(message.Text("你花了", moneyToFavor, "ATRI币买了一件女装送给了ta,ta很不喜欢,你们的好感度降低至", lastfavor)) + } else { + ctx.SendChain(message.Text("你花了", moneyToFavor, "ATRI币买了一件女装送给了ta,ta很喜欢,你们的好感度升至", lastfavor)) + } + }) + engine.OnFullMatch("好感度列表", zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser). + Handle(func(ctx *zero.Ctx) { + uid := ctx.Event.UserID + fianceeInfo, err := 民政局.getGroupFavorability(uid) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:ERROR: ", err)) + return + } + /***********设置图片的大小和底色***********/ + number := len(fianceeInfo) + if number > 10 { + number = 10 + } + fontSize := 50.0 + canvas := gg.NewContext(1150, int(170+(50+70)*float64(number))) + canvas.SetRGB(1, 1, 1) // 白色 + canvas.Clear() + /***********下载字体***********/ + _, err = file.GetLazyData(text.BoldFontFile, control.Md5File, true) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:ERROR: ", err)) + } + /***********设置字体颜色为黑色***********/ + canvas.SetRGB(0, 0, 0) + /***********设置字体大小,并获取字体高度用来定位***********/ + if err = canvas.LoadFontFace(text.BoldFontFile, fontSize*2); err != nil { + ctx.SendChain(message.Text("[ERROR]:ERROR: ", err)) + return + } + sl, h := canvas.MeasureString("你的好感度排行列表") + /***********绘制标题***********/ + canvas.DrawString("你的好感度排行列表", (1100-sl)/2, 100) // 放置在中间位置 + canvas.DrawString("————————————————————", 0, 160) + /***********设置字体大小,并获取字体高度用来定位***********/ + if err = canvas.LoadFontFace(text.BoldFontFile, fontSize); err != nil { + ctx.SendChain(message.Text("[ERROR]:ERROR: ", err)) + return + } + i := 0 + for _, info := range fianceeInfo { + if i > 9 { + break + } + if info.Userinfo == "" { + continue + } + fianceID, err := strconv.ParseInt(info.Userinfo, 10, 64) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:ERROR: ", err)) + return + } + if fianceID == 0 { + continue + } + userName := ctx.CardOrNickName(fianceID) + canvas.SetRGB255(0, 0, 0) + canvas.DrawString(userName+"("+info.Userinfo+")", 10, float64(180+(50+70)*i)) + canvas.DrawString(strconv.Itoa(info.Favor), 1020, float64(180+60+(50+70)*i)) + canvas.DrawRectangle(10, float64(180+60+(50+70)*i)-h/2, 1000, 50) + canvas.SetRGB255(150, 150, 150) + canvas.Fill() + canvas.SetRGB255(0, 0, 0) + canvas.DrawRectangle(10, float64(180+60+(50+70)*i)-h/2, float64(info.Favor)*10, 50) + canvas.SetRGB255(231, 27, 100) + canvas.Fill() + i++ + } + data, cl := writer.ToBytes(canvas.Image()) + ctx.SendChain(message.ImageBytes(data)) + cl() + }) +} + +// nolint: asciicheck +//nolint: asciicheck +func (sql *婚姻登记) 查好感度(uid, target int64) (int, error) { + sql.Lock() + defer sql.Unlock() + err := sql.db.Create("favorability", &favorability{}) + if err != nil { + return 0, err + } + info := favorability{} + uidstr := strconv.FormatInt(uid, 10) + targstr := strconv.FormatInt(target, 10) + _ = sql.db.Find("favorability", &info, "where Userinfo glob '*"+uidstr+"+"+targstr+"*'") + return info.Favor, nil +} + +// 获取好感度数据组 +type favorList []favorability + +func (s favorList) Len() int { + return len(s) +} +func (s favorList) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} +func (s favorList) Less(i, j int) bool { + return s[i].Favor > s[j].Favor +} +func (sql *婚姻登记) getGroupFavorability(uid int64) (list favorList, err error) { + uidStr := strconv.FormatInt(uid, 10) + sql.RLock() + defer sql.RUnlock() + info := favorability{} + err = sql.db.FindFor("favorability", &info, "where Userinfo glob '*"+uidStr+"*'", func() error { + var target string + userList := strings.Split(info.Userinfo, "+") + switch { + case len(userList) == 0: + return errors.New("好感度系统数据存在错误") + case userList[0] == uidStr: + target = userList[1] + default: + target = userList[0] + } + list = append(list, favorability{ + Userinfo: target, + Favor: info.Favor, + }) + return nil + }) + sort.Sort(list) + return +} + +// nolint: asciicheck +//nolint: asciicheck +// 设置好感度 正增负减 +func (sql *婚姻登记) 更新好感度(uid, target int64, score int) (favor int, err error) { + sql.Lock() + defer sql.Unlock() + err = sql.db.Create("favorability", &favorability{}) + if err != nil { + return + } + info := favorability{} + uidstr := strconv.FormatInt(uid, 10) + targstr := strconv.FormatInt(target, 10) + _ = sql.db.Find("favorability", &info, "where Userinfo glob '*"+uidstr+"+"+targstr+"*'") + info.Userinfo = uidstr + "+" + targstr + "+" + uidstr + info.Favor += score + if info.Favor > 100 { + info.Favor = 100 + } else if info.Favor < 0 { + info.Favor = 0 + } + err = sql.db.Insert("favorability", &info) + return info.Favor, err +} diff --git a/plugin/qqwife/function.go b/plugin/qqwife/function.go index 1adce885a3..ffaa99a25e 100644 --- a/plugin/qqwife/function.go +++ b/plugin/qqwife/function.go @@ -2,257 +2,405 @@ package qqwife import ( "errors" + "math/rand" "strconv" - "sync" "time" - sql "github.com/FloatTech/sqlite" + "github.com/FloatTech/zbputils/ctxext" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" - - // 画图 - "github.com/Coloured-glaze/gg" ) -// nolint: asciicheck -// nolint: asciicheck -type 婚姻登记 struct { - db *sql.Sqlite - sync.RWMutex -} - -// 结婚证信息 -type userinfo struct { - User int64 // 用户身份证 - Target int64 // 对象身份证号 - Username string // 户主名称 - Targetname string // 对象名称 - Updatetime string // 登记时间 - -} - -// 民政局的当前时间 -type updateinfo struct { - GID int64 - Updatetime string // 登记时间 - CanMatch int // 订婚开关 - CanNtr int // Ntr技能开关 - CDtime float64 // CD时间 -} - -// 好感度系统 -type favorability struct { - Userinfo string // 记录用户 - Favor int // 好感度 -} - // 技能CD记录表 type cdsheet struct { - Time int64 // 时间 - GroupID int64 // 群号 - UserID int64 // 用户 - ModeID int64 // 技能类型 + Time int64 // 时间 + GroupID int64 // 群号 + UserID int64 // 用户 + ModeID string // 技能类型 } -func (sql *婚姻登记) 开门时间(gid int64) (ok bool, err error) { - sql.Lock() - defer sql.Unlock() - ok = false - err = sql.db.Create("updateinfo", &updateinfo{}) - if err != nil { - return - } - gidstr := strconv.FormatInt(gid, 10) - dbinfo := updateinfo{} - // 获取表格更新的时间 - err = sql.db.Find("updateinfo", &dbinfo, "where gid is "+gidstr) - if err != nil { - // 如果没有登记过就记录 - err = sql.db.Insert("updateinfo", &updateinfo{ - GID: gid, - Updatetime: time.Now().Format("2006/01/02"), - CanMatch: 1, - CanNtr: 1, - CDtime: 12, - }) - if err == nil { - ok = true - } - return - } - if time.Now().Format("2006/01/02") == dbinfo.Updatetime { - return - } - // 开门了就拿新的花名册 - err = sql.db.Drop("group" + gidstr) - if err != nil { - if err = sql.db.Create("group"+gidstr, &userinfo{}); err != nil { - return - } - } - dbinfo.Updatetime = time.Now().Format("2006/01/02") - err = sql.db.Insert("updateinfo", &dbinfo) - if err == nil { - ok = true - } - return +var sendtext = [...][]string{ + { // 表白成功 + "是个勇敢的孩子(*/ω\*) 今天的运气都降临在你的身边~\n\n", + "(´・ω・`)对方答应了你 并表示愿意当今天的CP\n\n", + }, + { // 表白失败 + "今天的运气有一点背哦~明天再试试叭", + "_(:з」∠)_下次还有机会 咱抱抱你w", + "今天失败了惹. 摸摸头~咱明天还有机会", + }, + { // ntr成功 + "因为你的个人魅力~~今天他就是你的了w\n\n", + }, + { // 离婚失败 + "打是情,骂是爱,不打不亲不相爱。答应我不要分手。", + "床头打架床尾和,夫妻没有隔夜仇。安啦安啦,不要闹变扭。", + }, + { // 离婚成功 + "离婚成功力\n话说你不考虑当个1?", + "离婚成功力\n天涯何处无芳草,何必单恋一枝花?不如再摘一支(bushi", + }, } -func (sql *婚姻登记) 营业模式(gid int64) (canMatch, canNtr int, err error) { - sql.Lock() - defer sql.Unlock() - err = sql.db.Create("updateinfo", &updateinfo{}) - if err != nil { - if err = sql.db.Drop("updateinfo"); err == nil { - err = sql.db.Create("updateinfo", &updateinfo{}) - } - if err != nil { - return - } - } - gidstr := strconv.FormatInt(gid, 10) - dbinfo := updateinfo{} - err = sql.db.Find("updateinfo", &dbinfo, "where gid is "+gidstr) - if err != nil { - canMatch = 1 - canNtr = 1 - err = sql.db.Insert("updateinfo", &updateinfo{ - GID: gid, - CanMatch: canMatch, - CanNtr: canNtr, - CDtime: 12, +func init() { + engine.OnRegex(`^设置CD为(\d+)小时`, zero.OnlyGroup, zero.AdminPermission, getdb).SetBlock(true).Limit(ctxext.LimitByUser). + Handle(func(ctx *zero.Ctx) { + cdTime, err := strconv.ParseFloat(ctx.State["regex_matched"].([]string)[1], 64) + if err != nil { + ctx.SendChain(message.Text("[qqwife]请设置纯数字\n", err)) + return + } + groupInfo, err := 民政局.查看设置(ctx.Event.GroupID) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + groupInfo.CDtime = cdTime + err = 民政局.更新设置(groupInfo) + if err != nil { + ctx.SendChain(message.Text("[qqwife]设置CD时长失败\n", err)) + return + } + ctx.SendChain(message.Text("设置成功")) }) - return - } - canMatch = dbinfo.CanMatch - canNtr = dbinfo.CanNtr - return -} - -func (sql *婚姻登记) 修改模式(gid int64, mode string, stauts int) (err error) { - sql.Lock() - defer sql.Unlock() - err = sql.db.Create("updateinfo", &updateinfo{}) - if err != nil { - if err = sql.db.Drop("updateinfo"); err == nil { - err = sql.db.Create("updateinfo", &updateinfo{}) - } - if err != nil { - return - } - } - gidstr := strconv.FormatInt(gid, 10) - dbinfo := updateinfo{} - err = sql.db.Find("updateinfo", &dbinfo, "where gid is "+gidstr) - switch mode { - case "自由恋爱": - dbinfo.CanMatch = stauts - case "牛头人": - dbinfo.CanNtr = stauts - default: - return errors.New("错误:修改内容不匹配!") - } - if err != nil { - dbinfo.GID = gid - switch mode { - case "自由恋爱": - dbinfo.CanNtr = 1 - case "牛头人": - dbinfo.CanMatch = 1 - } - dbinfo.CDtime = 12 - err = sql.db.Insert("updateinfo", &dbinfo) - return - } - err = sql.db.Insert("updateinfo", &dbinfo) - return -} - -func (sql *婚姻登记) 清理花名册(gid string) error { - sql.Lock() - defer sql.Unlock() - grouplist, err := sql.db.ListTables() - if err != nil { - return err - } - if gid != "0" { - grouplist = []string{"group" + gid} - } - for _, gid := range grouplist { - if gid == "favorability" { - continue - } - err = sql.db.Drop(gid) - if err != nil || gid == "updateinfo" { - continue - } - gidint, _ := strconv.ParseInt(gid, 10, 64) - upinfo := updateinfo{ - GID: gidint, - Updatetime: time.Now().Format("2006/01/02"), - CanMatch: 1, - CanNtr: 1, - CDtime: 12, - } - err = sql.db.Create("updateinfo", &updateinfo{}) - if err != nil { - if err = sql.db.Drop("updateinfo"); err == nil { - err = sql.db.Create("updateinfo", &updateinfo{}) + engine.OnRegex(`^(允许|禁止)(自由恋爱|牛头人)$`, zero.OnlyGroup, zero.AdminPermission, getdb).SetBlock(true). + Handle(func(ctx *zero.Ctx) { + status := ctx.State["regex_matched"].([]string)[1] + mode := ctx.State["regex_matched"].([]string)[2] + groupInfo, err := 民政局.查看设置(ctx.Event.GroupID) + switch { + case err != nil: + ctx.SendChain(message.Text("[ERROR]:", err)) + return + case mode == "自由恋爱": + if status == "允许" { + groupInfo.CanMatch = 1 + } else { + groupInfo.CanMatch = 0 + } + case mode == "牛头人": + if status == "允许" { + groupInfo.CanNtr = 1 + } else { + groupInfo.CanNtr = 0 + } } + err = 民政局.更新设置(groupInfo) if err != nil { - return err + ctx.SendChain(message.Text("[ERROR]:", err)) + return } - } - err = sql.db.Insert("updateinfo", &upinfo) - } - return err + ctx.SendChain(message.Text("设置成功")) + }) + // 单身技能 + engine.OnRegex(`^(娶|嫁)\[CQ:at,qq=(\d+)\]`, zero.OnlyGroup, getdb, checkSingleDog).SetBlock(true).Limit(ctxext.LimitByUser). + Handle(func(ctx *zero.Ctx) { + gid := ctx.Event.GroupID + uid := ctx.Event.UserID + choice := ctx.State["regex_matched"].([]string)[1] + fiancee, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64) + // 写入CD + err := 民政局.记录CD(gid, uid, "嫁娶") + if err != nil { + ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err)) + } + if uid == fiancee { // 如果是自己 + switch rand.Intn(3) { + case 1: + err := 民政局.登记(gid, uid, 0, "", "") + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + ctx.SendChain(message.Text("今日获得成就:单身贵族")) + default: + ctx.SendChain(message.Text("今日获得成就:自恋狂")) + } + return + } + favor, err := 民政局.查好感度(uid, fiancee) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + if favor < 30 { + favor = 30 // 保底30%概率 + } + if rand.Intn(101) >= favor { + ctx.SendChain(message.Text(sendtext[1][rand.Intn(len(sendtext[1]))])) + return + } + // 去民政局登记 + var choicetext string + switch choice { + case "娶": + err := 民政局.登记(gid, uid, fiancee, ctx.CardOrNickName(uid), ctx.CardOrNickName(fiancee)) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + choicetext = "\n今天你的群老婆是" + default: + err := 民政局.登记(gid, fiancee, uid, ctx.CardOrNickName(fiancee), ctx.CardOrNickName(uid)) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + choicetext = "\n今天你的群老公是" + } + // 请大家吃席 + ctx.SendChain( + message.Text(sendtext[0][rand.Intn(len(sendtext[0]))]), + message.At(uid), + message.Text(choicetext), + message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(fiancee, 10)+"&s=640").Add("cache", 0), + message.Text( + "\n", + "[", ctx.CardOrNickName(fiancee), "]", + "(", fiancee, ")哒", + ), + ) + }) + // NTR技能 + engine.OnRegex(`^当(\[CQ:at,qq=(\d+)\]\s?|(\d+))的小三`, zero.OnlyGroup, getdb, checkMistress).SetBlock(true).Limit(ctxext.LimitByUser). + Handle(func(ctx *zero.Ctx) { + gid := ctx.Event.GroupID + uid := ctx.Event.UserID + fid := ctx.State["regex_matched"].([]string) + fiancee, _ := strconv.ParseInt(fid[2]+fid[3], 10, 64) + // 写入CD + err := 民政局.记录CD(gid, uid, "NTR") + if err != nil { + ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err)) + } + if fiancee == uid { + ctx.SendChain(message.Text("今日获得成就:自我攻略")) + return + } + favor, err := 民政局.查好感度(uid, fiancee) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + if favor < 30 { + favor = 30 // 保底10%概率 + } + if rand.Intn(101) >= favor/3 { + ctx.SendChain(message.Text("失败了!可惜")) + return + } + // 判断target是老公还是老婆 + var choicetext string + var ntrID = uid + var targetID = fiancee + var greenID int64 //被牛的 + fianceeInfo, err := 民政局.查户口(gid, fiancee) + switch { + case err != nil: + ctx.SendChain(message.Text("[ERROR]:", err)) + return + case fianceeInfo.User == fiancee: // 是1 + err = 民政局.离婚休妻(gid, fianceeInfo.Target) + if err != nil { + ctx.SendChain(message.Text("ta不想和原来的对象分手...\n[error]", err)) + return + } + ntrID = fiancee + targetID = ctx.Event.UserID + greenID = fianceeInfo.Target + choicetext = "老公" + case fianceeInfo.Target == fiancee: // 是0 + err = 民政局.离婚休夫(gid, fianceeInfo.User) + if err != nil { + ctx.SendChain(message.Text("ta不想和原来的对象分手...\n[error]", err)) + return + } + greenID = fianceeInfo.Target + choicetext = "老婆" + default: + ctx.SendChain(message.Text("数据库发生问题力")) + return + } + err = 民政局.登记(gid, ntrID, targetID, ctx.CardOrNickName(ntrID), ctx.CardOrNickName(targetID)) + if err != nil { + ctx.SendChain(message.Text("[qqwife]复婚登记失败力\n", err)) + return + } + favor, err = 民政局.更新好感度(uid, fiancee, -5) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + } + _, err = 民政局.更新好感度(uid, greenID, 5) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + } + // 输出结果 + ctx.SendChain( + message.Text(sendtext[2][rand.Intn(len(sendtext[2]))]), + message.At(uid), + message.Text("今天你的群"+choicetext+"是"), + message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(fiancee, 10)+"&s=640").Add("cache", 0), + message.Text( + "\n", + "[", ctx.CardOrNickName(fiancee), "]", + "(", fiancee, ")哒\n当前你们好感度为", favor, + ), + ) + }) + // 做媒技能 + engine.OnRegex(`^做媒\s?\[CQ:at,qq=(\d+)\]\s?\[CQ:at,qq=(\d+)\]`, zero.OnlyGroup, zero.AdminPermission, getdb, checkMatchmaker).SetBlock(true).Limit(ctxext.LimitByUser). + Handle(func(ctx *zero.Ctx) { + gid := ctx.Event.GroupID + uid := ctx.Event.UserID + gayOne, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) + gayZero, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64) + // 写入CD + err := 民政局.记录CD(gid, uid, "做媒") + if err != nil { + ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err)) + } + favor, err := 民政局.查好感度(gayOne, gayZero) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + if favor < 30 { + favor = 30 // 保底30%概率 + } + if rand.Intn(101) >= favor { + _, err = 民政局.更新好感度(uid, gayOne, -1) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + } + _, err = 民政局.更新好感度(uid, gayZero, -1) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + } + ctx.SendChain(message.Text(sendtext[1][rand.Intn(len(sendtext[1]))])) + return + } + // 去民政局登记 + err = 民政局.登记(gid, gayOne, gayZero, ctx.CardOrNickName(gayOne), ctx.CardOrNickName(gayZero)) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + _, err = 民政局.更新好感度(uid, gayOne, 1) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + } + _, err = 民政局.更新好感度(uid, gayZero, 1) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + } + _, err = 民政局.更新好感度(gayOne, gayZero, 1) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + } + // 请大家吃席 + ctx.SendChain( + message.At(uid), + message.Text("恭喜你成功撮合了一对CP\n\n"), + message.At(gayOne), + message.Text("今天你的群老婆是"), + message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(gayZero, 10)+"&s=640").Add("cache", 0), + message.Text( + "\n", + "[", ctx.CardOrNickName(gayZero), "]", + "(", gayZero, ")哒", + ), + ) + }) + engine.OnFullMatchGroup([]string{"闹离婚", "办离婚"}, zero.OnlyGroup, getdb, checkDivorce).Limit(ctxext.LimitByUser).SetBlock(true). + Handle(func(ctx *zero.Ctx) { + gid := ctx.Event.GroupID + uid := ctx.Event.UserID + // 写入CD + err := 民政局.记录CD(gid, uid, "离婚") + if err != nil { + ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err)) + } + mun := -1 + var fiancee int64 + userInfo, _ := 民政局.查户口(gid, uid) + switch { + case userInfo.User == uid: + mun = 1 + fiancee = userInfo.Target + case userInfo.Target == uid: + mun = 0 + fiancee = userInfo.User + } + favor, err := 民政局.查好感度(uid, fiancee) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + if favor < 20 { + favor = 10 + } + if rand.Intn(101) > 110-favor { + ctx.SendChain(message.Text(sendtext[3][rand.Intn(len(sendtext[3]))])) + return + } + switch mun { + case 1: + err = 民政局.离婚休妻(gid, fiancee) + case 0: + err = 民政局.离婚休夫(gid, fiancee) + default: + err = errors.New("用户数据查找发生错误") + } + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return + } + ctx.SendChain(message.Text(sendtext[4][mun])) + }) } -func (sql *婚姻登记) 查户口(gid, uid int64) (info userinfo, status string, err error) { +// nolint: asciicheck +// nolint: asciicheck +func (sql *婚姻登记) 判断CD(gid, uid int64, model string, cdtime float64) (ok bool, err error) { sql.Lock() defer sql.Unlock() - gidstr := "group" + strconv.FormatInt(gid, 10) - uidstr := strconv.FormatInt(uid, 10) - status = "单" - err = sql.db.Create(gidstr, &userinfo{}) + // 创建群表格 + err = sql.db.Create("cdsheet", &cdsheet{}) if err != nil { - status = "错" - return + return false, err } - err = sql.db.Find(gidstr, &info, "where user = "+uidstr) - if err == nil { - status = "攻" - return + limitID := "where GroupID is " + strconv.FormatInt(gid, 10) + + " and UserID is " + strconv.FormatInt(uid, 10) + + " and ModeID is '" + model + "'" + if !sql.db.CanFind("cdsheet", limitID) { + // 没有记录即不用比较 + return true, nil } - err = sql.db.Find(gidstr, &info, "where target = "+uidstr) - if err == nil { - status = "受" + cdinfo := cdsheet{} + _ = sql.db.Find("cdsheet", &cdinfo, limitID) + if time.Since(time.Unix(cdinfo.Time, 0)).Hours() > cdtime { + // 如果CD已过就删除 + err = sql.db.Del("cdsheet", limitID) + return true, err } - return + return false, nil } -func (sql *婚姻登记) 登记(gid, uid, target int64, username, targetname string) error { +// nolint: asciicheck +// nolint: asciicheck +func (sql *婚姻登记) 记录CD(gid, uid int64, mode string) error { sql.Lock() defer sql.Unlock() - gidstr := "group" + strconv.FormatInt(gid, 10) - err := sql.db.Create(gidstr, &userinfo{}) - if err != nil { - return err - } - updatetime := time.Now().Format("15:04:05") - // 填写夫妻信息 - uidinfo := userinfo{ - User: uid, - Username: username, - Target: target, - Targetname: targetname, - Updatetime: updatetime, - } - // 民政局登记数据 - err = sql.db.Insert(gidstr, &uidinfo) - return err + return sql.db.Insert("cdsheet", &cdsheet{ + Time: time.Now().Unix(), + GroupID: gid, + UserID: uid, + ModeID: mode, + }) } +// nolint: asciicheck +// nolint: asciicheck func (sql *婚姻登记) 离婚休妻(gid, wife int64) error { sql.Lock() defer sql.Unlock() @@ -261,6 +409,8 @@ func (sql *婚姻登记) 离婚休妻(gid, wife int64) error { return sql.db.Del(gidstr, "where target = "+wifestr) } +// nolint: asciicheck +// nolint: asciicheck func (sql *婚姻登记) 离婚休夫(gid, husband int64) error { sql.Lock() defer sql.Unlock() @@ -269,439 +419,172 @@ func (sql *婚姻登记) 离婚休夫(gid, husband int64) error { return sql.db.Del(gidstr, "where user = "+husbandstr) } -func (sql *婚姻登记) 花名册(gid int64) (list [][4]string, number int, err error) { - sql.Lock() - defer sql.Unlock() - gidstr := "group" + strconv.FormatInt(gid, 10) - err = sql.db.Create(gidstr, &userinfo{}) - if err != nil { - return - } - number, err = sql.db.Count(gidstr) - if err != nil || number <= 0 { - return - } - var info userinfo - list = make([][4]string, 0, number) - err = sql.db.FindFor(gidstr, &info, "GROUP BY user", func() error { - if info.Target == 0 { - return nil - } - dbinfo := [4]string{ - info.Username, - strconv.FormatInt(info.User, 10), - info.Targetname, - strconv.FormatInt(info.Target, 10), - } - list = append(list, dbinfo) - return nil - }) - number = len(list) - return -} - -func slicename(name string, canvas *gg.Context) (resultname string) { - usermane := []rune(name) // 将每个字符单独放置 - widthlen := 0 - numberlen := 0 - for i, v := range usermane { - width, _ := canvas.MeasureString(string(v)) // 获取单个字符的宽度 - widthlen += int(width) - if widthlen > 350 { - break // 总宽度不能超过350 - } - numberlen = i - } - if widthlen > 350 { - resultname = string(usermane[:numberlen-1]) + "......" // 名字切片 - } else { - resultname = name - } - return -} - -// 获取好感度 -func (sql *婚姻登记) getFavorability(uid, target int64) (favor int, err error) { - sql.Lock() - defer sql.Unlock() - err = sql.db.Create("favorability", &favorability{}) - if err != nil { - return - } - info := favorability{} - uidstr := strconv.FormatInt(uid, 10) - targstr := strconv.FormatInt(target, 10) - err = sql.db.Find("favorability", &info, "where Userinfo glob '*"+uidstr+"+"+targstr+"*'") - if err != nil { - err = sql.db.Insert("favorability", &favorability{ - Userinfo: uidstr + "+" + targstr + "+" + uidstr, - Favor: 0, - }) - return - } - favor = info.Favor - return -} - -// 设置好感度 正增负减 -func (sql *婚姻登记) setFavorability(uid, target int64, score int) (favor int, err error) { - sql.Lock() - defer sql.Unlock() - err = sql.db.Create("favorability", &favorability{}) - if err != nil { - return - } - info := favorability{} - uidstr := strconv.FormatInt(uid, 10) - targstr := strconv.FormatInt(target, 10) - err = sql.db.Find("favorability", &info, "where Userinfo glob '*"+uidstr+"+"+targstr+"*'") - if err != nil { - err = sql.db.Insert("favorability", &favorability{ - Userinfo: uidstr + "+" + targstr + "+" + uidstr, - Favor: score, - }) - if err == nil { - err = sql.db.Find("favorability", &info, "where Userinfo glob '*"+uidstr+"+"+targstr+"*'") - } - return info.Favor, err - } - info.Favor += score - if info.Favor > 100 { - info.Favor = 100 - } else if info.Favor < 0 { - info.Favor = 0 - } - err = sql.db.Insert("favorability", &info) - return info.Favor, err -} - -// 获取技能时长 -func (sql *婚姻登记) getCDtime(gid int64) (skillCD float64, err error) { - sql.Lock() - defer sql.Unlock() - skillCD = 12 - err = sql.db.Create("updateinfo", &updateinfo{}) - if err != nil { - if err = sql.db.Drop("updateinfo"); err == nil { - err = sql.db.Create("updateinfo", &updateinfo{}) - } - if err != nil { - return - } - } - gidstr := strconv.FormatInt(gid, 10) - dbinfo := updateinfo{} - err = sql.db.Find("updateinfo", &dbinfo, "where gid is "+gidstr) - if err != nil { - // 如果没有登记过就记录 - err = sql.db.Insert("updateinfo", &updateinfo{ - GID: gid, - CanMatch: 1, - CanNtr: 1, - CDtime: 12, - }) - return - } - return dbinfo.CDtime, nil -} - -// 设置技能时长 -func (sql *婚姻登记) setCDtime(gid int64, cdTime float64) (err error) { - sql.Lock() - defer sql.Unlock() - err = sql.db.Create("updateinfo", &updateinfo{}) - if err != nil { - if err = sql.db.Drop("updateinfo"); err == nil { - err = sql.db.Create("updateinfo", &updateinfo{}) - } - if err != nil { - return - } - } - gidstr := strconv.FormatInt(gid, 10) - dbinfo := updateinfo{} - err = sql.db.Find("updateinfo", &dbinfo, "where gid is "+gidstr) - if err != nil { - // 如果没有登记过就记录 - err = sql.db.Insert("updateinfo", &updateinfo{ - GID: gid, - CanMatch: 1, - CanNtr: 1, - CDtime: cdTime, - }) - return - } - dbinfo.CDtime = cdTime - err = sql.db.Insert("updateinfo", &dbinfo) - return -} - -// 记录CD -func (sql *婚姻登记) writeCDtime(gid, uid, mun int64) error { - sql.Lock() - defer sql.Unlock() - err := sql.db.Create("cdsheet", &cdsheet{}) - if err != nil { - if err = sql.db.Drop("cdsheet"); err == nil { - err = sql.db.Create("cdsheet", &cdsheet{}) - } - if err != nil { - return err - } - } - err = sql.db.Insert("cdsheet", &cdsheet{ - Time: time.Now().Unix(), - GroupID: gid, - UserID: uid, - ModeID: mun, - }) - return err -} - -// 判断CD是否过时 -func (sql *婚姻登记) compareCDtime(gid, uid, mun int64, cdtime float64) (ok bool, err error) { - sql.Lock() - defer sql.Unlock() - ok = false - err = sql.db.Create("cdsheet", &cdsheet{}) - if err != nil { - if err = sql.db.Drop("cdsheet"); err == nil { - err = sql.db.Create("cdsheet", &cdsheet{}) - } - if err != nil { - return - } - } - limitID := "where GroupID is " + strconv.FormatInt(gid, 10) + - " and UserID is " + strconv.FormatInt(uid, 10) + - " and ModeID is " + strconv.FormatInt(mun, 10) - exist := sql.db.CanFind("cdsheet", limitID) - if !exist { - return true, nil - } - cdinfo := cdsheet{} - err = sql.db.Find("cdsheet", &cdinfo, limitID) - if err != nil { - return - } - getTime := time.Unix(cdinfo.Time, 0) - if time.Since(getTime).Hours() > cdtime { - // 如果CD已过就删除 - err = sql.db.Del("cdsheet", limitID) - return true, err - } - return -} - -// 注入判断 是否为单身 -func checkdog(ctx *zero.Ctx) bool { +// 注入判断 是否单身条件 +func checkSingleDog(ctx *zero.Ctx) bool { gid := ctx.Event.GroupID uid := ctx.Event.UserID - // 获取CD - cdTime, err := 民政局.getCDtime(gid) - if err != nil { - ctx.SendChain(message.Text("[qqwife]获取该群技能CD错误(将以CD12H计算)\n", err)) - } - ok, err := 民政局.compareCDtime(gid, uid, 1, cdTime) + fiancee, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64) if err != nil { - ctx.SendChain(message.Text("[qqwife]查询用户CD状态失败,请重试\n", err)) + ctx.SendChain(message.Text("额,你的target好像不存在?")) return false } - if !ok { - ctx.SendChain(message.Text("你的技能还在CD中...")) + // 判断是否需要重置 + err = 民政局.开门时间(gid) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) return false } // 判断是否符合条件 - stauts, _, err := 民政局.营业模式(gid) + groupInfo, err := 民政局.查看设置(gid) if err != nil { - ctx.SendChain(message.Text("[qqwife]", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) return false } - if stauts == 0 { + if groupInfo.CanMatch == 0 { ctx.SendChain(message.Text("你群包分配,别在娶妻上面下功夫,好好水群")) return false } - // 得先判断用户是否存在才行在,再重置 - fiancee, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64) - if err != nil { - ctx.SendChain(message.Text("额,你的target好像不存在?")) + // 判断CD + ok, err := 民政局.判断CD(gid, uid, "嫁娶", groupInfo.CDtime) + switch { + case err != nil: + ctx.SendChain(message.Text("[ERROR]:", err)) return false - } - // 判断是否需要重置 - ok, err = 民政局.开门时间(gid) - if err != nil { - ctx.SendChain(message.Text("[qqwife]群状态查询失败\n", err)) + case !ok: + ctx.SendChain(message.Text("你的技能还在CD中...")) return false } - if ok { - return true // 重置后也全是单身 - } // 获取用户信息 - uidtarget, uidstatus, err := 民政局.查户口(gid, uid) + userInfo, _ := 民政局.查户口(gid, uid) switch { - case uidstatus == "错": - ctx.SendChain(message.Text("[qqwife]用户状态查询失败\n", err)) - return false - case uidstatus != "单" && (uidtarget.Target == 0 || uidtarget.User == 0): // 如果是单身贵族 + case userInfo != (userinfo{}) && (userInfo.Target == 0 || userInfo.User == 0): // 如果是单身贵族 ctx.SendChain(message.Text("今天的你是单身贵族噢")) return false - case (uidstatus == "攻" && uidtarget.Target == fiancee) || - (uidstatus == "受" && uidtarget.User == fiancee): + case userInfo.Target == fiancee || userInfo.User == fiancee: ctx.SendChain(message.Text("笨蛋!你们已经在一起了!")) return false - case uidstatus == "攻": // 如果如为攻 + case userInfo.User == uid: // 如果如为攻 ctx.SendChain(message.Text("笨蛋~你家里还有个吃白饭的w")) return false - case uidstatus == "受": // 如果为受 - ctx.SendChain(message.Text("该是0就是0,当0有什么不好")) + case userInfo.Target == uid: // 如果为受 + ctx.SendChain(message.Text("该是0就是0,当0有什么不好")) return false } - fianceeinfo, fianceestatus, err := 民政局.查户口(gid, fiancee) + fianceeInfo, _ := 民政局.查户口(gid, fiancee) switch { - case fianceestatus == "错": - ctx.SendChain(message.Text("[qqwife]对象状态查询失败\n", err)) - case fianceestatus == "单": // 如果为单身狗 - return true - case fianceestatus != "单" && (fianceeinfo.Target == 0 || fianceeinfo.User == 0): // 如果是单身贵族 + case fianceeInfo != (userinfo{}) && (fianceeInfo.Target == 0 || fianceeInfo.User == 0): // 如果是单身贵族 ctx.SendChain(message.Text("今天的ta是单身贵族噢")) - case fianceestatus == "攻": // 如果如为攻 + return false + case fianceeInfo.User == fiancee: // 如果如为攻 ctx.SendChain(message.Text("他有别的女人了,你该放下了")) - case fianceestatus == "受": // 如果为受 - ctx.SendChain(message.Text("ta被别人娶了,你来晚力")) + return false + case fianceeInfo.Target == fiancee: // 如果为受 + ctx.SendChain(message.Text("ta被别人娶了,你来晚力")) + return false } - return false + return true } // 注入判断 是否满足小三要求 -func checkcp(ctx *zero.Ctx) bool { +func checkMistress(ctx *zero.Ctx) bool { gid := ctx.Event.GroupID uid := ctx.Event.UserID - // 获取CD - cdTime, err := 民政局.getCDtime(gid) - if err != nil { - ctx.SendChain(message.Text("[qqwife]获取该群技能CD错误(将以CD12H计算)\n", err)) - } - ok, err := 民政局.compareCDtime(gid, uid, 2, cdTime) + fiancee, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64) if err != nil { - ctx.SendChain(message.Text("[qqwife]查询用户CD状态失败,请重试\n", err)) + ctx.SendChain(message.Text("额,你的target好像不存在?")) return false } - if !ok { - ctx.SendChain(message.Text("你的技能还在CD中...")) + // 判断是否需要重置 + err = 民政局.开门时间(gid) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) return false } // 判断是否符合条件 - _, stauts, err := 民政局.营业模式(gid) + groupInfo, err := 民政局.查看设置(gid) if err != nil { - ctx.SendChain(message.Text("[qqwife]", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) return false } - if stauts == 0 { + if groupInfo.CanNtr == 0 { ctx.SendChain(message.Text("你群发布了牛头人禁止令,放弃吧")) return false } - // 得先判断用户是否存在才行在,再重置 - fiancee, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64) - if err != nil { - ctx.SendChain(message.Text("额,你的target好像不存在?")) + // 判断CD + ok, err := 民政局.判断CD(gid, uid, "嫁娶", groupInfo.CDtime) + switch { + case err != nil: + ctx.SendChain(message.Text("[ERROR]:", err)) return false - } - // 判断是否需要重置 - ok, err = 民政局.开门时间(gid) - if err != nil { - ctx.SendChain(message.Text("[qqwife]群状态查询失败\n", err)) + case !ok: + ctx.SendChain(message.Text("你的技能还在CD中...")) return false } - if ok { - ctx.SendChain(message.Text("ta现在还是单身哦,快向ta表白吧!")) - return false // 重置后也全是单身 - } - fianceeinfo, fianceestatus, err := 民政局.查户口(gid, fiancee) + // 获取用户信息 + fianceeInfo, _ := 民政局.查户口(gid, fiancee) switch { - case fianceestatus == "错": - ctx.SendChain(message.Text("[qqwife]对象状态查询失败\n", err)) + case fianceeInfo == (userinfo{}): // 如果是空数据 + ctx.SendChain(message.Text("ta现在还是单身哦,快向ta表白吧!")) return false - case fianceestatus == "单": // 如果为单身狗 - if fiancee == uid { - return true - } - ctx.SendChain(message.Text("ta现在还是单身哦,快向ta表白吧!")) - return false - case fianceestatus != "单" && (fianceeinfo.Target == 0 || fianceeinfo.User == 0): // 如果是单身贵族 + case fianceeInfo.Target == 0 || fianceeInfo.User == 0: // 如果是单身贵族 ctx.SendChain(message.Text("今天的ta是单身贵族噢")) return false - case (fianceestatus == "攻" && fianceeinfo.Target == fiancee) || - (fianceestatus == "受" && fianceeinfo.User == fiancee): + case fianceeInfo.Target == uid || fianceeInfo.User == uid: ctx.SendChain(message.Text("笨蛋!你们已经在一起了!")) return false } // 获取用户信息 - uidtarget, uidstatus, err := 民政局.查户口(gid, uid) + userInfo, _ := 民政局.查户口(gid, uid) switch { - case uidstatus == "错": - ctx.SendChain(message.Text("[qqwife]用户状态查询失败\n", err)) - case uidstatus == "单": // 如果为单身狗 - return true - case uidstatus != "单" && (uidtarget.Target == 0 || uidtarget.User == 0): // 如果是单身贵族 + case userInfo != (userinfo{}) && (userInfo.Target == 0 || userInfo.User == 0): // 如果是单身贵族 ctx.SendChain(message.Text("今天的你是单身贵族噢")) - case uidstatus == "攻": // 如果如为攻 + return false + case userInfo.User == uid: // 如果如为攻 ctx.SendChain(message.Text("打灭,不给纳小妾!")) - case uidstatus == "受": // 如果为受 - ctx.SendChain(message.Text("该是0就是0,当0有什么不好")) + return false + case userInfo.Target == uid: // 如果为受 + ctx.SendChain(message.Text("该是0就是0,当0有什么不好")) + return false } - return false + return true } -// 注入判断 是否满足离婚要求 -func checkdivorce(ctx *zero.Ctx) bool { +func checkDivorce(ctx *zero.Ctx) bool { gid := ctx.Event.GroupID uid := ctx.Event.UserID - // 获取CD - cdTime, err := 民政局.getCDtime(gid) - if err != nil { - ctx.SendChain(message.Text("[qqwife]获取该群技能CD错误(将以CD12H计算)\n", err)) - } - ok, err := 民政局.compareCDtime(gid, uid, 4, cdTime) + // 判断是否需要重置 + err := 民政局.开门时间(gid) if err != nil { - ctx.SendChain(message.Text("[qqwife]查询用户CD状态失败,请重试\n", err)) - return false - } - if !ok { - ctx.SendChain(message.Text("你的技能还在CD中...")) + ctx.SendChain(message.Text("[ERROR]:", err)) return false } // 判断是否符合条件 - _, uidstatus, err := 民政局.查户口(gid, uid) - switch uidstatus { - case "错": - ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err)) - return false - case "单": + userInfo, _ := 民政局.查户口(gid, uid) + if userInfo == (userinfo{}) { // 如果空数据 ctx.SendChain(message.Text("今天你还没结婚哦")) return false } - return true -} - -// 注入判断 是否满足做媒要求 -func checkCondition(ctx *zero.Ctx) bool { - gid := ctx.Event.GroupID - uid := ctx.Event.UserID // 获取CD - cdTime, err := 民政局.getCDtime(gid) + groupInfo, err := 民政局.查看设置(gid) if err != nil { - ctx.SendChain(message.Text("[qqwife]获取该群技能CD错误(将以CD12H计算)\n", err)) - } - ok, err := 民政局.compareCDtime(gid, uid, 3, cdTime) - if err != nil { - ctx.SendChain(message.Text("[qqwife]查询用户CD状态失败,请重试\n", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) return false } - if !ok { + ok, err := 民政局.判断CD(gid, uid, "离婚", groupInfo.CDtime) + switch { + case err != nil: + ctx.SendChain(message.Text("[ERROR]:", err)) + return false + case !ok: ctx.SendChain(message.Text("你的技能还在CD中...")) return false } - // 得先判断用户是否存在才行在,再重置 + return true +} + +func checkMatchmaker(ctx *zero.Ctx) bool { + gid := ctx.Event.GroupID + uid := ctx.Event.UserID gayOne, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) if err != nil { ctx.SendChain(message.Text("额,攻方好像不存在?")) @@ -717,45 +600,51 @@ func checkCondition(ctx *zero.Ctx) bool { return false } if gayOne == gayZero { - ctx.SendChain(message.Text("你这个媒人XP很怪咧,不能这样噢")) + ctx.SendChain(message.Text("你这个媒人XP很怪咧,不能这样噢")) return false } // 判断是否需要重置 - ok, err = 民政局.开门时间(gid) + err = 民政局.开门时间(gid) if err != nil { - ctx.SendChain(message.Text("[qqwife]群状态查询失败\n", err)) + ctx.SendChain(message.Text("[ERROR]:", err)) return false } - if ok { - return true // 重置后也全是单身 + // 获取CD + groupInfo, err := 民政局.查看设置(gid) + if err != nil { + ctx.SendChain(message.Text("[ERROR]:", err)) + return false } - fianceeinfo, fianceestatus, err := 民政局.查户口(gid, gayOne) + ok, err := 民政局.判断CD(gid, uid, "做媒", groupInfo.CDtime) switch { - case fianceestatus == "错": - ctx.SendChain(message.Text("[qqwife]对象状态查询失败\n", err)) + case err != nil: + ctx.SendChain(message.Text("[ERROR]:", err)) return false - case fianceestatus != "单" && (fianceeinfo.Target == 0 || fianceeinfo.User == 0): // 如果是单身贵族 + case !ok: + ctx.SendChain(message.Text("你的技能还在CD中...")) + return false + } + gayOneInfo, _ := 民政局.查户口(gid, gayOne) + switch { + case gayOneInfo != (userinfo{}) && (gayOneInfo.Target == 0 || gayOneInfo.User == 0): // 如果是单身贵族 ctx.SendChain(message.Text("今天的攻方是单身贵族噢")) return false - case (fianceestatus == "攻" && fianceeinfo.Target == gayZero) || - (fianceestatus == "受" && fianceeinfo.User == gayZero): - ctx.SendChain(message.Text("笨蛋!ta们已经在一起了!")) + case gayOneInfo.Target == gayZero || gayOneInfo.User == gayZero: + ctx.SendChain(message.Text("笨蛋!ta们已经在一起了!")) return false - case fianceestatus != "单": + case gayOneInfo != (userinfo{}): // 如果不是单身 ctx.SendChain(message.Text("攻方不是单身,不允许给这种人做媒!")) return false } // 获取用户信息 - uidtarget, uidstatus, err := 民政局.查户口(gid, gayZero) + gayZeroInfo, _ := 民政局.查户口(gid, gayZero) switch { - case uidstatus == "错": - ctx.SendChain(message.Text("[qqwife]用户状态查询失败\n", err)) - case uidstatus == "单": // 如果为单身狗 - return true - case uidstatus != "单" && (uidtarget.Target == 0 || uidtarget.User == 0): // 如果是单身贵族 - ctx.SendChain(message.Text("今天的你是单身贵族噢")) - case uidstatus != "单": + case gayOneInfo != (userinfo{}) && (gayZeroInfo.Target == 0 || gayZeroInfo.User == 0): // 如果是单身贵族 + ctx.SendChain(message.Text("今天的攻方是单身贵族噢")) + return false + case gayZeroInfo != (userinfo{}): // 如果不是单身 ctx.SendChain(message.Text("受方不是单身,不允许给这种人做媒!")) + return false } - return false + return true } diff --git a/plugin/quan/quan.go b/plugin/quan/quan.go index 252d89c7e8..fe84c2e0de 100644 --- a/plugin/quan/quan.go +++ b/plugin/quan/quan.go @@ -13,7 +13,7 @@ import ( ) const ( - quan = "http://tfkapi.top/API/qqqz.php?qq=%v" // api + quan = "http://tc.tfkapi.top/API/qqqz.php?qq=%v" // api ) func init() { // 主函数 diff --git a/plugin/qzone/model.go b/plugin/qzone/model.go index 0d47e89a73..7c1a22a615 100644 --- a/plugin/qzone/model.go +++ b/plugin/qzone/model.go @@ -4,7 +4,6 @@ import ( "fmt" "os" - _ "github.com/fumiama/sqlite3" // use sql "github.com/jinzhu/gorm" ) diff --git a/plugin/score/model.go b/plugin/score/model.go index fab21fe2c8..65145fbc2d 100644 --- a/plugin/score/model.go +++ b/plugin/score/model.go @@ -4,7 +4,6 @@ import ( "os" "time" - _ "github.com/fumiama/sqlite3" // import sql "github.com/jinzhu/gorm" ) diff --git a/plugin/sleep_manage/model.go b/plugin/sleep_manage/model.go index 7381138f01..fda86b865c 100644 --- a/plugin/sleep_manage/model.go +++ b/plugin/sleep_manage/model.go @@ -4,7 +4,6 @@ import ( "os" "time" - _ "github.com/fumiama/sqlite3" // use sql "github.com/jinzhu/gorm" log "github.com/sirupsen/logrus" ) diff --git a/plugin/thesaurus/chat.go b/plugin/thesaurus/chat.go index a18c9a4cd7..b124856c89 100644 --- a/plugin/thesaurus/chat.go +++ b/plugin/thesaurus/chat.go @@ -2,27 +2,99 @@ package thesaurus import ( + "bytes" "encoding/json" "math/rand" + "strings" + "github.com/FloatTech/floatbox/ctxext" + "github.com/FloatTech/floatbox/process" ctrl "github.com/FloatTech/zbpctrl" "github.com/FloatTech/zbputils/control" + "github.com/fumiama/jieba" "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" + "gopkg.in/yaml.v3" ) -type kimo = map[string]*[]string - func init() { engine := control.Register("thesaurus", &ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Brief: "词典匹配回复", - Help: "- 词典匹配回复", + Help: "- 切换[kimo|傲娇|可爱]词库\n- 设置词库触发概率0.x (0= 9 { + ctx.SendChain(message.Text("ERROR: 概率越界")) + return + } + n-- // 0~7 + gid := ctx.Event.GroupID + if gid == 0 { + gid = -ctx.Event.UserID + } + d := c.GetData(gid) + err := c.SetData(gid, (d&3)|(int64(n)<<59)) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + ctx.SendChain(message.Text("成功!")) + }) go func() { - data, err := engine.GetLazyData("kimoi.json", false) + data, err := engine.GetLazyData("dict.txt", false) + if err != nil { + panic(err) + } + seg, err := jieba.LoadDictionary(bytes.NewReader(data)) + if err != nil { + panic(err) + } + smd, err := engine.GetLazyData("simai.yml", false) + if err != nil { + panic(err) + } + sm := simai{D: make(map[string][]string, 8192), K: make(map[string][]string, 16384)} + err = yaml.Unmarshal(smd, &sm) + if err != nil { + panic(err) + } + data, err = engine.GetLazyData("kimoi.json", false) if err != nil { panic(err) } @@ -31,17 +103,88 @@ func init() { if err != nil { panic(err) } - chatList := make([]string, 0, 256) + chatList := make([]string, 0, len(kimomap)) for k := range kimomap { chatList = append(chatList, k) } logrus.Infoln("[thesaurus]加载", len(chatList), "条kimoi") - engine.OnFullMatchGroup(chatList, zero.OnlyToMe).SetBlock(true).Handle( - func(ctx *zero.Ctx) { - key := ctx.MessageString() - val := *kimomap[key] - text := val[rand.Intn(len(val))] - ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text)) // 来自于 https://github.com/Kyomotoi/AnimeThesaurus 的回复 经过二次修改 - }) + + chatListD := make([]string, 0, len(sm.D)) + for k := range sm.D { + chatListD = append(chatListD, k) + } + chatListK := make([]string, 0, len(sm.K)) + for k := range sm.K { + chatListK = append(chatListK, k) + } + logrus.Infoln("[thesaurus]加载", len(chatListD), "条傲娇词库", len(chatListK), "条可爱词库") + + engine.OnMessage(canmatch(tKIMO), match(chatList, seg)). + SetBlock(false). + Handle(randreply(kimomap)) + engine.OnMessage(canmatch(tDERE), match(chatListD, seg)). + SetBlock(false). + Handle(randreply(sm.D)) + engine.OnMessage(canmatch(tKAWA), match(chatListK, seg)). + SetBlock(false). + Handle(randreply(sm.K)) }() } + +type kimo = map[string][]string + +type simai struct { + D map[string][]string `yaml:"傲娇"` + K map[string][]string `yaml:"可爱"` +} + +const ( + tKIMO = iota + tDERE + tKAWA +) + +func match(l []string, seg *jieba.Segmenter) zero.Rule { + return func(ctx *zero.Ctx) bool { + if zero.FullMatchRule(l...)(ctx) { + return true + } + return ctxext.JiebaFullMatch(seg, func(ctx *zero.Ctx) string { + return ctx.ExtractPlainText() + }, l...)(ctx) + } +} + +func canmatch(typ int64) zero.Rule { + return func(ctx *zero.Ctx) bool { + if zero.HasPicture(ctx) { + return false + } + c, ok := ctx.State["manager"].(*ctrl.Control[*zero.Ctx]) + if !ok { + return false + } + gid := ctx.Event.GroupID + if gid == 0 { + gid = -ctx.Event.UserID + } + d := c.GetData(gid) + return d&3 == typ && rand.Int63n(10) <= d>>59 + } +} + +func randreply(m map[string][]string) zero.Handler { + return func(ctx *zero.Ctx) { + key := ctx.State["matched"].(string) + val := m[key] + nick := zero.BotConfig.NickName[rand.Intn(len(zero.BotConfig.NickName))] + text := val[rand.Intn(len(val))] + text = strings.ReplaceAll(text, "{name}", ctx.CardOrNickName(ctx.Event.UserID)) + text = strings.ReplaceAll(text, "{me}", nick) + id := ctx.Event.MessageID + for _, t := range strings.Split(text, "{segment}") { + process.SleepAbout1sTo2s() + id = ctx.SendChain(message.Reply(id), message.Text(t)) + } + } +} diff --git a/plugin/vtb_quotation/model/model.go b/plugin/vtb_quotation/model/model.go index 8bc4d7c453..01b86c727f 100644 --- a/plugin/vtb_quotation/model/model.go +++ b/plugin/vtb_quotation/model/model.go @@ -10,7 +10,6 @@ import ( "strings" "github.com/FloatTech/floatbox/web" - _ "github.com/fumiama/sqlite3" // import sql "github.com/jinzhu/gorm" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" diff --git a/plugin/vtb_quotation/vtb_quotation.go b/plugin/vtb_quotation/vtb_quotation.go index 5a9dd502b5..8735c3818a 100644 --- a/plugin/vtb_quotation/vtb_quotation.go +++ b/plugin/vtb_quotation/vtb_quotation.go @@ -13,7 +13,6 @@ import ( "strings" "time" - _ "github.com/fumiama/sqlite3" // use sql zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" diff --git a/plugin/ygo/ygocdb.go b/plugin/ygo/ygocdb.go new file mode 100644 index 0000000000..b2c3356958 --- /dev/null +++ b/plugin/ygo/ygocdb.go @@ -0,0 +1,187 @@ +// Package ygo 一些关于ygo的插件 +package ygo + +import ( + "net/url" + "strconv" + "strings" + "time" + + "encoding/json" + + "github.com/FloatTech/floatbox/web" + ctrl "github.com/FloatTech/zbpctrl" + control "github.com/FloatTech/zbputils/control" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" +) + +const ( + serviceErr = "[ygocdb]error:" + api = "https://ygocdb.com/api/v0/?search=" + picherf = "https://cdn.233.momobako.com/ygopro/pics/" +) + +type searchResult struct { + Result []struct { + Cid int `json:"cid"` + ID int `json:"id"` + CnName string `json:"cn_name"` + // CnocgN string `json:"cnocg_n"` // 简中卡名 + JpName string `json:"jp_name"` + EnName string `json:"en_name"` + Text struct { + Types string `json:"types"` + Pdesc string `json:"pdesc"` + Desc string `json:"desc"` + } `json:"text"` + } `json:"result"` +} + +func init() { + en := control.Register("ygocdb", &ctrl.Options[*zero.Ctx]{ + DisableOnDefault: false, + Brief: "游戏王百鸽API",// 本插件基于游戏王百鸽API"https://www.ygo-sem.cn/" + Help: "- /ydp [xxx]\n" + + "- /yds [xxx]\n" + + "- /ydb [xxx]\n" + + "[xxx]为搜索内容\np:返回一张图片\ns:返回一张效果描述\nb:全显示", + }) + + en.OnRegex(`^/yd(p|s|b)\s?(.*)`).SetBlock(true).Handle(func(ctx *zero.Ctx) { + function := ctx.State["regex_matched"].([]string)[1] + ctxtext := ctx.State["regex_matched"].([]string)[2] + if ctxtext == "" { + ctx.SendChain(message.Text("你是想查询「空手假象」吗?")) + return + } + data, err := web.GetData(api + url.QueryEscape(ctxtext)) + if err != nil { + ctx.SendChain(message.Text(serviceErr, err)) + return + } + var result searchResult + err = json.Unmarshal(data, &result) + if err != nil { + ctx.SendChain(message.Text(serviceErr, err)) + return + } + maxpage := len(result.Result) + switch { + case maxpage == 0: + ctx.SendChain(message.Text("没有找到相关的卡片额")) + return + case function == "p": + ctx.SendChain(message.Image(picherf + strconv.Itoa(result.Result[0].ID) + ".jpg")) + return + case function == "s": + cardtextout := cardtext(result, 0) + ctx.SendChain(message.Text(cardtextout)) + return + case function == "d" && maxpage == 1: + cardtextout := cardtext(result, 0) + ctx.SendChain(message.Image(picherf+strconv.Itoa(result.Result[0].ID)+".jpg"), message.Text(cardtextout)) + return + } + var listName []string + var listid []int + for _, v := range result.Result { + listName = append(listName, strconv.Itoa(len(listName))+"."+v.CnName) + listid = append(listid, v.ID) + } + var ( + currentPage = 10 + nextpage = 0 + ) + if maxpage < 10 { + currentPage = maxpage + } + ctx.SendChain(message.Text("找到", strconv.Itoa(maxpage), "张相关卡片,当前显示以下卡名:\n", + strings.Join(listName[:currentPage], "\n"), + "\n————————————\n输入对应数字获取卡片信息,", + "\n或回复“取消”、“下一页”指令")) + recv, cancel := zero.NewFutureEvent("message", 999, false, zero.RegexRule(`(取消)|(下一页)|\d+`), zero.OnlyGroup, zero.CheckUser(ctx.Event.UserID)).Repeat() + after := time.NewTimer(20 * time.Second) + for { + select { + case <-after.C: + cancel() + ctx.Send( + message.ReplyWithMessage(ctx.Event.MessageID, + message.Text("等待超时,搜索结束"), + ), + ) + return + case e := <-recv: + nextcmd := e.Event.Message.String() + switch nextcmd { + case "取消": + cancel() + after.Stop() + ctx.Send( + message.ReplyWithMessage(ctx.Event.MessageID, + message.Text("用户取消,搜索结束"), + ), + ) + return + case "下一页": + after.Reset(20 * time.Second) + if maxpage < 11 { + continue + } + nextpage++ + if nextpage*10 >= maxpage { + nextpage = 0 + currentPage = 10 + ctx.SendChain(message.Text("已是最后一页,返回到第一页")) + } else if nextpage == maxpage/10 { + currentPage = maxpage % 10 + } + ctx.SendChain(message.Text("找到", strconv.Itoa(maxpage), "张相关卡片,当前显示以下卡名:\n", + strings.Join(listName[nextpage*10:nextpage*10+currentPage], "\n"), + "\n————————————————\n输入对应数字获取卡片信息,", + "\n或回复“取消”、“下一页”指令")) + default: + cardint, err := strconv.Atoi(nextcmd) + switch { + case err != nil: + after.Reset(20 * time.Second) + ctx.SendChain(message.At(ctx.Event.UserID), message.Text("请输入正确的序号")) + default: + if cardint < nextpage*10+currentPage { + cancel() + after.Stop() + cardtextout := cardtext(result, cardint) + ctx.SendChain(message.Image(picherf+strconv.Itoa(listid[cardint])+".jpg"), message.Text(cardtextout)) + return + } + after.Reset(20 * time.Second) + ctx.SendChain(message.At(ctx.Event.UserID), message.Text("请输入正确的序号")) + } + } + } + } + }) +} + +func cardtext(list searchResult, cardid int) string { + var cardtext []string + cardtext = append(cardtext, "中文卡名:\n "+list.Result[cardid].CnName) + if list.Result[cardid].JpName == "" { + cardtext = append(cardtext, "英文卡名:\n "+list.Result[cardid].EnName) + } else { + cardtext = append(cardtext, "日文卡名:\n "+list.Result[cardid].JpName) + } + cardtext = append(cardtext, "卡片密码:"+strconv.Itoa(list.Result[cardid].ID)) + cardtext = append(cardtext, list.Result[cardid].Text.Types) + if list.Result[cardid].Text.Pdesc != "" { + cardtext = append(cardtext, "[灵摆效果]\n"+list.Result[cardid].Text.Pdesc) + if strings.Contains(list.Result[cardid].Text.Types, "效果") { + cardtext = append(cardtext, "[怪兽效果]") + } else { + cardtext = append(cardtext, "[怪兽描述]") + } + } + cardtext = append(cardtext, list.Result[cardid].Text.Desc) + return strings.Join(cardtext, "\n") +} diff --git a/plugin/ygo/ygotrade.go b/plugin/ygo/ygotrade.go new file mode 100644 index 0000000000..9f8f9295b2 --- /dev/null +++ b/plugin/ygo/ygotrade.go @@ -0,0 +1,144 @@ +// Package ygo 一些关于ygo的插件 +package ygo + +import ( + "encoding/json" + "errors" + "net/url" + "strconv" + "strings" + + "github.com/FloatTech/floatbox/web" + ctrl "github.com/FloatTech/zbpctrl" + "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" +) + +const ( + rarityTrade = "https://api.jihuanshe.com/api/market/search/match-product?game_key=ygo&game_sub_key=ocg&page=1&keyword=" + storeTrade = "https://api.jihuanshe.com/api/market/card-versions/products?game_key=ygo&game_sub_key=ocg&page=1&condition=1&card_version_id=" +) + +type apiInfo struct { + Data []tradeInfo `json:"data"` +} + +type tradeInfo struct { + // 卡片信息 + ID int `json:"id"` + NameCn string `json:"name_cn"` + CardID int `json:"card_id"` + Number string `json:"number"` + Rarity string `json:"rarity"` + ImageURL string `json:"image_url"` + MinPrice string `json:"min_price"` + // 卡店信息 + SellerUserID int `json:"seller_user_id"` + SellerUsername string `json:"seller_username"` + SellerUserAvatar string `json:"seller_user_avatar"` + SellerProvince string `json:"seller_province"` + SellerCity string `json:"seller_city"` + SellerCreditRank string `json:"seller_credit_rank"` + Quantity string `json:"quantity"` + CardVersionImage string `json:"card_version_image"` +} + +func init() { + engine := control.Register("ygotrade", &ctrl.Options[*zero.Ctx]{ + DisableOnDefault: false, + Brief: "游戏王卡价查询", // 本插件基于集换社API + Help: "- 查卡价 [卡名]\n- 查卡价 [卡名] -r [稀有度 稀有度 ...]\n- 查卡店 [卡名]\n- 查卡店 [卡名] -r [稀有度]", + }).ApplySingle(ctxext.DefaultSingle) + engine.OnPrefix("查卡价", func(ctx *zero.Ctx) bool { + ctx.State["args"] = strings.TrimSpace(ctx.State["args"].(string)) + return ctx.State["args"].(string) != "" + }).SetBlock(true).Handle(func(ctx *zero.Ctx) { + cardName, rarity, _ := strings.Cut(ctx.State["args"].(string), " -r ") + listOfTrace, err := getRarityTrade(cardName, rarity) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + msg := make(message.Message, len(listOfTrace)) + for i := 0; i < len(listOfTrace); i++ { + msg[i] = ctxext.FakeSenderForwardNode(ctx, message.Text( + "卡名:", listOfTrace[i].NameCn, + "\nID:", listOfTrace[i].ID, + "\n卡序:", listOfTrace[i].Number, + "\n罕贵度:", listOfTrace[i].Rarity, + "\n当前最低价:", listOfTrace[i].MinPrice), + message.Image(listOfTrace[i].ImageURL)) + } + if id := ctx.Send(msg); id.ID() == 0 { + ctx.SendChain(message.Text("ERROR: 可能被风控了")) + } + }) + engine.OnPrefix("查卡店", func(ctx *zero.Ctx) bool { + ctx.State["args"] = strings.TrimSpace(ctx.State["args"].(string)) + return ctx.State["args"].(string) != "" + }).SetBlock(true).Handle(func(ctx *zero.Ctx) { + cardName, rarity, _ := strings.Cut(ctx.State["args"].(string), " -r ") + if strings.Count(rarity, " ") > 0 { + ctx.SendChain(message.Text("ERROR: ", "卡店查询不支持查找多个罕贵度")) + return + } + listOfTrace, err := getRarityTrade(cardName, rarity) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + listStroe, err := getStoreTrade(listOfTrace[0].ID) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + msg := make(message.Message, len(listStroe)) + for i := 0; i < len(listStroe); i++ { + msg[i] = ctxext.FakeSenderForwardNode(ctx, message.Text( + "卖家名:", listStroe[i].SellerUsername, + "\nID:", listStroe[i].SellerUserID, + "\n地区:", listStroe[i].SellerCity, + "\n信誉度:", listStroe[i].SellerCreditRank, + "\n数量:", listStroe[i].Quantity, + "\n当前最低价:", listStroe[i].MinPrice), + message.Image(listStroe[i].CardVersionImage)) + } + if id := ctx.Send(msg); id.ID() == 0 { + ctx.SendChain(message.Text("ERROR: 可能被风控了")) + } + }) +} + +// 获取卡名该罕贵度卡片数据 +func getRarityTrade(key, rarity string) (tradeInfo []tradeInfo, err error) { + listOfTrace, err := web.GetData(rarityTrade + url.QueryEscape(key) + "&rarity=" + url.QueryEscape(rarity)) + if err != nil { + return + } + var apiInfo apiInfo + err = json.Unmarshal(listOfTrace, &apiInfo) + if len(apiInfo.Data) == 0 { + err = errors.New("没有找到相关卡片或输入参数错误") + return + } + tradeInfo = apiInfo.Data + return +} + +// 获取卡店卡片数据 +func getStoreTrade(cardID int) (stroeInfo []tradeInfo, err error) { + listOfTrace, err := web.GetData(storeTrade + url.QueryEscape(strconv.Itoa(cardID))) + if err != nil { + return + } + var apiInfo apiInfo + err = json.Unmarshal(listOfTrace, &apiInfo) + if len(apiInfo.Data) == 0 { + err = errors.New("没有找到相关卡片或输入参数错误") + return + } + stroeInfo = apiInfo.Data + return +} diff --git a/plugin/ymgal/model.go b/plugin/ymgal/model.go index a8704a0dfc..0591467354 100644 --- a/plugin/ymgal/model.go +++ b/plugin/ymgal/model.go @@ -11,7 +11,6 @@ import ( "time" "github.com/antchfx/htmlquery" - _ "github.com/fumiama/sqlite3" // import sql "github.com/jinzhu/gorm" )