mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-12-16 13:40:53 +08:00
✨ 3.2
版本支持,项目目录小重构
This commit is contained in:
parent
530a72f53c
commit
6373f2ec6d
@ -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'))
|
||||
|
@ -1 +1,5 @@
|
||||
from .path import *
|
||||
from .config.manage import ConfigManager, ConfigModel
|
||||
from .plugin.manage import PluginManager, HIDDEN_PLUGINS, MatcherInfo, PluginInfo
|
||||
|
||||
config = ConfigManager.config
|
||||
|
32
LittlePaimon/config/config/manage.py
Normal file
32
LittlePaimon/config/config/manage.py
Normal file
@ -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}'
|
@ -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地址')
|
||||
|
@ -58,12 +58,12 @@
|
||||
"10000070": ["妮露", "舞女"],
|
||||
"10000071": ["赛诺", "风纪官"],
|
||||
"10000072": ["坎蒂丝", "潘森"],
|
||||
"10000101": ["纳西妲", "草神", "艹神", "小草王", "小吉祥草王", "草萝莉", "艹萝莉"],
|
||||
"10000102": ["散兵", "伞兵", "国崩", "卢本伟", "大炮", "sb"],
|
||||
"10000073": ["纳西妲", "草神", "艹神", "小草王", "小吉祥草王", "草萝莉", "艹萝莉"],
|
||||
"10000074": ["莱依拉", "莱伊拉"],
|
||||
"10000075": ["散兵", "伞兵", "国崩", "卢本伟", "大炮", "sb", "流浪者"],
|
||||
"10000103": ["迪希雅"],
|
||||
"10000104": ["艾尔海森", "苏"],
|
||||
"10000105": ["白术"],
|
||||
"10000106": ["莱依拉"]
|
||||
"10000105": ["白术"]
|
||||
},
|
||||
"武器": {
|
||||
"磐岩结绿": [
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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"
|
||||
}
|
||||
}
|
@ -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"
|
||||
}
|
||||
}
|
@ -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": [
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
]
|
||||
}
|
||||
}
|
@ -591,6 +591,14 @@
|
||||
"暴击率": 1,
|
||||
"暴击伤害": 1
|
||||
}
|
||||
},
|
||||
"纳西妲": {
|
||||
"常规": {
|
||||
"攻击力": 1,
|
||||
"元素精通": 1,
|
||||
"暴击率": 1,
|
||||
"暴击伤害": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"Talent": {
|
||||
|
@ -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",
|
||||
|
162
LittlePaimon/config/plugin/manage.py
Normal file
162
LittlePaimon/config/plugin/manage.py
Normal file
@ -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('插件管理器', '<g>初始化完成</g>')
|
||||
|
||||
@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())
|
35
LittlePaimon/config/plugin/model.py
Normal file
35
LittlePaimon/config/plugin/model.py
Normal file
@ -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]] = []
|
||||
"""命令列表"""
|
@ -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("<u><y>[数据库]</y></u><g>连接成功</g>")
|
||||
@ -110,3 +95,29 @@ async def disconnect():
|
||||
"""
|
||||
await Tortoise.close_connections()
|
||||
logger.opt(colors=True).success("<u><y>[数据库]</y></u><r>连接已断开</r>")
|
||||
|
||||
|
||||
@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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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):
|
||||
"""
|
||||
云原神
|
||||
|
@ -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)
|
@ -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('插件管理器', '<r>无法读取配置文件</r>,请检查是否已将<m>config/paimon_config_default.yml</m>复制为<m>config/paimon_config.yml</m>')
|
||||
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('插件管理器', '<g>初始化完成</g>')
|
||||
|
||||
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
|
@ -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 *
|
||||
|
@ -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)
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
@ -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]指令绑定',
|
||||
|
@ -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
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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(
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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'
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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': '周一',
|
||||
|
@ -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='小派蒙管理',
|
@ -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
|
||||
|
||||
|
@ -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 (?P<func>ban|unban) (?P<plugin>([\w ]*)|all|全部) ?(-g (?P<group>[\d ]*) ?)?(-u (?P<user>[\d ]*) ?)?(?P<reserve>-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())
|
||||
|
||||
|
@ -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):
|
@ -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('网页截图失败,无法访问该网页,请稍候再试')
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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/'
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
@ -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 != '更新成功':
|
||||
|
@ -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
|
||||
|
@ -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():
|
||||
|
@ -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
|
||||
|
48
LittlePaimon/utils/scheduler.py
Normal file
48
LittlePaimon/utils/scheduler.py
Normal file
@ -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("<y>Scheduler Started</y>")
|
||||
|
||||
|
||||
async def _shutdown_scheduler():
|
||||
if scheduler.running:
|
||||
scheduler.shutdown()
|
||||
logger.opt(colors=True).info("<y>Scheduler Shutdown</y>")
|
||||
|
||||
|
||||
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())
|
@ -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)
|
||||
|
@ -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', '<g>启用成功</g>,默认地址为https://127.0.0.1:13579/LittlePaimon/login')
|
||||
logger.info('Web UI', f'<g>启用成功</g>,默认地址为<m>http://127.0.0.1:{DRIVER.config.port}/LittlePaimon/login</m>')
|
||||
|
||||
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')
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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': '保存成功'
|
||||
|
@ -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
|
||||
|
||||
|
@ -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}',
|
||||
|
753
poetry.lock
generated
753
poetry.lock
generated
@ -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"},
|
||||
]
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user