From 6373f2ec6d9e1e46c7d3e357faf90e13b8dab17e Mon Sep 17 00:00:00 2001
From: CMHopeSunshine <277073121@qq.com>
Date: Wed, 2 Nov 2022 10:31:15 +0800
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20`3.2`=E7=89=88=E6=9C=AC=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=EF=BC=8C=E9=A1=B9=E7=9B=AE=E7=9B=AE=E5=BD=95=E5=B0=8F?=
=?UTF-8?q?=E9=87=8D=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
LittlePaimon/__init__.py | 6 +-
LittlePaimon/config/__init__.py | 4 +
LittlePaimon/config/config/manage.py | 32 +
.../plugin_manager => config/config}/model.py | 36 +-
LittlePaimon/config/data/alias.json | 8 +-
LittlePaimon/config/data/genshin_info.json | 904 +++++++++++++++---
LittlePaimon/config/data/role_skill.json | 32 +-
LittlePaimon/config/data/role_talent.json | 28 +-
LittlePaimon/config/data/roles_data.json | 95 ++
LittlePaimon/config/data/score.json | 8 +
LittlePaimon/config/data/weapon.json | 3 +
LittlePaimon/config/plugin/manage.py | 162 ++++
LittlePaimon/config/plugin/model.py | 35 +
LittlePaimon/database/__init__.py | 117 ++-
LittlePaimon/database/models/character.py | 3 +-
LittlePaimon/database/models/subscription.py | 21 +-
.../manager/database_manager/__init__.py | 27 -
.../manager/plugin_manager/manager.py | 134 ---
.../plugins/Genshin_Calendar/__init__.py | 2 +-
.../plugins/Genshin_Calendar/generate.py | 17 +-
.../Genshin_Calendar/template/calendar.html | 2 +-
.../plugins/Genshin_Voice/__init__.py | 8 +-
LittlePaimon/plugins/Genshin_Voice/draw.py | 2 +-
LittlePaimon/plugins/Genshin_Voice/handler.py | 2 +-
.../plugins/Genshin_Voice/resources.py | 2 +-
.../plugins/NoticeAndRequest/__init__.py | 10 +-
.../plugins/Paimon_Abyss/abyss_statistics.py | 2 +-
.../plugins/Paimon_Abyss/draw_abyss.py | 2 +-
.../plugins/Paimon_Abyss/youchuang/draw.py | 2 +-
.../plugins/Paimon_Autobbs/__init__.py | 2 +-
.../plugins/Paimon_Autobbs/coin_handle.py | 11 +-
.../plugins/Paimon_Autobbs/sign_handle.py | 8 +-
LittlePaimon/plugins/Paimon_Bind/__init__.py | 8 +-
.../plugins/Paimon_CloudGenshin/__init__.py | 2 +-
.../plugins/Paimon_CloudGenshin/handler.py | 8 +-
.../plugins/Paimon_DailyNote/__init__.py | 2 +-
.../plugins/Paimon_DailyNote/handler.py | 10 +-
LittlePaimon/plugins/Paimon_Gacha/__init__.py | 17 +-
.../plugins/Paimon_Gacha/data_source.py | 9 +-
.../plugins/Paimon_Gacha_Log/data_source.py | 2 +-
LittlePaimon/plugins/Paimon_Info/__init__.py | 2 +-
.../plugins/Paimon_Info/damage_cal.py | 2 +-
.../plugins/Paimon_Info/damage_model.py | 2 +-
.../plugins/Paimon_Info/draw_character_bag.py | 2 +-
.../Paimon_Info/draw_character_card.py | 2 +-
.../Paimon_Info/draw_character_detail.py | 2 +-
.../plugins/Paimon_Info/draw_player_card.py | 2 +-
.../plugins/Paimon_MonthInfo/handler.py | 2 +-
LittlePaimon/plugins/Paimon_Wiki/__init__.py | 2 +-
.../Paimon_Wiki/draw_daily_material.py | 2 +-
.../alias_manager/__init__.py | 0
.../alias_manager/alias_list.py | 0
.../alias_manager/handler.py | 0
.../alias_manager/parser.py | 0
.../bot_manager/__init__.py | 4 +-
LittlePaimon/plugins/news60s/__init__.py | 2 +-
.../plugin_manager/__init__.py | 68 +-
.../plugin_manager/draw_help.py | 2 +-
LittlePaimon/plugins/tools/__init__.py | 8 +-
LittlePaimon/utils/__init__.py | 6 +-
LittlePaimon/utils/api.py | 2 +-
LittlePaimon/utils/brower.py | 71 +-
LittlePaimon/utils/files.py | 2 +
LittlePaimon/utils/genshin.py | 13 +-
LittlePaimon/utils/message.py | 2 +-
LittlePaimon/utils/migration.py | 2 +-
LittlePaimon/utils/requests.py | 4 +-
LittlePaimon/utils/scheduler.py | 48 +
LittlePaimon/utils/typing.py | 6 +-
.../handler.py => utils/update.py} | 0
LittlePaimon/web/__init__.py | 12 +-
LittlePaimon/web/api/bot_info.py | 2 +-
LittlePaimon/web/api/cookie.py | 2 +-
LittlePaimon/web/api/login.py | 4 +-
LittlePaimon/web/api/plugin.py | 32 +-
LittlePaimon/web/api/utils.py | 4 +-
LittlePaimon/web/pages/plugin_manage.py | 11 +-
poetry.lock | 753 +++------------
pyproject.toml | 4 +-
requirements.txt | 47 +-
80 files changed, 1671 insertions(+), 1245 deletions(-)
create mode 100644 LittlePaimon/config/config/manage.py
rename LittlePaimon/{manager/plugin_manager => config/config}/model.py (74%)
create mode 100644 LittlePaimon/config/plugin/manage.py
create mode 100644 LittlePaimon/config/plugin/model.py
delete mode 100644 LittlePaimon/manager/database_manager/__init__.py
delete mode 100644 LittlePaimon/manager/plugin_manager/manager.py
rename LittlePaimon/{manager => plugins}/alias_manager/__init__.py (100%)
rename LittlePaimon/{manager => plugins}/alias_manager/alias_list.py (100%)
rename LittlePaimon/{manager => plugins}/alias_manager/handler.py (100%)
rename LittlePaimon/{manager => plugins}/alias_manager/parser.py (100%)
rename LittlePaimon/{manager => plugins}/bot_manager/__init__.py (98%)
rename LittlePaimon/{manager => plugins}/plugin_manager/__init__.py (69%)
rename LittlePaimon/{manager => plugins}/plugin_manager/draw_help.py (99%)
create mode 100644 LittlePaimon/utils/scheduler.py
rename LittlePaimon/{manager/bot_manager/handler.py => utils/update.py} (100%)
diff --git a/LittlePaimon/__init__.py b/LittlePaimon/__init__.py
index 192a277..6aa9ef9 100644
--- a/LittlePaimon/__init__.py
+++ b/LittlePaimon/__init__.py
@@ -7,7 +7,7 @@ from LittlePaimon.utils.migration import migrate_database
from LittlePaimon.utils.tool import check_resource
DRIVER = get_driver()
-__version__ = '3.0.0rc1'
+__version__ = '3.0.0rc2'
try:
SUPERUSERS: List[int] = [int(s) for s in DRIVER.config.superusers]
@@ -39,8 +39,4 @@ async def startup():
DRIVER.on_shutdown(database.disconnect)
-load_plugin('LittlePaimon.manager.bot_manager')
-load_plugin('LittlePaimon.manager.plugin_manager')
-load_plugin('LittlePaimon.manager.database_manager')
-load_plugin('LittlePaimon.manager.alias_manager')
load_plugins(str(Path(__file__).parent / 'plugins'))
diff --git a/LittlePaimon/config/__init__.py b/LittlePaimon/config/__init__.py
index 67d731a..a3cad6d 100644
--- a/LittlePaimon/config/__init__.py
+++ b/LittlePaimon/config/__init__.py
@@ -1 +1,5 @@
from .path import *
+from .config.manage import ConfigManager, ConfigModel
+from .plugin.manage import PluginManager, HIDDEN_PLUGINS, MatcherInfo, PluginInfo
+
+config = ConfigManager.config
diff --git a/LittlePaimon/config/config/manage.py b/LittlePaimon/config/config/manage.py
new file mode 100644
index 0000000..b533ad5
--- /dev/null
+++ b/LittlePaimon/config/config/manage.py
@@ -0,0 +1,32 @@
+from LittlePaimon.utils.files import load_yaml, save_yaml
+from LittlePaimon.config.path import PAIMON_CONFIG
+from .model import ConfigModel
+
+
+class ConfigManager:
+ if PAIMON_CONFIG.exists():
+ config = ConfigModel.parse_obj(load_yaml(PAIMON_CONFIG))
+ else:
+ config = ConfigModel()
+ save_yaml(config.dict(by_alias=True), PAIMON_CONFIG)
+
+ @classmethod
+ def set_config(cls, config_name: str, value: any):
+ """
+ 设置派蒙配置项
+ :param config_name: 配置名
+ :param value: 新配置值
+ """
+ if config_name not in cls.config.dict(by_alias=True).keys():
+ return f'没有配置项为{config_name}'
+ if '启用' in config_name or '开关' in config_name or config_name in {'自动接受好友请求', '自动接受群邀请'}:
+ if value not in ['开', '关', 'true', 'false', 'on', 'off']:
+ return '参数错误'
+ value = value in ['开', 'true', 'on']
+ elif config_name != 'CookieWeb地址' and not value.isdigit():
+ return '配置项不合法,必须为数字'
+ temp = cls.config.dict(by_alias=True)
+ temp[config_name] = value
+ cls.config = ConfigModel.parse_obj(temp)
+ save_yaml(cls.config.dict(by_alias=True), PAIMON_CONFIG)
+ return f'成功设置{config_name}为{value}'
diff --git a/LittlePaimon/manager/plugin_manager/model.py b/LittlePaimon/config/config/model.py
similarity index 74%
rename from LittlePaimon/manager/plugin_manager/model.py
rename to LittlePaimon/config/config/model.py
index 33f387e..2d6a051 100644
--- a/LittlePaimon/manager/plugin_manager/model.py
+++ b/LittlePaimon/config/config/model.py
@@ -1,41 +1,7 @@
-from typing import Optional, List
-
from pydantic import BaseModel, Field
-class MatcherInfo(BaseModel):
- pm_name: str
- """命令名称"""
- pm_description: Optional[str]
- """命令描述"""
- pm_usage: Optional[str]
- """命令用法"""
- pm_priority: int = 99
- """命令优先级"""
- pm_show: bool = True
- """是否展示"""
-
-
-class PluginInfo(BaseModel):
- name: str
- """插件名称"""
- module_name: str
- """插件模块名称"""
- description: Optional[str]
- """插件描述"""
- usage: Optional[str]
- """插件用法"""
- status: Optional[bool]
- """插件状态(无用项)"""
- show: bool = True
- """是否展示"""
- priority: int = 99
- """展示优先级"""
- matchers: Optional[List[MatcherInfo]] = []
- """命令列表"""
-
-
-class Config(BaseModel):
+class ConfigModel(BaseModel):
CookieWeb_enable: bool = Field(True, alias='启用CookieWeb')
CookieWeb_url: str = Field('http://127.0.0.1:13579/LittlePaimon/cookie', alias='CookieWeb地址')
diff --git a/LittlePaimon/config/data/alias.json b/LittlePaimon/config/data/alias.json
index 0751ff1..d7ed6ad 100644
--- a/LittlePaimon/config/data/alias.json
+++ b/LittlePaimon/config/data/alias.json
@@ -58,12 +58,12 @@
"10000070": ["妮露", "舞女"],
"10000071": ["赛诺", "风纪官"],
"10000072": ["坎蒂丝", "潘森"],
- "10000101": ["纳西妲", "草神", "艹神", "小草王", "小吉祥草王", "草萝莉", "艹萝莉"],
- "10000102": ["散兵", "伞兵", "国崩", "卢本伟", "大炮", "sb"],
+ "10000073": ["纳西妲", "草神", "艹神", "小草王", "小吉祥草王", "草萝莉", "艹萝莉"],
+ "10000074": ["莱依拉", "莱伊拉"],
+ "10000075": ["散兵", "伞兵", "国崩", "卢本伟", "大炮", "sb", "流浪者"],
"10000103": ["迪希雅"],
"10000104": ["艾尔海森", "苏"],
- "10000105": ["白术"],
- "10000106": ["莱依拉"]
+ "10000105": ["白术"]
},
"武器": {
"磐岩结绿": [
diff --git a/LittlePaimon/config/data/genshin_info.json b/LittlePaimon/config/data/genshin_info.json
index b174d33..ba80865 100644
--- a/LittlePaimon/config/data/genshin_info.json
+++ b/LittlePaimon/config/data/genshin_info.json
@@ -9,13 +9,21 @@
"UI_Talent_U_Ayaka_01",
"UI_Talent_S_Ayaka_04"
],
- "SkillOrder": [10024, 10018, 10019],
+ "SkillOrder": [
+ 10024,
+ 10018,
+ 10019
+ ],
"Skills": {
"10018": "Skill_S_Ayaka_01",
"10019": "Skill_E_Ayaka",
"10024": "Skill_A_01"
},
- "ProudMap": { "10018": 232, "10019": 239, "10024": 231 },
+ "ProudMap": {
+ "10018": 232,
+ "10019": 239,
+ "10024": 231
+ },
"NameTextMapHash": 1006042610,
"SideIconName": "UI_AvatarIcon_Side_Ayaka",
"QualityType": "QUALITY_ORANGE"
@@ -30,13 +38,21 @@
"UI_Talent_U_Qin_01",
"UI_Talent_S_Qin_04"
],
- "SkillOrder": [10031, 10033, 10034],
+ "SkillOrder": [
+ 10031,
+ 10033,
+ 10034
+ ],
"Skills": {
"10031": "Skill_A_01",
"10033": "Skill_S_Qin_02",
"10034": "Skill_E_Qin_01"
},
- "ProudMap": { "10031": 331, "10033": 332, "10034": 339 },
+ "ProudMap": {
+ "10031": 331,
+ "10033": 332,
+ "10034": 339
+ },
"NameTextMapHash": 3221566250,
"SideIconName": "UI_AvatarIcon_Side_Qin",
"QualityType": "QUALITY_ORANGE",
@@ -65,14 +81,22 @@
"UI_Talent_U_PlayerWind_01",
"UI_Talent_S_PlayerWind_04"
],
- "SkillOrder": [100543, 10067, 10068],
+ "SkillOrder": [
+ 100543,
+ 10067,
+ 10068
+ ],
"Skills": {
"10067": "Skill_S_PlayerWind_01",
"10068": "Skill_E_PlayerWind_01",
"100543": "Skill_A_01"
},
"NameTextMapHash": 1533656818,
- "ProudMap": { "10067": 732, "10068": 739, "100543": 730 },
+ "ProudMap": {
+ "10067": 732,
+ "10068": 739,
+ "100543": 730
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerBoy",
"QualityType": "QUALITY_ORANGE"
},
@@ -86,13 +110,21 @@
"UI_Talent_U_Lisa_01",
"UI_Talent_S_Lisa_04"
],
- "SkillOrder": [10060, 10061, 10062],
+ "SkillOrder": [
+ 10060,
+ 10061,
+ 10062
+ ],
"Skills": {
"10060": "Skill_A_Catalyst_MD",
"10061": "Skill_S_Lisa_01",
"10062": "Skill_E_Lisa_01"
},
- "ProudMap": { "10060": 431, "10061": 432, "10062": 439 },
+ "ProudMap": {
+ "10060": 431,
+ "10061": 432,
+ "10062": 439
+ },
"NameTextMapHash": 3344622722,
"SideIconName": "UI_AvatarIcon_Side_Lisa",
"QualityType": "QUALITY_PURPLE"
@@ -107,14 +139,22 @@
"UI_Talent_U_PlayerWind_01",
"UI_Talent_S_PlayerWind_04"
],
- "SkillOrder": [100553, 10067, 10068],
+ "SkillOrder": [
+ 100553,
+ 10067,
+ 10068
+ ],
"Skills": {
"10067": "Skill_S_PlayerWind_01",
"10068": "Skill_E_PlayerWind_01",
"100553": "Skill_A_01"
},
"NameTextMapHash": 3816664530,
- "ProudMap": { "10067": 732, "10068": 739, "100553": 731 },
+ "ProudMap": {
+ "10067": 732,
+ "10068": 739,
+ "100553": 731
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerGirl",
"QualityType": "QUALITY_ORANGE"
},
@@ -128,13 +168,21 @@
"UI_Talent_U_Barbara_01",
"UI_Talent_S_Barbara_04"
],
- "SkillOrder": [10070, 10071, 10072],
+ "SkillOrder": [
+ 10070,
+ 10071,
+ 10072
+ ],
"Skills": {
"10070": "Skill_A_Catalyst_MD",
"10071": "Skill_S_Barbara_01",
"10072": "Skill_E_Barbara_01"
},
- "ProudMap": { "10070": 1431, "10071": 1432, "10072": 1439 },
+ "ProudMap": {
+ "10070": 1431,
+ "10071": 1432,
+ "10072": 1439
+ },
"NameTextMapHash": 3775299170,
"SideIconName": "UI_AvatarIcon_Side_Barbara",
"QualityType": "QUALITY_PURPLE",
@@ -157,13 +205,21 @@
"UI_Talent_U_Kaeya_02",
"UI_Talent_S_Kaeya_04"
],
- "SkillOrder": [10073, 10074, 10075],
+ "SkillOrder": [
+ 10073,
+ 10074,
+ 10075
+ ],
"Skills": {
"10073": "Skill_A_01",
"10074": "Skill_S_Kaeya_01",
"10075": "Skill_E_Kaeya_01"
},
- "ProudMap": { "10073": 1531, "10074": 1532, "10075": 1539 },
+ "ProudMap": {
+ "10073": 1531,
+ "10074": 1532,
+ "10075": 1539
+ },
"NameTextMapHash": 4119663210,
"SideIconName": "UI_AvatarIcon_Side_Kaeya",
"QualityType": "QUALITY_PURPLE"
@@ -178,13 +234,21 @@
"UI_Talent_U_Diluc_02",
"UI_Talent_S_Diluc_04"
],
- "SkillOrder": [10160, 10161, 10165],
+ "SkillOrder": [
+ 10160,
+ 10161,
+ 10165
+ ],
"Skills": {
"10160": "Skill_A_04",
"10161": "Skill_S_Diluc_01_01",
"10165": "Skill_E_Diluc_01"
},
- "ProudMap": { "10160": 1631, "10161": 1632, "10165": 1639 },
+ "ProudMap": {
+ "10160": 1631,
+ "10161": 1632,
+ "10165": 1639
+ },
"NameTextMapHash": 3608180322,
"SideIconName": "UI_AvatarIcon_Side_Diluc",
"QualityType": "QUALITY_ORANGE",
@@ -207,13 +271,21 @@
"UI_Talent_U_Razor_01",
"UI_Talent_S_Razor_04"
],
- "SkillOrder": [10201, 10202, 10203],
+ "SkillOrder": [
+ 10201,
+ 10202,
+ 10203
+ ],
"Skills": {
"10201": "Skill_A_04",
"10202": "Skill_S_Razor_01",
"10203": "Skill_E_Razor_01"
},
- "ProudMap": { "10201": 2031, "10202": 2032, "10203": 2039 },
+ "ProudMap": {
+ "10201": 2031,
+ "10202": 2032,
+ "10203": 2039
+ },
"NameTextMapHash": 4160147242,
"SideIconName": "UI_AvatarIcon_Side_Razor",
"QualityType": "QUALITY_PURPLE"
@@ -228,13 +300,21 @@
"UI_Talent_U_Ambor_01",
"UI_Talent_S_Ambor_04"
],
- "SkillOrder": [10041, 10032, 10017],
+ "SkillOrder": [
+ 10041,
+ 10032,
+ 10017
+ ],
"Skills": {
"10017": "Skill_E_Ambor",
"10032": "Skill_S_Ambor_01",
"10041": "Skill_A_02"
},
- "ProudMap": { "10017": 2139, "10032": 2132, "10041": 2131 },
+ "ProudMap": {
+ "10017": 2139,
+ "10032": 2132,
+ "10041": 2131
+ },
"NameTextMapHash": 1966438658,
"SideIconName": "UI_AvatarIcon_Side_Ambor",
"QualityType": "QUALITY_PURPLE",
@@ -257,13 +337,21 @@
"UI_Talent_U_Venti_01",
"UI_Talent_S_Venti_04"
],
- "SkillOrder": [10221, 10224, 10225],
+ "SkillOrder": [
+ 10221,
+ 10224,
+ 10225
+ ],
"Skills": {
"10221": "Skill_A_02",
"10224": "Skill_S_Venti_01",
"10225": "Skill_E_Venti_01"
},
- "ProudMap": { "10221": 2231, "10224": 2232, "10225": 2239 },
+ "ProudMap": {
+ "10221": 2231,
+ "10224": 2232,
+ "10225": 2239
+ },
"NameTextMapHash": 2466140362,
"SideIconName": "UI_AvatarIcon_Side_Venti",
"QualityType": "QUALITY_ORANGE"
@@ -278,13 +366,21 @@
"UI_Talent_U_Xiangling_01",
"UI_Talent_S_Xiangling_04"
],
- "SkillOrder": [10231, 10232, 10235],
+ "SkillOrder": [
+ 10231,
+ 10232,
+ 10235
+ ],
"Skills": {
"10231": "Skill_A_03",
"10232": "Skill_S_Xiangling_01",
"10235": "Skill_E_Xiangling_01"
},
- "ProudMap": { "10231": 2331, "10232": 2332, "10235": 2339 },
+ "ProudMap": {
+ "10231": 2331,
+ "10232": 2332,
+ "10235": 2339
+ },
"NameTextMapHash": 1130996346,
"SideIconName": "UI_AvatarIcon_Side_Xiangling",
"QualityType": "QUALITY_PURPLE"
@@ -299,13 +395,21 @@
"UI_Talent_U_Beidou_02",
"UI_Talent_S_Beidou_04"
],
- "SkillOrder": [10241, 10242, 10245],
+ "SkillOrder": [
+ 10241,
+ 10242,
+ 10245
+ ],
"Skills": {
"10241": "Skill_A_04",
"10242": "Skill_S_Beidou_01",
"10245": "Skill_E_Beidou_01"
},
- "ProudMap": { "10241": 2431, "10242": 2432, "10245": 2439 },
+ "ProudMap": {
+ "10241": 2431,
+ "10242": 2432,
+ "10245": 2439
+ },
"NameTextMapHash": 2646367730,
"SideIconName": "UI_AvatarIcon_Side_Beidou",
"QualityType": "QUALITY_PURPLE"
@@ -320,13 +424,21 @@
"UI_Talent_U_Xingqiu_02",
"UI_Talent_S_Xingqiu_04"
],
- "SkillOrder": [10381, 10382, 10385],
+ "SkillOrder": [
+ 10381,
+ 10382,
+ 10385
+ ],
"Skills": {
"10381": "Skill_A_01",
"10382": "Skill_S_Xingqiu_01",
"10385": "Skill_E_Xingqiu_01"
},
- "ProudMap": { "10381": 2531, "10382": 2532, "10385": 2539 },
+ "ProudMap": {
+ "10381": 2531,
+ "10382": 2532,
+ "10385": 2539
+ },
"NameTextMapHash": 4197635682,
"SideIconName": "UI_AvatarIcon_Side_Xingqiu",
"QualityType": "QUALITY_PURPLE"
@@ -341,13 +453,21 @@
"UI_Talent_U_Xiao_02",
"UI_Talent_S_Xiao_04"
],
- "SkillOrder": [10261, 10262, 10265],
+ "SkillOrder": [
+ 10261,
+ 10262,
+ 10265
+ ],
"Skills": {
"10261": "Skill_A_03",
"10262": "Skill_S_Xiao_01",
"10265": "Skill_E_Xiao_01"
},
- "ProudMap": { "10261": 2631, "10262": 2632, "10265": 2639 },
+ "ProudMap": {
+ "10261": 2631,
+ "10262": 2632,
+ "10265": 2639
+ },
"NameTextMapHash": 1021947690,
"SideIconName": "UI_AvatarIcon_Side_Xiao",
"QualityType": "QUALITY_ORANGE"
@@ -362,13 +482,21 @@
"UI_Talent_U_Ningguang_01",
"UI_Talent_S_Ningguang_04"
],
- "SkillOrder": [10271, 10272, 10274],
+ "SkillOrder": [
+ 10271,
+ 10272,
+ 10274
+ ],
"Skills": {
"10271": "Skill_A_Catalyst_MD",
"10272": "Skill_S_Ningguang_01",
"10274": "Skill_E_Ningguang_01"
},
- "ProudMap": { "10271": 2731, "10272": 2732, "10274": 2739 },
+ "ProudMap": {
+ "10271": 2731,
+ "10272": 2732,
+ "10274": 2739
+ },
"NameTextMapHash": 4127888970,
"SideIconName": "UI_AvatarIcon_Side_Ningguang",
"QualityType": "QUALITY_PURPLE",
@@ -391,13 +519,21 @@
"UI_Talent_U_Klee_02",
"UI_Talent_S_Klee_04"
],
- "SkillOrder": [10291, 10292, 10295],
+ "SkillOrder": [
+ 10291,
+ 10292,
+ 10295
+ ],
"Skills": {
"10291": "Skill_A_Catalyst_MD",
"10292": "Skill_S_Klee_01",
"10295": "Skill_E_Klee_01"
},
- "ProudMap": { "10291": 2931, "10292": 2932, "10295": 2939 },
+ "ProudMap": {
+ "10291": 2931,
+ "10292": 2932,
+ "10295": 2939
+ },
"NameTextMapHash": 3339083250,
"SideIconName": "UI_AvatarIcon_Side_Klee",
"QualityType": "QUALITY_ORANGE"
@@ -412,13 +548,21 @@
"UI_Talent_U_Zhongli_02",
"UI_Talent_S_Zhongli_04"
],
- "SkillOrder": [10301, 10302, 10303],
+ "SkillOrder": [
+ 10301,
+ 10302,
+ 10303
+ ],
"Skills": {
"10301": "Skill_A_03",
"10302": "Skill_S_Zhongli_01",
"10303": "Skill_E_Zhongli_01"
},
- "ProudMap": { "10301": 3031, "10302": 3032, "10303": 3039 },
+ "ProudMap": {
+ "10301": 3031,
+ "10302": 3032,
+ "10303": 3039
+ },
"NameTextMapHash": 3862787418,
"SideIconName": "UI_AvatarIcon_Side_Zhongli",
"QualityType": "QUALITY_ORANGE"
@@ -433,13 +577,21 @@
"UI_Talent_U_Fischl_02",
"UI_Talent_S_Fischl_04"
],
- "SkillOrder": [10311, 10312, 10313],
+ "SkillOrder": [
+ 10311,
+ 10312,
+ 10313
+ ],
"Skills": {
"10311": "Skill_A_02",
"10312": "Skill_S_Fischl_01",
"10313": "Skill_E_Fischl_01"
},
- "ProudMap": { "10311": 3131, "10312": 3132, "10313": 3139 },
+ "ProudMap": {
+ "10311": 3131,
+ "10312": 3132,
+ "10313": 3139
+ },
"NameTextMapHash": 3277782506,
"SideIconName": "UI_AvatarIcon_Side_Fischl",
"QualityType": "QUALITY_PURPLE",
@@ -462,13 +614,21 @@
"UI_Talent_U_Bennett_02",
"UI_Talent_S_Bennett_04"
],
- "SkillOrder": [10321, 10322, 10323],
+ "SkillOrder": [
+ 10321,
+ 10322,
+ 10323
+ ],
"Skills": {
"10321": "Skill_A_01",
"10322": "Skill_S_Bennett_01",
"10323": "Skill_E_Bennett_01"
},
- "ProudMap": { "10321": 3231, "10322": 3232, "10323": 3239 },
+ "ProudMap": {
+ "10321": 3231,
+ "10322": 3232,
+ "10323": 3239
+ },
"NameTextMapHash": 968893378,
"SideIconName": "UI_AvatarIcon_Side_Bennett",
"QualityType": "QUALITY_PURPLE"
@@ -483,13 +643,21 @@
"UI_Talent_U_Tartaglia_02",
"UI_Talent_S_Tartaglia_04"
],
- "SkillOrder": [10331, 10332, 10333],
+ "SkillOrder": [
+ 10331,
+ 10332,
+ 10333
+ ],
"Skills": {
"10331": "Skill_A_02",
"10332": "Skill_S_Tartaglia_01",
"10333": "Skill_E_Tartaglia_01"
},
- "ProudMap": { "10331": 3331, "10332": 3332, "10333": 3339 },
+ "ProudMap": {
+ "10331": 3331,
+ "10332": 3332,
+ "10333": 3339
+ },
"NameTextMapHash": 3847143266,
"SideIconName": "UI_AvatarIcon_Side_Tartaglia",
"QualityType": "QUALITY_ORANGE"
@@ -504,13 +672,21 @@
"UI_Talent_U_Noel_02",
"UI_Talent_S_Noel_04"
],
- "SkillOrder": [10341, 10342, 10343],
+ "SkillOrder": [
+ 10341,
+ 10342,
+ 10343
+ ],
"Skills": {
"10341": "Skill_A_04",
"10342": "Skill_S_Noel_01",
"10343": "Skill_E_Noel_01"
},
- "ProudMap": { "10341": 3431, "10342": 3432, "10343": 3439 },
+ "ProudMap": {
+ "10341": 3431,
+ "10342": 3432,
+ "10343": 3439
+ },
"NameTextMapHash": 1921418842,
"SideIconName": "UI_AvatarIcon_Side_Noel",
"QualityType": "QUALITY_PURPLE"
@@ -525,13 +701,21 @@
"UI_Talent_U_Qiqi_02",
"UI_Talent_S_Qiqi_04"
],
- "SkillOrder": [10351, 10352, 10353],
+ "SkillOrder": [
+ 10351,
+ 10352,
+ 10353
+ ],
"Skills": {
"10351": "Skill_A_01",
"10352": "Skill_S_Qiqi_01",
"10353": "Skill_E_Qiqi_01"
},
- "ProudMap": { "10351": 3531, "10352": 3532, "10353": 3539 },
+ "ProudMap": {
+ "10351": 3531,
+ "10352": 3532,
+ "10353": 3539
+ },
"NameTextMapHash": 168956722,
"SideIconName": "UI_AvatarIcon_Side_Qiqi",
"QualityType": "QUALITY_ORANGE"
@@ -546,13 +730,21 @@
"UI_Talent_U_Chongyun_02",
"UI_Talent_S_Chongyun_04"
],
- "SkillOrder": [10401, 10402, 10403],
+ "SkillOrder": [
+ 10401,
+ 10402,
+ 10403
+ ],
"Skills": {
"10401": "Skill_A_04",
"10402": "Skill_S_Chongyun_01",
"10403": "Skill_E_Chongyun_01"
},
- "ProudMap": { "10401": 3631, "10402": 3632, "10403": 3639 },
+ "ProudMap": {
+ "10401": 3631,
+ "10402": 3632,
+ "10403": 3639
+ },
"NameTextMapHash": 2876340530,
"SideIconName": "UI_AvatarIcon_Side_Chongyun",
"QualityType": "QUALITY_PURPLE"
@@ -567,13 +759,21 @@
"UI_Talent_U_Ganyu_02",
"UI_Talent_S_Ganyu_04"
],
- "SkillOrder": [10371, 10372, 10373],
+ "SkillOrder": [
+ 10371,
+ 10372,
+ 10373
+ ],
"Skills": {
"10371": "Skill_A_02",
"10372": "Skill_S_Ganyu_01",
"10373": "Skill_E_Ganyu_01"
},
- "ProudMap": { "10371": 3731, "10372": 3732, "10373": 3739 },
+ "ProudMap": {
+ "10371": 3731,
+ "10372": 3732,
+ "10373": 3739
+ },
"NameTextMapHash": 2679781122,
"SideIconName": "UI_AvatarIcon_Side_Ganyu",
"QualityType": "QUALITY_ORANGE"
@@ -588,13 +788,21 @@
"UI_Talent_U_Albedo_02",
"UI_Talent_S_Albedo_04"
],
- "SkillOrder": [10386, 10387, 10388],
+ "SkillOrder": [
+ 10386,
+ 10387,
+ 10388
+ ],
"Skills": {
"10386": "Skill_A_01",
"10387": "Skill_S_Albedo_01",
"10388": "Skill_E_Albedo_01"
},
- "ProudMap": { "10386": 3831, "10387": 3832, "10388": 3839 },
+ "ProudMap": {
+ "10386": 3831,
+ "10387": 3832,
+ "10388": 3839
+ },
"NameTextMapHash": 4108620722,
"SideIconName": "UI_AvatarIcon_Side_Albedo",
"QualityType": "QUALITY_ORANGE"
@@ -609,13 +817,21 @@
"UI_Talent_U_Diona_02",
"UI_Talent_S_Diona_04"
],
- "SkillOrder": [10391, 10392, 10395],
+ "SkillOrder": [
+ 10391,
+ 10392,
+ 10395
+ ],
"Skills": {
"10391": "Skill_A_02",
"10392": "Skill_S_Diona_01",
"10395": "Skill_E_Diona_01"
},
- "ProudMap": { "10391": 3931, "10392": 3932, "10395": 3939 },
+ "ProudMap": {
+ "10391": 3931,
+ "10392": 3932,
+ "10395": 3939
+ },
"NameTextMapHash": 1468367538,
"SideIconName": "UI_AvatarIcon_Side_Diona",
"QualityType": "QUALITY_PURPLE"
@@ -630,13 +846,21 @@
"UI_Talent_U_Mona_02",
"UI_Talent_S_Mona_04"
],
- "SkillOrder": [10411, 10412, 10415],
+ "SkillOrder": [
+ 10411,
+ 10412,
+ 10415
+ ],
"Skills": {
"10411": "Skill_A_Catalyst_MD",
"10412": "Skill_S_Mona_01",
"10415": "Skill_E_Mona_01"
},
- "ProudMap": { "10411": 4131, "10412": 4132, "10415": 4139 },
+ "ProudMap": {
+ "10411": 4131,
+ "10412": 4132,
+ "10415": 4139
+ },
"NameTextMapHash": 1113306282,
"SideIconName": "UI_AvatarIcon_Side_Mona",
"QualityType": "QUALITY_ORANGE",
@@ -659,13 +883,21 @@
"UI_Talent_U_Keqing_02",
"UI_Talent_S_Keqing_04"
],
- "SkillOrder": [10421, 10422, 10425],
+ "SkillOrder": [
+ 10421,
+ 10422,
+ 10425
+ ],
"Skills": {
"10421": "Skill_A_01",
"10422": "Skill_S_Keqing_01",
"10425": "Skill_E_Keqing_01"
},
- "ProudMap": { "10421": 4231, "10422": 4232, "10425": 4239 },
+ "ProudMap": {
+ "10421": 4231,
+ "10422": 4232,
+ "10425": 4239
+ },
"NameTextMapHash": 1864015138,
"SideIconName": "UI_AvatarIcon_Side_Keqing",
"QualityType": "QUALITY_ORANGE",
@@ -688,13 +920,21 @@
"UI_Talent_U_Sucrose_02",
"UI_Talent_S_Sucrose_04"
],
- "SkillOrder": [10431, 10432, 10435],
+ "SkillOrder": [
+ 10431,
+ 10432,
+ 10435
+ ],
"Skills": {
"10431": "Skill_A_Catalyst_MD",
"10432": "Skill_S_Sucrose_01",
"10435": "Skill_E_Sucrose_01"
},
- "ProudMap": { "10431": 4331, "10432": 4332, "10435": 4339 },
+ "ProudMap": {
+ "10431": 4331,
+ "10432": 4332,
+ "10435": 4339
+ },
"NameTextMapHash": 1053433018,
"SideIconName": "UI_AvatarIcon_Side_Sucrose",
"QualityType": "QUALITY_PURPLE"
@@ -709,13 +949,21 @@
"UI_Talent_U_Xinyan_02",
"UI_Talent_S_Xinyan_04"
],
- "SkillOrder": [10441, 10442, 10443],
+ "SkillOrder": [
+ 10441,
+ 10442,
+ 10443
+ ],
"Skills": {
"10441": "Skill_A_04",
"10442": "Skill_S_Xinyan_01",
"10443": "Skill_E_Xinyan_01"
},
- "ProudMap": { "10441": 4431, "10442": 4432, "10443": 4439 },
+ "ProudMap": {
+ "10441": 4431,
+ "10442": 4432,
+ "10443": 4439
+ },
"NameTextMapHash": 4273845410,
"SideIconName": "UI_AvatarIcon_Side_Xinyan",
"QualityType": "QUALITY_PURPLE"
@@ -730,13 +978,21 @@
"UI_Talent_U_Rosaria_02",
"UI_Talent_S_Rosaria_04"
],
- "SkillOrder": [10451, 10452, 10453],
+ "SkillOrder": [
+ 10451,
+ 10452,
+ 10453
+ ],
"Skills": {
"10451": "Skill_A_03",
"10452": "Skill_S_Rosaria_01",
"10453": "Skill_E_Rosaria_01"
},
- "ProudMap": { "10451": 4531, "10452": 4532, "10453": 4539 },
+ "ProudMap": {
+ "10451": 4531,
+ "10452": 4532,
+ "10453": 4539
+ },
"NameTextMapHash": 4260733330,
"SideIconName": "UI_AvatarIcon_Side_Rosaria",
"QualityType": "QUALITY_PURPLE",
@@ -759,13 +1015,21 @@
"UI_Talent_U_Hutao_02",
"UI_Talent_S_Hutao_04"
],
- "SkillOrder": [10461, 10462, 10463],
+ "SkillOrder": [
+ 10461,
+ 10462,
+ 10463
+ ],
"Skills": {
"10461": "Skill_A_03",
"10462": "Skill_S_Hutao_01",
"10463": "Skill_E_Hutao_01"
},
- "ProudMap": { "10461": 4631, "10462": 4632, "10463": 4639 },
+ "ProudMap": {
+ "10461": 4631,
+ "10462": 4632,
+ "10463": 4639
+ },
"NameTextMapHash": 1940919994,
"SideIconName": "UI_AvatarIcon_Side_Hutao",
"QualityType": "QUALITY_ORANGE"
@@ -780,13 +1044,21 @@
"UI_Talent_U_Kazuha_02",
"UI_Talent_S_Kazuha_04"
],
- "SkillOrder": [10471, 10472, 10475],
+ "SkillOrder": [
+ 10471,
+ 10472,
+ 10475
+ ],
"Skills": {
"10471": "Skill_A_01",
"10472": "Skill_S_Kazuha_01",
"10475": "Skill_E_Kazuha_01"
},
- "ProudMap": { "10471": 4731, "10472": 4732, "10475": 4739 },
+ "ProudMap": {
+ "10471": 4731,
+ "10472": 4732,
+ "10475": 4739
+ },
"NameTextMapHash": 88505754,
"SideIconName": "UI_AvatarIcon_Side_Kazuha",
"QualityType": "QUALITY_ORANGE"
@@ -801,13 +1073,21 @@
"UI_Talent_U_Feiyan_02",
"UI_Talent_S_Feiyan_04"
],
- "SkillOrder": [10481, 10482, 10485],
+ "SkillOrder": [
+ 10481,
+ 10482,
+ 10485
+ ],
"Skills": {
"10481": "Skill_A_Catalyst_MD",
"10482": "Skill_S_Feiyan_01",
"10485": "Skill_E_Feiyan_01"
},
- "ProudMap": { "10481": 4831, "10482": 4832, "10485": 4839 },
+ "ProudMap": {
+ "10481": 4831,
+ "10482": 4832,
+ "10485": 4839
+ },
"NameTextMapHash": 697277554,
"SideIconName": "UI_AvatarIcon_Side_Feiyan",
"QualityType": "QUALITY_PURPLE"
@@ -822,13 +1102,21 @@
"UI_Talent_U_Yoimiya_02",
"UI_Talent_S_Yoimiya_04"
],
- "SkillOrder": [10491, 10492, 10495],
+ "SkillOrder": [
+ 10491,
+ 10492,
+ 10495
+ ],
"Skills": {
"10491": "Skill_A_02",
"10492": "Skill_S_Yoimiya_01",
"10495": "Skill_E_Yoimiya_01"
},
- "ProudMap": { "10491": 4931, "10492": 4932, "10495": 4939 },
+ "ProudMap": {
+ "10491": 4931,
+ "10492": 4932,
+ "10495": 4939
+ },
"NameTextMapHash": 2504399314,
"SideIconName": "UI_AvatarIcon_Side_Yoimiya",
"QualityType": "QUALITY_ORANGE"
@@ -843,13 +1131,21 @@
"UI_Talent_U_Tohma_02",
"UI_Talent_S_Tohma_04"
],
- "SkillOrder": [10501, 10502, 10505],
+ "SkillOrder": [
+ 10501,
+ 10502,
+ 10505
+ ],
"Skills": {
"10501": "Skill_A_03",
"10502": "Skill_S_Tohma_01",
"10505": "Skill_E_Tohma_01"
},
- "ProudMap": { "10501": 5031, "10502": 5032, "10505": 5039 },
+ "ProudMap": {
+ "10501": 5031,
+ "10502": 5032,
+ "10505": 5039
+ },
"NameTextMapHash": 3555115602,
"SideIconName": "UI_AvatarIcon_Side_Tohma",
"QualityType": "QUALITY_PURPLE"
@@ -864,13 +1160,21 @@
"UI_Talent_U_Eula_02",
"UI_Talent_S_Eula_04"
],
- "SkillOrder": [10511, 10512, 10515],
+ "SkillOrder": [
+ 10511,
+ 10512,
+ 10515
+ ],
"Skills": {
"10511": "Skill_A_04",
"10512": "Skill_S_Eula_01",
"10515": "Skill_E_Eula_01"
},
- "ProudMap": { "10511": 5131, "10512": 5132, "10515": 5139 },
+ "ProudMap": {
+ "10511": 5131,
+ "10512": 5132,
+ "10515": 5139
+ },
"NameTextMapHash": 3717667418,
"SideIconName": "UI_AvatarIcon_Side_Eula",
"QualityType": "QUALITY_ORANGE"
@@ -885,13 +1189,21 @@
"UI_Talent_U_Shougun_01",
"UI_Talent_S_Shougun_04"
],
- "SkillOrder": [10521, 10522, 10525],
+ "SkillOrder": [
+ 10521,
+ 10522,
+ 10525
+ ],
"Skills": {
"10521": "Skill_A_03",
"10522": "Skill_S_Shougun_01",
"10525": "Skill_E_Shougun_01"
},
- "ProudMap": { "10521": 5231, "10522": 5232, "10525": 5239 },
+ "ProudMap": {
+ "10521": 5231,
+ "10522": 5232,
+ "10525": 5239
+ },
"NameTextMapHash": 3024507506,
"SideIconName": "UI_AvatarIcon_Side_Shougun",
"QualityType": "QUALITY_ORANGE"
@@ -906,13 +1218,21 @@
"UI_Talent_U_Sayu_01",
"UI_Talent_S_Sayu_04"
],
- "SkillOrder": [10531, 10532, 10535],
+ "SkillOrder": [
+ 10531,
+ 10532,
+ 10535
+ ],
"Skills": {
"10531": "Skill_A_04",
"10532": "Skill_S_Sayu_01",
"10535": "Skill_E_Sayu_01"
},
- "ProudMap": { "10531": 5331, "10532": 5332, "10535": 5339 },
+ "ProudMap": {
+ "10531": 5331,
+ "10532": 5332,
+ "10535": 5339
+ },
"NameTextMapHash": 2388785242,
"SideIconName": "UI_AvatarIcon_Side_Sayu",
"QualityType": "QUALITY_PURPLE"
@@ -927,13 +1247,21 @@
"UI_Talent_U_Kokomi_01",
"UI_Talent_S_Kokomi_04"
],
- "SkillOrder": [10541, 10542, 10545],
+ "SkillOrder": [
+ 10541,
+ 10542,
+ 10545
+ ],
"Skills": {
"10541": "Skill_A_Catalyst_MD",
"10542": "Skill_S_Kokomi_01",
"10545": "Skill_E_Kokomi_01"
},
- "ProudMap": { "10541": 5431, "10542": 5432, "10545": 5439 },
+ "ProudMap": {
+ "10541": 5431,
+ "10542": 5432,
+ "10545": 5439
+ },
"NameTextMapHash": 3914045794,
"SideIconName": "UI_AvatarIcon_Side_Kokomi",
"QualityType": "QUALITY_ORANGE"
@@ -948,13 +1276,21 @@
"UI_Talent_U_Gorou_02",
"UI_Talent_S_Gorou_04"
],
- "SkillOrder": [10551, 10552, 10555],
+ "SkillOrder": [
+ 10551,
+ 10552,
+ 10555
+ ],
"Skills": {
"10551": "Skill_A_02",
"10552": "Skill_S_Gorou_01",
"10555": "Skill_E_Gorou_01"
},
- "ProudMap": { "10551": 5531, "10552": 5532, "10555": 5539 },
+ "ProudMap": {
+ "10551": 5531,
+ "10552": 5532,
+ "10555": 5539
+ },
"NameTextMapHash": 3400133546,
"SideIconName": "UI_AvatarIcon_Side_Gorou",
"QualityType": "QUALITY_PURPLE"
@@ -969,13 +1305,21 @@
"UI_Talent_U_Sara_01",
"UI_Talent_S_Sara_04"
],
- "SkillOrder": [10561, 10562, 10565],
+ "SkillOrder": [
+ 10561,
+ 10562,
+ 10565
+ ],
"Skills": {
"10561": "Skill_A_02",
"10562": "Skill_S_Sara_01",
"10565": "Skill_E_Sara_01"
},
- "ProudMap": { "10561": 5631, "10562": 5632, "10565": 5639 },
+ "ProudMap": {
+ "10561": 5631,
+ "10562": 5632,
+ "10565": 5639
+ },
"NameTextMapHash": 1483922610,
"SideIconName": "UI_AvatarIcon_Side_Sara",
"QualityType": "QUALITY_PURPLE"
@@ -990,13 +1334,21 @@
"UI_Talent_U_Itto_02",
"UI_Talent_S_Itto_04"
],
- "SkillOrder": [10571, 10572, 10575],
+ "SkillOrder": [
+ 10571,
+ 10572,
+ 10575
+ ],
"Skills": {
"10571": "Skill_A_04",
"10572": "Skill_S_Itto_01",
"10575": "Skill_E_Itto_01"
},
- "ProudMap": { "10571": 5731, "10572": 5732, "10575": 5739 },
+ "ProudMap": {
+ "10571": 5731,
+ "10572": 5732,
+ "10575": 5739
+ },
"NameTextMapHash": 3068316954,
"SideIconName": "UI_AvatarIcon_Side_Itto",
"QualityType": "QUALITY_ORANGE"
@@ -1011,13 +1363,21 @@
"UI_Talent_U_Yae_02",
"UI_Talent_S_Yae_04"
],
- "SkillOrder": [10581, 10582, 10585],
+ "SkillOrder": [
+ 10581,
+ 10582,
+ 10585
+ ],
"Skills": {
"10581": "Skill_A_Catalyst_MD",
"10582": "Skill_S_Yae_01",
"10585": "Skill_E_Yae_01"
},
- "ProudMap": { "10581": 5831, "10582": 5832, "10585": 5839 },
+ "ProudMap": {
+ "10581": 5831,
+ "10582": 5832,
+ "10585": 5839
+ },
"NameTextMapHash": 2713453234,
"SideIconName": "UI_AvatarIcon_Side_Yae",
"QualityType": "QUALITY_ORANGE"
@@ -1032,13 +1392,21 @@
"UI_Talent_U_Heizo_02",
"UI_Talent_S_Heizo_04"
],
- "SkillOrder": [10591, 10592, 10595],
+ "SkillOrder": [
+ 10591,
+ 10592,
+ 10595
+ ],
"Skills": {
"10591": "Skill_A_Catalyst_MD",
"10592": "Skill_S_Heizo_01",
"10595": "Skill_E_Heizo_01"
},
- "ProudMap": { "10591": 5931, "10592": 5932, "10595": 5939 },
+ "ProudMap": {
+ "10591": 5931,
+ "10592": 5932,
+ "10595": 5939
+ },
"NameTextMapHash": 646032090,
"SideIconName": "UI_AvatarIcon_Side_Heizo",
"QualityType": "QUALITY_PURPLE"
@@ -1053,13 +1421,21 @@
"UI_Talent_U_Yelan_02",
"UI_Talent_S_Yelan_04"
],
- "SkillOrder": [10606, 10607, 10610],
+ "SkillOrder": [
+ 10606,
+ 10607,
+ 10610
+ ],
"Skills": {
"10606": "Skill_A_02",
"10607": "Skill_S_Yelan_01",
"10610": "Skill_E_Yelan_01"
},
- "ProudMap": { "10606": 6031, "10607": 6032, "10610": 6039 },
+ "ProudMap": {
+ "10606": 6031,
+ "10607": 6032,
+ "10610": 6039
+ },
"NameTextMapHash": 2848374378,
"SideIconName": "UI_AvatarIcon_Side_Yelan",
"QualityType": "QUALITY_ORANGE"
@@ -1074,13 +1450,21 @@
"UI_Talent_S_Aloy_Lock",
"UI_Talent_S_Aloy_Lock"
],
- "SkillOrder": [10621, 10622, 10625],
+ "SkillOrder": [
+ 10621,
+ 10622,
+ 10625
+ ],
"Skills": {
"10621": "Skill_A_02",
"10622": "Skill_S_Aloy_01",
"10625": "Skill_E_Aloy_01"
},
- "ProudMap": { "10621": 6231, "10622": 6232, "10625": 6239 },
+ "ProudMap": {
+ "10621": 6231,
+ "10622": 6232,
+ "10625": 6239
+ },
"NameTextMapHash": 3689108098,
"SideIconName": "UI_AvatarIcon_Side_Aloy",
"QualityType": "QUALITY_ORANGE_SP"
@@ -1095,13 +1479,21 @@
"UI_Talent_U_Shenhe_02",
"UI_Talent_S_Shenhe_04"
],
- "SkillOrder": [10631, 10632, 10635],
+ "SkillOrder": [
+ 10631,
+ 10632,
+ 10635
+ ],
"Skills": {
"10631": "Skill_A_03",
"10632": "Skill_S_Shenhe_01",
"10635": "Skill_E_Shenhe_01"
},
- "ProudMap": { "10631": 6331, "10632": 6332, "10635": 6339 },
+ "ProudMap": {
+ "10631": 6331,
+ "10632": 6332,
+ "10635": 6339
+ },
"NameTextMapHash": 334242634,
"SideIconName": "UI_AvatarIcon_Side_Shenhe",
"QualityType": "QUALITY_ORANGE"
@@ -1116,13 +1508,21 @@
"UI_Talent_U_Yunjin_02",
"UI_Talent_S_Yunjin_04"
],
- "SkillOrder": [10641, 10642, 10643],
+ "SkillOrder": [
+ 10641,
+ 10642,
+ 10643
+ ],
"Skills": {
"10641": "Skill_A_03",
"10642": "Skill_S_Yunjin_01",
"10643": "Skill_E_Yunjin_01"
},
- "ProudMap": { "10641": 6431, "10642": 6432, "10643": 6439 },
+ "ProudMap": {
+ "10641": 6431,
+ "10642": 6432,
+ "10643": 6439
+ },
"NameTextMapHash": 655825874,
"SideIconName": "UI_AvatarIcon_Side_Yunjin",
"QualityType": "QUALITY_PURPLE"
@@ -1137,13 +1537,21 @@
"UI_Talent_U_Shinobu_02",
"UI_Talent_S_Shinobu_04"
],
- "SkillOrder": [10651, 10652, 10655],
+ "SkillOrder": [
+ 10651,
+ 10652,
+ 10655
+ ],
"Skills": {
"10651": "Skill_A_01",
"10652": "Skill_S_Shinobu_01",
"10655": "Skill_E_Shinobu_01"
},
- "ProudMap": { "10651": 6531, "10652": 6532, "10655": 6539 },
+ "ProudMap": {
+ "10651": 6531,
+ "10652": 6532,
+ "10655": 6539
+ },
"NameTextMapHash": 1940821986,
"SideIconName": "UI_AvatarIcon_Side_Shinobu",
"QualityType": "QUALITY_PURPLE"
@@ -1158,13 +1566,21 @@
"UI_Talent_U_Ayato_01",
"UI_Talent_S_Ayato_04"
],
- "SkillOrder": [10661, 10662, 10665],
+ "SkillOrder": [
+ 10661,
+ 10662,
+ 10665
+ ],
"Skills": {
"10661": "Skill_A_01",
"10662": "Skill_S_Ayato_01",
"10665": "Skill_E_Ayato_01"
},
- "ProudMap": { "10661": 6631, "10662": 6632, "10665": 6639 },
+ "ProudMap": {
+ "10661": 6631,
+ "10662": 6632,
+ "10665": 6639
+ },
"NameTextMapHash": 1588620330,
"SideIconName": "UI_AvatarIcon_Side_Ayato",
"QualityType": "QUALITY_ORANGE"
@@ -1179,13 +1595,21 @@
"UI_Talent_U_Collei_01",
"UI_Talent_S_Collei_04"
],
- "SkillOrder": [10671, 10672, 10675],
+ "SkillOrder": [
+ 10671,
+ 10672,
+ 10675
+ ],
"Skills": {
"10671": "Skill_A_02",
"10672": "Skill_S_Collei_01",
"10675": "Skill_E_Collei_01"
},
- "ProudMap": { "10671": 6731, "10672": 6732, "10675": 6739 },
+ "ProudMap": {
+ "10671": 6731,
+ "10672": 6732,
+ "10675": 6739
+ },
"NameTextMapHash": 2948362178,
"SideIconName": "UI_AvatarIcon_Side_Collei",
"QualityType": "QUALITY_PURPLE"
@@ -1200,13 +1624,21 @@
"UI_Talent_U_Dori_01",
"UI_Talent_S_Dori_04"
],
- "SkillOrder": [10681, 10682, 10685],
+ "SkillOrder": [
+ 10681,
+ 10682,
+ 10685
+ ],
"Skills": {
"10681": "Skill_A_04",
"10682": "Skill_S_Dori_01",
"10685": "Skill_E_Dori_01"
},
- "ProudMap": { "10681": 6831, "10682": 6832, "10685": 6839 },
+ "ProudMap": {
+ "10681": 6831,
+ "10682": 6832,
+ "10685": 6839
+ },
"NameTextMapHash": 388272194,
"SideIconName": "UI_AvatarIcon_Side_Dori",
"QualityType": "QUALITY_PURPLE"
@@ -1221,13 +1653,21 @@
"UI_Talent_U_Tighnari_02",
"UI_Talent_S_Tighnari_04"
],
- "SkillOrder": [10691, 10692, 10695],
+ "SkillOrder": [
+ 10691,
+ 10692,
+ 10695
+ ],
"Skills": {
"10691": "Skill_A_02",
"10692": "Skill_S_Tighnari_01",
"10695": "Skill_E_Tighnari_01"
},
- "ProudMap": { "10691": 6931, "10692": 6932, "10695": 6939 },
+ "ProudMap": {
+ "10691": 6931,
+ "10692": 6932,
+ "10695": 6939
+ },
"NameTextMapHash": 2506955778,
"SideIconName": "UI_AvatarIcon_Side_Tighnari",
"QualityType": "QUALITY_ORANGE"
@@ -1242,13 +1682,21 @@
"UI_Talent_U_Nilou_02",
"UI_Talent_S_Nilou_04"
],
- "SkillOrder": [10701, 10702, 10705],
+ "SkillOrder": [
+ 10701,
+ 10702,
+ 10705
+ ],
"Skills": {
"10701": "Skill_A_01",
"10702": "Skill_S_Nilou_01",
"10705": "Skill_E_Nilou_01"
},
- "ProudMap": { "10701": 7031, "10702": 7032, "10705": 7039 },
+ "ProudMap": {
+ "10701": 7031,
+ "10702": 7032,
+ "10705": 7039
+ },
"NameTextMapHash": 3850149970,
"SideIconName": "UI_AvatarIcon_Side_Nilou",
"QualityType": "QUALITY_ORANGE"
@@ -1263,13 +1711,21 @@
"UI_Talent_U_Cyno_02",
"UI_Talent_S_Cyno_04"
],
- "SkillOrder": [10711, 10712, 10715],
+ "SkillOrder": [
+ 10711,
+ 10712,
+ 10715
+ ],
"Skills": {
"10711": "Skill_A_03",
"10712": "Skill_S_Cyno_01",
"10715": "Skill_E_Cyno_01"
},
- "ProudMap": { "10711": 7131, "10712": 7132, "10715": 7139 },
+ "ProudMap": {
+ "10711": 7131,
+ "10712": 7132,
+ "10715": 7139
+ },
"NameTextMapHash": 1049891906,
"SideIconName": "UI_AvatarIcon_Side_Cyno",
"QualityType": "QUALITY_ORANGE"
@@ -1284,24 +1740,109 @@
"UI_Talent_U_Candace_02",
"UI_Talent_S_Candace_04"
],
- "SkillOrder": [10721, 10722, 10725],
+ "SkillOrder": [
+ 10721,
+ 10722,
+ 10725
+ ],
"Skills": {
"10721": "Skill_A_03",
"10722": "Skill_S_Candace_01",
"10725": "Skill_E_Candace_01"
},
- "ProudMap": { "10721": 7231, "10722": 7232, "10725": 7239 },
+ "ProudMap": {
+ "10721": 7231,
+ "10722": 7232,
+ "10725": 7239
+ },
"NameTextMapHash": 3092975658,
"SideIconName": "UI_AvatarIcon_Side_Candace",
"QualityType": "QUALITY_PURPLE"
},
+ "10000073": {
+ "Element": "Grass",
+ "Consts": [
+ "UI_Talent_S_Nahida_01",
+ "UI_Talent_S_Nahida_02",
+ "UI_Talent_U_Nahida_01",
+ "UI_Talent_S_Nahida_03",
+ "UI_Talent_U_Nahida_02",
+ "UI_Talent_S_Nahida_04"
+ ],
+ "SkillOrder": [
+ 10731,
+ 10732,
+ 10735
+ ],
+ "Skills": {
+ "10731": "Skill_A_Catalyst_MD",
+ "10732": "Skill_S_Nahida_01",
+ "10735": "Skill_E_Nahida_01"
+ },
+ "ProudMap": {
+ "10731": 7331,
+ "10732": 7332,
+ "10735": 7339
+ },
+ "NameTextMapHash": 712501082,
+ "SideIconName": "UI_AvatarIcon_Side_Nahida",
+ "QualityType": "QUALITY_ORANGE"
+ },
+ "10000074": {
+ "Element": "Ice",
+ "Consts": [
+ "UI_Talent_S_Layla_01",
+ "UI_Talent_S_Layla_02",
+ "UI_Talent_U_Layla_01",
+ "UI_Talent_S_Layla_03",
+ "UI_Talent_U_Layla_02",
+ "UI_Talent_S_Layla_04"
+ ],
+ "SkillOrder": [
+ 10741,
+ 10742,
+ 10745
+ ],
+ "Skills": {
+ "10741": "Skill_A_01",
+ "10742": "Skill_S_Layla_01",
+ "10745": "Skill_E_Layla_01"
+ },
+ "ProudMap": {
+ "10741": 7431,
+ "10742": 7432,
+ "10745": 7439
+ },
+ "NameTextMapHash": 2889777514,
+ "SideIconName": "UI_AvatarIcon_Side_Layla",
+ "QualityType": "QUALITY_PURPLE"
+ },
"10000005-501": {
"Element": "None",
- "Consts": ["None", "None", "None", "None", "None", "None"],
- "SkillOrder": [100540, 10067, 10068],
- "Skills": { "10067": "None", "10068": "None", "100540": "Skill_A_01" },
+ "Consts": [
+ "None",
+ "None",
+ "None",
+ "None",
+ "None",
+ "None"
+ ],
+ "SkillOrder": [
+ 100540,
+ 10067,
+ 10068
+ ],
+ "Skills": {
+ "10067": "None",
+ "10068": "None",
+ "100540": "Skill_A_01"
+ },
"NameTextMapHash": 3816664530,
- "ProudMap": { "10067": 732, "10068": 739, "100540": 731 },
+ "ProudMap": {
+ "10067": 732,
+ "10068": 739,
+ "100540": 731
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerBoy",
"QualityType": "QUALITY_ORANGE"
},
@@ -1317,14 +1858,22 @@
"UI_Talent_U_PlayerWind_01",
"UI_Talent_S_PlayerWind_04"
],
- "SkillOrder": [100543, 10067, 10068],
+ "SkillOrder": [
+ 100543,
+ 10067,
+ 10068
+ ],
"Skills": {
"10067": "Skill_S_PlayerWind_01",
"10068": "Skill_E_PlayerWind_01",
"100543": "Skill_A_01"
},
"NameTextMapHash": 1533656818,
- "ProudMap": { "10067": 732, "10068": 739, "100543": 730 },
+ "ProudMap": {
+ "10067": 732,
+ "10068": 739,
+ "100543": 730
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerBoy",
"QualityType": "QUALITY_ORANGE"
},
@@ -1339,14 +1888,22 @@
"UI_Talent_U_PlayerRock_01",
"UI_Talent_S_PlayerRock_04"
],
- "SkillOrder": [100545, 10077, 10078],
+ "SkillOrder": [
+ 100545,
+ 10077,
+ 10078
+ ],
"Skills": {
"10077": "Skill_S_PlayerRock_01",
"10078": "Skill_E_PlayerRock_01",
"100545": "Skill_A_01"
},
"NameTextMapHash": 1533656818,
- "ProudMap": { "10077": 932, "10078": 939, "100545": 730 },
+ "ProudMap": {
+ "10077": 932,
+ "10078": 939,
+ "100545": 730
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerBoy",
"QualityType": "QUALITY_ORANGE"
},
@@ -1360,14 +1917,22 @@
"UI_Talent_U_PlayerElectric_02",
"UI_Talent_S_PlayerElectric_04"
],
- "SkillOrder": [100546, 10602, 10605],
+ "SkillOrder": [
+ 100546,
+ 10602,
+ 10605
+ ],
"Skills": {
"10602": "Skill_S_PlayerElectric_01",
"10605": "Skill_E_PlayerElectric_01",
"100546": "Skill_A_01"
},
"NameTextMapHash": 1533656818,
- "ProudMap": { "10602": 1032, "10605": 1039, "100546": 1030 },
+ "ProudMap": {
+ "10602": 1032,
+ "10605": 1039,
+ "100546": 1030
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerBoy",
"QualityType": "QUALITY_ORANGE"
},
@@ -1381,24 +1946,51 @@
"UI_Talent_S_PlayerGrass_05",
"UI_Talent_S_PlayerGrass_06"
],
- "SkillOrder": [100547, 10117, 10118],
+ "SkillOrder": [
+ 100547,
+ 10117,
+ 10118
+ ],
"Skills": {
"10117": "Skill_E_PlayerGrass_01",
"10118": "Skill_S_PlayerGrass_01",
"100547": "Skill_A_01"
},
"NameTextMapHash": 1533656818,
- "ProudMap": { "10117": 1132, "10118": 1139, "100547": 1130 },
+ "ProudMap": {
+ "10117": 1132,
+ "10118": 1139,
+ "100547": 1130
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerBoy",
"QualityType": "QUALITY_ORANGE"
},
"10000007-701": {
"Element": "None",
- "Consts": ["None", "None", "None", "None", "None", "None"],
- "SkillOrder": [100550, 10067, 10068],
- "Skills": { "10067": "None", "10068": "None", "100550": "Skill_A_01" },
+ "Consts": [
+ "None",
+ "None",
+ "None",
+ "None",
+ "None",
+ "None"
+ ],
+ "SkillOrder": [
+ 100550,
+ 10067,
+ 10068
+ ],
+ "Skills": {
+ "10067": "None",
+ "10068": "None",
+ "100550": "Skill_A_01"
+ },
"NameTextMapHash": 3816664530,
- "ProudMap": { "10067": 732, "10068": 739, "100550": 731 },
+ "ProudMap": {
+ "10067": 732,
+ "10068": 739,
+ "100550": 731
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerGirl",
"QualityType": "QUALITY_ORANGE"
},
@@ -1414,14 +2006,22 @@
"UI_Talent_U_PlayerWind_01",
"UI_Talent_S_PlayerWind_04"
],
- "SkillOrder": [100553, 10067, 10068],
+ "SkillOrder": [
+ 100553,
+ 10067,
+ 10068
+ ],
"Skills": {
"10067": "Skill_S_PlayerWind_01",
"10068": "Skill_E_PlayerWind_01",
"100553": "Skill_A_01"
},
"NameTextMapHash": 3816664530,
- "ProudMap": { "10067": 732, "10068": 739, "100553": 731 },
+ "ProudMap": {
+ "10067": 732,
+ "10068": 739,
+ "100553": 731
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerGirl",
"QualityType": "QUALITY_ORANGE"
},
@@ -1436,14 +2036,22 @@
"UI_Talent_U_PlayerRock_01",
"UI_Talent_S_PlayerRock_04"
],
- "SkillOrder": [100555, 10077, 10078],
+ "SkillOrder": [
+ 100555,
+ 10077,
+ 10078
+ ],
"Skills": {
"10077": "Skill_S_PlayerRock_01",
"10078": "Skill_E_PlayerRock_01",
"100555": "Skill_A_01"
},
"NameTextMapHash": 3816664530,
- "ProudMap": { "10077": 932, "10078": 939, "100555": 731 },
+ "ProudMap": {
+ "10077": 932,
+ "10078": 939,
+ "100555": 731
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerGirl",
"QualityType": "QUALITY_ORANGE"
},
@@ -1457,14 +2065,22 @@
"UI_Talent_U_PlayerElectric_02",
"UI_Talent_S_PlayerElectric_04"
],
- "SkillOrder": [100556, 10602, 10605],
+ "SkillOrder": [
+ 100556,
+ 10602,
+ 10605
+ ],
"Skills": {
"10602": "Skill_S_PlayerElectric_01",
"10605": "Skill_E_PlayerElectric_01",
"100556": "Skill_A_01"
},
"NameTextMapHash": 3816664530,
- "ProudMap": { "10602": 1032, "10605": 1039, "100556": 1031 },
+ "ProudMap": {
+ "10602": 1032,
+ "10605": 1039,
+ "100556": 1031
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerGirl",
"QualityType": "QUALITY_ORANGE"
},
@@ -1478,14 +2094,22 @@
"UI_Talent_S_PlayerGrass_05",
"UI_Talent_S_PlayerGrass_06"
],
- "SkillOrder": [100557, 10117, 10118],
+ "SkillOrder": [
+ 100557,
+ 10117,
+ 10118
+ ],
"Skills": {
"10117": "Skill_E_PlayerGrass_01",
"10118": "Skill_S_PlayerGrass_01",
"100557": "Skill_A_01"
},
"NameTextMapHash": 3816664530,
- "ProudMap": { "10117": 1132, "10118": 1139, "100557": 1131 },
+ "ProudMap": {
+ "10117": 1132,
+ "10118": 1139,
+ "100557": 1131
+ },
"SideIconName": "UI_AvatarIcon_Side_PlayerGirl",
"QualityType": "QUALITY_ORANGE"
}
diff --git a/LittlePaimon/config/data/role_skill.json b/LittlePaimon/config/data/role_skill.json
index 4db1280..7954012 100644
--- a/LittlePaimon/config/data/role_skill.json
+++ b/LittlePaimon/config/data/role_skill.json
@@ -293,6 +293,12 @@
"10721": "普通攻击·流耀枪术·守势",
"10722": "圣仪·苍鹭庇卫",
"10725": "圣仪·灰鸰衒潮",
+ "10731": "普通攻击·行相",
+ "10732": "所闻遍计",
+ "10735": "心景幻成",
+ "10741": "普通攻击·熠辉轨度剑",
+ "10742": "垂裳端凝之夜",
+ "10745": "星流摇床之梦",
"20001": "风魔炮",
"20002": "风魔炮",
"20011": "飞行挑战 - 前冲",
@@ -321,6 +327,11 @@
"20043": "钩爪占位",
"20044": "钩爪占位",
"20045": "3.1抓捕野猪-投掷",
+ "20049": "大世界抓捕蕈兽-发射子弹",
+ "20051": "蕈兽战斗-集火",
+ "20054": "3.2散兵2阶段瞄准射击",
+ "20055": "3.2禁用元素战技",
+ "20056": "3.2禁用元素爆发",
"20100": "捕获!",
"20101": "捕获!",
"20110": "神秘预感",
@@ -451,7 +462,10 @@
"5069010": "提纳里空中攻击",
"5070010": "妮露空中攻击",
"5071010": "赛诺空中攻击",
- "5072010": "坎蒂丝空中攻击"
+ "5072010": "坎蒂丝空中攻击",
+ "5073010": "纳西妲空中攻击",
+ "5074010": "莱依拉空中攻击",
+ "5076010": "空中攻击"
},
"Icon": {
"10001": "",
@@ -747,6 +761,12 @@
"10721": "Skill_A_03",
"10722": "Skill_S_Candace_01",
"10725": "Skill_E_Candace_01",
+ "10731": "Skill_A_Catalyst_MD",
+ "10732": "Skill_S_Nahida_01",
+ "10735": "Skill_E_Nahida_01",
+ "10741": "Skill_A_01",
+ "10742": "Skill_S_Layla_01",
+ "10745": "Skill_E_Layla_01",
"20001": "Skill_A_Dvalin_AirGun",
"20002": "Skill_A_Dvalin_AirGun",
"20011": "Btn_FlightSprint",
@@ -775,6 +795,11 @@
"20043": "",
"20044": "",
"20045": "Btn_CatchAnimal_Shoot",
+ "20049": "Btn_CatchAnimal_Shoot",
+ "20051": "Btn_FungusFighter_Aim",
+ "20054": "Skill_E_Gagana_AimShoot",
+ "20055": "",
+ "20056": "",
"20100": "Btn_HideAndSeek_Seeker_A_01",
"20101": "Btn_HideAndSeek_Seeker_A_01",
"20110": "Btn_HideAndSeek_Seeker_S_01",
@@ -905,6 +930,9 @@
"5069010": "Skill_A_02",
"5070010": "Skill_A_01",
"5071010": "Skill_A_03",
- "5072010": "Skill_A_03"
+ "5072010": "Skill_A_03",
+ "5073010": "Skill_A_Catalyst_MD",
+ "5074010": "Skill_A_01",
+ "5076010": "Skill_A_02"
}
}
\ No newline at end of file
diff --git a/LittlePaimon/config/data/role_talent.json b/LittlePaimon/config/data/role_talent.json
index c2ff640..9e3bcb3 100644
--- a/LittlePaimon/config/data/role_talent.json
+++ b/LittlePaimon/config/data/role_talent.json
@@ -359,7 +359,19 @@
"723": "织狩的奉祀",
"724": "守戍的誓命",
"725": "萦金的苍瞳",
- "726": "衍溢的汐潮"
+ "726": "衍溢的汐潮",
+ "731": "心识蕴藏之种",
+ "732": "正等善见之根",
+ "733": "熏习成就之芽",
+ "734": "比量现行之茎",
+ "735": "妙谛破愚之叶",
+ "736": "大辨圆成之实",
+ "741": "寐领围垣",
+ "742": "归芒携信",
+ "743": "长宵宣秘",
+ "744": "星示昭明",
+ "745": "悬神系流",
+ "746": "曜光灵炬"
},
"Icon": {
"21": "UI_Talent_S_Ayaka_01",
@@ -721,6 +733,18 @@
"723": "UI_Talent_U_Candace_01",
"724": "UI_Talent_S_Candace_03",
"725": "UI_Talent_U_Candace_02",
- "726": "UI_Talent_S_Candace_04"
+ "726": "UI_Talent_S_Candace_04",
+ "731": "UI_Talent_S_Nahida_01",
+ "732": "UI_Talent_S_Nahida_02",
+ "733": "UI_Talent_U_Nahida_01",
+ "734": "UI_Talent_S_Nahida_03",
+ "735": "UI_Talent_U_Nahida_02",
+ "736": "UI_Talent_S_Nahida_04",
+ "741": "UI_Talent_S_Layla_01",
+ "742": "UI_Talent_S_Layla_02",
+ "743": "UI_Talent_U_Layla_01",
+ "744": "UI_Talent_S_Layla_03",
+ "745": "UI_Talent_U_Layla_02",
+ "746": "UI_Talent_S_Layla_04"
}
}
\ No newline at end of file
diff --git a/LittlePaimon/config/data/roles_data.json b/LittlePaimon/config/data/roles_data.json
index 559e5b1..eaed29a 100644
--- a/LittlePaimon/config/data/roles_data.json
+++ b/LittlePaimon/config/data/roles_data.json
@@ -25246,5 +25246,100 @@
"",
""
]
+ },
+ "纳西妲": {
+ "name": "纳西妲",
+ "title": "白草净华",
+ "region": "须弥",
+ "sex": "女",
+ "star": "5",
+ "type": "限定UP",
+ "element": "草",
+ "weapon": "法器",
+ "date": "2022年11月02日",
+ "tag": "精通加成、自身伤害提升、减防、特化反应、技能延长、协同攻击",
+ "mission": "智慧主之章",
+ "introduce": "深居净善宫的笼中之鸟,只能在梦中将世界尽收眼底。",
+ "destiny_name": "智慧主座",
+ "destiny": {
+ "": ""
+ },
+ "attribute": {
+ "hp": {
+ "1": "",
+ "20": "",
+ "40": "",
+ "50": "",
+ "60": "",
+ "70": "",
+ "80": "",
+ "90": ""
+ },
+ "atk": {
+ "1": "",
+ "20": "",
+ "40": "",
+ "50": "",
+ "60": "",
+ "70": "",
+ "80": "",
+ "90": ""
+ },
+ "def": {
+ "1": "",
+ "20": "",
+ "40": "",
+ "50": "",
+ "60": "",
+ "70": "",
+ "80": "",
+ "90": ""
+ },
+ "attribute": "",
+ "attributes": {
+ "1": "0",
+ "20": "0",
+ "40": "0",
+ "50": "",
+ "60": "",
+ "70": "",
+ "80": "",
+ "90": ""
+ }
+ },
+ "skill": {
+ "普通攻击·行相": {
+ "描述": "",
+ "数值": {}
+ },
+ "所闻遍计": {
+ "描述": "",
+ "数值": {}
+ },
+ "心景幻成": {
+ "描述": "",
+ "数值": {}
+ },
+ "净善摄受明论": "",
+ "慧明缘觉智论": "",
+ "诸相随念净行": ""
+ },
+ "cv": {
+ "cn": "花玲",
+ "jp": "田村由加莉",
+ "kr": "朴恃奫",
+ "en": "金伯利·安妮·坎贝尔"
+ },
+ "food": "料理未知",
+ "story": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
}
}
\ No newline at end of file
diff --git a/LittlePaimon/config/data/score.json b/LittlePaimon/config/data/score.json
index 6f5b2c6..43e4fe5 100644
--- a/LittlePaimon/config/data/score.json
+++ b/LittlePaimon/config/data/score.json
@@ -591,6 +591,14 @@
"暴击率": 1,
"暴击伤害": 1
}
+ },
+ "纳西妲": {
+ "常规": {
+ "攻击力": 1,
+ "元素精通": 1,
+ "暴击率": 1,
+ "暴击伤害": 1
+ }
}
},
"Talent": {
diff --git a/LittlePaimon/config/data/weapon.json b/LittlePaimon/config/data/weapon.json
index b515dc0..1c6f485 100644
--- a/LittlePaimon/config/data/weapon.json
+++ b/LittlePaimon/config/data/weapon.json
@@ -121,6 +121,7 @@
"693354267": "尘世之锁",
"1890163363": "不灭月华",
"310247243": "神乐之真意",
+ "1201790667": "千夜浮梦",
"3600623979": "猎弓",
"2340970067": "历练的猎弓",
"3975746731": "鸦羽弓",
@@ -282,6 +283,7 @@
"尘世之锁": "法器",
"不灭月华": "法器",
"神乐之真意": "法器",
+ "千夜浮梦": "法器",
"猎弓": "弓",
"历练的猎弓": "弓",
"鸦羽弓": "弓",
@@ -438,6 +440,7 @@
"尘世之锁": "UI_EquipIcon_Catalyst_Kunwu",
"不灭月华": "UI_EquipIcon_Catalyst_Kaleido",
"神乐之真意": "UI_EquipIcon_Catalyst_Narukami",
+ "千夜浮梦": "UI_EquipIcon_Catalyst_Ayus",
"猎弓": "UI_EquipIcon_Bow_Hunters",
"历练的猎弓": "UI_EquipIcon_Bow_Old",
"鸦羽弓": "UI_EquipIcon_Bow_Crowfeather",
diff --git a/LittlePaimon/config/plugin/manage.py b/LittlePaimon/config/plugin/manage.py
new file mode 100644
index 0000000..2cadac1
--- /dev/null
+++ b/LittlePaimon/config/plugin/manage.py
@@ -0,0 +1,162 @@
+import asyncio
+import datetime
+from typing import Dict, List
+
+from nonebot import plugin as nb_plugin
+from nonebot import get_bot
+from nonebot.matcher import Matcher
+from nonebot.exception import IgnoredException
+from nonebot.message import run_preprocessor
+from nonebot.adapters.onebot.v11 import MessageEvent, PrivateMessageEvent, GroupMessageEvent
+from LittlePaimon import DRIVER, SUPERUSERS
+from LittlePaimon.utils import logger
+from LittlePaimon.config.path import PLUGIN_CONFIG
+from LittlePaimon.utils.files import load_yaml, save_yaml
+from LittlePaimon.database.models import PluginPermission, PluginStatistics
+from .model import MatcherInfo, PluginInfo
+
+HIDDEN_PLUGINS = [
+ 'LittlePaimon',
+ 'config',
+ 'nonebot_plugin_apscheduler',
+ 'nonebot_plugin_gocqhttp',
+ 'nonebot_plugin_htmlrender',
+ 'nonebot_plugin_imageutils',
+ 'NoticeAndRequest'
+]
+
+
+class PluginManager:
+ plugins: Dict[str, PluginInfo] = {}
+ for file in PLUGIN_CONFIG.iterdir():
+ if file.is_file() and file.name.endswith('.yml'):
+ data = load_yaml(file)
+ plugins[file.name.replace('.yml', '')] = PluginInfo.parse_obj(data)
+
+ @classmethod
+ def save(cls):
+ """
+ 保存数据
+ """
+ for name, plugin in cls.plugins.items():
+ save_yaml(plugin.dict(exclude={'status'}), PLUGIN_CONFIG / f'{name}.yml')
+
+ @classmethod
+ async def init(cls):
+ plugin_list = nb_plugin.get_loaded_plugins()
+ group_list = await get_bot().get_group_list()
+ user_list = await get_bot().get_friend_list()
+ for plugin in plugin_list:
+ if plugin.name not in HIDDEN_PLUGINS:
+ await asyncio.gather(*[PluginPermission.update_or_create(name=plugin.name, session_id=group['group_id'],
+ session_type='group') for group in group_list])
+ await asyncio.gather(*[PluginPermission.update_or_create(name=plugin.name, session_id=user['user_id'],
+ session_type='user') for user in user_list])
+ if plugin.name not in HIDDEN_PLUGINS:
+ if plugin.name not in cls.plugins:
+ if metadata := plugin.metadata:
+ cls.plugins[plugin.name] = PluginInfo.parse_obj({
+ 'name': metadata.name,
+ 'module_name': plugin.name,
+ 'description': metadata.description,
+ 'usage': metadata.usage,
+ 'show': metadata.extra.get('show', True),
+ 'priority': metadata.extra.get('priority', 99),
+ 'cooldown': metadata.extra.get('cooldown')
+ })
+ else:
+ cls.plugins[plugin.name] = PluginInfo(name=plugin.name, module_name=plugin.name)
+ matchers = plugin.matcher
+ for matcher in matchers:
+ if matcher._default_state:
+ matcher_info = MatcherInfo.parse_obj(matcher._default_state)
+ if cls.plugins[plugin.name].matchers is not None and matcher_info.pm_name not in [m.pm_name for
+ m
+ in
+ cls.plugins[
+ plugin.name].matchers]:
+ cls.plugins[plugin.name].matchers.append(matcher_info)
+ cls.save()
+ logger.success('插件管理器', '初始化完成')
+
+ @classmethod
+ async def get_plugin_list(cls, message_type: str, session_id: int) -> List[PluginInfo]:
+ """
+ 获取插件列表(供帮助图使用)
+ :param message_type: 消息类型
+ :param session_id: 消息ID
+ """
+ load_plugins = nb_plugin.get_loaded_plugins()
+ load_plugins = [p.name for p in load_plugins]
+ plugin_list = sorted(cls.plugins.values(), key=lambda x: x.priority).copy()
+ plugin_list = [p for p in plugin_list if p.show and p.module_name in load_plugins]
+ for plugin in plugin_list:
+ if message_type != 'guild':
+ plugin_info = await PluginPermission.get_or_none(name=plugin.module_name, session_id=session_id,
+ session_type=message_type)
+ plugin.status = True if plugin_info is None else plugin_info.status
+ else:
+ plugin.status = True
+ if plugin.matchers:
+ plugin.matchers.sort(key=lambda x: x.pm_priority)
+ plugin.matchers = [m for m in plugin.matchers if m.pm_show and m.pm_usage]
+ return plugin_list
+
+ @classmethod
+ async def get_plugin_list_for_admin(cls) -> List[dict]:
+ """
+ 获取插件列表(供Web UI使用)
+ """
+ load_plugins = nb_plugin.get_loaded_plugins()
+ load_plugins = [p.name for p in load_plugins]
+ plugin_list = [p.dict(exclude={'status'}) for p in cls.plugins.values()]
+ for plugin in plugin_list:
+ plugin['matchers'].sort(key=lambda x: x['pm_priority'])
+ plugin['isLoad'] = plugin['module_name'] in load_plugins
+ plugin['status'] = await PluginPermission.filter(name=plugin['module_name'], status=True).exists()
+ plugin_list.sort(key=lambda x: (x['isLoad'], x['status'], -x['priority']), reverse=True)
+ return plugin_list
+
+
+@DRIVER.on_bot_connect
+async def _():
+ await PluginManager.init()
+
+
+@run_preprocessor
+async def _(event: MessageEvent, matcher: Matcher):
+ if event.user_id in SUPERUSERS:
+ return
+ if not matcher.plugin_name or matcher.plugin_name in HIDDEN_PLUGINS:
+ return
+ if isinstance(event, PrivateMessageEvent):
+ session_id = event.user_id
+ session_type = 'user'
+ elif isinstance(event, GroupMessageEvent):
+ session_id = event.group_id
+ session_type = 'group'
+ else:
+ return
+
+ # 权限检查
+ perm = await PluginPermission.get_or_none(name=matcher.plugin_name, session_id=session_id,
+ session_type=session_type)
+ if not perm:
+ return
+ if not perm.status:
+ raise IgnoredException('插件使用权限已禁用')
+ if isinstance(event, GroupMessageEvent) and event.user_id in perm.ban:
+ raise IgnoredException('用户被禁止使用该插件')
+
+ # 命令调用统计
+ if matcher.plugin_name in PluginManager.plugins and 'pm_name' in matcher.state:
+ if matcher_info := list(filter(lambda x: x.pm_name == matcher.state['pm_name'],
+ PluginManager.plugins[matcher.plugin_name].matchers)):
+ matcher_info = matcher_info[0]
+ await PluginStatistics.create(plugin_name=matcher.plugin_name,
+ matcher_name=matcher_info.pm_name,
+ matcher_usage=matcher_info.pm_usage,
+ group_id=event.group_id if isinstance(event, GroupMessageEvent) else None,
+ user_id=event.user_id,
+ message_type=session_type,
+ time=datetime.datetime.now())
diff --git a/LittlePaimon/config/plugin/model.py b/LittlePaimon/config/plugin/model.py
new file mode 100644
index 0000000..c491428
--- /dev/null
+++ b/LittlePaimon/config/plugin/model.py
@@ -0,0 +1,35 @@
+from typing import Optional, List
+
+from pydantic import BaseModel
+
+
+class MatcherInfo(BaseModel):
+ pm_name: str
+ """命令名称"""
+ pm_description: Optional[str]
+ """命令描述"""
+ pm_usage: Optional[str]
+ """命令用法"""
+ pm_priority: int = 99
+ """命令优先级"""
+ pm_show: bool = True
+ """是否展示"""
+
+
+class PluginInfo(BaseModel):
+ name: str
+ """插件名称"""
+ module_name: str
+ """插件模块名称"""
+ description: Optional[str]
+ """插件描述"""
+ usage: Optional[str]
+ """插件用法"""
+ status: Optional[bool]
+ """插件状态(无用项)"""
+ show: bool = True
+ """是否展示"""
+ priority: int = 99
+ """展示优先级"""
+ matchers: Optional[List[MatcherInfo]] = []
+ """命令列表"""
diff --git a/LittlePaimon/database/__init__.py b/LittlePaimon/database/__init__.py
index fe1b711..73ca8e9 100644
--- a/LittlePaimon/database/__init__.py
+++ b/LittlePaimon/database/__init__.py
@@ -1,27 +1,29 @@
+import shutil
from pathlib import Path
-from typing import List, Optional, Union
from tortoise import Tortoise
from nonebot.log import logger
-from LittlePaimon.config import GENSHIN_DB_PATH, SUB_DB_PATH, GENSHIN_VOICE_DB_PATH, MANAGER_DB_PATH, LEARNING_CHAT_DB_PATH
-
+from LittlePaimon.utils import scheduler
+from LittlePaimon.config import GENSHIN_DB_PATH, SUB_DB_PATH, GENSHIN_VOICE_DB_PATH, MANAGER_DB_PATH, \
+ LEARNING_CHAT_DB_PATH, YSC_TEMP_IMG_PATH
+from .models import *
DATABASE = {
"connections": {
- "genshin": {
- "engine": "tortoise.backends.sqlite",
+ "genshin": {
+ "engine": "tortoise.backends.sqlite",
"credentials": {"file_path": GENSHIN_DB_PATH},
},
- "subscription": {
- "engine": "tortoise.backends.sqlite",
+ "subscription": {
+ "engine": "tortoise.backends.sqlite",
"credentials": {"file_path": SUB_DB_PATH},
},
'genshin_voice': {
- "engine": "tortoise.backends.sqlite",
+ "engine": "tortoise.backends.sqlite",
"credentials": {"file_path": GENSHIN_VOICE_DB_PATH},
},
- 'manager': {
- "engine": "tortoise.backends.sqlite",
+ 'manager': {
+ "engine": "tortoise.backends.sqlite",
"credentials": {"file_path": MANAGER_DB_PATH},
},
'learning_chat': {
@@ -29,21 +31,24 @@ DATABASE = {
"credentials": {"file_path": LEARNING_CHAT_DB_PATH},
},
},
- "apps": {
- "genshin": {
- "models": ['LittlePaimon.database.models.player_info', 'LittlePaimon.database.models.abyss_info', 'LittlePaimon.database.models.character', 'LittlePaimon.database.models.cookie'],
+ "apps": {
+ "genshin": {
+ "models": ['LittlePaimon.database.models.player_info',
+ 'LittlePaimon.database.models.abyss_info',
+ 'LittlePaimon.database.models.character',
+ 'LittlePaimon.database.models.cookie'],
"default_connection": "genshin",
},
- "subscription": {
- "models": ['LittlePaimon.database.models.subscription'],
+ "subscription": {
+ "models": ['LittlePaimon.database.models.subscription'],
"default_connection": "subscription",
},
"genshin_voice": {
- "models": ['LittlePaimon.database.models.genshin_voice'],
+ "models": ['LittlePaimon.database.models.genshin_voice'],
"default_connection": "genshin_voice",
},
- "manager": {
- "models": ['LittlePaimon.database.models.manager'],
+ "manager": {
+ "models": ['LittlePaimon.database.models.manager'],
"default_connection": "manager",
},
"learning_chat": {
@@ -52,38 +57,23 @@ DATABASE = {
}
},
}
-# DATABASE = [
-# {
-# 'db_url': f'sqlite://{GENSHIN_DB_PATH}',
-# 'models': ['LittlePaimon.database.models.player_info', 'LittlePaimon.database.models.abyss_info', 'LittlePaimon.database.models.character', 'LittlePaimon.database.models.cookie'],
-# },
-# {
-# 'db_url': f'sqlite://{SUB_DB_PATH}',
-# 'models': ['LittlePaimon.database.models.subscription'],
-# },
-# {
-# 'db_url': f'sqlite://{GENSHIN_VOICE_DB_PATH}',
-# 'models': ['LittlePaimon.database.models.genshin_voice'],
-# },
-# {
-# 'db_url': f'sqlite://{MANAGER_DB_PATH}',
-# 'models': ['LittlePaimon.database.models.manager'],
-# },
-# {
-# 'db_url': f'sqlite://{LEARNING_CHAT_DB_PATH}',
-# 'models': ['LittlePaimon.database.models.learning_chat'],
-# },
-# ]
-# def register_database(db_path: Optional[Union[str, Path]], models: List[Union[str, Path]]):
-# """
-# 注册数据库
-# """
-# DATABASE.append({
-# 'db_url': f'sqlite://{db_path}',
-# 'models': models,
-# })
+def register_database(db_name: str, models: List[Union[str, Path]], db_path: Optional[Union[str, Path]]):
+ """
+ 注册数据库
+ """
+ if db_name in DATABASE['connections'] and db_name in DATABASE['apps']:
+ DATABASE['apps'][db_name]['models'].extend(models)
+ else:
+ DATABASE['connections'][db_name] = {
+ "engine": "tortoise.backends.sqlite",
+ "credentials": {"file_path": db_path},
+ }
+ DATABASE['apps'][db_name] = {
+ "models": models,
+ "default_connection": db_name,
+ }
async def connect():
@@ -91,11 +81,6 @@ async def connect():
建立数据库连接
"""
try:
- # for db in DATABASE:
- # await Tortoise.init(
- # db_url=db['db_url'],
- # modules={'models': db['models']},
- # )
await Tortoise.init(DATABASE)
await Tortoise.generate_schemas()
logger.opt(colors=True).success("[数据库]连接成功")
@@ -110,3 +95,29 @@ async def disconnect():
"""
await Tortoise.close_connections()
logger.opt(colors=True).success("[数据库]连接已断开")
+
+
+@scheduler.scheduled_job('cron', hour=0, minute=0, misfire_grace_time=10)
+async def daily_reset():
+ """
+ 重置数据库相关设置
+ """
+ now = datetime.datetime.now()
+
+ logger.info('原神实时便签', '重置每日提醒次数限制')
+ await DailyNoteSub.all().update(today_remind_num=0)
+
+ logger.info('原神Cookie', '清空每日Cookie缓存和限制')
+ await CookieCache.all().delete()
+ await PublicCookie.filter(status=2).update(status=1)
+
+ logger.info('功能调用统计', '清除超过一个月的统计数据')
+ await PluginStatistics.filter(time__lt=now - datetime.timedelta(days=30)).delete()
+
+ if now.weekday() == 0:
+ logger.info('原神猜语音', '清空每周排行榜')
+ await GuessVoiceRank.all().delete()
+
+ if YSC_TEMP_IMG_PATH.exists():
+ shutil.rmtree(YSC_TEMP_IMG_PATH)
+ YSC_TEMP_IMG_PATH.mkdir(parents=True, exist_ok=True)
diff --git a/LittlePaimon/database/models/character.py b/LittlePaimon/database/models/character.py
index 8912b67..53b9129 100644
--- a/LittlePaimon/database/models/character.py
+++ b/LittlePaimon/database/models/character.py
@@ -1,8 +1,7 @@
import datetime
import re
-from typing import Optional, List, Dict, Iterator
+from typing import Optional, Dict, Iterator
-from pydantic import BaseModel
from tortoise import fields
from tortoise.models import Model
diff --git a/LittlePaimon/database/models/subscription.py b/LittlePaimon/database/models/subscription.py
index 3ba0202..a1b514a 100644
--- a/LittlePaimon/database/models/subscription.py
+++ b/LittlePaimon/database/models/subscription.py
@@ -32,7 +32,7 @@ class DailyNoteSub(Model):
class MihoyoBBSSub(Model):
"""
- 米游社相关订阅
+ 米游社原神签到和米游币获取订阅
"""
id = fields.IntField(pk=True, generated=True, auto_increment=True)
user_id: int = fields.IntField()
@@ -49,6 +49,25 @@ class MihoyoBBSSub(Model):
table_description = '米游社订阅'
+class MihoyoBBSPostSub(Model):
+ """
+ 米游社用户帖子订阅
+ """
+ id = fields.IntField(pk=True, generated=True, auto_increment=True)
+ mys_id: str = fields.CharField(max_length=255)
+ """订阅的米游社用户id"""
+ session_id: str = fields.CharField(max_length=255)
+ """订阅者的qq号或群号"""
+ session_type: str = fields.CharField(max_length=255, default='private')
+ """订阅者的群号"""
+ last_post_id: str = fields.CharField(max_length=255, null=True)
+ """上次推送的帖子id"""
+
+ class Meta:
+ table = 'mhy_bbs_user_sub'
+ table_description = '米游社用户帖子订阅'
+
+
class CloudGenshinSub(Model):
"""
云原神
diff --git a/LittlePaimon/manager/database_manager/__init__.py b/LittlePaimon/manager/database_manager/__init__.py
deleted file mode 100644
index 07bf49c..0000000
--- a/LittlePaimon/manager/database_manager/__init__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-import datetime
-from LittlePaimon.config import YSC_TEMP_IMG_PATH
-from LittlePaimon.utils import scheduler, logger
-from LittlePaimon.database.models import GuessVoiceRank, PluginStatistics, DailyNoteSub, CookieCache, PublicCookie
-
-
-@scheduler.scheduled_job('cron', hour=0, minute=0, misfire_grace_time=10)
-async def _():
- now = datetime.datetime.now()
-
- logger.info('原神实时便签', '重置每日提醒次数限制')
- await DailyNoteSub.all().update(today_remind_num=0)
-
- logger.info('原神Cookie', '清空每日Cookie缓存和限制')
- await CookieCache.all().delete()
- await PublicCookie.filter(status=2).update(status=1)
-
- logger.info('功能调用统计', '清除超过一个月的统计数据')
- await PluginStatistics.filter(time__lt=now - datetime.timedelta(days=30)).delete()
-
- if now.weekday() == 0:
- logger.info('原神猜语音', '清空每周排行榜')
- await GuessVoiceRank.all().delete()
-
- if YSC_TEMP_IMG_PATH.exists():
- YSC_TEMP_IMG_PATH.unlink()
- YSC_TEMP_IMG_PATH.mkdir(parents=True, exist_ok=True)
diff --git a/LittlePaimon/manager/plugin_manager/manager.py b/LittlePaimon/manager/plugin_manager/manager.py
deleted file mode 100644
index 498a7be..0000000
--- a/LittlePaimon/manager/plugin_manager/manager.py
+++ /dev/null
@@ -1,134 +0,0 @@
-import asyncio
-from typing import Dict, List
-
-from nonebot import plugin as nb_plugin
-from nonebot import get_bot
-from LittlePaimon.utils import logger
-from LittlePaimon.config.path import PLUGIN_CONFIG, PAIMON_CONFIG
-from LittlePaimon.utils.files import load_yaml, save_yaml
-from LittlePaimon.database.models import PluginPermission
-from .model import MatcherInfo, PluginInfo, Config
-
-hidden_plugins = [
- 'LittlePaimon',
- 'config',
- 'nonebot_plugin_apscheduler',
- 'nonebot_plugin_gocqhttp',
- 'nonebot_plugin_htmlrender',
- 'nonebot_plugin_imageutils',
- 'plugin_manager',
- 'database_manager',
- 'admin',
- 'NoticeAndRequest'
-]
-
-
-class PluginManager:
- def __init__(self):
- self.plugin_config_path = PLUGIN_CONFIG
- self.config_path = PAIMON_CONFIG
- self.data: Dict[str, PluginInfo] = {}
- self.config: Config = Config()
- self.load()
-
- def save(self):
- """
- 保存数据
- """
- save_yaml(self.config.dict(by_alias=True), self.config_path)
- for name, plugin in self.data.items():
- save_yaml(plugin.dict(), self.plugin_config_path / f'{name}.yml')
-
- def load(self):
- """
- 读取配置项以及插件数据
- """
- if self.config_path.exists():
- self.config = Config.parse_obj(load_yaml(self.config_path))
- # else:
- # logger.warning('插件管理器', '无法读取配置文件,请检查是否已将config/paimon_config_default.yml复制为config/paimon_config.yml')
- for file in self.plugin_config_path.iterdir():
- if file.is_file() and file.name.endswith('.yml'):
- data = load_yaml(file)
- self.data[file.name.replace('.yml', '')] = PluginInfo.parse_obj(data)
-
- def set_config(self, config_name: str, value: any):
- """
- 设置派蒙配置项
- :param config_name: 配置名
- :param value: 新配置值
- """
- if config_name not in self.config.dict(by_alias=True).keys():
- return f'没有配置项为{config_name}'
- if '启用' in config_name or '开关' in config_name or config_name in {'自动接受好友请求', '自动接受群邀请'}:
- if value not in ['开', '关', 'true', 'false', 'on', 'off']:
- return '参数错误'
- value = value in ['开', 'true', 'on']
- elif config_name != 'CookieWeb地址' and not value.isdigit():
- return '配置项不合法,必须为数字'
- temp = self.config.dict(by_alias=True)
- temp[config_name] = value
- self.config = Config.parse_obj(temp)
- self.save()
- return f'成功设置{config_name}为{value}'
-
- async def init_plugins(self):
- plugin_list = nb_plugin.get_loaded_plugins()
- group_list = await get_bot().get_group_list()
- user_list = await get_bot().get_friend_list()
- for plugin in plugin_list:
- if plugin.name not in hidden_plugins:
- await asyncio.gather(*[PluginPermission.update_or_create(name=plugin.name, session_id=group['group_id'],
- session_type='group') for group in group_list])
- await asyncio.gather(*[PluginPermission.update_or_create(name=plugin.name, session_id=user['user_id'],
- session_type='user') for user in user_list])
- if plugin.name not in hidden_plugins:
- if plugin.name not in self.data:
- if metadata := plugin.metadata:
- self.data[plugin.name] = PluginInfo.parse_obj({
- 'name': metadata.name,
- 'module_name': plugin.name,
- 'description': metadata.description,
- 'usage': metadata.usage,
- 'show': metadata.extra.get('show', True),
- 'priority': metadata.extra.get('priority', 99),
- 'cooldown': metadata.extra.get('cooldown')
- })
- else:
- self.data[plugin.name] = PluginInfo(name=plugin.name, module_name=plugin.name)
- matchers = plugin.matcher
- for matcher in matchers:
- if matcher._default_state:
- matcher_info = MatcherInfo.parse_obj(matcher._default_state)
- if self.data[plugin.name].matchers is not None and matcher_info.pm_name not in [m.pm_name for m in self.data[plugin.name].matchers]:
- self.data[plugin.name].matchers.append(matcher_info)
- self.save()
- logger.success('插件管理器', '初始化完成')
-
- async def get_plugin_list(self, message_type: str, session_id: int) -> List[PluginInfo]:
- load_plugins = nb_plugin.get_loaded_plugins()
- load_plugins = [p.name for p in load_plugins]
- plugin_list = sorted(self.data.values(), key=lambda x: x.priority).copy()
- plugin_list = [p for p in plugin_list if p.show and p.module_name in load_plugins]
- for plugin in plugin_list:
- if message_type != 'guild':
- plugin_info = await PluginPermission.get_or_none(name=plugin.module_name, session_id=session_id,
- session_type=message_type)
- plugin.status = True if plugin_info is None else plugin_info.status
- else:
- plugin.status = True
- if plugin.matchers:
- plugin.matchers.sort(key=lambda x: x.pm_priority)
- plugin.matchers = [m for m in plugin.matchers if m.pm_show and m.pm_usage]
- return plugin_list
-
- async def get_plugin_list_for_admin(self) -> List[dict]:
- load_plugins = nb_plugin.get_loaded_plugins()
- load_plugins = [p.name for p in load_plugins]
- plugin_list = [p.dict() for p in self.data.values()]
- for plugin in plugin_list:
- plugin['matchers'].sort(key=lambda x: x['pm_priority'])
- plugin['isLoad'] = plugin['module_name'] in load_plugins
- plugin['status'] = await PluginPermission.filter(name=plugin['module_name'], status=True).exists()
- plugin_list.sort(key=lambda x: (x['isLoad'], x['status'], -x['priority']), reverse=True)
- return plugin_list
diff --git a/LittlePaimon/plugins/Genshin_Calendar/__init__.py b/LittlePaimon/plugins/Genshin_Calendar/__init__.py
index dd7f528..bf36a05 100644
--- a/LittlePaimon/plugins/Genshin_Calendar/__init__.py
+++ b/LittlePaimon/plugins/Genshin_Calendar/__init__.py
@@ -3,7 +3,7 @@ from nonebot.adapters.onebot.v11 import MessageEvent, MessageSegment
from nonebot.plugin import PluginMetadata
from LittlePaimon import DRIVER, SUPERUSERS
-from LittlePaimon.database.models import GeneralSub
+from LittlePaimon.database import GeneralSub
from LittlePaimon.utils import scheduler, logger
from LittlePaimon.utils.message import CommandObjectID, CommandSwitch, CommandTime
from .generate import *
diff --git a/LittlePaimon/plugins/Genshin_Calendar/generate.py b/LittlePaimon/plugins/Genshin_Calendar/generate.py
index c675008..00d732d 100644
--- a/LittlePaimon/plugins/Genshin_Calendar/generate.py
+++ b/LittlePaimon/plugins/Genshin_Calendar/generate.py
@@ -1,10 +1,9 @@
-import jinja2
-from nonebot import require
+from os import getcwd
-require("nonebot_plugin_htmlrender")
-from nonebot_plugin_htmlrender import html_to_pic
+import jinja2
from .event import *
from datetime import datetime, timedelta
+from LittlePaimon.utils.brower import get_new_page
body = []
weeks = []
@@ -22,10 +21,10 @@ async def generate_day_schedule(server='cn'):
d2 = (t + timedelta(days=i)).strftime("%Y-%m-%d")
""" 分割 [年|月|日]"""
date_full = str(d2).split("-")
- current = 'm-events-calendar__table-header-current' if t.strftime("%d") == date_full[2] else ""
+ current = 'm-events-calendar__table-header-current' if t.strftime("%d") == date_full[2] else ''
date = re.search('0\d+', date_full[1]).group(0).replace('0', '') if re.search('0\d+', date_full[1]) else \
- date_full[1]
+ date_full[1]
week = datetime(int(date_full[0]), int(date_full[1]), int(date_full[2])).isoweekday()
@@ -51,4 +50,8 @@ async def generate_day_schedule(server='cn'):
content = await template.render_async(body=body, css_path=template_path, week=weeks)
- return await html_to_pic(content, wait=0, viewport={"width": 600, "height": 10})
+ async with get_new_page(viewport={'width': 600, 'height': 10}) as page:
+ await page.goto(f'file://{getcwd()}')
+ await page.set_content(content, wait_until='networkidle')
+ await page.wait_for_timeout(0.2)
+ return await page.screenshot(full_page=True)
diff --git a/LittlePaimon/plugins/Genshin_Calendar/template/calendar.html b/LittlePaimon/plugins/Genshin_Calendar/template/calendar.html
index 2130624..ed2e424 100644
--- a/LittlePaimon/plugins/Genshin_Calendar/template/calendar.html
+++ b/LittlePaimon/plugins/Genshin_Calendar/template/calendar.html
@@ -1,4 +1,4 @@
-
+
diff --git a/LittlePaimon/plugins/Genshin_Voice/__init__.py b/LittlePaimon/plugins/Genshin_Voice/__init__.py
index ad13833..f7591f5 100644
--- a/LittlePaimon/plugins/Genshin_Voice/__init__.py
+++ b/LittlePaimon/plugins/Genshin_Voice/__init__.py
@@ -8,10 +8,10 @@ from nonebot.params import CommandArg
from nonebot.permission import SUPERUSER
from nonebot.plugin import PluginMetadata
+from LittlePaimon.config import config
from LittlePaimon.utils.message import CommandCharacter, CommandLang, MessageBuild
from LittlePaimon.utils.alias import get_match_alias
-from LittlePaimon.database.models import GenshinVoice
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
+from LittlePaimon.database import GenshinVoice
from .handler import GuessVoice, get_character_voice, get_rank, get_voice_list
from .resources import update_voice_resources
@@ -60,9 +60,9 @@ async def _(event: GroupMessageEvent, msg: Message = CommandArg(), lang=CommandL
result = await get_rank(event.group_id)
await guess_voice.finish(result)
else:
- game = GuessVoice(event.group_id, pm.config.guess_voice_time, lang)
+ game = GuessVoice(event.group_id, config.guess_voice_time, lang)
result = await game.start()
- await guess_voice.send(f'即将发送一段语音,将在{pm.config.guess_voice_time}秒后公布答案')
+ await guess_voice.send(f'即将发送一段语音,将在{config.guess_voice_time}秒后公布答案')
try:
await guess_voice.finish(result)
except ActionFailed:
diff --git a/LittlePaimon/plugins/Genshin_Voice/draw.py b/LittlePaimon/plugins/Genshin_Voice/draw.py
index 454a313..424595b 100644
--- a/LittlePaimon/plugins/Genshin_Voice/draw.py
+++ b/LittlePaimon/plugins/Genshin_Voice/draw.py
@@ -1,7 +1,7 @@
import asyncio
from typing import List
from LittlePaimon.config import RESOURCE_BASE_PATH
-from LittlePaimon.database.models import GenshinVoice
+from LittlePaimon.database import GenshinVoice
from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.message import MessageBuild
from LittlePaimon.utils.image import PMImage, font_manager as fm
diff --git a/LittlePaimon/plugins/Genshin_Voice/handler.py b/LittlePaimon/plugins/Genshin_Voice/handler.py
index 141c042..5148f9b 100644
--- a/LittlePaimon/plugins/Genshin_Voice/handler.py
+++ b/LittlePaimon/plugins/Genshin_Voice/handler.py
@@ -5,7 +5,7 @@ from nonebot import get_bot, on_regex
from nonebot.adapters.onebot.v11 import GroupMessageEvent, Message, MessageSegment
from nonebot.rule import Rule
-from LittlePaimon.database.models import GenshinVoice, GuessVoiceRank
+from LittlePaimon.database import GenshinVoice, GuessVoiceRank
from LittlePaimon.utils import scheduler, logger
from LittlePaimon.utils.alias import get_alias_by_name
from .draw import draw_voice_list
diff --git a/LittlePaimon/plugins/Genshin_Voice/resources.py b/LittlePaimon/plugins/Genshin_Voice/resources.py
index 2bf3e28..8f777f2 100644
--- a/LittlePaimon/plugins/Genshin_Voice/resources.py
+++ b/LittlePaimon/plugins/Genshin_Voice/resources.py
@@ -4,7 +4,7 @@ from typing import Dict, Optional
from lxml import etree
-from LittlePaimon.database.models import GenshinVoice
+from LittlePaimon.database import GenshinVoice
from LittlePaimon.utils import aiorequests
from LittlePaimon.utils import logger
diff --git a/LittlePaimon/plugins/NoticeAndRequest/__init__.py b/LittlePaimon/plugins/NoticeAndRequest/__init__.py
index 6e8e0f3..5e7b866 100644
--- a/LittlePaimon/plugins/NoticeAndRequest/__init__.py
+++ b/LittlePaimon/plugins/NoticeAndRequest/__init__.py
@@ -14,9 +14,9 @@ from nonebot.adapters.onebot.v11 import Bot, Message, MessageEvent, PrivateMessa
from nonebot.typing import T_State
from LittlePaimon import NICKNAME, SUPERUSERS
+from LittlePaimon.config import config as bot_config
from LittlePaimon.utils import scheduler, logger
from LittlePaimon.utils.message import format_message, replace_all
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
from .config import config
requests_list: Dict[str, Dict[str, Dict[str, any]]] = {
@@ -27,7 +27,7 @@ done: Dict[str, datetime.datetime] = {} # 防止gocq重复上报事件导致多
async def InviteRule(event: RequestEvent) -> bool:
- if not pm.config.request_event:
+ if not bot_config.request_event:
return False
if isinstance(event, FriendRequestEvent):
return f'add_friend_{event.user_id}' not in done.keys()
@@ -37,7 +37,7 @@ async def InviteRule(event: RequestEvent) -> bool:
async def IncreaseRule(event: NoticeEvent) -> bool:
- if not pm.config.notice_event:
+ if not bot_config.notice_event:
return False
if isinstance(event, FriendAddNoticeEvent):
return f'new_friend_{event.user_id}' not in done.keys()
@@ -108,7 +108,7 @@ async def _(bot: Bot, event: FriendRequestEvent):
done[f'add_friend_{event.user_id}'] = datetime.datetime.now()
user_info = await bot.get_stranger_info(user_id=event.user_id)
base_msg = f'{user_info["nickname"]}({event.user_id})请求添加好友,验证信息为"{event.comment or "无"}"'
- if pm.config.auto_add_friend:
+ if bot_config.auto_add_friend:
await asyncio.sleep(random.randint(10, 20))
await bot.send_private_msg(user_id=SUPERUSERS[0], message=f'{base_msg},已自动同意')
await event.approve(bot)
@@ -125,7 +125,7 @@ async def _(bot: Bot, event: GroupRequestEvent):
user_info = await bot.get_stranger_info(user_id=event.user_id)
group_info = await bot.get_group_info(group_id=event.group_id)
base_msg = f'{user_info["nickname"]}({event.user_id})邀请{NICKNAME}加入群{group_info["group_name"]}({event.group_id})'
- if pm.config.auto_add_group or event.user_id in SUPERUSERS:
+ if bot_config.auto_add_group or event.user_id in SUPERUSERS:
await asyncio.sleep(random.randint(10, 20))
await bot.send_private_msg(user_id=SUPERUSERS[0], message=f'{base_msg},已自动同意')
await event.approve(bot)
diff --git a/LittlePaimon/plugins/Paimon_Abyss/abyss_statistics.py b/LittlePaimon/plugins/Paimon_Abyss/abyss_statistics.py
index 1751724..ea53dc8 100644
--- a/LittlePaimon/plugins/Paimon_Abyss/abyss_statistics.py
+++ b/LittlePaimon/plugins/Paimon_Abyss/abyss_statistics.py
@@ -4,7 +4,7 @@ from collections import defaultdict
import pytz
from nonebot import get_bot
-from LittlePaimon.database.models import AbyssInfo
+from LittlePaimon.database import AbyssInfo
from LittlePaimon.utils import aiorequests
from LittlePaimon.utils.files import load_image
from LittlePaimon.config import RESOURCE_BASE_PATH
diff --git a/LittlePaimon/plugins/Paimon_Abyss/draw_abyss.py b/LittlePaimon/plugins/Paimon_Abyss/draw_abyss.py
index 9288a06..b020acf 100644
--- a/LittlePaimon/plugins/Paimon_Abyss/draw_abyss.py
+++ b/LittlePaimon/plugins/Paimon_Abyss/draw_abyss.py
@@ -5,7 +5,7 @@ from LittlePaimon.config import RESOURCE_BASE_PATH
from LittlePaimon.utils.image import PMImage, font_manager as fm
from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.message import MessageBuild
-from LittlePaimon.database.models import AbyssInfo
+from LittlePaimon.database import AbyssInfo
def datetime_to_cn(time: datetime.datetime) -> str:
diff --git a/LittlePaimon/plugins/Paimon_Abyss/youchuang/draw.py b/LittlePaimon/plugins/Paimon_Abyss/youchuang/draw.py
index ebda6f6..fa8f233 100644
--- a/LittlePaimon/plugins/Paimon_Abyss/youchuang/draw.py
+++ b/LittlePaimon/plugins/Paimon_Abyss/youchuang/draw.py
@@ -1,7 +1,7 @@
import asyncio
from typing import List
-from LittlePaimon.database.models import Character, LastQuery
+from LittlePaimon.database import Character, LastQuery
from LittlePaimon.config import RESOURCE_BASE_PATH
from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.alias import get_chara_icon
diff --git a/LittlePaimon/plugins/Paimon_Autobbs/__init__.py b/LittlePaimon/plugins/Paimon_Autobbs/__init__.py
index 4211ab2..eefb946 100644
--- a/LittlePaimon/plugins/Paimon_Autobbs/__init__.py
+++ b/LittlePaimon/plugins/Paimon_Autobbs/__init__.py
@@ -6,7 +6,7 @@ from nonebot.permission import SUPERUSER
from nonebot.adapters.onebot.v11 import GroupMessageEvent, PrivateMessageEvent
from nonebot.plugin import PluginMetadata
-from LittlePaimon.database.models import MihoyoBBSSub, PrivateCookie
+from LittlePaimon.database import MihoyoBBSSub, PrivateCookie
from LittlePaimon.utils import logger
from LittlePaimon.utils.message import CommandUID, CommandSwitch
from .coin_handle import mhy_bbs_coin, bbs_auto_coin
diff --git a/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py b/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py
index 1815739..d03141c 100644
--- a/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py
+++ b/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py
@@ -6,11 +6,10 @@ from collections import defaultdict
from typing import Tuple
from nonebot import get_bot
-from LittlePaimon.database.models import PrivateCookie, MihoyoBBSSub, LastQuery
-from LittlePaimon.utils import logger, aiorequests
-from LittlePaimon.utils import scheduler
+from LittlePaimon.config import config
+from LittlePaimon.database import PrivateCookie, MihoyoBBSSub, LastQuery
+from LittlePaimon.utils import logger, aiorequests, scheduler
from LittlePaimon.utils.api import random_text, random_hex, get_old_version_ds, get_ds
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
# 米游社的API列表
bbs_Cookieurl = 'https://webapi.account.mihoyo.com/Api/cookie_accountinfo_by_loginticket?login_ticket={}'
@@ -301,7 +300,7 @@ async def mhy_bbs_coin(user_id: str, uid: str) -> str:
return msg if result else f'UID{uid}{msg}'
-@scheduler.scheduled_job('cron', hour=pm.config.auto_myb_hour, minute=pm.config.auto_myb_minute, misfire_grace_time=10)
+@scheduler.scheduled_job('cron', hour=config.auto_myb_hour, minute=config.auto_myb_minute, misfire_grace_time=10)
async def _():
await bbs_auto_coin()
@@ -310,7 +309,7 @@ async def bbs_auto_coin():
"""
指定时间,执行所有米游币获取订阅任务, 并将结果分群绘图发送
"""
- if not pm.config.auto_myb_enable:
+ if not config.auto_myb_enable:
return
t = time.time()
subs = await MihoyoBBSSub.filter(sub_event='米游币自动获取').all()
diff --git a/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py b/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py
index debbd9d..3e759d2 100644
--- a/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py
+++ b/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py
@@ -7,10 +7,10 @@ from nonebot import get_bot
from collections import defaultdict
from typing import Tuple, Dict, Any, Optional, Union
from LittlePaimon import DRIVER
-from LittlePaimon.database.models import MihoyoBBSSub, LastQuery, PrivateCookie
+from LittlePaimon.config import config
+from LittlePaimon.database import MihoyoBBSSub, LastQuery, PrivateCookie
from LittlePaimon.utils import logger, scheduler, aiorequests
from LittlePaimon.utils.api import get_mihoyo_private_data, get_sign_reward_list, mihoyo_sign_headers, check_retcode
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
from .draw import SignResult, draw_result
SIGN_ACTION_API = 'https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign'
@@ -116,7 +116,7 @@ async def mhy_bbs_sign(user_id: str, uid: str) -> Tuple[SignResult, str]:
return SignResult.FAIL, f'{uid}签到失败,无法绕过验证码'
-@scheduler.scheduled_job('cron', hour=pm.config.auto_sign_hour, minute=pm.config.auto_sign_minute,
+@scheduler.scheduled_job('cron', hour=config.auto_sign_hour, minute=config.auto_sign_minute,
misfire_grace_time=10)
async def _():
await bbs_auto_sign()
@@ -126,7 +126,7 @@ async def bbs_auto_sign():
"""
指定时间,执行所有米游社原神签到任务, 并将结果分群绘图发送
"""
- if not pm.config.auto_sign_enable:
+ if not config.auto_sign_enable:
return
t = time.time() # 计时用
subs = await MihoyoBBSSub.filter(sub_event='米游社原神签到').all()
diff --git a/LittlePaimon/plugins/Paimon_Bind/__init__.py b/LittlePaimon/plugins/Paimon_Bind/__init__.py
index 1038998..98f186a 100644
--- a/LittlePaimon/plugins/Paimon_Bind/__init__.py
+++ b/LittlePaimon/plugins/Paimon_Bind/__init__.py
@@ -10,11 +10,11 @@ from nonebot.plugin import PluginMetadata
from nonebot.typing import T_State
from LittlePaimon import NICKNAME
-from LittlePaimon.database.models import LastQuery, PrivateCookie, PublicCookie, Character, PlayerInfo, DailyNoteSub, MihoyoBBSSub
+from LittlePaimon.config import config
+from LittlePaimon.database import LastQuery, PrivateCookie, PublicCookie, Character, PlayerInfo, DailyNoteSub, MihoyoBBSSub
from LittlePaimon.utils import logger
from LittlePaimon.utils.api import get_bind_game_info, get_stoken_by_cookie
from LittlePaimon.utils.message import recall_message
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
__plugin_meta__ = PluginMetadata(
name='原神绑定',
@@ -102,9 +102,9 @@ async def _(event: MessageEvent, msg: Message = CommandArg()):
else:
logger.info('原神Cookie', '', {'用户': str(event.user_id)}, '绑定失败,cookie已失效', False)
await ysb.finish('这个cookie无效哦,请确认是否正确\n获取cookie的教程:\ndocs.qq.com/doc/DQ3JLWk1vQVllZ2Z1\n', at_sender=True)
- elif pm.config.CookieWeb_enable:
+ elif config.CookieWeb_enable:
await ysb.finish(
- f'获取cookie的教程:\ndocs.qq.com/doc/DQ3JLWk1vQVllZ2Z1\n获取后,使用[ysb cookie]指令绑定或前往{pm.config.CookieWeb_url}网页添加绑定',
+ f'获取cookie的教程:\ndocs.qq.com/doc/DQ3JLWk1vQVllZ2Z1\n获取后,使用[ysb cookie]指令绑定或前往{config.CookieWeb_url}网页添加绑定',
at_sender=True)
else:
await ysb.finish('获取cookie的教程:\ndocs.qq.com/doc/DQ3JLWk1vQVllZ2Z1\n获取后,使用[ysb cookie]指令绑定',
diff --git a/LittlePaimon/plugins/Paimon_CloudGenshin/__init__.py b/LittlePaimon/plugins/Paimon_CloudGenshin/__init__.py
index 31ba882..6c8992b 100644
--- a/LittlePaimon/plugins/Paimon_CloudGenshin/__init__.py
+++ b/LittlePaimon/plugins/Paimon_CloudGenshin/__init__.py
@@ -6,7 +6,7 @@ from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent
from nonebot.plugin import PluginMetadata
from nonebot.typing import T_State
-from LittlePaimon.database.models import CloudGenshinSub
+from LittlePaimon.database import CloudGenshinSub
from .handler import get_cloud_genshin_info
diff --git a/LittlePaimon/plugins/Paimon_CloudGenshin/handler.py b/LittlePaimon/plugins/Paimon_CloudGenshin/handler.py
index 2fb8477..9171c11 100644
--- a/LittlePaimon/plugins/Paimon_CloudGenshin/handler.py
+++ b/LittlePaimon/plugins/Paimon_CloudGenshin/handler.py
@@ -4,9 +4,9 @@ from collections import defaultdict
from nonebot import get_bot
-from LittlePaimon.database.models import CloudGenshinSub
+from LittlePaimon.config import config
+from LittlePaimon.database import CloudGenshinSub
from LittlePaimon.utils import scheduler, logger
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
from .api import get_Info, check_token, get_Notification
@@ -25,9 +25,9 @@ async def get_cloud_genshin_info(user_id: str, uid: str):
f'畅玩卡状态: {card}'
-@scheduler.scheduled_job('cron', hour=pm.config.cloud_genshin_hour, misfire_grace_time=10)
+@scheduler.scheduled_job('cron', hour=config.cloud_genshin_hour, misfire_grace_time=10)
async def _():
- if not pm.config.cloud_genshin_enable:
+ if not config.cloud_genshin_enable:
return
subs = await CloudGenshinSub.all()
if not subs:
diff --git a/LittlePaimon/plugins/Paimon_DailyNote/__init__.py b/LittlePaimon/plugins/Paimon_DailyNote/__init__.py
index 72adfc7..516460a 100644
--- a/LittlePaimon/plugins/Paimon_DailyNote/__init__.py
+++ b/LittlePaimon/plugins/Paimon_DailyNote/__init__.py
@@ -5,7 +5,7 @@ from nonebot.adapters.onebot.v11 import Message, MessageEvent, GroupMessageEvent
from nonebot.plugin import PluginMetadata
from nonebot.typing import T_State
-from LittlePaimon.database.models import DailyNoteSub
+from LittlePaimon.database import DailyNoteSub
from LittlePaimon.utils import logger
from LittlePaimon.utils.message import CommandPlayer, CommandUID, CommandSwitch
from .handler import SubList, get_subs, handle_ssbq
diff --git a/LittlePaimon/plugins/Paimon_DailyNote/handler.py b/LittlePaimon/plugins/Paimon_DailyNote/handler.py
index d26f128..d68c7d6 100644
--- a/LittlePaimon/plugins/Paimon_DailyNote/handler.py
+++ b/LittlePaimon/plugins/Paimon_DailyNote/handler.py
@@ -9,10 +9,10 @@ from nonebot import get_bot
from nonebot.params import CommandArg, Depends
from nonebot.adapters.onebot.v11 import Message
-from LittlePaimon.database.models import DailyNoteSub, Player
+from LittlePaimon.config import config
+from LittlePaimon.database import DailyNoteSub, Player
from LittlePaimon.utils import logger, scheduler
from LittlePaimon.utils.api import get_mihoyo_private_data
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
from .draw import draw_daily_note_card
@@ -69,12 +69,12 @@ async def handle_ssbq(player: Player):
return f'{player.uid}绘制图片失败,{e}\n'
-@scheduler.scheduled_job('cron', minute=f'*/{pm.config.ssbq_check}', misfire_grace_time=10)
+@scheduler.scheduled_job('cron', minute=f'*/{config.ssbq_check}', misfire_grace_time=10)
async def check_note():
- if not pm.config.ssbq_enable:
+ if not config.ssbq_enable:
return
# 0点到6点间不做检查
- if pm.config.ssbq_begin <= datetime.datetime.now().hour <= pm.config.ssbq_end:
+ if config.ssbq_begin <= datetime.datetime.now().hour <= config.ssbq_end:
return
t = time.time()
try:
diff --git a/LittlePaimon/plugins/Paimon_Gacha/__init__.py b/LittlePaimon/plugins/Paimon_Gacha/__init__.py
index a4dc1a8..ebbe07a 100644
--- a/LittlePaimon/plugins/Paimon_Gacha/__init__.py
+++ b/LittlePaimon/plugins/Paimon_Gacha/__init__.py
@@ -4,8 +4,8 @@ from nonebot import on_command, on_regex
from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent
from nonebot.params import RegexDict, CommandArg
from nonebot.plugin import PluginMetadata
+from LittlePaimon.config import config
from LittlePaimon.utils.tool import freq_limiter
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
from .data_handle import load_user_data
from .draw import draw_gacha_img
@@ -74,13 +74,18 @@ async def _(event: MessageEvent, reGroup: Dict = RegexDict()):
num = reGroup['num']
pool = reGroup['pool']
num = int(num) if num and num.isdigit() else 1
- if num > pm.config.sim_gacha_max:
- await sim_gacha.finish(f'单次最多只能{pm.config.sim_gacha_max}十连哦!')
+ if num > config.sim_gacha_max:
+ await sim_gacha.finish(f'单次最多只能{config.sim_gacha_max}十连哦!')
pool = pool or '角色1'
- result = await draw_gacha_img(event.user_id, pool, num, nickname)
+ try:
+ result = await draw_gacha_img(event.user_id, pool, num, nickname)
+ except IndexError:
+ result = '当前没有可以抽的卡池哦~请等待卡池开放'
+ except Exception as e:
+ result = f'抽卡发生错误:{e}'
if isinstance(event, GroupMessageEvent):
- freq_limiter.start(f'gacha-group{event.group_id}', pm.config.sim_gacha_cd_group)
- freq_limiter.start(f'gacha-group{event.group_id}-{event.user_id}', pm.config.sim_gacha_cd_member)
+ freq_limiter.start(f'gacha-group{event.group_id}', config.sim_gacha_cd_group)
+ freq_limiter.start(f'gacha-group{event.group_id}-{event.user_id}', config.sim_gacha_cd_member)
await sim_gacha.finish(result)
diff --git a/LittlePaimon/plugins/Paimon_Gacha/data_source.py b/LittlePaimon/plugins/Paimon_Gacha/data_source.py
index 2bf74fe..2d171c2 100644
--- a/LittlePaimon/plugins/Paimon_Gacha/data_source.py
+++ b/LittlePaimon/plugins/Paimon_Gacha/data_source.py
@@ -124,14 +124,9 @@ def get_once_data(uid: int, gacha_data: dict):
user_data["抽卡数据"][f"{rank}星出货数"] += 1
if gacha_data['gacha_type'] != 200:
user_data["抽卡数据"][f"{pool_str}池{rank}星下次是否为up"] = not is_up
- if role['item_type'] == '角色':
- item_type = '角色'
- else:
- item_type = '武器'
+ item_type = '角色' if role['item_type'] == '角色' else '武器'
if role['item_name'] not in user_data[f"{item_type}列表"]:
- user_data[f"{item_type}列表"][role['item_name']] = {}
- user_data[f"{item_type}列表"][role['item_name']]['数量'] = 1
- user_data[f"{item_type}列表"][role['item_name']]['出货'] = []
+ user_data[f"{item_type}列表"][role['item_name']] = {'数量': 1, '出货': []}
if rank == 5:
user_data[f"{item_type}列表"][role['item_name']]['星级'] = '★★★★★'
user_data[f"{item_type}列表"][role['item_name']]['出货'].append(
diff --git a/LittlePaimon/plugins/Paimon_Gacha_Log/data_source.py b/LittlePaimon/plugins/Paimon_Gacha_Log/data_source.py
index 06d3456..43d10c0 100644
--- a/LittlePaimon/plugins/Paimon_Gacha_Log/data_source.py
+++ b/LittlePaimon/plugins/Paimon_Gacha_Log/data_source.py
@@ -8,7 +8,7 @@ from nonebot import on_notice
from nonebot.rule import Rule
from nonebot.adapters.onebot.v11 import GroupUploadNoticeEvent, NoticeEvent
from LittlePaimon import __version__
-from LittlePaimon.database.models import PlayerInfo
+from LittlePaimon.database import PlayerInfo
from LittlePaimon.config import GACHA_LOG
from LittlePaimon.utils.api import get_authkey_by_stoken
from LittlePaimon.utils import aiorequests, logger
diff --git a/LittlePaimon/plugins/Paimon_Info/__init__.py b/LittlePaimon/plugins/Paimon_Info/__init__.py
index 0edda4c..25f9374 100644
--- a/LittlePaimon/plugins/Paimon_Info/__init__.py
+++ b/LittlePaimon/plugins/Paimon_Info/__init__.py
@@ -7,7 +7,7 @@ from nonebot.plugin import PluginMetadata
from nonebot.typing import T_State
from LittlePaimon import NICKNAME
-from LittlePaimon.database.models import PlayerAlias
+from LittlePaimon.database import PlayerAlias
from LittlePaimon.config import YSC_TEMP_IMG_PATH
from LittlePaimon.utils import logger
from LittlePaimon.utils.message import CommandPlayer, CommandCharacter, CommandUID
diff --git a/LittlePaimon/plugins/Paimon_Info/damage_cal.py b/LittlePaimon/plugins/Paimon_Info/damage_cal.py
index 1207411..fd3bec3 100644
--- a/LittlePaimon/plugins/Paimon_Info/damage_cal.py
+++ b/LittlePaimon/plugins/Paimon_Info/damage_cal.py
@@ -1,5 +1,5 @@
from copy import deepcopy
-from LittlePaimon.database.models import Character
+from LittlePaimon.database import Character
from .damage_model import common_fix, draw_dmg_pic, udc, get_damage_multipiler, growth_reaction, intensify_reaction
diff --git a/LittlePaimon/plugins/Paimon_Info/damage_model.py b/LittlePaimon/plugins/Paimon_Info/damage_model.py
index dbcfd53..c9f5615 100644
--- a/LittlePaimon/plugins/Paimon_Info/damage_model.py
+++ b/LittlePaimon/plugins/Paimon_Info/damage_model.py
@@ -5,7 +5,7 @@ from LittlePaimon.config.path import JSON_DATA
from LittlePaimon.utils.files import load_json
from LittlePaimon.utils.genshin import GenshinTools
from LittlePaimon.utils.image import PMImage, font_manager
-from LittlePaimon.database.models import Character
+from LittlePaimon.database import Character
def udc(dm: float,
diff --git a/LittlePaimon/plugins/Paimon_Info/draw_character_bag.py b/LittlePaimon/plugins/Paimon_Info/draw_character_bag.py
index d3b9bcd..d8437b7 100644
--- a/LittlePaimon/plugins/Paimon_Info/draw_character_bag.py
+++ b/LittlePaimon/plugins/Paimon_Info/draw_character_bag.py
@@ -4,7 +4,7 @@ import math
from typing import List
from LittlePaimon.config import RESOURCE_BASE_PATH
-from LittlePaimon.database.models import Character, PlayerInfo, Player
+from LittlePaimon.database import Character, PlayerInfo, Player
from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.alias import get_chara_icon
from LittlePaimon.utils.genshin import GenshinTools
diff --git a/LittlePaimon/plugins/Paimon_Info/draw_character_card.py b/LittlePaimon/plugins/Paimon_Info/draw_character_card.py
index e726eaa..c1500e5 100644
--- a/LittlePaimon/plugins/Paimon_Info/draw_character_card.py
+++ b/LittlePaimon/plugins/Paimon_Info/draw_character_card.py
@@ -1,7 +1,7 @@
import math
from LittlePaimon.config import RESOURCE_BASE_PATH
-from LittlePaimon.database.models import Character
+from LittlePaimon.database import Character
from LittlePaimon.utils import aiorequests
from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.genshin import GenshinTools
diff --git a/LittlePaimon/plugins/Paimon_Info/draw_character_detail.py b/LittlePaimon/plugins/Paimon_Info/draw_character_detail.py
index 831dfe3..64394a2 100644
--- a/LittlePaimon/plugins/Paimon_Info/draw_character_detail.py
+++ b/LittlePaimon/plugins/Paimon_Info/draw_character_detail.py
@@ -6,7 +6,7 @@ from LittlePaimon.utils.genshin import GenshinTools
from LittlePaimon.utils.image import PMImage, font_manager as fm
from LittlePaimon.utils.message import MessageBuild
from LittlePaimon.utils.alias import get_chara_icon
-from LittlePaimon.database.models import Character
+from LittlePaimon.database import Character
from .damage_cal import get_role_dmg
# weapon_url = 'https://upload-bbs.mihoyo.com/game_record/genshin/equip/{}.png'
diff --git a/LittlePaimon/plugins/Paimon_Info/draw_player_card.py b/LittlePaimon/plugins/Paimon_Info/draw_player_card.py
index 09988f6..d0c49c5 100644
--- a/LittlePaimon/plugins/Paimon_Info/draw_player_card.py
+++ b/LittlePaimon/plugins/Paimon_Info/draw_player_card.py
@@ -2,7 +2,7 @@ import asyncio
from typing import List, Tuple, Optional
from LittlePaimon.config import RESOURCE_BASE_PATH
-from LittlePaimon.database.models import PlayerInfo, Character, PlayerWorldInfo, Weapon, Player
+from LittlePaimon.database import PlayerInfo, Character, PlayerWorldInfo, Weapon, Player
from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.alias import get_chara_icon
from LittlePaimon.utils.image import PMImage, get_qq_avatar, font_manager as fm
diff --git a/LittlePaimon/plugins/Paimon_MonthInfo/handler.py b/LittlePaimon/plugins/Paimon_MonthInfo/handler.py
index 2a0d7ca..e910437 100644
--- a/LittlePaimon/plugins/Paimon_MonthInfo/handler.py
+++ b/LittlePaimon/plugins/Paimon_MonthInfo/handler.py
@@ -1,4 +1,4 @@
-from LittlePaimon.database.models import Player
+from LittlePaimon.database import Player
from LittlePaimon.utils.api import get_mihoyo_private_data
from LittlePaimon.utils import logger
from .draw import draw_monthinfo_card
diff --git a/LittlePaimon/plugins/Paimon_Wiki/__init__.py b/LittlePaimon/plugins/Paimon_Wiki/__init__.py
index 9998fa9..2e817f6 100644
--- a/LittlePaimon/plugins/Paimon_Wiki/__init__.py
+++ b/LittlePaimon/plugins/Paimon_Wiki/__init__.py
@@ -13,7 +13,7 @@ from LittlePaimon import NICKNAME
from LittlePaimon.utils.alias import get_match_alias
from LittlePaimon.utils.tool import freq_limiter
from LittlePaimon.utils.message import MessageBuild
-from LittlePaimon.database.models import PlayerAlias
+from LittlePaimon.database import PlayerAlias
from LittlePaimon.config import RESOURCE_BASE_PATH
from .draw_map import init_map, draw_map, get_full_map
from .draw_daily_material import draw_material
diff --git a/LittlePaimon/plugins/Paimon_Wiki/draw_daily_material.py b/LittlePaimon/plugins/Paimon_Wiki/draw_daily_material.py
index 280d8af..abaaa6d 100644
--- a/LittlePaimon/plugins/Paimon_Wiki/draw_daily_material.py
+++ b/LittlePaimon/plugins/Paimon_Wiki/draw_daily_material.py
@@ -5,7 +5,7 @@ from LittlePaimon.utils import aiorequests, scheduler
from LittlePaimon.utils.files import save_json, load_json, load_image
from LittlePaimon.utils.image import PMImage, font_manager as fm
from LittlePaimon.utils.message import MessageBuild
-from LittlePaimon.database.models import Character, LastQuery
+from LittlePaimon.database import Character, LastQuery
week_cn = {
'monday': '周一',
diff --git a/LittlePaimon/manager/alias_manager/__init__.py b/LittlePaimon/plugins/alias_manager/__init__.py
similarity index 100%
rename from LittlePaimon/manager/alias_manager/__init__.py
rename to LittlePaimon/plugins/alias_manager/__init__.py
diff --git a/LittlePaimon/manager/alias_manager/alias_list.py b/LittlePaimon/plugins/alias_manager/alias_list.py
similarity index 100%
rename from LittlePaimon/manager/alias_manager/alias_list.py
rename to LittlePaimon/plugins/alias_manager/alias_list.py
diff --git a/LittlePaimon/manager/alias_manager/handler.py b/LittlePaimon/plugins/alias_manager/handler.py
similarity index 100%
rename from LittlePaimon/manager/alias_manager/handler.py
rename to LittlePaimon/plugins/alias_manager/handler.py
diff --git a/LittlePaimon/manager/alias_manager/parser.py b/LittlePaimon/plugins/alias_manager/parser.py
similarity index 100%
rename from LittlePaimon/manager/alias_manager/parser.py
rename to LittlePaimon/plugins/alias_manager/parser.py
diff --git a/LittlePaimon/manager/bot_manager/__init__.py b/LittlePaimon/plugins/bot_manager/__init__.py
similarity index 98%
rename from LittlePaimon/manager/bot_manager/__init__.py
rename to LittlePaimon/plugins/bot_manager/__init__.py
index 5055b8f..5e0811f 100644
--- a/LittlePaimon/manager/bot_manager/__init__.py
+++ b/LittlePaimon/plugins/bot_manager/__init__.py
@@ -12,9 +12,9 @@ from nonebot.params import CommandArg, ArgPlainText, Arg
from nonebot.typing import T_State
from nonebot.adapters.onebot.v11 import Bot, Message, MessageEvent, GroupMessageEvent, ActionFailed
from nonebot.adapters.onebot.v11.helpers import convert_chinese_to_bool
-from LittlePaimon import NICKNAME, DRIVER, SUPERUSERS, __version__
+from LittlePaimon import NICKNAME, DRIVER, __version__
from LittlePaimon.utils.files import save_json, load_json
-from .handler import check_update, update
+from LittlePaimon.utils.update import check_update, update
__plugin_meta__ = PluginMetadata(
name='小派蒙管理',
diff --git a/LittlePaimon/plugins/news60s/__init__.py b/LittlePaimon/plugins/news60s/__init__.py
index b4666f9..fb37631 100644
--- a/LittlePaimon/plugins/news60s/__init__.py
+++ b/LittlePaimon/plugins/news60s/__init__.py
@@ -5,7 +5,7 @@ from nonebot.adapters.onebot.v11 import MessageEvent, MessageSegment
from nonebot.plugin import PluginMetadata
from LittlePaimon import DRIVER
-from LittlePaimon.database.models import GeneralSub
+from LittlePaimon.database import GeneralSub
from LittlePaimon.utils import scheduler, logger
from LittlePaimon.utils.message import CommandObjectID, CommandSwitch, CommandTime
diff --git a/LittlePaimon/manager/plugin_manager/__init__.py b/LittlePaimon/plugins/plugin_manager/__init__.py
similarity index 69%
rename from LittlePaimon/manager/plugin_manager/__init__.py
rename to LittlePaimon/plugins/plugin_manager/__init__.py
index c38a78e..096ac72 100644
--- a/LittlePaimon/manager/plugin_manager/__init__.py
+++ b/LittlePaimon/plugins/plugin_manager/__init__.py
@@ -1,25 +1,18 @@
import asyncio
-import datetime
from nonebot import on_regex, on_command
-from nonebot.matcher import Matcher
-from nonebot.exception import IgnoredException
from nonebot.params import RegexDict, CommandArg
from nonebot.permission import SUPERUSER
-from nonebot.message import run_preprocessor
from nonebot.adapters.onebot.v11 import Message, GroupMessageEvent, PrivateMessageEvent, MessageEvent
from nonebot.typing import T_State
-from LittlePaimon import SUPERUSERS, DRIVER
+from LittlePaimon import SUPERUSERS
+from LittlePaimon.config import ConfigManager, PluginManager
from LittlePaimon.utils import logger
from LittlePaimon.utils.message import CommandObjectID
-from LittlePaimon.database.models import PluginPermission, PluginStatistics
-from .manager import PluginManager, hidden_plugins
-from .model import MatcherInfo
+from LittlePaimon.database import PluginPermission
from .draw_help import draw_help
-plugin_manager = PluginManager()
-
manage_cmd = on_regex(r'^pm (?Pban|unban) (?P([\w ]*)|all|全部) ?(-g (?P[\d ]*) ?)?(-u (?P[\d ]*) ?)?(?P-r)?', priority=1)
help_cmd = on_command('help', aliases={'帮助', '菜单', 'pm help'}, priority=1)
set_config_cmd = on_command('pm set', priority=1, permission=SUPERUSER)
@@ -36,9 +29,9 @@ async def _(event: GroupMessageEvent, state: T_State, match: dict = RegexDict(),
state['plugin'] = []
state['plugin_no_exist'] = []
for plugin in match['plugin'].strip().split(' '):
- if plugin in plugin_manager.data.keys() or plugin in ['all', '全部']:
+ if plugin in PluginManager.plugins.keys() or plugin in ['all', '全部']:
state['plugin'].append(plugin)
- elif module_name := list(filter(lambda x: plugin_manager.data[x].name == plugin, plugin_manager.data.keys())):
+ elif module_name := list(filter(lambda x: PluginManager.plugins[x].name == plugin, PluginManager.plugins.keys())):
state['plugin'].append(module_name[0])
else:
state['plugin_no_exist'].append(plugin)
@@ -58,9 +51,9 @@ async def _(event: PrivateMessageEvent, state: T_State, match: dict = RegexDict(
state['plugin'] = []
state['plugin_no_exist'] = []
for plugin in match['plugin'].strip().split(' '):
- if plugin in plugin_manager.data.keys() or plugin in ['all', '全部']:
+ if plugin in PluginManager.plugins.keys() or plugin in ['all', '全部']:
state['plugin'].append(plugin)
- elif module_name := list(filter(lambda x: plugin_manager.data[x].name == plugin, plugin_manager.data.keys())):
+ elif module_name := list(filter(lambda x: PluginManager.plugins[x].name == plugin, PluginManager.plugins.keys())):
state['plugin'].append(module_name[0])
else:
state['plugin_no_exist'].append(plugin)
@@ -114,7 +107,7 @@ async def _(event: MessageEvent, session_id: int = CommandObjectID()):
if session_id in cache_help:
await help_cmd.finish(cache_help[session_id])
else:
- plugin_list = await plugin_manager.get_plugin_list(event.message_type, event.user_id if isinstance(event, PrivateMessageEvent) else event.group_id if isinstance(event, GroupMessageEvent) else event.guild_id)
+ plugin_list = await PluginManager.get_plugin_list(event.message_type, event.user_id if isinstance(event, PrivateMessageEvent) else event.group_id if isinstance(event, GroupMessageEvent) else event.guild_id)
img = await draw_help(plugin_list)
cache_help[session_id] = img
await help_cmd.finish(img)
@@ -126,49 +119,6 @@ async def _(event: MessageEvent, msg: Message = CommandArg()):
if len(msg) != 2:
await set_config_cmd.finish('参数错误,用法:pm set 配置名 配置值')
else:
- result = plugin_manager.set_config(msg[0], msg[1])
+ result = ConfigManager.set_config(msg[0], msg[1])
await set_config_cmd.finish(result)
-
-@DRIVER.on_bot_connect
-async def _():
- await plugin_manager.init_plugins()
-
-
-@run_preprocessor
-async def _(event: MessageEvent, matcher: Matcher):
- if event.user_id in SUPERUSERS:
- return
- if not matcher.plugin_name or matcher.plugin_name in hidden_plugins:
- return
- if isinstance(event, PrivateMessageEvent):
- session_id = event.user_id
- session_type = 'user'
- elif isinstance(event, GroupMessageEvent):
- session_id = event.group_id
- session_type = 'group'
- else:
- return
-
- # 权限检查
- perm = await PluginPermission.get_or_none(name=matcher.plugin_name, session_id=session_id, session_type=session_type)
- if not perm:
- return
- if not perm.status:
- raise IgnoredException('插件使用权限已禁用')
- if isinstance(event, GroupMessageEvent) and event.user_id in perm.ban:
- raise IgnoredException('用户被禁止使用该插件')
-
- # 命令调用统计
- if matcher.plugin_name in plugin_manager.data and 'pm_name' in matcher.state:
- if matcher_info := list(filter(lambda x: x.pm_name == matcher.state['pm_name'], plugin_manager.data[matcher.plugin_name].matchers)):
- matcher_info = matcher_info[0]
- await PluginStatistics.create(plugin_name=matcher.plugin_name,
- matcher_name=matcher_info.pm_name,
- matcher_usage=matcher_info.pm_usage,
- group_id=event.group_id if isinstance(event, GroupMessageEvent) else None,
- user_id=event.user_id,
- message_type=session_type,
- time=datetime.datetime.now())
-
-
diff --git a/LittlePaimon/manager/plugin_manager/draw_help.py b/LittlePaimon/plugins/plugin_manager/draw_help.py
similarity index 99%
rename from LittlePaimon/manager/plugin_manager/draw_help.py
rename to LittlePaimon/plugins/plugin_manager/draw_help.py
index 981a931..d017b87 100644
--- a/LittlePaimon/manager/plugin_manager/draw_help.py
+++ b/LittlePaimon/plugins/plugin_manager/draw_help.py
@@ -6,7 +6,7 @@ from LittlePaimon.config import RESOURCE_BASE_PATH
from LittlePaimon.utils.image import PMImage, font_manager as fm
from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.message import MessageBuild
-from .model import PluginInfo
+from LittlePaimon.config import PluginInfo
async def draw_plugin_card(plugin: PluginInfo):
diff --git a/LittlePaimon/plugins/tools/__init__.py b/LittlePaimon/plugins/tools/__init__.py
index 8befaf5..52cf746 100644
--- a/LittlePaimon/plugins/tools/__init__.py
+++ b/LittlePaimon/plugins/tools/__init__.py
@@ -4,14 +4,12 @@ from nonebot.rule import Rule
from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment
from nonebot.plugin import PluginMetadata
from LittlePaimon import SUPERUSERS
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
+from LittlePaimon.config import config
from LittlePaimon.utils.brower import screenshot
async def permission_check(event: MessageEvent) -> bool:
- if pm.config.screenshot_enable:
- return True
- return event.user_id not in SUPERUSERS
+ return True if config.screenshot_enable else event.user_id not in SUPERUSERS
__plugin_meta__ = PluginMetadata(
@@ -42,5 +40,3 @@ async def _(event: MessageEvent, msg: Message = CommandArg()):
await screenshot_cmd.send(MessageSegment.image(img))
except Exception:
await screenshot_cmd.send('网页截图失败,无法访问该网页,请稍候再试')
-
-
diff --git a/LittlePaimon/utils/__init__.py b/LittlePaimon/utils/__init__.py
index 996e616..9824bc7 100644
--- a/LittlePaimon/utils/__init__.py
+++ b/LittlePaimon/utils/__init__.py
@@ -1,6 +1,4 @@
-from nonebot import require
from .files import *
-from .requests import *
+from .requests import aiorequests
from .logger import logger
-require('nonebot_plugin_apscheduler')
-from nonebot_plugin_apscheduler import scheduler
+from .scheduler import scheduler
diff --git a/LittlePaimon/utils/api.py b/LittlePaimon/utils/api.py
index 3bc8c67..acaf447 100644
--- a/LittlePaimon/utils/api.py
+++ b/LittlePaimon/utils/api.py
@@ -10,7 +10,7 @@ from LittlePaimon.utils import logger
from nonebot import logger as nb_logger
from tortoise.queryset import Q
-from LittlePaimon.database.models import PublicCookie, PrivateCookie, CookieCache
+from LittlePaimon.database import PublicCookie, PrivateCookie, CookieCache
from .requests import aiorequests
# MIHOYO_API = 'https://api-takumi-record.mihoyo.com/'
diff --git a/LittlePaimon/utils/brower.py b/LittlePaimon/utils/brower.py
index e76f8e6..39b1935 100644
--- a/LittlePaimon/utils/brower.py
+++ b/LittlePaimon/utils/brower.py
@@ -1,6 +1,8 @@
-from typing import Optional, Literal, Tuple, Union, List, AsyncGenerator
-from playwright.async_api import Page, Browser, Playwright, async_playwright
+from typing import Optional, Literal, Tuple, Union, List, AsyncGenerator, AsyncIterator
+from playwright.async_api import Page, Browser, Playwright, async_playwright, Error
from contextlib import asynccontextmanager
+from contextlib import suppress
+
from LittlePaimon import DRIVER
from LittlePaimon.utils import logger
@@ -8,24 +10,47 @@ _playwright: Optional[Playwright] = None
_browser: Optional[Browser] = None
-def get_brower() -> Browser:
- assert _browser
+async def init(**kwargs) -> Browser:
+ global _browser
+ global _playwright
+ try:
+ _playwright = await async_playwright().start()
+ _browser = await launch_browser(**kwargs)
+ except NotImplementedError:
+ logger.warning('Playwright', '初始化失败,请关闭FASTAPI_RELOAD')
+ except Error:
+ await install_browser()
+ _browser = await launch_browser(**kwargs)
return _browser
+async def launch_browser(**kwargs) -> Browser:
+ assert _playwright is not None, "Playwright is not initialized"
+ return await _playwright.chromium.launch(**kwargs)
+
+
+async def get_browser(**kwargs) -> Browser:
+ return _browser or await init(**kwargs)
+
+
+async def install_browser():
+ import os
+ import sys
+
+ from playwright.__main__ import main
+
+ logger.info('Playwright', '正在安装 chromium')
+ sys.argv = ["", "install", "chromium"]
+ with suppress(SystemExit):
+ logger.info('Playwright', '正在安装依赖')
+ os.system("playwright install-deps")
+ main()
+
+
@DRIVER.on_startup
-async def start_browser():
- global _playwright
- global _browser
- try:
- _playwright = await async_playwright().start()
- _browser = await _playwright.chromium.launch(headless=True)
- except NotImplementedError:
- logger.warning('Playwright', '初始化失败,请关闭FASTAPI_RELOAD')
- except Exception as e:
- logger.warning('Playwright', f'初始化失败,错误信息:{e}')
- if _browser:
- await _browser.close()
+async def start_browser(**kwargs):
+ await get_browser(**kwargs)
+ logger.info('Playwright', '浏览器初始化成功')
@DRIVER.on_shutdown
@@ -33,7 +58,7 @@ async def shutdown_browser():
if _browser:
await _browser.close()
if _playwright:
- await _playwright.stop()
+ await _playwright.stop() # type: ignore
@asynccontextmanager
@@ -57,7 +82,7 @@ async def screenshot(url: str,
if not url.startswith(('https://', 'http://')):
url = f'https://{url}'
viewport_size = {'width': viewport_size[0], 'height': viewport_size[1]}
- brower = get_brower()
+ brower = await get_browser()
page = await brower.new_page(
viewport=viewport_size,
**kwargs)
@@ -77,3 +102,13 @@ async def screenshot(url: str,
finally:
if page:
await page.close()
+
+
+@asynccontextmanager
+async def get_new_page(**kwargs) -> AsyncIterator[Page]:
+ browser = await get_browser()
+ page = await browser.new_page(**kwargs)
+ try:
+ yield page
+ finally:
+ await page.close()
diff --git a/LittlePaimon/utils/files.py b/LittlePaimon/utils/files.py
index 142d50d..cbfdf7f 100644
--- a/LittlePaimon/utils/files.py
+++ b/LittlePaimon/utils/files.py
@@ -40,6 +40,8 @@ async def load_image(
img = Image.open(path)
elif path.name.startswith(('UI_', 'Skill_')):
img = await aiorequests.download_icon(path.name, headers=headers, save_path=path, follow_redirects=True)
+ if img is None:
+ return Image.new('RGBA', size=size, color=(0, 0, 0, 0))
else:
raise FileNotFoundError(f'{path} not found')
cache_image[str(path)] = img
diff --git a/LittlePaimon/utils/genshin.py b/LittlePaimon/utils/genshin.py
index 4fb745a..e721138 100644
--- a/LittlePaimon/utils/genshin.py
+++ b/LittlePaimon/utils/genshin.py
@@ -4,16 +4,15 @@ from typing import Optional, List, Union, Tuple
import pytz
-from LittlePaimon.config import JSON_DATA
-from LittlePaimon.database.models import PlayerInfo, Character, LastQuery, PrivateCookie, AbyssInfo
-from LittlePaimon.database.models import Artifact, CharacterProperty, Artifacts, Talents, Talent
+from LittlePaimon.config import JSON_DATA, config
+from LittlePaimon.database import PlayerInfo, Character, LastQuery, PrivateCookie, AbyssInfo
+from LittlePaimon.database import Artifact, CharacterProperty, Artifacts, Talents, Talent
from LittlePaimon.utils import logger
from LittlePaimon.utils.files import load_json
from LittlePaimon.utils.api import get_enka_data, get_mihoyo_public_data, get_mihoyo_private_data
from LittlePaimon.utils.typing import DataSourceType
from LittlePaimon.utils.alias import get_name_by_id
from LittlePaimon.utils.typing import CHARACTERS
-from LittlePaimon.manager.plugin_manager import plugin_manager as pm
ra_score = load_json(JSON_DATA / 'score.json')
talent_map = load_json(JSON_DATA / 'role_skill.json')
@@ -169,7 +168,7 @@ class GenshinInfoManager:
if data_source == 'enka':
"""如果角色不存在或者角色的更新时间在6小时前,则更新角色信息"""
character = await Character.get_or_none(**query, data_source='enka')
- if not character or character.update_time < (datetime.datetime.now() - datetime.timedelta(hours=pm.config.ysd_auto_update)).replace(
+ if not character or character.update_time < (datetime.datetime.now() - datetime.timedelta(hours=config.ysd_auto_update)).replace(
tzinfo=pytz.timezone('UTC')):
await self.update_from_enka()
if character := await Character.get_or_none(**query, data_source='enka'):
@@ -193,7 +192,7 @@ class GenshinInfoManager:
await self.set_last_query()
player_info = await PlayerInfo.get_or_none(user_id=self.user_id, uid=self.uid)
if player_info is None or player_info.update_time is None or player_info.update_time < (
- datetime.datetime.now() - datetime.timedelta(hours=pm.config.ysa_auto_update)).replace(
+ datetime.datetime.now() - datetime.timedelta(hours=config.ysa_auto_update)).replace(
tzinfo=pytz.timezone('UTC')):
result = await self.update_from_mihoyo()
if result != '更新成功':
@@ -210,7 +209,7 @@ class GenshinInfoManager:
await self.set_last_query()
player_info = await PlayerInfo.get_or_none(user_id=self.user_id, uid=self.uid)
if player_info is None or player_info.update_time is None or player_info.update_time < (
- datetime.datetime.now() - datetime.timedelta(hours=pm.config.ys_auto_update)).replace(
+ datetime.datetime.now() - datetime.timedelta(hours=config.ys_auto_update)).replace(
tzinfo=pytz.timezone('UTC')):
result = await self.update_from_mihoyo()
if result != '更新成功':
diff --git a/LittlePaimon/utils/message.py b/LittlePaimon/utils/message.py
index 564df8c..f2e7f88 100644
--- a/LittlePaimon/utils/message.py
+++ b/LittlePaimon/utils/message.py
@@ -13,7 +13,7 @@ from nonebot.params import CommandArg, Depends
from nonebot.typing import T_State
from LittlePaimon import NICKNAME
-from LittlePaimon.database.models import LastQuery, PrivateCookie, Player, PlayerAlias
+from LittlePaimon.database import LastQuery, PrivateCookie, Player, PlayerAlias
from LittlePaimon.utils import aiorequests, load_image
from LittlePaimon.utils.alias import get_match_alias
from LittlePaimon.utils.image import PMImage
diff --git a/LittlePaimon/utils/migration.py b/LittlePaimon/utils/migration.py
index f230120..4acf6b1 100644
--- a/LittlePaimon/utils/migration.py
+++ b/LittlePaimon/utils/migration.py
@@ -2,7 +2,7 @@ import sqlite3
from pathlib import Path
import datetime
from LittlePaimon.utils import logger
-from LittlePaimon.database.models import PublicCookie, PrivateCookie, LastQuery, DailyNoteSub, MihoyoBBSSub
+from LittlePaimon.database import PublicCookie, PrivateCookie, LastQuery, DailyNoteSub, MihoyoBBSSub
async def migrate_database():
diff --git a/LittlePaimon/utils/requests.py b/LittlePaimon/utils/requests.py
index b546d6d..8a1a4f7 100644
--- a/LittlePaimon/utils/requests.py
+++ b/LittlePaimon/utils/requests.py
@@ -8,6 +8,7 @@ import httpx
from PIL import Image
import tqdm.asyncio
+from LittlePaimon.utils import logger
class aiorequests:
@staticmethod
@@ -169,4 +170,5 @@ class aiorequests:
for url in urls:
with contextlib.suppress(Exception):
return await aiorequests.get_img(url=url, headers=headers, save_path=save_path, **kwargs)
- raise FileNotFoundError(f'{name}下载失败,请检查网络')
+ logger.warning('资源检查', f'{name}下载失败,请检查网络')
+ return None
diff --git a/LittlePaimon/utils/scheduler.py b/LittlePaimon/utils/scheduler.py
new file mode 100644
index 0000000..4effaa5
--- /dev/null
+++ b/LittlePaimon/utils/scheduler.py
@@ -0,0 +1,48 @@
+import logging
+
+from nonebot import get_driver
+from nonebot.log import LoguruHandler, logger
+from apscheduler.schedulers.asyncio import AsyncIOScheduler
+
+from pydantic import Field, BaseSettings
+
+
+class Config(BaseSettings):
+ apscheduler_autostart: bool = True
+ apscheduler_log_level: int = 30
+ apscheduler_config: dict = Field(
+ default_factory=lambda: {"apscheduler.timezone": "Asia/Shanghai"}
+ )
+
+ class Config:
+ extra = "ignore"
+
+
+driver = get_driver()
+global_config = driver.config
+plugin_config = Config(**global_config.dict())
+
+scheduler = AsyncIOScheduler()
+scheduler.configure(plugin_config.apscheduler_config)
+
+
+async def _start_scheduler():
+ if not scheduler.running:
+ scheduler.start()
+ logger.opt(colors=True).info("Scheduler Started")
+
+
+async def _shutdown_scheduler():
+ if scheduler.running:
+ scheduler.shutdown()
+ logger.opt(colors=True).info("Scheduler Shutdown")
+
+
+if plugin_config.apscheduler_autostart:
+ driver.on_startup(_start_scheduler)
+ driver.on_shutdown(_shutdown_scheduler)
+
+aps_logger = logging.getLogger("apscheduler")
+aps_logger.setLevel(plugin_config.apscheduler_log_level)
+aps_logger.handlers.clear()
+aps_logger.addHandler(LoguruHandler())
diff --git a/LittlePaimon/utils/typing.py b/LittlePaimon/utils/typing.py
index a625038..f576a94 100644
--- a/LittlePaimon/utils/typing.py
+++ b/LittlePaimon/utils/typing.py
@@ -21,17 +21,17 @@ CN_NUMBER = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九
CHARACTERS = ['神里绫华', '琴', '丽莎', '芭芭拉', '凯亚', '迪卢克', '雷泽', '安柏', '温迪', '香菱', '北斗', '行秋', '魈', '凝光', '可莉', '钟离',
'菲谢尔', '班尼特', '达达利亚', '诺艾尔', '七七', '重云', '甘雨', '阿贝多', '迪奥娜', '莫娜', '刻晴', '砂糖', '辛焱', '罗莎莉亚', '胡桃',
'枫原万叶', '烟绯', '宵宫', '托马', '优菈', '雷电将军', '早柚', '珊瑚宫心海', '五郎', '九条裟罗', '荒泷一斗', '八重神子', '夜兰', '埃洛伊',
- '申鹤', '云堇', '久岐忍', '神里绫人', '鹿野院平藏', '提纳里', '柯莱', '多莉', '赛诺', '坎蒂丝', '妮露']
+ '申鹤', '云堇', '久岐忍', '神里绫人', '鹿野院平藏', '提纳里', '柯莱', '多莉', '赛诺', '坎蒂丝', '妮露', '纳西妲', '莱依拉']
"""全角色"""
MALE_CHARACTERS = ['凯亚', '迪卢克', '钟离', '达达利亚', '托马', '荒泷一斗', '神里绫人']
"""成男角色"""
FEMALE_CHARACTERS = ['琴', '丽莎', '北斗', '凝光', '罗莎莉亚', '优菈', '雷电将军', '九条裟罗', '八重神子', '夜兰', '申鹤', '坎蒂丝']
"""成女角色"""
-GIRL_CHARACTERS = ['神里绫华', '芭芭拉', '安柏', '香菱', '菲谢尔', '诺艾尔', '甘雨', '莫娜', '刻晴', '砂糖', '辛焱', '胡桃', '烟绯', '宵宫', '珊瑚宫心海', '埃洛伊', '云堇', '久岐忍', '柯莱', '妮露']
+GIRL_CHARACTERS = ['神里绫华', '芭芭拉', '安柏', '香菱', '菲谢尔', '诺艾尔', '甘雨', '莫娜', '刻晴', '砂糖', '辛焱', '胡桃', '烟绯', '宵宫', '珊瑚宫心海', '埃洛伊', '云堇', '久岐忍', '柯莱', '妮露', '莱依拉']
"""少女角色"""
BOY_CHARACTERS = ['雷泽', '温迪', '行秋', '魈', '班尼特', '重云', '阿贝多', '枫原万叶', '五郎', '鹿野院平藏', '提纳里', '赛诺']
"""少男角色"""
-LOLI_CHARACTERS = ['七七', '可莉', '迪奥娜', '早柚', '多莉']
+LOLI_CHARACTERS = ['七七', '可莉', '迪奥娜', '早柚', '多莉', '纳西妲']
"""萝莉"""
CHARA_RE = '|'.join(CHARACTERS)
diff --git a/LittlePaimon/manager/bot_manager/handler.py b/LittlePaimon/utils/update.py
similarity index 100%
rename from LittlePaimon/manager/bot_manager/handler.py
rename to LittlePaimon/utils/update.py
diff --git a/LittlePaimon/web/__init__.py b/LittlePaimon/web/__init__.py
index 149d342..2a1b931 100644
--- a/LittlePaimon/web/__init__.py
+++ b/LittlePaimon/web/__init__.py
@@ -1,16 +1,16 @@
import nonebot
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
+from LittlePaimon import DRIVER
from LittlePaimon.utils import logger
+from LittlePaimon.config import config
from .pages import admin_app, login_page, bind_cookie_page, blank_page
from .api import BaseApiRouter
-from LittlePaimon.manager.plugin_manager import plugin_manager
-
app: FastAPI = nonebot.get_app()
app.include_router(BaseApiRouter)
-logger.info('Web UI', '启用成功,默认地址为https://127.0.0.1:13579/LittlePaimon/login')
+logger.info('Web UI', f'启用成功,默认地址为http://127.0.0.1:{DRIVER.config.port}/LittlePaimon/login')
requestAdaptor = '''
requestAdaptor(api) {
@@ -33,7 +33,7 @@ responseAdaptor(api, payload, query, request, response) {
@app.get('/LittlePaimon/admin', response_class=HTMLResponse)
async def admin():
- if plugin_manager.config.admin_enable:
+ if config.admin_enable:
return admin_app.render(site_title='LittlePaimon 后台管理', theme='antd', requestAdaptor=requestAdaptor,
responseAdaptor=responseAdaptor)
else:
@@ -42,7 +42,7 @@ async def admin():
@app.get('/LittlePaimon/login', response_class=HTMLResponse)
async def login():
- if plugin_manager.config.admin_enable:
+ if config.admin_enable:
return login_page.render(site_title='登录 | LittlePaimon 后台管理', theme='antd')
else:
return blank_page.render(site_title='LittlePaimon')
@@ -50,7 +50,7 @@ async def login():
@app.get('/LittlePaimon/cookie', response_class=HTMLResponse)
async def bind_cookie():
- if plugin_manager.config.CookieWeb_enable:
+ if config.CookieWeb_enable:
return bind_cookie_page.render(site_title='绑定Cookie | LittlePaimon')
else:
return blank_page.render(site_title='LittlePaimon')
diff --git a/LittlePaimon/web/api/bot_info.py b/LittlePaimon/web/api/bot_info.py
index 1d287ef..f671add 100644
--- a/LittlePaimon/web/api/bot_info.py
+++ b/LittlePaimon/web/api/bot_info.py
@@ -9,7 +9,7 @@ from fastapi import APIRouter
from nonebot import get_bot
from nonebot.adapters.onebot.v11 import Bot
from LittlePaimon import SUPERUSERS
-from LittlePaimon.manager.bot_manager.handler import update
+from LittlePaimon.utils.update import update
from LittlePaimon.utils.files import save_json
from LittlePaimon.utils.tool import cache
from .utils import authentication
diff --git a/LittlePaimon/web/api/cookie.py b/LittlePaimon/web/api/cookie.py
index 1db3fe4..e8f7fc2 100644
--- a/LittlePaimon/web/api/cookie.py
+++ b/LittlePaimon/web/api/cookie.py
@@ -1,6 +1,6 @@
import datetime
from typing import Optional
-from LittlePaimon.database.models import PublicCookie, PrivateCookie, LastQuery
+from LittlePaimon.database import PublicCookie, PrivateCookie, LastQuery
from fastapi.responses import JSONResponse
from fastapi import APIRouter
from pydantic import BaseModel
diff --git a/LittlePaimon/web/api/login.py b/LittlePaimon/web/api/login.py
index 5e1db74..c2803b8 100644
--- a/LittlePaimon/web/api/login.py
+++ b/LittlePaimon/web/api/login.py
@@ -2,10 +2,10 @@ from fastapi import APIRouter
from fastapi.responses import JSONResponse
from pydantic import BaseModel
from LittlePaimon import SUPERUSERS
-from LittlePaimon.manager.plugin_manager import plugin_manager
+from LittlePaimon.config import config
from .utils import create_token
-PASSWORD = plugin_manager.config.admin_password
+PASSWORD = config.admin_password
class UserModel(BaseModel):
diff --git a/LittlePaimon/web/api/plugin.py b/LittlePaimon/web/api/plugin.py
index 7613c7e..c2ab6e7 100644
--- a/LittlePaimon/web/api/plugin.py
+++ b/LittlePaimon/web/api/plugin.py
@@ -4,9 +4,12 @@ from pathlib import Path
from fastapi.responses import JSONResponse
from fastapi import APIRouter
-from LittlePaimon.database.models import PluginPermission
-from LittlePaimon.manager.plugin_manager import plugin_manager, cache_help
-from LittlePaimon.manager.plugin_manager.model import PluginInfo, Config
+from LittlePaimon.config import ConfigManager, ConfigModel, PluginManager, PluginInfo
+from LittlePaimon.database import PluginPermission
+try:
+ from LittlePaimon.plugins.plugin_manager import cache_help
+except Exception:
+ cache_help = None
from .utils import authentication
@@ -15,7 +18,7 @@ route = APIRouter()
@route.get('/get_plugins', response_class=JSONResponse, dependencies=[authentication()])
async def get_plugins():
- plugins = await plugin_manager.get_plugin_list_for_admin()
+ plugins = await PluginManager.get_plugin_list_for_admin()
return {
'status': 0,
'msg': 'ok',
@@ -30,7 +33,8 @@ async def get_plugins():
async def set_plugin_status(data: dict):
module_name = data.get('plugin')
status = data.get('status')
- cache_help.clear()
+ if cache_help:
+ cache_help.clear()
await PluginPermission.filter(name=module_name).update(status=status)
return {'status': 0, 'msg': f'成功设置{module_name}插件状态为{status}'}
@@ -74,7 +78,8 @@ async def set_plugin_bans(data: dict):
status=False)
else:
await PluginPermission.filter(name=name, session_type='user', session_id=int(ban)).update(status=False)
- cache_help.clear()
+ if cache_help:
+ cache_help.clear()
return {
'status': 0,
'msg': '插件权限设置成功'
@@ -83,9 +88,10 @@ async def set_plugin_bans(data: dict):
@route.post('/set_plugin_detail', response_class=JSONResponse, dependencies=[authentication()])
async def set_plugin_detail(plugin_info: PluginInfo):
- plugin_manager.data[plugin_info.module_name] = plugin_info
- plugin_manager.save()
- cache_help.clear()
+ PluginManager.plugins[plugin_info.module_name] = plugin_info
+ PluginManager.save()
+ if cache_help:
+ cache_help.clear()
return {
'status': 0,
'msg': '插件信息设置成功'
@@ -94,7 +100,7 @@ async def set_plugin_detail(plugin_info: PluginInfo):
@route.get('/get_config', response_class=JSONResponse, dependencies=[authentication()])
async def get_config():
- config = plugin_manager.config.dict(by_alias=True)
+ config = ConfigManager.config.dict(by_alias=True)
config['米游社签到开始时间'] = datetime.datetime(1970, 1, 1, hour=config['米游社签到开始时间(小时)'], minute=config['米游社签到开始时间(分钟)']).strftime('%H:%M')
config['米游币开始执行时间'] = datetime.datetime(1970, 1, 1, hour=config['米游币开始执行时间(小时)'], minute=config['米游币开始执行时间(分钟)']).strftime('%H:%M')
config['实时便签停止检查时间段'] = (f'0{config["实时便签停止检查开始时间"]}' if config['实时便签停止检查开始时间'] < 10 else str(config['实时便签停止检查开始时间'])) + \
@@ -123,10 +129,10 @@ async def set_config(data: dict):
data['实时便签停止检查结束时间'] = int(temp_time_split[1][:2])
if '云原神签到开始时间' in data:
data['云原神签到时间(小时)'] = int(data['云原神签到开始时间'])
- config = plugin_manager.config.dict(by_alias=True)
+ config = ConfigManager.config.dict(by_alias=True)
config.update(**data)
- plugin_manager.config = Config.parse_obj(config)
- plugin_manager.save()
+ ConfigManager.config = ConfigModel.parse_obj(config)
+ PluginManager.save()
return {
'status': 0,
'msg': '保存成功'
diff --git a/LittlePaimon/web/api/utils.py b/LittlePaimon/web/api/utils.py
index 9cccb3a..312580d 100644
--- a/LittlePaimon/web/api/utils.py
+++ b/LittlePaimon/web/api/utils.py
@@ -4,9 +4,9 @@ from typing import Optional
from fastapi import Header, HTTPException, Depends
from jose import jwt
from LittlePaimon import SUPERUSERS
-from LittlePaimon.manager.plugin_manager import plugin_manager
+from LittlePaimon.config import config
-SECRET_KEY = plugin_manager.config.secret_key
+SECRET_KEY = config.secret_key
ALGORITHM = 'HS256'
TOKEN_EXPIRE_MINUTES = 30
diff --git a/LittlePaimon/web/pages/plugin_manage.py b/LittlePaimon/web/pages/plugin_manage.py
index fac34ed..e82852e 100644
--- a/LittlePaimon/web/pages/plugin_manage.py
+++ b/LittlePaimon/web/pages/plugin_manage.py
@@ -1,4 +1,5 @@
-from amis import Form, Transfer, ActionType, Dialog, InputSubForm, DisplayModeEnum, InputText, Textarea, Switch, InputNumber, Alert, Card, Tpl, CardsCRUD, Static, PageSchema, Page
+from amis import Form, Transfer, ActionType, Dialog, InputSubForm, DisplayModeEnum, InputText, Textarea, Switch, \
+ InputNumber, Alert, Card, Tpl, CardsCRUD, Static, PageSchema, Page
# -------------插件使用权限设置------------------
ban_form = Form(title='',
@@ -45,7 +46,7 @@ command_form = InputSubForm(name='matchers',
InputText(label='命令用法', name='pm_usage', value='${pm_usage}',
description='命令的使用方法,建议不要太长'),
Textarea(label='命令详细描述', name='pm_description', value='${pm_description}',
- description='命令的详细描述,可以用\\n强制换行',showCounter=False),
+ description='命令的详细描述,可以用\\n强制换行', showCounter=False),
Switch(label='是否展示', name='pm_show', value='${pm_show}',
description='是否在帮助图中展示该命令'),
InputNumber(label='展示优先级', name='pm_priority', value='${pm_priority}',
@@ -63,9 +64,9 @@ detail_form = Form(title='',
description='插件显示的名称,建议不要过长'),
Static(label='插件模块名', name='module_name', value='${module_name}'),
Textarea(label='插件描述', name='description', value='${description}', clearable=True,
- description='仅用于在本管理页面中显示,不会在帮助图中显示',showCounter=False),
- Textarea(label='插件使用说明', name='usage', value='${detail}', clearable=True,
- description='会在该插件没有具体命令的使用说明时,显示在帮助图中',showCounter=False),
+ description='仅用于在本管理页面中显示,不会在帮助图中显示', showCounter=False),
+ Textarea(label='插件使用说明', name='usage', value='${usage}', clearable=True,
+ description='会在该插件没有具体命令的使用说明时,显示在帮助图中', showCounter=False),
Switch(label='是否展示', name='show', value='${show}',
description='是否在帮助图中展示该插件'),
InputNumber(label='展示优先级', name='priority', value='${priority}',
diff --git a/poetry.lock b/poetry.lock
index e6e6015..98c33db 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,16 +1,3 @@
-[[package]]
-name = "aiofiles"
-version = "0.8.0"
-description = "File support for asyncio."
-category = "main"
-optional = false
-python-versions = ">=3.6,<4.0"
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "aiosqlite"
version = "0.17.0"
@@ -66,37 +53,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "apscheduler"
-version = "3.9.1"
-description = "In-process task scheduler with Cron-like capabilities"
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
-
-[package.dependencies]
-pytz = "*"
-six = ">=1.4.0"
-tzlocal = ">=2.0,<3.0.0 || >=4.0.0"
-
-[package.extras]
-asyncio = ["trollius"]
-doc = ["sphinx", "sphinx-rtd-theme"]
-gevent = ["gevent"]
-mongodb = ["pymongo (>=3.0)"]
-redis = ["redis (>=3.0)"]
-rethinkdb = ["rethinkdb (>=2.4.0)"]
-sqlalchemy = ["sqlalchemy (>=0.8)"]
-testing = ["pytest", "pytest-cov", "pytest-tornado5", "mock", "pytest-asyncio (<0.6)", "pytest-asyncio"]
-tornado = ["tornado (>=4.3)"]
-twisted = ["twisted"]
-zookeeper = ["kazoo"]
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "arrow"
version = "1.2.3"
@@ -113,22 +69,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "backports.zoneinfo"
-version = "0.2.1"
-description = "Backport of the standard library zoneinfo module"
-category = "main"
-optional = false
-python-versions = ">=3.6"
-
-[package.extras]
-tzdata = ["tzdata"]
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "beautifulsoup4"
version = "4.11.1"
@@ -238,7 +178,7 @@ reference = "tsinghua"
[[package]]
name = "contourpy"
-version = "1.0.5"
+version = "1.0.6"
description = "Python library for calculating contours of 2D quadrilateral grids"
category = "main"
optional = false
@@ -249,7 +189,7 @@ numpy = ">=1.16"
[package.extras]
bokeh = ["bokeh", "selenium"]
-docs = ["docutils (<0.18)", "sphinx", "sphinx-rtd-theme"]
+docs = ["docutils (<0.18)", "sphinx (<=5.2.0)", "sphinx-rtd-theme"]
test = ["pytest", "matplotlib", "pillow", "flake8", "isort"]
test-minimal = ["pytest"]
test-no-codebase = ["pytest", "matplotlib", "pillow"]
@@ -410,22 +350,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "greenlet"
-version = "1.1.3"
-description = "Lightweight in-process concurrent programming"
-category = "main"
-optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
-
-[package.extras]
-docs = ["sphinx"]
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "h11"
version = "0.12.0"
@@ -516,27 +440,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "importlib-metadata"
-version = "5.0.0"
-description = "Read metadata from Python packages"
-category = "main"
-optional = false
-python-versions = ">=3.7"
-
-[package.dependencies]
-zipp = ">=0.5"
-
-[package.extras]
-docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"]
-perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "iso8601"
version = "1.1.0"
@@ -664,25 +567,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "markdown"
-version = "3.4.1"
-description = "Python implementation of Markdown."
-category = "main"
-optional = false
-python-versions = ">=3.7"
-
-[package.dependencies]
-importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""}
-
-[package.extras]
-testing = ["coverage", "pyyaml"]
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "markupsafe"
version = "2.1.1"
@@ -792,46 +676,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "nonebot-plugin-apscheduler"
-version = "0.2.0"
-description = "APScheduler Support for NoneBot2"
-category = "main"
-optional = false
-python-versions = ">=3.8,<4.0"
-
-[package.dependencies]
-apscheduler = ">=3.7.0,<4.0.0"
-nonebot2 = ">=2.0.0-rc.1,<3.0.0"
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
-[[package]]
-name = "nonebot-plugin-htmlrender"
-version = "0.1.1"
-description = "通过浏览器渲染图片"
-category = "main"
-optional = false
-python-versions = ">=3.7.3,<4.0.0"
-
-[package.dependencies]
-aiofiles = ">=0.8.0,<0.9.0"
-jinja2 = ">=3.0.3,<4.0.0"
-markdown = ">=3.3.6,<4.0.0"
-nonebot2 = ">=2.0.0-beta.1,<3.0.0"
-playwright = ">=1.17.2,<2.0.0"
-Pygments = ">=2.10.0,<3.0.0"
-pymdown-extensions = ">=9.1,<10.0"
-python-markdown-math = ">=0.8,<0.9"
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "nonebot2"
version = "2.0.0rc1"
@@ -893,7 +737,7 @@ reference = "tsinghua"
[[package]]
name = "pillow"
-version = "9.2.0"
+version = "9.3.0"
description = "Python Imaging Library (Fork)"
category = "main"
optional = false
@@ -908,24 +752,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "playwright"
-version = "1.27.1"
-description = "A high-level API to automate web browsers"
-category = "main"
-optional = false
-python-versions = ">=3.7"
-
-[package.dependencies]
-greenlet = "1.1.3"
-pyee = "8.1.0"
-typing-extensions = {version = "*", markers = "python_version <= \"3.8\""}
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "poyo"
version = "0.5.0"
@@ -1005,19 +831,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "pyee"
-version = "8.1.0"
-description = "A port of node.js's EventEmitter to python."
-category = "main"
-optional = false
-python-versions = "*"
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "pyfiglet"
version = "0.8.post1"
@@ -1031,22 +844,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "pygments"
-version = "2.13.0"
-description = "Pygments is a syntax highlighting package written in Python."
-category = "main"
-optional = false
-python-versions = ">=3.6"
-
-[package.extras]
-plugins = ["importlib-metadata"]
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "pygtrie"
version = "2.5.0"
@@ -1060,22 +857,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "pymdown-extensions"
-version = "9.7"
-description = "Extension pack for Python Markdown."
-category = "main"
-optional = false
-python-versions = ">=3.7"
-
-[package.dependencies]
-markdown = ">=3.2"
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "pyparsing"
version = "3.0.9"
@@ -1173,22 +954,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "python-markdown-math"
-version = "0.8"
-description = "Math extension for Python-Markdown"
-category = "main"
-optional = false
-python-versions = ">=3.6"
-
-[package.dependencies]
-Markdown = ">=3.0"
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "python-slugify"
version = "6.1.2"
@@ -1210,7 +975,7 @@ reference = "tsinghua"
[[package]]
name = "pytz"
-version = "2022.5"
+version = "2022.6"
description = "World timezone definitions, modern and historical"
category = "main"
optional = false
@@ -1221,23 +986,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "pytz-deprecation-shim"
-version = "0.1.0.post0"
-description = "Shims to make deprecation of pytz easier"
-category = "main"
-optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
-
-[package.dependencies]
-"backports.zoneinfo" = {version = "*", markers = "python_version >= \"3.6\" and python_version < \"3.9\""}
-tzdata = {version = "*", markers = "python_version >= \"3.6\""}
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "pyyaml"
version = "6.0"
@@ -1344,7 +1092,7 @@ reference = "tsinghua"
[[package]]
name = "scikit-learn"
-version = "1.1.2"
+version = "1.1.3"
description = "A set of python modules for machine learning and data mining"
category = "main"
optional = false
@@ -1614,41 +1362,6 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "tzdata"
-version = "2022.5"
-description = "Provider of IANA time zone data"
-category = "main"
-optional = false
-python-versions = ">=2"
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
-[[package]]
-name = "tzlocal"
-version = "4.2"
-description = "tzinfo object for the local timezone"
-category = "main"
-optional = false
-python-versions = ">=3.6"
-
-[package.dependencies]
-"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""}
-pytz-deprecation-shim = "*"
-tzdata = {version = "*", markers = "platform_system == \"Windows\""}
-
-[package.extras]
-devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"]
-test = ["pytest-mock (>=3.3)", "pytest (>=4.3)"]
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[[package]]
name = "ujson"
version = "5.5.0"
@@ -1800,33 +1513,12 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "tsinghua"
-[[package]]
-name = "zipp"
-version = "3.10.0"
-description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "main"
-optional = false
-python-versions = ">=3.7"
-
-[package.extras]
-docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
-
-[package.source]
-type = "legacy"
-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
-reference = "tsinghua"
-
[metadata]
lock-version = "1.1"
python-versions = "^3.8"
-content-hash = "9f8c7514fedd7319cbc803863979f19451b88568872f01477926d4cecb9e2b66"
+content-hash = "1a0dec40bbd207a55b594e3b6ea48349f0a1bb1bb08567b98807935bc4a2104d"
[metadata.files]
-aiofiles = [
- {file = "aiofiles-0.8.0-py3-none-any.whl", hash = "sha256:7a973fc22b29e9962d0897805ace5856e6a566ab1f0c8e5c91ff6c866519c937"},
- {file = "aiofiles-0.8.0.tar.gz", hash = "sha256:8334f23235248a3b2e83b2c3a78a22674f39969b96397126cc93664d9a901e59"},
-]
aiosqlite = [
{file = "aiosqlite-0.17.0-py3-none-any.whl", hash = "sha256:6c49dc6d3405929b1d08eeccc72306d3677503cc5e5e43771efc1e00232e8231"},
{file = "aiosqlite-0.17.0.tar.gz", hash = "sha256:f0e6acc24bc4864149267ac82fb46dfb3be4455f99fe21df82609cc6e6baee51"},
@@ -1839,32 +1531,10 @@ anyio = [
{file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"},
{file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"},
]
-apscheduler = [
- {file = "APScheduler-3.9.1-py2.py3-none-any.whl", hash = "sha256:ddc25a0ddd899de44d7f451f4375fb971887e65af51e41e5dcf681f59b8b2c9a"},
- {file = "APScheduler-3.9.1.tar.gz", hash = "sha256:65e6574b6395498d371d045f2a8a7e4f7d50c6ad21ef7313d15b1c7cf20df1e3"},
-]
arrow = [
{file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"},
{file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"},
]
-"backports.zoneinfo" = [
- {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"},
- {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"},
- {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"},
- {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"},
- {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"},
- {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"},
- {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"},
- {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"},
- {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"},
- {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"},
- {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"},
- {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"},
- {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"},
- {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"},
- {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"},
- {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"},
-]
beautifulsoup4 = [
{file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"},
{file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"},
@@ -1894,75 +1564,75 @@ colorama = [
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
contourpy = [
- {file = "contourpy-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:87121b9428ac568fb84fae4af5e7852fc34f02eadc4e3e91f6c8989327692186"},
- {file = "contourpy-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1fb782982c42cee667b892a0b0c52a9f6c7ecf1da5c5f4345845f04eaa862f93"},
- {file = "contourpy-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:689d7d2a840619915d0abd1ecc6e399fee202f8ad315acda2807f4ca420d0802"},
- {file = "contourpy-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d88814befbd1433152c5f6dd536905149ba028d795a22555b149ae0a36024d9e"},
- {file = "contourpy-1.0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df65f4b2b4e74977f0336bef12a88051ab24e6a16873cd9249f34d67cb3e345d"},
- {file = "contourpy-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6b4c0c723664f65c2a47c8cb6ebbf660b0b2e2d936adf2e8503d4e93359465"},
- {file = "contourpy-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bcc98d397c3dea45d5b262029564b29cb8e945f2607a38bee6163694c0a8b4ef"},
- {file = "contourpy-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2bf5c846c257578b03d498b20f54f53551616a507d8e5463511c58bb58e9a9cf"},
- {file = "contourpy-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdacddb18d55ffec42d1907079cdc04ec4fa8a990cdf5b9d9fe67d281fc0d12e"},
- {file = "contourpy-1.0.5-cp310-cp310-win32.whl", hash = "sha256:434942fa2f9019b9ae525fb752dc523800c49a1a28fbd6d9240b0fa959573dcc"},
- {file = "contourpy-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:3b3082ade8849130203d461b98c2a061b382c46074b43b4edd5cefd81af92b8a"},
- {file = "contourpy-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:057114f698ffb9e54657e8fda6802e2f5c8fad609845cf6afaf31590ef6a33c0"},
- {file = "contourpy-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:218722a29c5c26677d37c44f5f8a372daf6f07870aad793a97d47eb6ad6b3290"},
- {file = "contourpy-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6c02e22cf09996194bcb3a4784099975cf527d5c29caf759abadf29ebdb2fe27"},
- {file = "contourpy-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0d5ee865b5fd16bf62d72122aadcc90aab296c30c1adb0a32b4b66bd843163e"},
- {file = "contourpy-1.0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d45822b0a2a452327ab4f95efe368d234d5294bbf89a99968be27c7938a21108"},
- {file = "contourpy-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dca5be83a6dfaf933a46e3bc2b9f2685e5ec61b22f6a38ad740aac9c16e9a0ff"},
- {file = "contourpy-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c3f2f6b898a40207843ae01970e57e33d22a26b22f23c6a5e07b4716751085f"},
- {file = "contourpy-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c2b4eab7c12f9cb460509bc34a3b086f9802f0dba27c89a63df4123819ad64af"},
- {file = "contourpy-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09ed9b63f4df8a7591b7a4a26c1ad066dcaafda1f846250fdcb534074a411692"},
- {file = "contourpy-1.0.5-cp311-cp311-win32.whl", hash = "sha256:f670686d99c867d0f24b28ce8c6f02429c6eef5e2674aab287850d0ee2d20437"},
- {file = "contourpy-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:c51568e94f7f232296de30002f2a50f77a7bd346673da3e4f2aaf9d2b833f2e5"},
- {file = "contourpy-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7c9e99aac7b430f6a9f15eebf058c742097cea3369f23a2bfc5e64d374b67e3a"},
- {file = "contourpy-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3210d93ad2af742b6a96cf39792f7181822edbb8fe11c3ef29d1583fe637a8d8"},
- {file = "contourpy-1.0.5-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128bd7acf569f8443ad5b2227f30ac909e4f5399ed221727eeacf0c6476187e6"},
- {file = "contourpy-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:813c2944e940ef8dccea71305bacc942d4b193a021140874b3e58933ec44f5b6"},
- {file = "contourpy-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a74afd8d560eaafe0d9e3e1db8c06081282a05ca4de00ee416195085a79d7d3d"},
- {file = "contourpy-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d0ad9a85f208473b1f3613c45756c7aa6fcc288266a8c7b873f896aaf741b6b"},
- {file = "contourpy-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:60f37acd4e4227c5a29f737d9a85ca3145c529a8dd4bf70af7f0637c61b49222"},
- {file = "contourpy-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:b50e481a4317a8efcfffcfddcd4c9b36eacba440440e70cbe0256aeb6fd6abae"},
- {file = "contourpy-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:0395ae71164bfeb2dedd136e03c71a2718a5aa9873a46f518f4133be0d63e1d2"},
- {file = "contourpy-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3ca40d7844b391d90b864c6a6d1bb6b88b09035fb4d866d64d43c4d26fb0ab64"},
- {file = "contourpy-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3109fa601d2a448cec4643abd3a31f972bf05b7c2f2e83df9d3429878f8c10ae"},
- {file = "contourpy-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:06c4d1dde5ee4f909a8a95ba1eb04040c6c26946b4f3b5beaf10d45f14e940ee"},
- {file = "contourpy-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f54dcc9bb9390fd0636301ead134d46d5229fe86da0db4d974c0fda349f560e"},
- {file = "contourpy-1.0.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46b8e24813e2fb5a3e598c1f8b9ae403e1438cb846a80cc2b33cddf19dddd7f2"},
- {file = "contourpy-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:061e1f066c419ffe25b615a1df031b4832ea1d7f2676937e69e8e00e24512005"},
- {file = "contourpy-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:19ea64fa0cf389d2ebc10974616acfa1fdecbd73d1fd9c72215b782f3c40f561"},
- {file = "contourpy-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dfe924e5a63861c82332a12adeeab955dc8c8009ddbbd80cc2fcca049ff89a49"},
- {file = "contourpy-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bed3a2a823a041e8d249b1a7ec132933e1505299329b5cfe1b2b5ec689ec7675"},
- {file = "contourpy-1.0.5-cp38-cp38-win32.whl", hash = "sha256:0389349875424aa8c5e61f757e894687916bc4e9616cc6afcbd8051aa2428952"},
- {file = "contourpy-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:2b5e334330d82866923015b455260173cb3b9e3b4e297052d758abd262031289"},
- {file = "contourpy-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:def9a01b73c9e27d70ea03b381fb3e7aadfac1f398dbd63751313c3a46747ef5"},
- {file = "contourpy-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:59c827e536bb5e3ef58e06da0faba61fd89a14f30b68bcfeca41f43ca83a1942"},
- {file = "contourpy-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f05d311c937da03b0cd26ac3e14cb991f6ff8fc94f98b3df9713537817539795"},
- {file = "contourpy-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:970a4be7ec84ccda7c27cb4ae74930bbbd477bc8d849ed55ea798084dd5fca8c"},
- {file = "contourpy-1.0.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f7672148f8fca48e4efc16aba24a7455b40c22d4f8abe42475dec6a12b0bb9a"},
- {file = "contourpy-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eba62b7c21a33e72dd8adab2b92dd5610d8527f0b2ac28a8e0770e71b21a13f9"},
- {file = "contourpy-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:dd084459ecdb224e617e4ab3f1d5ebe4d1c48facb41f24952b76aa6ba9712bb0"},
- {file = "contourpy-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c5158616ab39d34b76c50f40c81552ee180598f7825dc7a66fd187d29958820f"},
- {file = "contourpy-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f856652f9b533c6cd2b9ad6836a7fc0e43917d7ff15be46c5baf1350f8cdc5d9"},
- {file = "contourpy-1.0.5-cp39-cp39-win32.whl", hash = "sha256:f1cc623fd6855b25da52b3275e0c9e51711b86a9dccc75f8c9ab4432fd8e42c7"},
- {file = "contourpy-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:e67dcaa34dcd908fcccbf49194211d847c731b6ebaac661c1c889f1bf6af1e44"},
- {file = "contourpy-1.0.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfd634cb9685161b2a51f73a7fc4736fd0d67a56632d52319317afaa27f08243"},
- {file = "contourpy-1.0.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79908b9d02b1d6c1c71ff3b7ad127f3f82e14a8e091ab44b3c7e34b649fea733"},
- {file = "contourpy-1.0.5-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4963cf08f4320d98ae72ec7694291b8ab85cb7da3b0cd824bc32701bc992edf"},
- {file = "contourpy-1.0.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cfc067ddde78b76dcbc9684d82688b7d3c5158fa2254a085f9bcb9586c1e2d8"},
- {file = "contourpy-1.0.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9939796abcadb2810a63dfb26ff8ca4595fe7dd70a3ceae7f607a2639b714307"},
- {file = "contourpy-1.0.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d8150579bf30cdf896906baf256aa200cd50dbe6e565c17d6fd3d678e21ff5de"},
- {file = "contourpy-1.0.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed9c91bf4ce614efed5388c3f989a7cfe08728ab871d995a486ea74ff88993db"},
- {file = "contourpy-1.0.5-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b46a04588ceb7cf132568e0e564a854627ef87a1ed3bf536234540a79ced44b0"},
- {file = "contourpy-1.0.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b85553699862c09937a7a5ea14ee6229087971a7d51ae97d5f4b407f571a2c17"},
- {file = "contourpy-1.0.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:99a8071e351b50827ad976b92ed91845fb614ac67a3c41109b24f3d8bd3afada"},
- {file = "contourpy-1.0.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fb0458d74726937ead9e2effc91144aea5a58ecee9754242f8539a782bed685a"},
- {file = "contourpy-1.0.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f89f0608a5aa8142ed0e53957916623791a88c7f5e5f07ae530c328beeb888f"},
- {file = "contourpy-1.0.5-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce763369e646e59e4ca2c09735cd1bdd3048d909ad5f2bc116e83166a9352f3c"},
- {file = "contourpy-1.0.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c16fa267740d67883899e054cccb4279e002f3f4872873b752c1ba15045ff49"},
- {file = "contourpy-1.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a30e95274f5c0e007ccc759ec258aa5708c534ec058f153ee25ac700a2f1438b"},
- {file = "contourpy-1.0.5.tar.gz", hash = "sha256:896631cd40222aef3697e4e51177d14c3709fda49d30983269d584f034acc8a4"},
+ {file = "contourpy-1.0.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:613c665529899b5d9fade7e5d1760111a0b011231277a0d36c49f0d3d6914bd6"},
+ {file = "contourpy-1.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78ced51807ccb2f45d4ea73aca339756d75d021069604c2fccd05390dc3c28eb"},
+ {file = "contourpy-1.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3b1bd7577c530eaf9d2bc52d1a93fef50ac516a8b1062c3d1b9bcec9ebe329b"},
+ {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8834c14b8c3dd849005e06703469db9bf96ba2d66a3f88ecc539c9a8982e0ee"},
+ {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4052a8a4926d4468416fc7d4b2a7b2a3e35f25b39f4061a7e2a3a2748c4fc48"},
+ {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c0e1308307a75e07d1f1b5f0f56b5af84538a5e9027109a7bcf6cb47c434e72"},
+ {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fc4e7973ed0e1fe689435842a6e6b330eb7ccc696080dda9a97b1a1b78e41db"},
+ {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e8d09d96219ace6cb596506fb9b64ea5f270b2fb9121158b976d88871fcfd1"},
+ {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f33da6b5d19ad1bb5e7ad38bb8ba5c426d2178928bc2b2c44e8823ea0ecb6ff3"},
+ {file = "contourpy-1.0.6-cp310-cp310-win32.whl", hash = "sha256:12a7dc8439544ed05c6553bf026d5e8fa7fad48d63958a95d61698df0e00092b"},
+ {file = "contourpy-1.0.6-cp310-cp310-win_amd64.whl", hash = "sha256:eadad75bf91897f922e0fb3dca1b322a58b1726a953f98c2e5f0606bd8408621"},
+ {file = "contourpy-1.0.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:913bac9d064cff033cf3719e855d4f1db9f1c179e0ecf3ba9fdef21c21c6a16a"},
+ {file = "contourpy-1.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46deb310a276cc5c1fd27958e358cce68b1e8a515fa5a574c670a504c3a3fe30"},
+ {file = "contourpy-1.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b64f747e92af7da3b85631a55d68c45a2d728b4036b03cdaba4bd94bcc85bd6f"},
+ {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50627bf76abb6ba291ad08db583161939c2c5fab38c38181b7833423ab9c7de3"},
+ {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:358f6364e4873f4d73360b35da30066f40387dd3c427a3e5432c6b28dd24a8fa"},
+ {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c78bfbc1a7bff053baf7e508449d2765964d67735c909b583204e3240a2aca45"},
+ {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e43255a83835a129ef98f75d13d643844d8c646b258bebd11e4a0975203e018f"},
+ {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:375d81366afd547b8558c4720337218345148bc2fcffa3a9870cab82b29667f2"},
+ {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b98c820608e2dca6442e786817f646d11057c09a23b68d2b3737e6dcb6e4a49b"},
+ {file = "contourpy-1.0.6-cp311-cp311-win32.whl", hash = "sha256:0e4854cc02006ad6684ce092bdadab6f0912d131f91c2450ce6dbdea78ee3c0b"},
+ {file = "contourpy-1.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:d2eff2af97ea0b61381828b1ad6cd249bbd41d280e53aea5cccd7b2b31b8225c"},
+ {file = "contourpy-1.0.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5b117d29433fc8393b18a696d794961464e37afb34a6eeb8b2c37b5f4128a83e"},
+ {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341330ed19074f956cb20877ad8d2ae50e458884bfa6a6df3ae28487cc76c768"},
+ {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:371f6570a81dfdddbb837ba432293a63b4babb942a9eb7aaa699997adfb53278"},
+ {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9447c45df407d3ecb717d837af3b70cfef432138530712263730783b3d016512"},
+ {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:730c27978a0003b47b359935478b7d63fd8386dbb2dcd36c1e8de88cbfc1e9de"},
+ {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:da1ef35fd79be2926ba80fbb36327463e3656c02526e9b5b4c2b366588b74d9a"},
+ {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:cd2bc0c8f2e8de7dd89a7f1c10b8844e291bca17d359373203ef2e6100819edd"},
+ {file = "contourpy-1.0.6-cp37-cp37m-win32.whl", hash = "sha256:3a1917d3941dd58732c449c810fa7ce46cc305ce9325a11261d740118b85e6f3"},
+ {file = "contourpy-1.0.6-cp37-cp37m-win_amd64.whl", hash = "sha256:06ca79e1efbbe2df795822df2fa173d1a2b38b6e0f047a0ec7903fbca1d1847e"},
+ {file = "contourpy-1.0.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e626cefff8491bce356221c22af5a3ea528b0b41fbabc719c00ae233819ea0bf"},
+ {file = "contourpy-1.0.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dbe6fe7a1166b1ddd7b6d887ea6fa8389d3f28b5ed3f73a8f40ece1fc5a3d340"},
+ {file = "contourpy-1.0.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e13b31d1b4b68db60b3b29f8e337908f328c7f05b9add4b1b5c74e0691180109"},
+ {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79d239fc22c3b8d9d3de492aa0c245533f4f4c7608e5749af866949c0f1b1b9"},
+ {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e8e686a6db92a46111a1ee0ee6f7fbfae4048f0019de207149f43ac1812cf95"},
+ {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2bd02f1a7adff3a1f33e431eb96ab6d7987b039d2946a9b39fe6fb16a1036"},
+ {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:03d1b9c6b44a9e30d554654c72be89af94fab7510b4b9f62356c64c81cec8b7d"},
+ {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b48d94386f1994db7c70c76b5808c12e23ed7a4ee13693c2fc5ab109d60243c0"},
+ {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:208bc904889c910d95aafcf7be9e677726df9ef71e216780170dbb7e37d118fa"},
+ {file = "contourpy-1.0.6-cp38-cp38-win32.whl", hash = "sha256:444fb776f58f4906d8d354eb6f6ce59d0a60f7b6a720da6c1ccb839db7c80eb9"},
+ {file = "contourpy-1.0.6-cp38-cp38-win_amd64.whl", hash = "sha256:9bc407a6af672da20da74823443707e38ece8b93a04009dca25856c2d9adadb1"},
+ {file = "contourpy-1.0.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aa4674cf3fa2bd9c322982644967f01eed0c91bb890f624e0e0daf7a5c3383e9"},
+ {file = "contourpy-1.0.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f56515e7c6fae4529b731f6c117752247bef9cdad2b12fc5ddf8ca6a50965a5"},
+ {file = "contourpy-1.0.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:344cb3badf6fc7316ad51835f56ac387bdf86c8e1b670904f18f437d70da4183"},
+ {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b1e66346acfb17694d46175a0cea7d9036f12ed0c31dfe86f0f405eedde2bdd"},
+ {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8468b40528fa1e15181cccec4198623b55dcd58306f8815a793803f51f6c474a"},
+ {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dedf4c64185a216c35eb488e6f433297c660321275734401760dafaeb0ad5c2"},
+ {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:494efed2c761f0f37262815f9e3c4bb9917c5c69806abdee1d1cb6611a7174a0"},
+ {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:75a2e638042118118ab39d337da4c7908c1af74a8464cad59f19fbc5bbafec9b"},
+ {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a628bba09ba72e472bf7b31018b6281fd4cc903f0888049a3724afba13b6e0b8"},
+ {file = "contourpy-1.0.6-cp39-cp39-win32.whl", hash = "sha256:e1739496c2f0108013629aa095cc32a8c6363444361960c07493818d0dea2da4"},
+ {file = "contourpy-1.0.6-cp39-cp39-win_amd64.whl", hash = "sha256:a457ee72d9032e86730f62c5eeddf402e732fdf5ca8b13b41772aa8ae13a4563"},
+ {file = "contourpy-1.0.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d912f0154a20a80ea449daada904a7eb6941c83281a9fab95de50529bfc3a1da"},
+ {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4081918147fc4c29fad328d5066cfc751da100a1098398742f9f364be63803fc"},
+ {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0537cc1195245bbe24f2913d1f9211b8f04eb203de9044630abd3664c6cc339c"},
+ {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcd556c8fc37a342dd636d7eef150b1399f823a4462f8c968e11e1ebeabee769"},
+ {file = "contourpy-1.0.6-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f6ca38dd8d988eca8f07305125dec6f54ac1c518f1aaddcc14d08c01aebb6efc"},
+ {file = "contourpy-1.0.6-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c1baa49ab9fedbf19d40d93163b7d3e735d9cd8d5efe4cce9907902a6dad391f"},
+ {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:211dfe2bd43bf5791d23afbe23a7952e8ac8b67591d24be3638cabb648b3a6eb"},
+ {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38c6536c2d71ca2f7e418acaf5bca30a3af7f2a2fa106083c7d738337848dbe"},
+ {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b1ee48a130da4dd0eb8055bbab34abf3f6262957832fd575e0cab4979a15a41"},
+ {file = "contourpy-1.0.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5641927cc5ae66155d0c80195dc35726eae060e7defc18b7ab27600f39dd1fe7"},
+ {file = "contourpy-1.0.6-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ee394502026d68652c2824348a40bf50f31351a668977b51437131a90d777ea"},
+ {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b97454ed5b1368b66ed414c754cba15b9750ce69938fc6153679787402e4cdf"},
+ {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0236875c5a0784215b49d00ebbe80c5b6b5d5244b3655a36dda88105334dea17"},
+ {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c593aeff7a0171f639da92cb86d24954bbb61f8a1b530f74eb750a14685832"},
+ {file = "contourpy-1.0.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9b0e7fe7f949fb719b206548e5cde2518ffb29936afa4303d8a1c4db43dcb675"},
+ {file = "contourpy-1.0.6.tar.gz", hash = "sha256:6e459ebb8bb5ee4c22c19cc000174f8059981971a33ce11e17dddf6aca97a142"},
]
cookiecutter = [
{file = "cookiecutter-1.7.3-py2.py3-none-any.whl", hash = "sha256:f8671531fa96ab14339d0c59b4f662a4f12a2ecacd94a0f70a3500843da588e2"},
@@ -1996,62 +1666,6 @@ gitpython = [
{file = "GitPython-3.1.29-py3-none-any.whl", hash = "sha256:41eea0deec2deea139b459ac03656f0dd28fc4a3387240ec1d3c259a2c47850f"},
{file = "GitPython-3.1.29.tar.gz", hash = "sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd"},
]
-greenlet = [
- {file = "greenlet-1.1.3-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:8c287ae7ac921dfde88b1c125bd9590b7ec3c900c2d3db5197f1286e144e712b"},
- {file = "greenlet-1.1.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:870a48007872d12e95a996fca3c03a64290d3ea2e61076aa35d3b253cf34cd32"},
- {file = "greenlet-1.1.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:7c5227963409551ae4a6938beb70d56bf1918c554a287d3da6853526212fbe0a"},
- {file = "greenlet-1.1.3-cp27-cp27m-win32.whl", hash = "sha256:9fae214f6c43cd47f7bef98c56919b9222481e833be2915f6857a1e9e8a15318"},
- {file = "greenlet-1.1.3-cp27-cp27m-win_amd64.whl", hash = "sha256:de431765bd5fe62119e0bc6bc6e7b17ac53017ae1782acf88fcf6b7eae475a49"},
- {file = "greenlet-1.1.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:510c3b15587afce9800198b4b142202b323bf4b4b5f9d6c79cb9a35e5e3c30d2"},
- {file = "greenlet-1.1.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:9951dcbd37850da32b2cb6e391f621c1ee456191c6ae5528af4a34afe357c30e"},
- {file = "greenlet-1.1.3-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:07c58e169bbe1e87b8bbf15a5c1b779a7616df9fd3e61cadc9d691740015b4f8"},
- {file = "greenlet-1.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df02fdec0c533301497acb0bc0f27f479a3a63dcdc3a099ae33a902857f07477"},
- {file = "greenlet-1.1.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c88e134d51d5e82315a7c32b914a58751b7353eb5268dbd02eabf020b4c4700"},
- {file = "greenlet-1.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b41d19c0cfe5c259fe6c539fd75051cd39a5d33d05482f885faf43f7f5e7d26"},
- {file = "greenlet-1.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:6f5d4b2280ceea76c55c893827961ed0a6eadd5a584a7c4e6e6dd7bc10dfdd96"},
- {file = "greenlet-1.1.3-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:184416e481295832350a4bf731ba619a92f5689bf5d0fa4341e98b98b1265bd7"},
- {file = "greenlet-1.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd0404d154084a371e6d2bafc787201612a1359c2dee688ae334f9118aa0bf47"},
- {file = "greenlet-1.1.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a43bbfa9b6cfdfaeefbd91038dde65ea2c421dc387ed171613df340650874f2"},
- {file = "greenlet-1.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce5b64dfe8d0cca407d88b0ee619d80d4215a2612c1af8c98a92180e7109f4b5"},
- {file = "greenlet-1.1.3-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:903fa5716b8fbb21019268b44f73f3748c41d1a30d71b4a49c84b642c2fed5fa"},
- {file = "greenlet-1.1.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:0118817c9341ef2b0f75f5af79ac377e4da6ff637e5ee4ac91802c0e379dadb4"},
- {file = "greenlet-1.1.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:466ce0928e33421ee84ae04c4ac6f253a3a3e6b8d600a79bd43fd4403e0a7a76"},
- {file = "greenlet-1.1.3-cp35-cp35m-win32.whl", hash = "sha256:65ad1a7a463a2a6f863661329a944a5802c7129f7ad33583dcc11069c17e622c"},
- {file = "greenlet-1.1.3-cp35-cp35m-win_amd64.whl", hash = "sha256:7532a46505470be30cbf1dbadb20379fb481244f1ca54207d7df3bf0bbab6a20"},
- {file = "greenlet-1.1.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:caff52cb5cd7626872d9696aee5b794abe172804beb7db52eed1fd5824b63910"},
- {file = "greenlet-1.1.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:db41f3845eb579b544c962864cce2c2a0257fe30f0f1e18e51b1e8cbb4e0ac6d"},
- {file = "greenlet-1.1.3-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e8533f5111704d75de3139bf0b8136d3a6c1642c55c067866fa0a51c2155ee33"},
- {file = "greenlet-1.1.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9537e4baf0db67f382eb29255a03154fcd4984638303ff9baaa738b10371fa57"},
- {file = "greenlet-1.1.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8bfd36f368efe0ab2a6aa3db7f14598aac454b06849fb633b762ddbede1db90"},
- {file = "greenlet-1.1.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0877a9a2129a2c56a2eae2da016743db7d9d6a05d5e1c198f1b7808c602a30e"},
- {file = "greenlet-1.1.3-cp36-cp36m-win32.whl", hash = "sha256:88b04e12c9b041a1e0bcb886fec709c488192638a9a7a3677513ac6ba81d8e79"},
- {file = "greenlet-1.1.3-cp36-cp36m-win_amd64.whl", hash = "sha256:4f166b4aca8d7d489e82d74627a7069ab34211ef5ebb57c300ec4b9337b60fc0"},
- {file = "greenlet-1.1.3-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:cd16a89efe3a003029c87ff19e9fba635864e064da646bc749fc1908a4af18f3"},
- {file = "greenlet-1.1.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5b756e6730ea59b2745072e28ad27f4c837084688e6a6b3633c8b1e509e6ae0e"},
- {file = "greenlet-1.1.3-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:9b2f7d0408ddeb8ea1fd43d3db79a8cefaccadd2a812f021333b338ed6b10aba"},
- {file = "greenlet-1.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b4817c34c9272c65550b788913620f1fdc80362b209bc9d7dd2f40d8793080"},
- {file = "greenlet-1.1.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d58a5a71c4c37354f9e0c24c9c8321f0185f6945ef027460b809f4bb474bfe41"},
- {file = "greenlet-1.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dd51d2650e70c6c4af37f454737bf4a11e568945b27f74b471e8e2a9fd21268"},
- {file = "greenlet-1.1.3-cp37-cp37m-win32.whl", hash = "sha256:048d2bed76c2aa6de7af500ae0ea51dd2267aec0e0f2a436981159053d0bc7cc"},
- {file = "greenlet-1.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:77e41db75f9958f2083e03e9dd39da12247b3430c92267df3af77c83d8ff9eed"},
- {file = "greenlet-1.1.3-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:1626185d938d7381631e48e6f7713e8d4b964be246073e1a1d15c2f061ac9f08"},
- {file = "greenlet-1.1.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1ec2779774d8e42ed0440cf8bc55540175187e8e934f2be25199bf4ed948cd9e"},
- {file = "greenlet-1.1.3-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f2f908239b7098799b8845e5936c2ccb91d8c2323be02e82f8dcb4a80dcf4a25"},
- {file = "greenlet-1.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b181e9aa6cb2f5ec0cacc8cee6e5a3093416c841ba32c185c30c160487f0380"},
- {file = "greenlet-1.1.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2cf45e339cabea16c07586306a31cfcc5a3b5e1626d365714d283732afed6809"},
- {file = "greenlet-1.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6200a11f003ec26815f7e3d2ded01b43a3810be3528dd760d2f1fa777490c3cd"},
- {file = "greenlet-1.1.3-cp38-cp38-win32.whl", hash = "sha256:db5b25265010a1b3dca6a174a443a0ed4c4ab12d5e2883a11c97d6e6d59b12f9"},
- {file = "greenlet-1.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:095a980288fe05adf3d002fbb180c99bdcf0f930e220aa66fcd56e7914a38202"},
- {file = "greenlet-1.1.3-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:cbc1eb55342cbac8f7ec159088d54e2cfdd5ddf61c87b8bbe682d113789331b2"},
- {file = "greenlet-1.1.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:694ffa7144fa5cc526c8f4512665003a39fa09ef00d19bbca5c8d3406db72fbe"},
- {file = "greenlet-1.1.3-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:aa741c1a8a8cc25eb3a3a01a62bdb5095a773d8c6a86470bde7f607a447e7905"},
- {file = "greenlet-1.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3a669f11289a8995d24fbfc0e63f8289dd03c9aaa0cc8f1eab31d18ca61a382"},
- {file = "greenlet-1.1.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76a53bfa10b367ee734b95988bd82a9a5f0038a25030f9f23bbbc005010ca600"},
- {file = "greenlet-1.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fb0aa7f6996879551fd67461d5d3ab0c3c0245da98be90c89fcb7a18d437403"},
- {file = "greenlet-1.1.3-cp39-cp39-win32.whl", hash = "sha256:5fbe1ab72b998ca77ceabbae63a9b2e2dc2d963f4299b9b278252ddba142d3f1"},
- {file = "greenlet-1.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:ffe73f9e7aea404722058405ff24041e59d31ca23d1da0895af48050a07b6932"},
- {file = "greenlet-1.1.3.tar.gz", hash = "sha256:bcb6c6dd1d6be6d38d6db283747d07fda089ff8c559a835236560a4410340455"},
-]
h11 = [
{file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
@@ -2111,10 +1725,6 @@ idna = [
{file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
]
-importlib-metadata = [
- {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"},
- {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"},
-]
iso8601 = [
{file = "iso8601-1.1.0-py3-none-any.whl", hash = "sha256:8400e90141bf792bce2634df533dc57e3bee19ea120a87bebcd3da89a58ad73f"},
{file = "iso8601-1.1.0.tar.gz", hash = "sha256:32811e7b81deee2063ea6d2e94f8819a86d1f3811e49d23623a41fa832bef03f"},
@@ -2281,10 +1891,6 @@ lxml = [
{file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9"},
{file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"},
]
-markdown = [
- {file = "Markdown-3.4.1-py3-none-any.whl", hash = "sha256:08fb8465cffd03d10b9dd34a5c3fea908e20391a2a90b88d66362cb05beed186"},
- {file = "Markdown-3.4.1.tar.gz", hash = "sha256:3b809086bb6efad416156e00a0da66fe47618a5d6918dd688f53f40c8e4cfeff"},
-]
markupsafe = [
{file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
{file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
@@ -2493,14 +2099,6 @@ nonebot-adapter-onebot = [
{file = "nonebot_adapter_onebot-2.1.5-py3-none-any.whl", hash = "sha256:d2a46694c402d5f3c5f6951955a78bbf779e17039d282c612cc1fcff77bc6044"},
{file = "nonebot_adapter_onebot-2.1.5.tar.gz", hash = "sha256:e740422cceebc1f0379da788ccddaa7937f7d88c140e2a5ea9ba0e91ddee867e"},
]
-nonebot-plugin-apscheduler = [
- {file = "nonebot-plugin-apscheduler-0.2.0.tar.gz", hash = "sha256:7b63e99a611b657533b48fcf1f8c6627c18c2eb3fa820a906cd4ec4666c0ceb0"},
- {file = "nonebot_plugin_apscheduler-0.2.0-py3-none-any.whl", hash = "sha256:9285ee84ca1cfa4db73c86cedb5911bbbd25a21ec0cd5f22447cd12f89e48fb4"},
-]
-nonebot-plugin-htmlrender = [
- {file = "nonebot-plugin-htmlrender-0.1.1.tar.gz", hash = "sha256:509bc2906936e71f57f20023ac658d3639898724d0a472b0c65a9c6c6bd571ff"},
- {file = "nonebot_plugin_htmlrender-0.1.1-py3-none-any.whl", hash = "sha256:107f0726e93e94ab5fe86090226a8b7b8a39c73098da406373b8b34408985bd9"},
-]
nonebot2 = [
{file = "nonebot2-2.0.0rc1-py3-none-any.whl", hash = "sha256:99c70300b9d0755bba6ed50b7399f44f6213e119157bc026b960b3e157a38416"},
{file = "nonebot2-2.0.0rc1.tar.gz", hash = "sha256:6e5a0abf24086d05d5c2a56c971a551ece2a343ff29f83b76b398bf717b92e16"},
@@ -2540,73 +2138,65 @@ packaging = [
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pillow = [
- {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"},
- {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831e648102c82f152e14c1a0938689dbb22480c548c8d4b8b248b3e50967b88c"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc1d2451e8a3b4bfdb9caf745b58e6c7a77d2e469159b0d527a4554d73694d1"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:136659638f61a251e8ed3b331fc6ccd124590eeff539de57c5f80ef3a9594e58"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c66f70fb539301e064f6478d7453e820d8a2c631da948a23384865cd95544"},
- {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"},
- {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"},
- {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"},
- {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:408673ed75594933714482501fe97e055a42996087eeca7e5d06e33218d05aa8"},
- {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:727dd1389bc5cb9827cbd1f9d40d2c2a1a0c9b32dd2261db522d22a604a6eec9"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:15928f824870535c85dbf949c09d6ae7d3d6ac2d6efec80f3227f73eefba741c"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a"},
- {file = "Pillow-9.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5b87da55a08acb586bad5c3aa3b86505f559b84f39035b233d5bf844b0834b1"},
- {file = "Pillow-9.2.0-cp311-cp311-win32.whl", hash = "sha256:b6d5e92df2b77665e07ddb2e4dbd6d644b78e4c0d2e9272a852627cdba0d75cf"},
- {file = "Pillow-9.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bf088c1ce160f50ea40764f825ec9b72ed9da25346216b91361eef8ad1b8f8c"},
- {file = "Pillow-9.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:2c58b24e3a63efd22554c676d81b0e57f80e0a7d3a5874a7e14ce90ec40d3069"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef7592281f7c174d3d6cbfbb7ee5984a671fcd77e3fc78e973d492e9bf0eb3f"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd7b9c7139dc8258d164b55696ecd16c04607f1cc33ba7af86613881ffe4ac8"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a138441e95562b3c078746a22f8fca8ff1c22c014f856278bdbdd89ca36cff1b"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:93689632949aff41199090eff5474f3990b6823404e45d66a5d44304e9cdc467"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:f3fac744f9b540148fa7715a435d2283b71f68bfb6d4aae24482a890aed18b59"},
- {file = "Pillow-9.2.0-cp37-cp37m-win32.whl", hash = "sha256:fa768eff5f9f958270b081bb33581b4b569faabf8774726b283edb06617101dc"},
- {file = "Pillow-9.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:69bd1a15d7ba3694631e00df8de65a8cb031911ca11f44929c97fe05eb9b6c1d"},
- {file = "Pillow-9.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:030e3460861488e249731c3e7ab59b07c7853838ff3b8e16aac9561bb345da14"},
- {file = "Pillow-9.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74a04183e6e64930b667d321524e3c5361094bb4af9083db5c301db64cd341f3"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d33a11f601213dcd5718109c09a52c2a1c893e7461f0be2d6febc2879ec2402"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fd6f5e3c0e4697fa7eb45b6e93996299f3feee73a3175fa451f49a74d092b9f"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a647c0d4478b995c5e54615a2e5360ccedd2f85e70ab57fbe817ca613d5e63b8"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4134d3f1ba5f15027ff5c04296f13328fecd46921424084516bdb1b2548e66ff"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:bc431b065722a5ad1dfb4df354fb9333b7a582a5ee39a90e6ffff688d72f27a1"},
- {file = "Pillow-9.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1536ad017a9f789430fb6b8be8bf99d2f214c76502becc196c6f2d9a75b01b76"},
- {file = "Pillow-9.2.0-cp38-cp38-win32.whl", hash = "sha256:2ad0d4df0f5ef2247e27fc790d5c9b5a0af8ade9ba340db4a73bb1a4a3e5fb4f"},
- {file = "Pillow-9.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ec52c351b35ca269cb1f8069d610fc45c5bd38c3e91f9ab4cbbf0aebc136d9c8"},
- {file = "Pillow-9.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ed2c4ef2451de908c90436d6e8092e13a43992f1860275b4d8082667fbb2ffc"},
- {file = "Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ad2f835e0ad81d1689f1b7e3fbac7b01bb8777d5a985c8962bedee0cc6d43da"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea98f633d45f7e815db648fd7ff0f19e328302ac36427343e4432c84432e7ff4"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7761afe0126d046974a01e030ae7529ed0ca6a196de3ec6937c11df0df1bc91c"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a54614049a18a2d6fe156e68e188da02a046a4a93cf24f373bffd977e943421"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5aed7dde98403cd91d86a1115c78d8145c83078e864c1de1064f52e6feb61b20"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:13b725463f32df1bfeacbf3dd197fb358ae8ebcd8c5548faa75126ea425ccb60"},
- {file = "Pillow-9.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:808add66ea764ed97d44dda1ac4f2cfec4c1867d9efb16a33d158be79f32b8a4"},
- {file = "Pillow-9.2.0-cp39-cp39-win32.whl", hash = "sha256:337a74fd2f291c607d220c793a8135273c4c2ab001b03e601c36766005f36885"},
- {file = "Pillow-9.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:fac2d65901fb0fdf20363fbd345c01958a742f2dc62a8dd4495af66e3ff502a4"},
- {file = "Pillow-9.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ad2277b185ebce47a63f4dc6302e30f05762b688f8dc3de55dbae4651872cdf3"},
- {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7b502bc34f6e32ba022b4a209638f9e097d7a9098104ae420eb8186217ebbb"},
- {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1f14f5f691f55e1b47f824ca4fdcb4b19b4323fe43cc7bb105988cad7496be"},
- {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:dfe4c1fedfde4e2fbc009d5ad420647f7730d719786388b7de0999bf32c0d9fd"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:f07f1f00e22b231dd3d9b9208692042e29792d6bd4f6639415d2f23158a80013"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1802f34298f5ba11d55e5bb09c31997dc0c6aed919658dfdf0198a2fe75d5490"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d4cafe22f050b46d983b71c707162d63d796a1235cdf8b9d7a112e97b15bac"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96b5e6874431df16aee0c1ba237574cb6dff1dcb173798faa6a9d8b399a05d0e"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"},
- {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"},
-]
-playwright = [
- {file = "playwright-1.27.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:3b584bc23bfacfbfb91777663d2b68891d8a16c5c2228b4702c6a7d29c0ac364"},
- {file = "playwright-1.27.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:771d690aaa933bb40f60abbe7935979cfa9a5bec498bbc57cd87baf038348d2b"},
- {file = "playwright-1.27.1-py3-none-macosx_11_0_universal2.whl", hash = "sha256:db89faac3c535e289f8463b184ffd4523d97b5e959d97bae330d29522c5bfb9d"},
- {file = "playwright-1.27.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:5e7be8dc52b9e3340a08fd15b7d3cdd635efd51c0c62bd1edba55f0bfeea293c"},
- {file = "playwright-1.27.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c32bfbbb6e6529f7f7176551eda7061e9f205e19259052ef663dcae7109c1f12"},
- {file = "playwright-1.27.1-py3-none-win32.whl", hash = "sha256:464f3a0ea48aeb42adbdada88a91fd36d4311ae7020d2ab58f410c4c92e0ddfe"},
- {file = "playwright-1.27.1-py3-none-win_amd64.whl", hash = "sha256:fc8ce323cf116e27902f327cee1cba6fc0c5400e9281df8e53d3355de88336ba"},
+ {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"},
+ {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"},
+ {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"},
+ {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"},
+ {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"},
+ {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"},
+ {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"},
+ {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"},
+ {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"},
+ {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"},
+ {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"},
+ {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"},
+ {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"},
+ {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"},
+ {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"},
+ {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"},
+ {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"},
+ {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"},
+ {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"},
+ {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"},
+ {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"},
+ {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"},
+ {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"},
+ {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"},
+ {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"},
+ {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"},
+ {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"},
+ {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"},
+ {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"},
+ {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"},
+ {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"},
+ {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"},
+ {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"},
+ {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"},
+ {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"},
+ {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"},
+ {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"},
+ {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"},
+ {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"},
+ {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"},
+ {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"},
+ {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"},
+ {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"},
+ {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"},
+ {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"},
+ {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"},
+ {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"},
+ {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"},
+ {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"},
+ {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"},
+ {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"},
+ {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"},
+ {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"},
+ {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"},
+ {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"},
+ {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"},
+ {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"},
+ {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"},
+ {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"},
]
poyo = [
{file = "poyo-0.5.0-py2.py3-none-any.whl", hash = "sha256:3e2ca8e33fdc3c411cd101ca395668395dd5dc7ac775b8e809e3def9f9fe041a"},
@@ -2695,26 +2285,14 @@ pydantic = [
{file = "pydantic-1.9.2-py3-none-any.whl", hash = "sha256:78a4d6bdfd116a559aeec9a4cfe77dda62acc6233f8b56a716edad2651023e5e"},
{file = "pydantic-1.9.2.tar.gz", hash = "sha256:8cb0bc509bfb71305d7a59d00163d5f9fc4530f0881ea32c74ff4f74c85f3d3d"},
]
-pyee = [
- {file = "pyee-8.1.0-py2.py3-none-any.whl", hash = "sha256:383973b63ad7ed5e3c0311f8b179c52981f9e7b3eaea0e9a830d13ec34dde65f"},
- {file = "pyee-8.1.0.tar.gz", hash = "sha256:92dacc5bd2bdb8f95aa8dd2585d47ca1c4840e2adb95ccf90034d64f725bfd31"},
-]
pyfiglet = [
{file = "pyfiglet-0.8.post1-py2.py3-none-any.whl", hash = "sha256:d555bcea17fbeaf70eaefa48bb119352487e629c9b56f30f383e2c62dd67a01c"},
{file = "pyfiglet-0.8.post1.tar.gz", hash = "sha256:c6c2321755d09267b438ec7b936825a4910fec696292139e664ca8670e103639"},
]
-pygments = [
- {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"},
- {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"},
-]
pygtrie = [
{file = "pygtrie-2.5.0-py3-none-any.whl", hash = "sha256:8795cda8105493d5ae159a5bef313ff13156c5d4d72feddefacaad59f8c8ce16"},
{file = "pygtrie-2.5.0.tar.gz", hash = "sha256:203514ad826eb403dab1d2e2ddd034e0d1534bbe4dbe0213bb0593f66beba4e2"},
]
-pymdown-extensions = [
- {file = "pymdown_extensions-9.7-py3-none-any.whl", hash = "sha256:767d07d9dead0f52f5135545c01f4ed627f9a7918ee86c646d893e24c59db87d"},
- {file = "pymdown_extensions-9.7.tar.gz", hash = "sha256:651b0107bc9ee790aedea3673cb88832c0af27d2569cf45c2de06f1d65292e96"},
-]
pyparsing = [
{file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
{file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
@@ -2739,21 +2317,13 @@ python-jose = [
{file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"},
{file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"},
]
-python-markdown-math = [
- {file = "python-markdown-math-0.8.tar.gz", hash = "sha256:8564212af679fc18d53f38681f16080fcd3d186073f23825c7ce86fadd3e3635"},
- {file = "python_markdown_math-0.8-py3-none-any.whl", hash = "sha256:c685249d84b5b697e9114d7beb352bd8ca2e07fd268fd4057ffca888c14641e5"},
-]
python-slugify = [
{file = "python-slugify-6.1.2.tar.gz", hash = "sha256:272d106cb31ab99b3496ba085e3fea0e9e76dcde967b5e9992500d1f785ce4e1"},
{file = "python_slugify-6.1.2-py2.py3-none-any.whl", hash = "sha256:7b2c274c308b62f4269a9ba701aa69a797e9bca41aeee5b3a9e79e36b6656927"},
]
pytz = [
- {file = "pytz-2022.5-py2.py3-none-any.whl", hash = "sha256:335ab46900b1465e714b4fda4963d87363264eb662aab5e65da039c25f1f5b22"},
- {file = "pytz-2022.5.tar.gz", hash = "sha256:c4d88f472f54d615e9cd582a5004d1e5f624854a6a27a6211591c251f22a6914"},
-]
-pytz-deprecation-shim = [
- {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"},
- {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"},
+ {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"},
+ {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"},
]
pyyaml = [
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
@@ -2842,24 +2412,27 @@ rsa = [
{file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"},
]
scikit-learn = [
- {file = "scikit-learn-1.1.2.tar.gz", hash = "sha256:7c22d1305b16f08d57751a4ea36071e2215efb4c09cb79183faa4e8e82a3dbf8"},
- {file = "scikit_learn-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6c840f662b5d3377c4ccb8be1fc21bb52cb5d8b8790f8d6bf021739f84e543cf"},
- {file = "scikit_learn-1.1.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2b8db962360c93554cab7bb3c096c4a24695da394dd4b3c3f13409f409b425bc"},
- {file = "scikit_learn-1.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e7d1fc817867a350133f937aaebcafbc06192517cbdf0cf7e5774ad4d1adb9f"},
- {file = "scikit_learn-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec3ea40d467966821843210c02117d82b097b54276fdcfb50f4dfb5c60dbe39"},
- {file = "scikit_learn-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:bbef6ea1c012ff9f3e6f6e9ca006b8772d8383e177b898091e68fbd9b3f840f9"},
- {file = "scikit_learn-1.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a90ca42fe8242fd6ff56cda2fecc5fca586a88a24ab602d275d2d0dcc0b928fb"},
- {file = "scikit_learn-1.1.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a682ec0f82b6f30fb07486daed1c8001b6683cc66b51877644dfc532bece6a18"},
- {file = "scikit_learn-1.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c33e16e9a165af6012f5be530ccfbb672e2bc5f9b840238a05eb7f6694304e3f"},
- {file = "scikit_learn-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f94c0146bad51daef919c402a3da8c1c6162619653e1c00c92baa168fda292f2"},
- {file = "scikit_learn-1.1.2-cp38-cp38-win32.whl", hash = "sha256:2f46c6e3ff1054a5ec701646dcfd61d43b8ecac4d416014daed8843cf4c33d4d"},
- {file = "scikit_learn-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1e706deca9b2ad87ae27dafd5ac4e8eff01b6db492ed5c12cef4735ec5f21ea"},
- {file = "scikit_learn-1.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:567417dbbe6a6278399c3e6daf1654414a5a1a4d818d28f251fa7fc28730a1bf"},
- {file = "scikit_learn-1.1.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:d6f232779023c3b060b80b5c82e5823723bc424dcac1d1a148aa2492c54d245d"},
- {file = "scikit_learn-1.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:589d46f28460469f444b898223b13d99db9463e1038dc581ba698111f612264b"},
- {file = "scikit_learn-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76800652fb6d6bf527bce36ecc2cc25738b28fe1a17bd294a218fff8e8bd6d50"},
- {file = "scikit_learn-1.1.2-cp39-cp39-win32.whl", hash = "sha256:1c8fecb7c9984d9ec2ea48898229f98aad681a0873e0935f2b7f724fbce4a047"},
- {file = "scikit_learn-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:407e9a1cb9e6ba458a539986a9bd25546a757088095b3aab91d465b79a760d37"},
+ {file = "scikit-learn-1.1.3.tar.gz", hash = "sha256:bef51978a51ec19977700fe7b86aecea49c825884f3811756b74a3b152bb4e35"},
+ {file = "scikit_learn-1.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8e9dd76c7274055d1acf4526b8efb16a3531c26dcda714a0c16da99bf9d41900"},
+ {file = "scikit_learn-1.1.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ee47f68d973cee7009f06edb956f2f5588a0f230f24a2a70175fd0ecf36e2653"},
+ {file = "scikit_learn-1.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da5a2e95fef9805b1750e4abda4e834bf8835d26fc709a391543b53feee7bd0e"},
+ {file = "scikit_learn-1.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:701181792a28c82fecae12adb5d15d0ecf57bffab7cf4bdbb52c7b3fd428d540"},
+ {file = "scikit_learn-1.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:30e27721adc308e8fd9f419f43068e43490005f911edf4476a9e585059fa8a83"},
+ {file = "scikit_learn-1.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5699cded6c0685426433c7e5afe0fecad80ec831ec7fa264940e50c796775cc5"},
+ {file = "scikit_learn-1.1.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:2ee2c649f2231b68511aabb0dc827edd8936aad682acc6263c34aed11bc95dac"},
+ {file = "scikit_learn-1.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d1c1394e38a3319ace620381f6f23cc807d8780e9915c152449a86fc8f1db21"},
+ {file = "scikit_learn-1.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:250da993701da88bf475e7c5746abf1285ea0ae47e4d0917cd13afd6600bb162"},
+ {file = "scikit_learn-1.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:fd3ee69d36d42a7dcbb17e355a5653af5fd241a7dfd9133080b3dde8d9e2aafb"},
+ {file = "scikit_learn-1.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f5644663987ee221f5d1f47a593271b966c271c236fe05634e6bdc06041b5a2b"},
+ {file = "scikit_learn-1.1.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:748f2bd632d6993e8918d43f1a26c380aeda4e122a88840d4c3a9af99d4239fe"},
+ {file = "scikit_learn-1.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd55c6fbef7608dbce1f22baf289dfcc6eb323247daa3c3542f73d389c724786"},
+ {file = "scikit_learn-1.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38814f66285318f2e241305cca545eaa9b4126c65aa5dd78c69371f235f78e2b"},
+ {file = "scikit_learn-1.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:f4931f2a6c06e02c6c17a05f8ae397e2545965bc7a0a6cb38c8cd7d4fba8624d"},
+ {file = "scikit_learn-1.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6785b8a3093329bf90ac01801be5525551728ae73edb11baa175df660820add4"},
+ {file = "scikit_learn-1.1.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:28b2bd6a1419acd522ff45d282c8ba23dbccb5338802ab0ee12baa4ade0aba4c"},
+ {file = "scikit_learn-1.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23fb9e74b813cc2528b5167d82ed08950b11106ccf50297161875e45152fb311"},
+ {file = "scikit_learn-1.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5d4231af7199531e77da1b78a4cc6b3d960a00b1ec672578ac818aae2b9c35d"},
+ {file = "scikit_learn-1.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:4d3a19166d4e1cdfcab975c68f471e046ce01e74c42a9a33fa89a14c2fcedf60"},
]
scipy = [
{file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"},
@@ -2977,14 +2550,6 @@ typing-extensions = [
{file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"},
{file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
]
-tzdata = [
- {file = "tzdata-2022.5-py2.py3-none-any.whl", hash = "sha256:323161b22b7802fdc78f20ca5f6073639c64f1a7227c40cd3e19fd1d0ce6650a"},
- {file = "tzdata-2022.5.tar.gz", hash = "sha256:e15b2b3005e2546108af42a0eb4ccab4d9e225e2dfbf4f77aad50c70a4b1f3ab"},
-]
-tzlocal = [
- {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"},
- {file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"},
-]
ujson = [
{file = "ujson-5.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff4928dc1e9704b567171c16787238201fdbf023665573c12c02146fe1e02eec"},
{file = "ujson-5.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1dc2f46c31ef22b0aaa28cd71be897bea271e700636658d573df9c43c49ebbd0"},
@@ -3252,7 +2817,3 @@ yarl = [
{file = "yarl-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:de49d77e968de6626ba7ef4472323f9d2e5a56c1d85b7c0e2a190b2173d3b9be"},
{file = "yarl-1.8.1.tar.gz", hash = "sha256:af887845b8c2e060eb5605ff72b6f2dd2aab7a761379373fd89d314f4752abbf"},
]
-zipp = [
- {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"},
- {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"},
-]
diff --git a/pyproject.toml b/pyproject.toml
index c98d199..5f4966e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "LittlePaimon"
-version = "3.0.0rc1"
+version = "3.0.0rc2"
description = "小派蒙!原神qq群机器人,基于NoneBot2的UID查询、抽卡导出分析、模拟抽卡、实时便签、札记等多功能小助手。"
authors = ["惜月 <277073121@qq.com>"]
license = "AGPL"
@@ -14,8 +14,6 @@ url = "https://pypi.tuna.tsinghua.edu.cn/simple"
python = "^3.8"
nonebot2 = "~2.0.0-beta.5"
nonebot-adapter-onebot = "^2.1"
-nonebot-plugin-apscheduler = "^0.2.0"
-nonebot-plugin-htmlrender = "^0.1.1"
beautifulsoup4 = "^4.10.0"
httpx = "^0.23.0"
lxml = "^4.8.0"
diff --git a/requirements.txt b/requirements.txt
index f425c1a..bd7a183 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,93 +1,76 @@
--index-url https://pypi.tuna.tsinghua.edu.cn/simple
-aiofiles==0.8.0; python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.7.3" and python_full_version < "4.0.0"
aiosqlite==0.17.0; python_version >= "3.7" and python_version < "4.0"
amis-python==1.0.5; python_version >= "3.7" and python_version < "4.0"
anyio==3.6.2; python_full_version >= "3.6.2" and python_version >= "3.8" and python_version < "4.0"
-apscheduler==3.9.1; python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.8"
-backports.zoneinfo==0.2.1; python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "3.9" and (python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.8") or python_full_version >= "3.5.0" and python_version < "3.9" and python_version >= "3.8" and (python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.8")
beautifulsoup4==4.11.1; python_full_version >= "3.6.0"
certifi==2022.9.24; python_version >= "3.7"
click==8.1.3; python_version >= "3.8" and python_version < "4.0"
colorama==0.4.6; python_version >= "3.8" and python_full_version < "3.0.0" and platform_system == "Windows" and python_version < "4.0" and sys_platform == "win32" or python_full_version >= "3.7.0" and platform_system == "Windows" and python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32"
-contourpy==1.0.5; python_version >= "3.8"
+contourpy==1.0.6; python_version >= "3.8"
cycler==0.11.0; python_version >= "3.8"
ecdsa==0.18.0; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
expandvars==0.9.0; python_version >= "3.4"
-fastapi==0.79.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.3" and python_full_version < "4.0.0"
+fastapi==0.79.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.1"
fonttools==4.38.0; python_version >= "3.8"
gitdb==4.0.9; python_version >= "3.7"
gitpython==3.1.29; python_version >= "3.7"
-greenlet==1.1.3; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.7"
h11==0.12.0; python_version >= "3.8" and python_version < "4.0"
httpcore==0.15.0; python_version >= "3.7"
httptools==0.5.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.5.0"
httpx==0.23.0; python_version >= "3.7"
idna==3.4
-importlib-metadata==5.0.0; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.7" and python_version < "3.10"
iso8601==1.1.0; python_full_version >= "3.6.2" and python_version < "4.0" and python_version >= "3.7"
jieba==0.42.1
-jinja2==3.1.2; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.7" and python_version < "4.0"
+jinja2==3.1.2; python_version >= "3.7" and python_version < "4.0"
joblib==1.2.0; python_version >= "3.8"
kiwisolver==1.4.4; python_version >= "3.8"
-loguru==0.6.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.3" and python_full_version < "4.0.0"
+loguru==0.6.0; python_version >= "3.8" and python_version < "4.0"
lxml==4.9.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-markdown==3.4.1; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.7"
-markupsafe==2.1.1; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.7" and python_version < "4.0"
+markupsafe==2.1.1; python_version >= "3.7" and python_version < "4.0"
matplotlib==3.6.1; python_version >= "3.8"
msgpack==1.0.4; python_version >= "3.8" and python_version < "4.0"
multidict==6.0.2; python_version >= "3.8" and python_version < "4.0"
nonebot-adapter-onebot==2.1.5; python_version >= "3.8" and python_version < "4.0"
-nonebot-plugin-apscheduler==0.2.0; python_version >= "3.8" and python_version < "4.0"
-nonebot-plugin-htmlrender==0.1.1; python_full_version >= "3.7.3" and python_full_version < "4.0.0"
nonebot2==2.0.0rc1; python_version >= "3.8" and python_version < "4.0"
numpy==1.23.4; python_version >= "3.8"
packaging==21.3; python_version >= "3.8"
-pillow==9.2.0; python_version >= "3.7"
-playwright==1.27.1; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.7"
+pillow==9.3.0; python_version >= "3.7"
psutil==5.9.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
pyasn1==0.4.8; python_version >= "3.6" and python_version < "4"
-pydantic==1.9.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.3" and python_full_version < "4.0.0"
-pyee==8.1.0; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.7"
-pygments==2.13.0; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.6"
-pygtrie==2.5.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.3" and python_full_version < "4.0.0"
-pymdown-extensions==9.7; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.7"
+pydantic==1.9.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.1"
+pygtrie==2.5.0; python_version >= "3.8" and python_version < "4.0"
pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.8"
pypika-tortoise==0.1.6; python_version >= "3.7" and python_version < "4.0"
pypinyin==0.47.1; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0" and python_version < "4")
python-dateutil==2.8.2; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.8"
python-dotenv==0.21.0
python-jose==3.3.0
-python-markdown-math==0.8; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.6"
-pytz-deprecation-shim==0.1.0.post0; python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.8"
-pytz==2022.5; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.8")
+pytz==2022.6; python_version >= "3.7" and python_version < "4.0"
pyyaml==6.0; python_version >= "3.8" and python_version < "4.0"
rfc3986==1.5.0; python_version >= "3.7"
rsa==4.9; python_version >= "3.6" and python_version < "4"
ruamel.yaml.clib==0.2.7; platform_python_implementation == "CPython" and python_version < "3.11" and python_version >= "3.5"
ruamel.yaml==0.17.21; python_version >= "3"
-scikit-learn==1.1.2; python_version >= "3.8"
+scikit-learn==1.1.3; python_version >= "3.8"
scipy==1.9.3; python_version >= "3.8"
setuptools-scm==7.0.5; python_version >= "3.8"
shapely==1.8.5.post1; python_version >= "3.6"
-six==1.16.0; python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.8"
+six==1.16.0; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.8"
smmap==5.0.0; python_version >= "3.7"
sniffio==1.3.0; python_full_version >= "3.6.2" and python_version >= "3.8" and python_version < "4.0"
soupsieve==2.3.2.post1; python_version >= "3.6" and python_full_version >= "3.6.0"
starlette==0.19.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.1"
threadpoolctl==3.1.0; python_version >= "3.8"
tomli==2.0.1; python_version >= "3.8"
-tomlkit==0.10.2; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.3" and python_full_version < "4.0.0"
+tomlkit==0.10.2; python_version >= "3.8" and python_version < "4.0"
tortoise-orm==0.19.2; python_version >= "3.7" and python_version < "4.0"
tqdm==4.64.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-typing-extensions==4.4.0; python_version >= "3.8" and python_version <= "3.8" and python_full_version >= "3.7.3" and python_full_version < "4.0.0"
-tzdata==2022.5; python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" and platform_system == "Windows" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.8" and platform_system == "Windows"
-tzlocal==4.2; python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.8"
+typing-extensions==4.4.0; python_version >= "3.8" and python_version < "3.10" and python_full_version >= "3.6.1"
ujson==5.5.0; python_version >= "3.7"
-uvicorn==0.18.3; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.3" and python_full_version < "4.0.0"
+uvicorn==0.18.3; python_version >= "3.8" and python_version < "4.0"
uvloop==0.17.0; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy" and python_version >= "3.8" and python_version < "4.0"
watchfiles==0.18.0; python_version >= "3.8" and python_version < "4.0"
websockets==10.4; python_version >= "3.8" and python_version < "4.0"
win32-setctime==1.1.0; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32"
-yarl==1.8.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.3" and python_full_version < "4.0.0"
-zipp==3.10.0; python_full_version >= "3.7.3" and python_full_version < "4.0.0" and python_version >= "3.7" and python_version < "3.10"
+yarl==1.8.1; python_version >= "3.8" and python_version < "4.0"