nonebot-plugin-splatoon3-nso 2.0.0__tar.gz → 2.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/PKG-INFO +25 -26
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/README.md +1 -0
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/__init__.py +122 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/api/main.py +9 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/config.py +7 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/data/data_source.py +168 -17
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/data/db_sqlite.py +111 -28
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/data/transfer.py +3 -3
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/data/utils.py +36 -1
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/__init__.py +1 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/admin.py +34 -11
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/handle/b_or_c_evaluate_text.py +629 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/b_or_c_tools.py +4 -2
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/battle.py +5 -2
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/coop.py +2 -3
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/cron/__init__.py +22 -4
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/handle/cron/else_cron.py +168 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/cron/report.py +179 -43
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/cron/stat_ink.py +16 -4
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/cron/x_player.py +2 -1
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/history.py +8 -3
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/last.py +92 -59
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/login.py +49 -33
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/my.py +137 -22
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/handle/other.py +204 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/push.py +58 -32
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/handle/qq_md.py +373 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/report.py +50 -20
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/screenshot.py +3 -2
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/send_msg.py +192 -86
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/top.py +13 -3
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/utils.py +137 -11
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/resource/excuse_dictionary.csv +142 -0
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/resource/full_message_help.jpg +0 -0
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/resource/full_message_help2.jpg +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/s3s/iksm.py +131 -49
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/s3s/splatoon.py +75 -24
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/util.py +1 -11
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/utils/bot.py +5 -2
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/utils/excuse_generator.py +256 -0
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/utils/keyboard.py +201 -0
- nonebot_plugin_splatoon3_nso-2.2.2/nonebot_plugin_splatoon3_nso/utils/keyboard_help.md +134 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/utils/utils.py +2 -2
- nonebot_plugin_splatoon3_nso-2.2.2/pyproject.toml +59 -0
- nonebot_plugin_splatoon3_nso-2.0.0/LICENSE +0 -21
- nonebot_plugin_splatoon3_nso-2.0.0/nonebot_plugin_splatoon3_nso/__init__.py +0 -240
- nonebot_plugin_splatoon3_nso-2.0.0/nonebot_plugin_splatoon3_nso/handle/cron/else_cron.py +0 -281
- nonebot_plugin_splatoon3_nso-2.0.0/nonebot_plugin_splatoon3_nso/handle/qq_md.py +0 -353
- nonebot_plugin_splatoon3_nso-2.0.0/pyproject.toml +0 -43
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/api/__init__.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/api/tools.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/data/__init__.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/cron/event_top.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/cron/user_friends.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/handle/cron/utils.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/bot_login.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/bot_privacy.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/i18n/en-GB.json +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/i18n/ja-JP.json +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/i18n/ko-KR.json +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/i18n/zh-CN.json +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/i18n/zh-TW.json +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/AREA.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/BANKARA(CHALLENGE).png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/BANKARA(OPEN).png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/BANKARA.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/CLAM.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/GOAL.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/LEAGUE.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/LOFT.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/Regular.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/Splatfest.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/TURF_WAR.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/X_MATCH.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/coop_big_run.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/coop_regular.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/coop_team.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/icons/private.png +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/md.css +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/resource/sp3bot-login.gif +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/s3s/__init__.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/s3s/splatnet_image.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/s3s/stat.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/s3s/utils.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/test_s3s.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/utils/__init__.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/utils/cos_upload.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/utils/http.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/utils/redis.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/utils/short_url.py +0 -0
- {nonebot_plugin_splatoon3_nso-2.0.0 → nonebot_plugin_splatoon3_nso-2.2.2}/nonebot_plugin_splatoon3_nso/utils/time.py +0 -0
|
@@ -1,37 +1,36 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: nonebot-plugin-splatoon3-nso
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: 一个基于nonebot2框架的splatoon3游戏nso数据查询插件
|
|
5
|
-
License-File: LICENSE
|
|
6
5
|
Author: cypas
|
|
7
|
-
Author-email: ayano05@outlook.com
|
|
8
|
-
Requires-Python: >=3.10,<4.0
|
|
6
|
+
Author-email: cypas <ayano05@outlook.com>
|
|
9
7
|
Classifier: Programming Language :: Python :: 3
|
|
10
8
|
Classifier: Programming Language :: Python :: 3.10
|
|
11
9
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
10
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
11
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
12
|
Classifier: Programming Language :: Python :: 3.14
|
|
15
|
-
Requires-Dist:
|
|
16
|
-
Requires-Dist:
|
|
17
|
-
Requires-Dist:
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist:
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist: nonebot-adapter-
|
|
23
|
-
Requires-Dist: nonebot-
|
|
24
|
-
Requires-Dist: nonebot-
|
|
25
|
-
Requires-Dist: nonebot-
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist:
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist: pymmh3
|
|
33
|
-
Requires-Dist:
|
|
34
|
-
Requires-Dist:
|
|
13
|
+
Requires-Dist: beautifulsoup4>=4.12.2,<5
|
|
14
|
+
Requires-Dist: httpx>=0.28.1,<0.29
|
|
15
|
+
Requires-Dist: nonebot2>=2.4.4,<3
|
|
16
|
+
Requires-Dist: pydantic>=1.0.0,!=2.5.0,!=2.5.1,<3.0.0
|
|
17
|
+
Requires-Dist: nonebot-adapter-onebot>=2.4.6,<3
|
|
18
|
+
Requires-Dist: nonebot-adapter-telegram>=0.1.0b20,<0.2
|
|
19
|
+
Requires-Dist: nonebot-adapter-kaiheila>=0.3.4,<0.4
|
|
20
|
+
Requires-Dist: nonebot-adapter-qq>=1.7.1,<2
|
|
21
|
+
Requires-Dist: nonebot-plugin-apscheduler>=0.5.0,<0.6
|
|
22
|
+
Requires-Dist: nonebot-plugin-datastore>=1.3.0,<2
|
|
23
|
+
Requires-Dist: nonebot-plugin-htmlrender>=0.6.7,<0.7
|
|
24
|
+
Requires-Dist: sqlalchemy>=2.0.25,<3
|
|
25
|
+
Requires-Dist: playwright>=1.40.0,<2
|
|
26
|
+
Requires-Dist: redis>=5.2.0,<6
|
|
27
|
+
Requires-Dist: pillow>=11.3.0,<12
|
|
28
|
+
Requires-Dist: pympler>=1.1,<2
|
|
29
|
+
Requires-Dist: cos-python-sdk-v5>=1.9.30,<2
|
|
30
|
+
Requires-Dist: pymmh3>=0.0.5,<0.0.6
|
|
31
|
+
Requires-Dist: fastapi>=0.123.9,<0.124
|
|
32
|
+
Requires-Dist: async-lru>=2.0.0,<3
|
|
33
|
+
Requires-Python: >=3.10, <4
|
|
35
34
|
Description-Content-Type: text/markdown
|
|
36
35
|
|
|
37
36
|
<div align="center">
|
|
@@ -224,8 +223,8 @@ nso查询过程中使用到了第三方的自动令牌生成接口
|
|
|
224
223
|
- https://github.com/imink-app/f-API 模拟nso授权步骤的公开接口
|
|
225
224
|
- https://github.com/samuelthomas2774/nxapi-znca-api 模拟nso授权步骤的公开接口
|
|
226
225
|
- [zurl](https://github.com/helloxz/zurl)一个简单易用的短链接服务
|
|
226
|
+
- [喷喷借口生成器](https://github.com/arainwong/excuse-generator)参考了喷喷借口生成器的代码和借口语料
|
|
227
227
|
|
|
228
228
|
## ⏳ Star 趋势
|
|
229
229
|
|
|
230
230
|
[](https://starchart.cc/Cypas/splatoon3-nso)
|
|
231
|
-
|
|
@@ -188,6 +188,7 @@ nso查询过程中使用到了第三方的自动令牌生成接口
|
|
|
188
188
|
- https://github.com/imink-app/f-API 模拟nso授权步骤的公开接口
|
|
189
189
|
- https://github.com/samuelthomas2774/nxapi-znca-api 模拟nso授权步骤的公开接口
|
|
190
190
|
- [zurl](https://github.com/helloxz/zurl)一个简单易用的短链接服务
|
|
191
|
+
- [喷喷借口生成器](https://github.com/arainwong/excuse-generator)参考了喷喷借口生成器的代码和借口语料
|
|
191
192
|
|
|
192
193
|
## ⏳ Star 趋势
|
|
193
194
|
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
from nonebot.plugin import PluginMetadata
|
|
2
|
+
|
|
3
|
+
from .config import driver, plugin_config, Config
|
|
4
|
+
from .data.db_sqlite import init_db
|
|
5
|
+
from .data.transfer import transfer_user_db
|
|
6
|
+
from .handle import *
|
|
7
|
+
from .handle.cron import remove_all_scheduler, scheduler_controller
|
|
8
|
+
from .handle.qq_md import get_qq_face_md, new_user_added_md
|
|
9
|
+
from .handle.send_msg import bot_send, notify_to_channel, bot_send_new_user_added_md
|
|
10
|
+
from .s3s.splatnet_image import global_browser
|
|
11
|
+
from .utils import MSG_HELP_QQ, MSG_HELP_CN, MSG_HELP, BOT_VERSION, get_time_now_china_str, get_msg_id
|
|
12
|
+
from .utils.bot import *
|
|
13
|
+
from .api.main import app as fastapi_app # 引入fastapi接口
|
|
14
|
+
|
|
15
|
+
__plugin_meta__ = PluginMetadata(
|
|
16
|
+
name="splatoon3游戏nso查询",
|
|
17
|
+
description="一个基于nonebot2框架的splatoon3游戏nso数据查询插件",
|
|
18
|
+
usage="发送 帮助 或 help 可查看详细指令\n",
|
|
19
|
+
type="application",
|
|
20
|
+
# 发布必填,当前有效类型有:`library`(为其他插件编写提供功能),`application`(向机器人用户提供功能)。
|
|
21
|
+
homepage="https://github.com/Cypas/splatoon3-nso",
|
|
22
|
+
# 发布必填。
|
|
23
|
+
config=Config,
|
|
24
|
+
supported_adapters={"~onebot.v11", "~onebot.v12", "~telegram", "~kaiheila", "~qq"},
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@driver.on_startup
|
|
29
|
+
async def bot_on_start():
|
|
30
|
+
# 检查旧数据库文件与新数据库文件是否存在
|
|
31
|
+
old_db_path = f"{DIR_RESOURCE}/data.sqlite"
|
|
32
|
+
new_db_path = f"{DIR_RESOURCE}/nso_data.sqlite"
|
|
33
|
+
if os.path.exists(old_db_path) and not os.path.exists(new_db_path):
|
|
34
|
+
# 旧数据库存在,新数据库不存在,启动转移函数
|
|
35
|
+
logger.info("检测到旧版本用户数据库,将开始进行数据转移")
|
|
36
|
+
transfer_user_db()
|
|
37
|
+
logger.info("用户数据库转移完成")
|
|
38
|
+
else:
|
|
39
|
+
init_db()
|
|
40
|
+
|
|
41
|
+
# 创建定时任务
|
|
42
|
+
scheduler_controller()
|
|
43
|
+
version = BOT_VERSION
|
|
44
|
+
logger.info(f" bot start, version: {version} ".center(120, "-"))
|
|
45
|
+
await notify_to_channel(f"bot start, version: {version}")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@driver.on_shutdown
|
|
49
|
+
async def bot_on_shutdown():
|
|
50
|
+
version = BOT_VERSION
|
|
51
|
+
logger.info(f" bot shutdown, version: {version} ".center(120, "x"))
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@driver.on_bot_connect
|
|
55
|
+
async def _(bot: Bot):
|
|
56
|
+
bot_name = bot.adapter.get_name()
|
|
57
|
+
logger.info(f" {bot_name} bot connect {bot.self_id} ".center(60, "-").center(90, " "))
|
|
58
|
+
if bot_name == "QQ":
|
|
59
|
+
text = f"bot {bot_name}: {bot.self_id} online ~"
|
|
60
|
+
if plugin_config.splatoon3_bot_disconnect_notify:
|
|
61
|
+
await notify_to_channel(text)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@driver.on_bot_disconnect
|
|
65
|
+
async def _(bot: Bot):
|
|
66
|
+
bot_name = bot.adapter.get_name()
|
|
67
|
+
text = f"bot {bot_name}: {bot.self_id} disconnect !!!!!!!!!!!!!!!!!!!"
|
|
68
|
+
if plugin_config.splatoon3_bot_disconnect_notify:
|
|
69
|
+
try:
|
|
70
|
+
await notify_to_channel(text)
|
|
71
|
+
except Exception as e:
|
|
72
|
+
logger.warning(f"{text}")
|
|
73
|
+
logger.warning(f"日志通知失败: {e}")
|
|
74
|
+
|
|
75
|
+
# @event_preprocessor
|
|
76
|
+
# async def tg_private_msg(bot: Tg_Bot, event: Event):
|
|
77
|
+
# try:
|
|
78
|
+
# user_id = event.get_user_id()
|
|
79
|
+
# message = event.get_plaintext().strip()
|
|
80
|
+
# except:
|
|
81
|
+
# user_id = ''
|
|
82
|
+
# message = ''
|
|
83
|
+
#
|
|
84
|
+
# _event = event.dict() or {}
|
|
85
|
+
# logger.debug(_event)
|
|
86
|
+
# if user_id and message and 'group' not in _event.get('chat', {}).get('type', ''):
|
|
87
|
+
# logger.info(f'tg_private_msg {user_id} {message}')
|
|
88
|
+
#
|
|
89
|
+
# name = _event.get('from_', {}).get('first_name', '')
|
|
90
|
+
# if _event.get('from_', {}).get('last_name', ''):
|
|
91
|
+
# name += ' ' + _event.get('from_', {}).get('last_name', '')
|
|
92
|
+
# if not name:
|
|
93
|
+
# name = _event.get('from_', {}).get('username', '')
|
|
94
|
+
#
|
|
95
|
+
# text = f"#tg{user_id}\n昵称:{name}\n消息:{message}"
|
|
96
|
+
# try:
|
|
97
|
+
# await notify_to_channel(text)
|
|
98
|
+
# except Exception as e:
|
|
99
|
+
# logger.warning("text")
|
|
100
|
+
# logger.warning(f"日志通知失败: {e}")
|
|
101
|
+
#
|
|
102
|
+
#
|
|
103
|
+
# @event_preprocessor
|
|
104
|
+
# async def kk_private_msg(bot: Kook_Bot, event: Event):
|
|
105
|
+
# try:
|
|
106
|
+
# user_id = event.get_user_id()
|
|
107
|
+
# message = event.get_plaintext().strip()
|
|
108
|
+
# except:
|
|
109
|
+
# user_id = ''
|
|
110
|
+
# message = ''
|
|
111
|
+
#
|
|
112
|
+
# if user_id == 'SYSTEM' and message == "[系统消息]":
|
|
113
|
+
# return
|
|
114
|
+
#
|
|
115
|
+
# _event = event.dict() or {}
|
|
116
|
+
# logger.debug(_event)
|
|
117
|
+
# if user_id and message and 'group' not in event.get_event_name():
|
|
118
|
+
# logger.info(f'kk_private_msg {user_id} {message}')
|
|
119
|
+
#
|
|
120
|
+
# name = _event.get('event', {}).get('author', {}).get('username') or ''
|
|
121
|
+
# text = f"#kk{user_id}\n昵称:{name}\n消息:{message}"
|
|
122
|
+
# await notify_to_channel(text)
|
|
@@ -9,6 +9,15 @@ from fastapi.middleware.cors import CORSMiddleware
|
|
|
9
9
|
from ..utils.utils import DIR_RESOURCE, get_jwt_exp_info
|
|
10
10
|
from ..utils.redis import api_rget_json_file_name, api_rdel_json_file_name, api_rget_info
|
|
11
11
|
|
|
12
|
+
### bot.py 中启动fastapi
|
|
13
|
+
# nonebot.init()
|
|
14
|
+
# asgi = nonebot.get_asgi()
|
|
15
|
+
# driver = nonebot.get_driver()
|
|
16
|
+
# driver.register_adapter(OneBotV11Adapter)
|
|
17
|
+
# nonebot.load_plugins("plugins")
|
|
18
|
+
# asgi.mount("/api", fastapi_app)
|
|
19
|
+
###
|
|
20
|
+
|
|
12
21
|
fast_logger = logger.bind(fastapi=True)
|
|
13
22
|
app = FastAPI(
|
|
14
23
|
title="小鱿鱿外部fastapi接口",
|
|
@@ -19,6 +19,11 @@ class ZurlConfig(BaseModel, extra=Extra.ignore):
|
|
|
19
19
|
host: str = "" # http://demo.a.com
|
|
20
20
|
token: str = "" # 密钥
|
|
21
21
|
|
|
22
|
+
class FullMessageConfig(BaseModel, extra=Extra.ignore):
|
|
23
|
+
"""全量消息相关配置 """
|
|
24
|
+
enabled: bool = False
|
|
25
|
+
bot_qq: str = "" # bot qq号
|
|
26
|
+
bot_uid: str = "" # bot_uid需要借助第三方bot才能获取到
|
|
22
27
|
|
|
23
28
|
# 其他地方出现的类似 from .. import config,均是从 __init__.py 导入的 Config 实例
|
|
24
29
|
class Config(BaseModel):
|
|
@@ -75,6 +80,8 @@ class Config(BaseModel):
|
|
|
75
80
|
splatoon3_cos_config: CosConfig = Field(default_factory=CosConfig)
|
|
76
81
|
# zurl短链接配置
|
|
77
82
|
splatoon3_zurl_config: ZurlConfig = Field(default_factory=ZurlConfig)
|
|
83
|
+
# 全量消息配置
|
|
84
|
+
splatoon3_full_message_config: FullMessageConfig = Field(default_factory=FullMessageConfig)
|
|
78
85
|
|
|
79
86
|
|
|
80
87
|
driver = get_driver()
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import copy
|
|
2
|
-
import datetime
|
|
3
2
|
import weakref
|
|
4
3
|
from typing import Type
|
|
4
|
+
from datetime import datetime as dt, timedelta
|
|
5
5
|
|
|
6
6
|
from nonebot import logger
|
|
7
|
-
from sqlalchemy import and_, text
|
|
7
|
+
from sqlalchemy import and_, or_, text, func
|
|
8
8
|
from sqlalchemy.dialects import mysql
|
|
9
9
|
|
|
10
10
|
from .db_sqlite import *
|
|
@@ -57,6 +57,10 @@ def dict_get_or_set_user_info(platform, user_id, _type="normal", **kwargs):
|
|
|
57
57
|
ns_name=user.ns_name,
|
|
58
58
|
ns_friend_code=user.ns_friend_code,
|
|
59
59
|
nsa_id=user.nsa_id,
|
|
60
|
+
first_play_time=user.first_play_time,
|
|
61
|
+
last_play_time=user.last_play_time,
|
|
62
|
+
next_report_run_time=user.next_report_run_time,
|
|
63
|
+
last_cmd_time=user.last_cmd_time,
|
|
60
64
|
req_client=get_or_init_client(platform, user_id, _type)
|
|
61
65
|
)
|
|
62
66
|
user_dict.update({key: user_info})
|
|
@@ -209,6 +213,96 @@ def model_get_all_user() -> list[UserTable]:
|
|
|
209
213
|
return users
|
|
210
214
|
|
|
211
215
|
|
|
216
|
+
def model_get_all_report_user() -> list[UserTable]:
|
|
217
|
+
"""获取全部session_token不为空用户 且日报更新时间为小于等于今天,或日报更新时间为None(新用户)的日报"""
|
|
218
|
+
session = DBSession()
|
|
219
|
+
today = datetime.datetime.now().date()
|
|
220
|
+
|
|
221
|
+
query = (session.query(UserTable).filter(
|
|
222
|
+
and_(
|
|
223
|
+
UserTable.session_token.isnot(None),
|
|
224
|
+
UserTable.session_token != "",
|
|
225
|
+
UserTable.user_agreement == 1,
|
|
226
|
+
or_(
|
|
227
|
+
UserTable.next_report_run_time.is_(None),
|
|
228
|
+
func.date(UserTable.next_report_run_time) <= today
|
|
229
|
+
)
|
|
230
|
+
)
|
|
231
|
+
))
|
|
232
|
+
|
|
233
|
+
query = query.order_by(UserTable.platform.asc(), UserTable.id.asc())
|
|
234
|
+
|
|
235
|
+
# # 打印生成的 SQL 语句(包含参数)
|
|
236
|
+
# from sqlalchemy.dialects import sqlite
|
|
237
|
+
# compiled = query.statement.compile(dialect=sqlite.dialect(), compile_kwargs={"literal_binds": True})
|
|
238
|
+
# logger.info(f"Generated SQL: {compiled}")
|
|
239
|
+
|
|
240
|
+
users = query.all()
|
|
241
|
+
session.close()
|
|
242
|
+
return users
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def model_get_all_active_report_user() -> list[UserTable]:
|
|
246
|
+
"""获取全部昨天或今天使用了nso功能 session_token不为空用户"""
|
|
247
|
+
session = DBSession()
|
|
248
|
+
now = datetime.datetime.utcnow()
|
|
249
|
+
today = now.date()
|
|
250
|
+
yesterday = (now - timedelta(days=1)).date()
|
|
251
|
+
two_before_day = (now - timedelta(days=2)).date()
|
|
252
|
+
|
|
253
|
+
query = (session.query(UserTable).filter(
|
|
254
|
+
and_(
|
|
255
|
+
UserTable.session_token.isnot(None),
|
|
256
|
+
UserTable.session_token != "",
|
|
257
|
+
UserTable.user_agreement == 1,
|
|
258
|
+
or_(
|
|
259
|
+
func.date(UserTable.last_cmd_time) == today,
|
|
260
|
+
func.date(UserTable.last_cmd_time) == yesterday,
|
|
261
|
+
func.date(UserTable.last_cmd_time) == two_before_day,
|
|
262
|
+
)
|
|
263
|
+
)
|
|
264
|
+
))
|
|
265
|
+
|
|
266
|
+
query = query.order_by(UserTable.platform.asc(), UserTable.id.asc())
|
|
267
|
+
|
|
268
|
+
# # 打印生成的 SQL 语句(包含参数)
|
|
269
|
+
# from sqlalchemy.dialects import sqlite
|
|
270
|
+
# compiled = query.statement.compile(dialect=sqlite.dialect(), compile_kwargs={"literal_binds": True})
|
|
271
|
+
# logger.info(f"Generated SQL: {compiled}")
|
|
272
|
+
|
|
273
|
+
users = query.all()
|
|
274
|
+
session.close()
|
|
275
|
+
return users
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def model_get_all_inactive_report_user() -> list[UserTable]:
|
|
279
|
+
"""获取全部不活跃日报用户 session_token不为空用户 且日报更新时间大于今天,或日报更新时间为None(新用户)的日报"""
|
|
280
|
+
session = DBSession()
|
|
281
|
+
today = datetime.datetime.now().date()
|
|
282
|
+
|
|
283
|
+
query = (session.query(UserTable).filter(
|
|
284
|
+
and_(
|
|
285
|
+
UserTable.session_token.isnot(None),
|
|
286
|
+
UserTable.session_token != "",
|
|
287
|
+
UserTable.user_agreement == 1,
|
|
288
|
+
or_(
|
|
289
|
+
UserTable.next_report_run_time.isnot(None),
|
|
290
|
+
UserTable.next_report_run_time != "",
|
|
291
|
+
func.date(UserTable.next_report_run_time) > today
|
|
292
|
+
)
|
|
293
|
+
)
|
|
294
|
+
))
|
|
295
|
+
|
|
296
|
+
query = query.order_by(UserTable.platform.asc(), UserTable.id.asc())
|
|
297
|
+
# # 打印生成的 SQL 语句(包含参数)
|
|
298
|
+
# from sqlalchemy.dialects import sqlite
|
|
299
|
+
# compiled = query.statement.compile(dialect=sqlite.dialect(), compile_kwargs={"literal_binds": True})
|
|
300
|
+
# logger.info(f"Generated SQL: {compiled}")
|
|
301
|
+
users = query.all()
|
|
302
|
+
session.close()
|
|
303
|
+
return users
|
|
304
|
+
|
|
305
|
+
|
|
212
306
|
def model_get_all_stat_user() -> list[UserTable]:
|
|
213
307
|
"""获取全部session_token不为空,且stat key不为空用户"""
|
|
214
308
|
session = DBSession()
|
|
@@ -243,6 +337,41 @@ def model_get_newest_user() -> UserTable:
|
|
|
243
337
|
return user
|
|
244
338
|
|
|
245
339
|
|
|
340
|
+
def model_add_seed_export(row: SeedExportTable):
|
|
341
|
+
"""添加观星导出记录"""
|
|
342
|
+
session = DBSession()
|
|
343
|
+
session.add(row)
|
|
344
|
+
session.commit()
|
|
345
|
+
session.close()
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
def model_get_seed_export_cnt(platform, user_id):
|
|
349
|
+
"""查询单用户观星导出记录
|
|
350
|
+
"""
|
|
351
|
+
session = DBSession()
|
|
352
|
+
# 查询某个人按 game_sp_id 分组的记录
|
|
353
|
+
records = session.query(
|
|
354
|
+
SeedExportTable.platform,
|
|
355
|
+
SeedExportTable.user_id,
|
|
356
|
+
SeedExportTable.game_name,
|
|
357
|
+
SeedExportTable.game_sp_id,
|
|
358
|
+
SeedExportTable.ns_name,
|
|
359
|
+
SeedExportTable.ns_friend_code,
|
|
360
|
+
SeedExportTable.nsa_id,
|
|
361
|
+
func.min(SeedExportTable.create_time).label("first_export_time"),
|
|
362
|
+
func.max(SeedExportTable.create_time).label("last_export_time"),
|
|
363
|
+
func.count(SeedExportTable.id).label("count")
|
|
364
|
+
).filter(
|
|
365
|
+
SeedExportTable.platform == platform,
|
|
366
|
+
SeedExportTable.user_id == user_id
|
|
367
|
+
).group_by(
|
|
368
|
+
SeedExportTable.game_sp_id
|
|
369
|
+
).all()
|
|
370
|
+
|
|
371
|
+
session.close()
|
|
372
|
+
return records
|
|
373
|
+
|
|
374
|
+
|
|
246
375
|
def model_get_login_user_by_sp_code(player_code):
|
|
247
376
|
"""获取登录用户信息"""
|
|
248
377
|
session = DBSession()
|
|
@@ -254,7 +383,7 @@ def model_get_login_user_by_sp_code(player_code):
|
|
|
254
383
|
|
|
255
384
|
def model_get_top_player(player_code):
|
|
256
385
|
"""获取一名top玩家信息"""
|
|
257
|
-
session =
|
|
386
|
+
session = DBSession_Top()
|
|
258
387
|
user = session.query(TopPlayer).filter(
|
|
259
388
|
TopPlayer.player_code == player_code).order_by(TopPlayer.power.desc()).first()
|
|
260
389
|
session.close()
|
|
@@ -263,7 +392,7 @@ def model_get_top_player(player_code):
|
|
|
263
392
|
|
|
264
393
|
def model_get_max_power_top_all(player_code) -> TopAll:
|
|
265
394
|
"""获取一条最高分数 top all信息"""
|
|
266
|
-
session =
|
|
395
|
+
session = DBSession_Top()
|
|
267
396
|
user = session.query(TopAll).filter(
|
|
268
397
|
TopAll.player_code == player_code).order_by(TopAll.power.desc()).first()
|
|
269
398
|
session.close()
|
|
@@ -272,7 +401,7 @@ def model_get_max_power_top_all(player_code) -> TopAll:
|
|
|
272
401
|
|
|
273
402
|
def model_get_all_top_all(player_code):
|
|
274
403
|
"""获取某人全部上榜数据"""
|
|
275
|
-
session =
|
|
404
|
+
session = DBSession_Top()
|
|
276
405
|
user = session.query(TopAll).filter(TopAll.player_code == player_code).all()
|
|
277
406
|
session.close()
|
|
278
407
|
return user
|
|
@@ -317,7 +446,7 @@ def model_add_report(new_report: Report):
|
|
|
317
446
|
if not user_id_sp:
|
|
318
447
|
report_logger.warning(f"no user_id_sp: {new_report}")
|
|
319
448
|
return
|
|
320
|
-
session =
|
|
449
|
+
session = DBSession_Report()
|
|
321
450
|
_res = session.query(Report).filter(Report.user_id_sp == user_id_sp).order_by(Report.create_time.desc()).first()
|
|
322
451
|
# 避免一天内多次写入
|
|
323
452
|
if _res and _res.create_time.date() >= datetime.datetime.utcnow().date():
|
|
@@ -334,7 +463,7 @@ def model_get_today_report(user_id_sp):
|
|
|
334
463
|
"""获取今日日报数据 用于判断日报是否需要推送"""
|
|
335
464
|
if not user_id_sp:
|
|
336
465
|
return None
|
|
337
|
-
session =
|
|
466
|
+
session = DBSession_Report()
|
|
338
467
|
# 1. 获取当前 UTC+0 时间
|
|
339
468
|
utc_now = datetime.datetime.utcnow()
|
|
340
469
|
# 2. 确定“今天”的 UTC+0 日期(0点)
|
|
@@ -357,7 +486,7 @@ def model_get_report(user_id_sp, create_time=""):
|
|
|
357
486
|
"""获取日报"""
|
|
358
487
|
if not user_id_sp:
|
|
359
488
|
return None
|
|
360
|
-
session =
|
|
489
|
+
session = DBSession_Report()
|
|
361
490
|
|
|
362
491
|
# query = [Report.user_id_sp == user_id_sp]
|
|
363
492
|
# report = session.query(Report).filter(*query).order_by(Report.create_time.desc()).all()
|
|
@@ -396,7 +525,7 @@ def model_get_report_all(user_id_sp):
|
|
|
396
525
|
"""获取全部日报"""
|
|
397
526
|
if not user_id_sp:
|
|
398
527
|
return None
|
|
399
|
-
session =
|
|
528
|
+
session = DBSession_Report()
|
|
400
529
|
data = session.execute(text(f"""
|
|
401
530
|
SELECT id, DATETIME(last_play_time, '+8 hours') as last_play_time,
|
|
402
531
|
total_cnt,
|
|
@@ -433,7 +562,7 @@ def model_get_user_friend(game_name) -> UserFriendTable:
|
|
|
433
562
|
|
|
434
563
|
|
|
435
564
|
def model_new_get_user_friend(nsa_id) -> UserFriendTable:
|
|
436
|
-
"""获取好友数据(使用nsa_id精准匹配)"""
|
|
565
|
+
"""获取好友数据(使用nsa_id精准匹配) 后来发现好友里面取不到nsa_id 放弃了"""
|
|
437
566
|
session = DBSession_Friends()
|
|
438
567
|
user = session.query(UserFriendTable).filter(
|
|
439
568
|
UserFriendTable.nsa_id == nsa_id
|
|
@@ -485,9 +614,31 @@ def model_set_user_friend(data_lst):
|
|
|
485
614
|
session.close()
|
|
486
615
|
|
|
487
616
|
|
|
617
|
+
def model_delete_user_friend():
|
|
618
|
+
"""清除90天前创建或90天前才更新的好友数据"""
|
|
619
|
+
# 两种情况删除 1. 90天前创建,从未更新 2.更新时间不为none,在90天前
|
|
620
|
+
session = DBSession_Friends()
|
|
621
|
+
ninety_days_ago = datetime.datetime.now() - datetime.timedelta(days=90)
|
|
622
|
+
|
|
623
|
+
# 情况1: 90天前创建且从未更新(update_time为None)
|
|
624
|
+
session.query(UserFriendTable).filter(
|
|
625
|
+
UserFriendTable.create_time < ninety_days_ago,
|
|
626
|
+
UserFriendTable.update_time == None
|
|
627
|
+
).delete()
|
|
628
|
+
|
|
629
|
+
# 情况2: 更新时间不为None,且在90天前
|
|
630
|
+
session.query(UserFriendTable).filter(
|
|
631
|
+
UserFriendTable.update_time != None,
|
|
632
|
+
UserFriendTable.update_time < ninety_days_ago
|
|
633
|
+
).delete()
|
|
634
|
+
|
|
635
|
+
session.commit()
|
|
636
|
+
session.close()
|
|
637
|
+
|
|
638
|
+
|
|
488
639
|
def model_delete_top_player(top_id):
|
|
489
640
|
"""删除指定赛季 top榜单玩家数据"""
|
|
490
|
-
session =
|
|
641
|
+
session = DBSession_Top()
|
|
491
642
|
session.query(TopPlayer).filter(TopPlayer.top_id == top_id).delete()
|
|
492
643
|
session.commit()
|
|
493
644
|
session.close()
|
|
@@ -495,7 +646,7 @@ def model_delete_top_player(top_id):
|
|
|
495
646
|
|
|
496
647
|
def model_delete_top_all(top_id):
|
|
497
648
|
"""删除指定赛季 top_all榜单玩家数据"""
|
|
498
|
-
session =
|
|
649
|
+
session = DBSession_Top()
|
|
499
650
|
session.query(TopAll).filter(TopAll.top_id == top_id).delete()
|
|
500
651
|
session.commit()
|
|
501
652
|
session.close()
|
|
@@ -505,7 +656,7 @@ def model_add_top_player(row):
|
|
|
505
656
|
"""添加top榜单数据"""
|
|
506
657
|
top_id, _top_type, rank, power, name, name_id, player_code, byname, weapon_id, weapon = row
|
|
507
658
|
|
|
508
|
-
session =
|
|
659
|
+
session = DBSession_Top()
|
|
509
660
|
_dict = {
|
|
510
661
|
'top_id': top_id,
|
|
511
662
|
'top_type': _top_type,
|
|
@@ -528,7 +679,7 @@ def model_add_top_all(row):
|
|
|
528
679
|
"""添加top_all榜单数据"""
|
|
529
680
|
top_id, _top_type, rank, power, name, name_id, player_code, byname, weapon_id, weapon, play_time = row
|
|
530
681
|
|
|
531
|
-
session =
|
|
682
|
+
session = DBSession_Top()
|
|
532
683
|
_dict = {
|
|
533
684
|
'top_id': top_id,
|
|
534
685
|
'top_type': _top_type,
|
|
@@ -550,7 +701,7 @@ def model_add_top_all(row):
|
|
|
550
701
|
|
|
551
702
|
def model_get_top_all_count_by_top_type(top_type):
|
|
552
703
|
"""通过top_all类型取得top_all记录的count"""
|
|
553
|
-
session =
|
|
704
|
+
session = DBSession_Top()
|
|
554
705
|
top_count = session.query(func.count(TopAll.id)).where(TopAll.top_type.contains(top_type)).scalar()
|
|
555
706
|
session.close()
|
|
556
707
|
return top_count
|
|
@@ -571,7 +722,7 @@ def model_get_top_all_count_by_top_type(top_type):
|
|
|
571
722
|
# ORDER BY
|
|
572
723
|
# top_all.create_time DESC
|
|
573
724
|
# """
|
|
574
|
-
# session =
|
|
725
|
+
# session = DBSession_Top()
|
|
575
726
|
# top = session.query(TopAll).where(TopAll.top_type.like("LeagueMatchRankingTeam%")).group_by(TopAll.top_type) \
|
|
576
727
|
# .order_by(TopAll.create_time.desc()).first()
|
|
577
728
|
# session.close()
|
|
@@ -579,7 +730,7 @@ def model_get_top_all_count_by_top_type(top_type):
|
|
|
579
730
|
|
|
580
731
|
|
|
581
732
|
def model_get_power_rank():
|
|
582
|
-
session =
|
|
733
|
+
session = DBSession_Report()
|
|
583
734
|
data = session.execute(text(f"""
|
|
584
735
|
select user_id_sp, max(max_power) max_power,
|
|
585
736
|
row_number() over (order by max_power desc) rank
|