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"