diff --git a/README.md b/README.md index 8b0d0dac..e3a43787 100644 --- a/README.md +++ b/README.md @@ -286,6 +286,17 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能 ## 更新 +### 2022/10/15 + +* nonebot2版本更新为rc1 +* 我的道具改为图片形式 +* 商品添加图标与是否为被动道具(被动道具无法被主动使用) +* 商品添加使用前方法和使用后方法(类似hook),使用方法具体查看文档或签到商品文件中注册的例子 + +### 2022/10/9 + +* 修复碧蓝档案角色获取问题,换源 [@pull/1124](https://github.com/HibiKier/zhenxun_bot/pull/1124) + ### 2022/10/7 * 修复 B 站请求返回 -401 错误 [@pull/1119](https://github.com/HibiKier/zhenxun_bot/pull/1119) @@ -368,7 +379,7 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能 * 修复b站转发解析av号无法解析 * B站订阅直播订阅支持短号 * 开箱提供重置开箱命令,重置今日所有开箱数据(重置次数,并不会删除今日已开箱记录) -* 提供全局字典GDict,通过from utils.manager import GDict导入 +* 提供全局字典GDict,通过from utils.utils import GDict导入 * 适配omega 13w张图的数据结构表(建议删表重导) * 除首次启动外将配置替换加入单次定时任务,加快启动速度 * fix: WordBank.check() [@pull/1008](https://github.com/HibiKier/zhenxun_bot/pull/1008) diff --git a/basic_plugins/scripts.py b/basic_plugins/scripts.py index 8965aac0..3e711d4b 100755 --- a/basic_plugins/scripts.py +++ b/basic_plugins/scripts.py @@ -15,7 +15,7 @@ from configs.path_config import TEXT_PATH from asyncio.exceptions import TimeoutError from typing import List from utils.http_utils import AsyncHttpx -from utils.manager import GDict +from utils.utils import GDict from utils.utils import scheduler import nonebot diff --git a/basic_plugins/shop/buy.py b/basic_plugins/shop/buy.py index e33e54e6..8a7ab9af 100644 --- a/basic_plugins/shop/buy.py +++ b/basic_plugins/shop/buy.py @@ -1,4 +1,6 @@ from nonebot import on_command + +from models.shop_log import ShopLog from services.log import logger from nonebot.adapters.onebot.v11 import GroupMessageEvent, Message from nonebot.params import CommandArg @@ -46,10 +48,7 @@ async def _(event: GroupMessageEvent, arg: Message = CommandArg()): for x in await GoodsInfo.get_all_goods() if x.goods_limit_time > time.time() or x.goods_limit_time == 0 ] - goods_name_list = [ - x.goods_name - for x in goods_list - ] + goods_name_list = [x.goods_name for x in goods_list] msg = arg.extract_plain_text().strip().split() num = 1 if len(msg) > 1: @@ -77,11 +76,15 @@ async def _(event: GroupMessageEvent, arg: Message = CommandArg()): await BagUser.get_gold(event.user_id, event.group_id) ) < goods.goods_price * num * goods.goods_discount: await buy.finish("您的金币好像不太够哦", at_sender=True) - flag, n = await GoodsInfo.check_user_daily_purchase(goods, event.user_id, event.group_id, num) + flag, n = await GoodsInfo.check_user_daily_purchase( + goods, event.user_id, event.group_id, num + ) if flag: await buy.finish(f"该次购买将超过每日次数限制,目前该道具还可以购买{n}次哦", at_sender=True) if await BagUser.buy_property(event.user_id, event.group_id, goods, num): - await GoodsInfo.add_user_daily_purchase(goods, event.user_id, event.group_id, num) + await GoodsInfo.add_user_daily_purchase( + goods, event.user_id, event.group_id, num + ) await buy.send( f"花费 {goods.goods_price * num * goods.goods_discount} 金币购买 {goods.goods_name} ×{num} 成功!", at_sender=True, @@ -90,6 +93,14 @@ async def _(event: GroupMessageEvent, arg: Message = CommandArg()): f"USER {event.user_id} GROUP {event.group_id} " f"花费 {goods.goods_price*num} 金币购买 {goods.goods_name} ×{num} 成功!" ) + await ShopLog.add_shop_log( + event.user_id, + event.group_id, + 0, + goods.goods_name, + num, + goods.goods_price * num * goods.goods_discount, + ) else: await buy.send(f"{goods.goods_name} 购买失败!", at_sender=True) logger.info( diff --git a/basic_plugins/shop/my_props.py b/basic_plugins/shop/my_props/__init__.py similarity index 76% rename from basic_plugins/shop/my_props.py rename to basic_plugins/shop/my_props/__init__.py index f19a8e10..4f5e9827 100644 --- a/basic_plugins/shop/my_props.py +++ b/basic_plugins/shop/my_props/__init__.py @@ -1,4 +1,7 @@ from nonebot import on_command + +from utils.message_builder import image +from ._data_source import create_bag_image from services.log import logger from nonebot.adapters.onebot.v11 import GroupMessageEvent from models.bag_user import BagUser @@ -32,10 +35,11 @@ my_props = on_command("我的道具", priority=5, block=True, permission=GROUP) async def _(event: GroupMessageEvent): props = await BagUser.get_property(event.user_id, event.group_id) if props: - rst = "" - for i, p in enumerate(props.keys()): - rst += f"{i+1}.{p}\t×{props[p]}\n" - await my_props.send("\n" + rst[:-1], at_sender=True) + await my_props.send(image(b64=await create_bag_image(props))) + # rst = "" + # for i, p in enumerate(props.keys()): + # rst += f"{i+1}.{p}\t×{props[p]}\n" + # await my_props.send("\n" + rst[:-1], at_sender=True) logger.info(f"USER {event.user_id} GROUP {event.group_id} 查看我的道具") else: await my_props.finish("您的背包里没有任何的道具噢~", at_sender=True) diff --git a/basic_plugins/shop/my_props/_data_source.py b/basic_plugins/shop/my_props/_data_source.py new file mode 100644 index 00000000..ea142251 --- /dev/null +++ b/basic_plugins/shop/my_props/_data_source.py @@ -0,0 +1,66 @@ +from typing import Dict, List + +from models.bag_user import BagUser +from models.goods_info import GoodsInfo +from utils.image_utils import BuildImage +from configs.path_config import IMAGE_PATH + + +icon_path = IMAGE_PATH / 'shop_icon' + + +async def create_bag_image(props: Dict[str, int]): + """ + 说明: + 创建背包道具图片 + 参数: + :param props: 道具仓库字典 + """ + goods_list = await GoodsInfo.get_all_goods() + active_props = await _init_prop(props, [x for x in goods_list if not x.is_passive]) + passive_props = await _init_prop(props, [x for x in goods_list if x.is_passive]) + A = BuildImage(active_props.w + passive_props.w + 100, max(active_props.h, passive_props.h) + 100, font="CJGaoDeGuo.otf", font_size=30, color="#f9f6f2") + await A.apaste(active_props, (50, 70)) + await A.apaste(passive_props, (active_props.w + 50, 70)) + await A.aline((active_props.w + 45, 70, active_props.w + 45, A.h - 20), fill=(0, 0, 0)) + await A.atext((50, 30), "主动道具") + await A.atext((active_props.w + 55, 30), "被动道具") + return A.pic2bs4() + + +async def _init_prop(props: Dict[str, int], _props: List[GoodsInfo]) -> BuildImage: + """ + 说明: + 构造道具列表图片 + 参数: + :param props: 道具仓库字典 + :param _props: 道具列表 + """ + active_name = [x.goods_name for x in _props] + name_list = [x for x in props.keys() if x in active_name] + temp_img = BuildImage(0, 0, font_size=20) + image_list = [] + num_list = [] + for i, name in enumerate(name_list): + img = BuildImage(temp_img.getsize(name)[0] + 50, 30, font="msyh.ttf", font_size=20, color="#f9f6f2") + await img.atext((30, 5), f'{i + 1}.{name}') + goods = [x for x in _props if x.goods_name == name][0] + if goods.icon and (icon_path / goods.icon).exists(): + icon = BuildImage(30, 30, background=icon_path / goods.icon) + await img.apaste(icon, alpha=True) + image_list.append(img) + num_list.append(BuildImage(30, 30, font_size=20, plain_text=f"×{props[name]}")) + max_w = 0 + num_max_w = 0 + h = 0 + for img, num in zip(image_list, num_list): + h += img.h + max_w = max_w if max_w > img.w else img.w + num_max_w = num_max_w if num_max_w > num.w else num.w + A = BuildImage(max_w + num_max_w + 30, h, color="#f9f6f2") + curr_h = 0 + for img, num in zip(image_list, num_list): + await A.apaste(img, (0, curr_h)) + await A.apaste(num, (max_w + 20, curr_h + 5), True) + curr_h += img.h + return A diff --git a/basic_plugins/shop/shop_handle/__init__.py b/basic_plugins/shop/shop_handle/__init__.py index 0fd06280..6323f8af 100644 --- a/basic_plugins/shop/shop_handle/__init__.py +++ b/basic_plugins/shop/shop_handle/__init__.py @@ -6,7 +6,6 @@ from utils.message_builder import image from nonebot.permission import SUPERUSER from utils.utils import is_number, scheduler from nonebot.params import CommandArg -from nonebot.plugin import export from services.log import logger import os @@ -51,11 +50,6 @@ __plugin_block_limit__ = { "limit_type": "group" } -# 导出方法供其他插件使用 -export = export() -export.register_goods = register_goods -export.delete_goods = delete_goods -export.update_goods = update_goods shop_help = on_command("商店", priority=5, block=True) diff --git a/basic_plugins/shop/shop_handle/data_source.py b/basic_plugins/shop/shop_handle/data_source.py index 7f7ba537..701eaaea 100644 --- a/basic_plugins/shop/shop_handle/data_source.py +++ b/basic_plugins/shop/shop_handle/data_source.py @@ -2,49 +2,17 @@ from PIL import Image from models.goods_info import GoodsInfo from utils.image_utils import BuildImage -from models.sign_group_user import SignGroupUser from utils.utils import is_number from configs.path_config import IMAGE_PATH from typing import Optional, Union, Tuple -from configs.config import Config -from nonebot import Driver -from nonebot.plugin import require -from utils.decorator.shop import shop_register -import nonebot +from utils.utils import GDict import time -driver: Driver = nonebot.get_driver() +icon_path = IMAGE_PATH / 'shop_icon' -use = require("use") - - -@driver.on_startup -async def init_default_shop_goods(): - """ - 导入内置的三个商品 - """ - - @shop_register( - name=("好感度双倍加持卡Ⅰ", "好感度双倍加持卡Ⅱ", "好感度双倍加持卡Ⅲ"), - price=(30, 150, 250), - des=( - "下次签到双倍好感度概率 + 10%(谁才是真命天子?)(同类商品将覆盖)", - "下次签到双倍好感度概率 + 20%(平平庸庸)(同类商品将覆盖)", - "下次签到双倍好感度概率 + 30%(金币才是真命天子!)(同类商品将覆盖)", - ), - load_status=Config.get_config("shop", "IMPORT_DEFAULT_SHOP_GOODS"), - daily_limit=(10, 20, 30), - ** {"好感度双倍加持卡Ⅰ_prob": 0.1, "好感度双倍加持卡Ⅱ_prob": 0.2, "好感度双倍加持卡Ⅲ_prob": 0.3}, - ) - async def sign_card(user_id: int, group_id: int, prob: float): - user = await SignGroupUser.ensure(user_id, group_id) - await user.update(add_probability=prob).apply() - - -@driver.on_bot_connect -async def _(): - await shop_register.load_register() +GDict['run_sql'].append("ALTER TABLE goods_info ADD is_passive boolean DEFAULT False;") +GDict['run_sql'].append("ALTER TABLE goods_info ADD icon VARCHAR(255);") # 创建商店界面 @@ -63,7 +31,7 @@ async def create_shop_help() -> str: if goods.goods_limit_time == 0 or time.time() < goods.goods_limit_time: h += len(goods.goods_description.strip().split("\n")) * font_h + 80 _list.append(goods) - A = BuildImage(1000, h, color="#f9f6f2") + A = BuildImage(1100, h, color="#f9f6f2") current_h = 0 total_n = 0 for goods in _list: @@ -106,9 +74,12 @@ async def create_shop_help() -> str: await goods_image.apaste(name_image, (0, 5), True, center_type="by_width") await goods_image.atext((15, 50), f"简介:{goods.goods_description}") await goods_image.acircle_corner(20) - await bk.apaste(goods_image, alpha=True) + if goods.icon and (icon_path / goods.icon).exists(): + icon = BuildImage(100, 100, background=icon_path / goods.icon) + await bk.apaste(icon) + await bk.apaste(goods_image, (100, 0), alpha=True) n = 0 - _w = 550 + _w = 650 # 添加限时图标和时间 if goods.goods_limit_time > 0: n += 140 @@ -162,14 +133,14 @@ async def create_shop_help() -> str: if total_n < n: total_n = n if n: - await bk.aline((550, -1, 550 + n, -1), "#a29ad6", 5) - await bk.aline((550, 80, 550 + n, 80), "#a29ad6", 5) + await bk.aline((650, -1, 650 + n, -1), "#a29ad6", 5) + await bk.aline((650, 80, 650 + n, 80), "#a29ad6", 5) # 添加限时图标和时间 idx += 1 await A.apaste(bk, (0, current_h), True) current_h += 90 - w = 850 + w = 950 if total_n: w += total_n h = A.h + 230 + 100 @@ -197,6 +168,8 @@ async def register_goods( discount: Optional[float] = 1, limit_time: Optional[int] = 0, daily_limit: Optional[int] = 0, + is_passive: Optional[bool] = False, + icon: Optional[str] = None, ) -> bool: """ 添加商品 @@ -209,6 +182,8 @@ async def register_goods( :param discount: 商品折扣 :param limit_time: 商品限时销售时间,单位为小时 :param daily_limit: 每日购买次数限制 + :param is_passive: 是否为被动 + :param icon: 图标 :return: 是否添加成功 """ if not await GoodsInfo.get_goods_info(name): @@ -220,7 +195,7 @@ async def register_goods( else 0 ) return await GoodsInfo.add_goods( - name, int(price), des, float(discount), limit_time, daily_limit + name, int(price), des, float(discount), limit_time, daily_limit, is_passive, icon ) return False @@ -272,6 +247,7 @@ async def update_goods(**kwargs) -> Tuple[bool, str, str]: discount = goods.goods_discount limit_time = goods.goods_limit_time daily_limit = goods.daily_limit + is_passive = goods.is_passive new_time = 0 tmp = "" if kwargs.get("price"): @@ -294,6 +270,9 @@ async def update_goods(**kwargs) -> Tuple[bool, str, str]: if kwargs.get("daily_limit"): tmp += f'每日购买限制:{daily_limit} --> {kwargs["daily_limit"]}\n' if daily_limit else "取消了购买限制\n" daily_limit = int(kwargs["daily_limit"]) + if kwargs.get("is_passive"): + tmp += f'被动道具:{is_passive} --> {kwargs["is_passive"]}\n' + des = kwargs["is_passive"] await GoodsInfo.update_goods( name, int(price), @@ -304,7 +283,8 @@ async def update_goods(**kwargs) -> Tuple[bool, str, str]: if limit_time != 0 and new_time else 0 ), - daily_limit + daily_limit, + is_passive ) return True, name, tmp[:-1], diff --git a/basic_plugins/shop/use/__init__.py b/basic_plugins/shop/use/__init__.py index 69cc8540..0b0e2712 100644 --- a/basic_plugins/shop/use/__init__.py +++ b/basic_plugins/shop/use/__init__.py @@ -1,13 +1,16 @@ from nonebot import on_command + +from models.shop_log import ShopLog from services.log import logger from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, Message from nonebot.params import CommandArg + +from utils.decorator.shop import NotMeetUseConditionsException from utils.utils import is_number from models.bag_user import BagUser from nonebot.adapters.onebot.v11.permission import GROUP from services.db_context import db -from nonebot.plugin import export -from .data_source import effect, register_use, func_manager +from .data_source import effect, register_use, func_manager, build_params __zx_plugin_name__ = "商店 - 使用道具" @@ -30,9 +33,6 @@ __plugin_settings__ = { "cmd": ["商店", "使用道具"], } -# 导出方法供其他插件使用 -export = export() -export.register_use = register_use use_props = on_command("使用道具", priority=5, block=True, permission=GROUP) @@ -45,23 +45,29 @@ async def _(bot: Bot, event: GroupMessageEvent, arg: Message = CommandArg()): if len(msg_sp) > 1 and is_number(msg_sp[-1]) and int(msg_sp[-1]) > 0: num = int(msg.split()[-1]) msg = " ".join(msg.split()[:-1]) - property_ = await BagUser.get_property(event.user_id, event.group_id) + property_ = await BagUser.get_property(event.user_id, event.group_id, True) if property_: - async with db.transaction(): - if is_number(msg): - if 0 < int(msg) <= len(property_): - name = list(property_.keys())[int(msg) - 1] - else: - await use_props.finish("仔细看看自己的道具仓库有没有这个道具?", at_sender=True) + name = None + if is_number(msg): + if 0 < int(msg) <= len(property_): + name = list(property_.keys())[int(msg) - 1] else: - if msg not in property_.keys(): - await use_props.finish("道具名称错误!", at_sender=True) - name = msg - _user_prop_count = property_[name] - if num > _user_prop_count: - await use_props.finish(f"道具数量不足,无法使用{num}次!") - if num > (n := func_manager.get_max_num_limit(name)): - await use_props.finish(f"该道具单次只能使用 {n} 个!") + await use_props.finish("仔细看看自己的道具仓库有没有这个道具?", at_sender=True) + else: + if msg not in property_.keys(): + await use_props.finish("道具名称错误!", at_sender=True) + name = msg + _user_prop_count = property_[name] + if num > _user_prop_count: + await use_props.finish(f"道具数量不足,无法使用{num}次!") + if num > (n := func_manager.get_max_num_limit(name)): + await use_props.finish(f"该道具单次只能使用 {n} 个!") + model, kwargs = build_params(bot, event, name, num) + try: + await func_manager.run_handle(type_="before_handle", param=model, **kwargs) + except NotMeetUseConditionsException as e: + await use_props.finish(e.get_info(), at_sender=True) + async with db.transaction(): if await BagUser.delete_property( event.user_id, event.group_id, name, num ): @@ -72,10 +78,12 @@ async def _(bot: Bot, event: GroupMessageEvent, arg: Message = CommandArg()): logger.info( f"USER {event.user_id} GROUP {event.group_id} 使用道具 {name} {num} 次成功" ) + await ShopLog.add_shop_log(event.user_id, event.group_id, 1, name, num) else: await use_props.send(f"使用道具 {name} {num} 次失败!", at_sender=True) logger.info( f"USER {event.user_id} GROUP {event.group_id} 使用道具 {name} {num} 次失败" ) + await func_manager.run_handle(type_="after_handle", param=model, **kwargs) else: await use_props.send("您的背包里没有任何的道具噢", at_sender=True) diff --git a/basic_plugins/shop/use/data_source.py b/basic_plugins/shop/use/data_source.py index 0861a712..84cd055e 100644 --- a/basic_plugins/shop/use/data_source.py +++ b/basic_plugins/shop/use/data_source.py @@ -3,7 +3,7 @@ from services.log import logger from nonebot.adapters.onebot.v11 import Bot from pydantic import create_model from utils.models import ShopParam -from typing import Optional, Union +from typing import Optional, Union, Callable, List, Tuple, Dict, Any from types import MappingProxyType import inspect import asyncio @@ -13,6 +13,30 @@ class GoodsUseFuncManager: def __init__(self): self._data = {} + def register_use_before_handle(self, goods_name: str, fun_list: List[Callable]): + """ + 说明: + 注册商品使用前函数 + 参数: + :param goods_name: 商品名称 + :param fun_list: 函数列表 + """ + if fun_list: + self._data[goods_name]["before_handle"] = fun_list + logger.info(f"register_use_before_handle 成功注册商品:{goods_name} 的{len(fun_list)}个使用前函数") + + def register_use_after_handle(self, goods_name: str, fun_list: List[Callable]): + """ + 说明: + 注册商品使用后函数 + 参数: + :param goods_name: 商品名称 + :param fun_list: 函数列表 + """ + if fun_list: + self._data[goods_name]["after_handle"] = fun_list + logger.info(f"register_use_after_handle 成功注册商品:{goods_name} 的{len(fun_list)}个使用后函数") + def register_use(self, goods_name: str, **kwargs): """ 注册商品使用方法 @@ -26,7 +50,7 @@ class GoodsUseFuncManager: 判断商品使用方法是否被注册 :param goods_name: 商品名称 """ - return bool(self ._data.get(goods_name)) + return bool(self._data.get(goods_name)) def get_max_num_limit(self, goods_name: str) -> int: """ @@ -37,6 +61,21 @@ class GoodsUseFuncManager: return self._data[goods_name]["kwargs"]["max_num_limit"] return 1 + def _parse_args(self, args_: MappingProxyType, param: ShopParam, **kwargs): + param_list_ = [] + _bot = param.bot + param.bot = None + param_json = param.dict() + param_json["bot"] = _bot + for par in args_.keys(): + if par in ["shop_param"]: + param_list_.append(param) + elif par not in ["args", "kwargs"]: + param_list_.append(param_json.get(par)) + if kwargs.get(par) is not None: + del kwargs[par] + return param_list_ + async def use( self, param: ShopParam, **kwargs ) -> Optional[Union[str, MessageSegment]]: @@ -45,31 +84,18 @@ class GoodsUseFuncManager: :param param: BaseModel :param kwargs: kwargs """ - def parse_args(args_: MappingProxyType): - param_list_ = [] - _bot = param.bot - param.bot = None - param_json = param.dict() - param_json["bot"] = _bot - for par in args_.keys(): - if par in ["shop_param"]: - param_list_.append(param) - elif par not in ["args", "kwargs"]: - param_list_.append(param_json.get(par)) - if kwargs.get(par) is not None: - del kwargs[par] - return param_list_ goods_name = param.goods_name if self.exists(goods_name): + # 使用方法 args = inspect.signature(self._data[goods_name]["func"]).parameters if args and list(args.keys())[0] != "kwargs": if asyncio.iscoroutinefunction(self._data[goods_name]["func"]): return await self._data[goods_name]["func"]( - *parse_args(args) + *self._parse_args(args, param, **kwargs) ) else: return self._data[goods_name]["func"]( - *parse_args(args) + *self._parse_args(args, param, **kwargs) ) else: if asyncio.iscoroutinefunction(self._data[goods_name]["func"]): @@ -81,6 +107,21 @@ class GoodsUseFuncManager: **kwargs, ) + async def run_handle(self, goods_name: str, type_: str, param: ShopParam, **kwargs): + if self._data[goods_name].get(type_): + for func in self._data[goods_name].get(type_): + args = inspect.signature(func).parameters + if args and list(args.keys())[0] != "kwargs": + if asyncio.iscoroutinefunction(func): + await func(*self._parse_args(args, param, **kwargs)) + else: + func(*self._parse_args(args, param, **kwargs)) + else: + if asyncio.iscoroutinefunction(func): + await func(**kwargs) + else: + func(**kwargs) + def check_send_success_message(self, goods_name: str) -> bool: """ 检查是否发送使用成功信息 @@ -115,6 +156,34 @@ class GoodsUseFuncManager: func_manager = GoodsUseFuncManager() +def build_params( + bot: Bot, event: GroupMessageEvent, goods_name: str, num: int +) -> Tuple[ShopParam, Dict[str, Any]]: + """ + 说明: + 构造参数 + 参数: + :param bot: bot + :param event: event + :param goods_name: 商品名称 + :param num: 数量 + :return: + """ + _kwargs = func_manager.get_kwargs(goods_name) + return ( + func_manager.init_model(goods_name, bot, event, num), + { + **_kwargs, + "_bot": bot, + "event": event, + "group_id": event.group_id, + "user_id": event.user_id, + "num": num, + "goods_name": goods_name, + }, + ) + + async def effect( bot: Bot, event: GroupMessageEvent, goods_name: str, num: int ) -> Optional[Union[str, MessageSegment]]: @@ -130,24 +199,14 @@ async def effect( # try: if func_manager.exists(goods_name): _kwargs = func_manager.get_kwargs(goods_name) - return await func_manager.use( - func_manager.init_model(goods_name, bot, event, num), - **{ - **_kwargs, - "_bot": bot, - "event": event, - "group_id": event.group_id, - "user_id": event.user_id, - "num": num, - "goods_name": goods_name, - }, - ) + model, kwargs = build_params(bot, event, goods_name, num) + return await func_manager.use(model, **kwargs) # except Exception as e: # logger.error(f"use 商品生效函数effect 发生错误 {type(e)}:{e}") return None -def register_use(goods_name: str, func, **kwargs): +def register_use(goods_name: str, func: Callable, **kwargs): """ 注册商品使用方法 :param goods_name: 商品名称 diff --git a/models/bag_user.py b/models/bag_user.py index ba24a3dc..0027d0d6 100755 --- a/models/bag_user.py +++ b/models/bag_user.py @@ -2,6 +2,7 @@ from services.db_context import db from typing import Dict from typing import Optional, List from services.log import logger +from .goods_info import GoodsInfo class BagUser(db.Model): @@ -62,17 +63,24 @@ class BagUser(db.Model): return 100 @classmethod - async def get_property(cls, user_qq: int, group_id: int) -> Dict[str, int]: + async def get_property(cls, user_qq: int, group_id: int, only_active: bool = False) -> Dict[str, int]: """ 说明: 获取当前道具 参数: :param user_qq: qq号 :param group_id: 所在群号 + :param only_active: 仅仅获取主动使用的道具 """ query = cls.query.where((cls.user_qq == user_qq) & (cls.group_id == group_id)) user = await query.gino.first() if user: + if only_active and user.property: + data = {} + name_list = [x.goods_name for x in await GoodsInfo.get_all_goods() if not x.is_passive] + for key in [x for x in user.property.keys() if x in name_list]: + data[key] = user.property[key] + return data return user.property else: await cls.create( diff --git a/models/goods_info.py b/models/goods_info.py index 98c99367..f2cfccaf 100644 --- a/models/goods_info.py +++ b/models/goods_info.py @@ -16,6 +16,8 @@ class GoodsInfo(db.Model): daily_purchase_limit = db.Column( db.JSON(), nullable=False, default={} ) # 每日购买限制数据存储 + is_passive = db.Column(db.Boolean(), nullable=False, default=0) # 是否为被动 + icon = db.Column(db.String(), nullable=False, default=0) # 图标 _idx1 = db.Index("goods_group_users_idx1", "goods_name", unique=True) @@ -28,6 +30,8 @@ class GoodsInfo(db.Model): goods_discount: float = 1, goods_limit_time: int = 0, daily_limit: int = 0, + is_passive: bool = False, + icon: Optional[str] = None, ) -> bool: """ 说明: @@ -39,6 +43,8 @@ class GoodsInfo(db.Model): :param goods_discount: 商品折扣 :param goods_limit_time: 商品限时 :param daily_limit: 每日购买限制 + :param is_passive: 是否为被动道具 + :param icon: 图标 """ try: if not await cls.get_goods_info(goods_name): @@ -49,10 +55,12 @@ class GoodsInfo(db.Model): goods_discount=goods_discount, goods_limit_time=goods_limit_time, daily_limit=daily_limit, + is_passive=is_passive, + icon=icon ) return True except Exception as e: - logger.error(f"GoodsInfo add_goods 发生错误 {type(e)}:{e}") + logger.error(f"GoodsInfo add_goods {goods_name} 发生错误 {type(e)}:{e}") return False @classmethod @@ -81,7 +89,9 @@ class GoodsInfo(db.Model): goods_description: Optional[str] = None, goods_discount: Optional[float] = None, goods_limit_time: Optional[int] = None, - daily_limit: Optional[int] = None + daily_limit: Optional[int] = None, + is_passive: Optional[bool] = None, + icon: Optional[str] = None, ) -> bool: """ 说明: @@ -93,6 +103,8 @@ class GoodsInfo(db.Model): :param goods_discount: 商品折扣 :param goods_limit_time: 商品限时时间 :param daily_limit: 每日次数限制 + :param is_passive: 是否为被动 + :param icon: 图标 """ try: query = ( @@ -108,6 +120,8 @@ class GoodsInfo(db.Model): goods_discount=goods_discount or query.goods_discount, goods_limit_time=goods_limit_time if goods_limit_time is not None else query.goods_limit_time, daily_limit=daily_limit if daily_limit is not None else query.daily_limit, + is_passive=is_passive if is_passive is not None else query.is_passive, + icon=icon or query.icon ).apply() return True except Exception as e: diff --git a/models/shop_log.py b/models/shop_log.py new file mode 100644 index 00000000..65b0041e --- /dev/null +++ b/models/shop_log.py @@ -0,0 +1,59 @@ +from datetime import datetime + +from services.db_context import db + + +class ShopLog(db.Model): + __tablename__ = "shop_log" + id = db.Column(db.Integer(), primary_key=True) + user_qq = db.Column(db.BigInteger(), nullable=False) + group_id = db.Column(db.BigInteger(), nullable=False) + type = db.Column(db.Integer(), nullable=False) # 0: 购买,1: 使用 + goods_name = db.Column(db.String(), default=100) + spend_gold = db.Column(db.Integer(), nullable=False) + num = db.Column(db.Integer(), nullable=False) + create_time = db.Column(db.DateTime(timezone=True), nullable=False) + + @classmethod + async def add_shop_log( + cls, + user_qq: int, + group_id: int, + type_: int, + goods_name: str, + num: int, + spend_gold: int = 0, + ): + """ + 说明: + 添加商店购买或使用日志 + 参数: + :param user_qq: qq号 + :param group_id: 所在群号 + :param type_: 类型 + :param goods_name: 商品名称 + :param num: 数量 + :param spend_gold: 花费金币 + """ + await cls.create( + user_qq=user_qq, + group_id=group_id, + type=type_, + goods_name=goods_name, + num=num, + spend_gold=spend_gold, + create_time=datetime.now(), + ) + + @classmethod + async def get_user_log(cls, user_qq: int, group_id: int) -> "ShopLog": + """ + 说明: + 获取用户日志 + 参数: + :param user_qq: qq号 + :param group_id: 所在群号 + """ + return await cls.query.where( + (cls.user_qq == user_qq) & (cls.group_qq == group_id) + ).first() diff --git a/plugins/genshin/query_user/query_memo/__init__.py b/plugins/genshin/query_user/query_memo/__init__.py index e8e7975b..3d66f3bf 100644 --- a/plugins/genshin/query_user/query_memo/__init__.py +++ b/plugins/genshin/query_user/query_memo/__init__.py @@ -3,7 +3,6 @@ from nonebot.adapters.onebot.v11 import MessageEvent, GroupMessageEvent from services.log import logger from .data_source import get_user_memo, get_memo from .._models import Genshin -from nonebot.plugin import export __zx_plugin_name__ = "原神便笺查询" @@ -28,10 +27,6 @@ __plugin_settings__ = { __plugin_block_limit__ = {} -export = export() - -export.get_memo = get_memo - query_memo_matcher = on_command("原神便签查询", aliases={"原神便笺查询", "yss"}, priority=5, block=True) diff --git a/plugins/genshin/query_user/resin_remind/init_task.py b/plugins/genshin/query_user/resin_remind/init_task.py index cc535930..f8cf62a8 100644 --- a/plugins/genshin/query_user/resin_remind/init_task.py +++ b/plugins/genshin/query_user/resin_remind/init_task.py @@ -19,7 +19,9 @@ import pytz driver: Driver = nonebot.get_driver() -get_memo = require("query_memo").get_memo +require("query_memo") + +from ..query_memo import get_memo global_map = {} diff --git a/plugins/pix_gallery/__init__.py b/plugins/pix_gallery/__init__.py index 1b2bc5ac..ad9b48a7 100755 --- a/plugins/pix_gallery/__init__.py +++ b/plugins/pix_gallery/__init__.py @@ -1,5 +1,5 @@ from configs.config import Config -from utils.manager import GDict +from utils.utils import GDict import nonebot diff --git a/plugins/sign_in/__init__.py b/plugins/sign_in/__init__.py index 871cc3e3..fd001d65 100755 --- a/plugins/sign_in/__init__.py +++ b/plugins/sign_in/__init__.py @@ -18,6 +18,7 @@ from configs.path_config import DATA_PATH from services.log import logger from .utils import clear_sign_data_pic from utils.utils import is_number +from .goods_register import driver try: import ujson as json diff --git a/plugins/sign_in/goods_register.py b/plugins/sign_in/goods_register.py new file mode 100644 index 00000000..74351813 --- /dev/null +++ b/plugins/sign_in/goods_register.py @@ -0,0 +1,60 @@ + +from models.sign_group_user import SignGroupUser +from configs.config import Config +from nonebot import Driver +from utils.decorator.shop import shop_register, NotMeetUseConditionsException +import nonebot + +driver: Driver = nonebot.get_driver() + + +@driver.on_startup +async def _(): + """ + 导入内置的三个商品 + """ + + @shop_register( + name=("好感度双倍加持卡Ⅰ", "好感度双倍加持卡Ⅱ", "好感度双倍加持卡Ⅲ"), + price=(30, 150, 250), + des=( + "下次签到双倍好感度概率 + 10%(谁才是真命天子?)(同类商品将覆盖)", + "下次签到双倍好感度概率 + 20%(平平庸庸)(同类商品将覆盖)", + "下次签到双倍好感度概率 + 30%(金币才是真命天子!)(同类商品将覆盖)", + ), + load_status=Config.get_config("shop", "IMPORT_DEFAULT_SHOP_GOODS"), + icon=("favorability_card_1.png", "favorability_card_2.png", "favorability_card_3.png"), + ** {"好感度双倍加持卡Ⅰ_prob": 0.1, "好感度双倍加持卡Ⅱ_prob": 0.2, "好感度双倍加持卡Ⅲ_prob": 0.3}, + ) + async def sign_card(user_id: int, group_id: int, prob: float): + user = await SignGroupUser.ensure(user_id, group_id) + await user.update(add_probability=prob).apply() + + @shop_register( + name="测试道具A", + price=99, + des="随便侧而出", + load_status=False, + icon="sword.png", + ) + async def _(user_id: int, group_id: int): + print(user_id, group_id, '使用测试道具') + + @shop_register.before_handle(name="测试道具A", load_status=False) + async def _(user_id: int, group_id: int): + print(user_id, group_id, '第一个使用前函数(before handle)') + + @shop_register.before_handle(name="测试道具A", load_status=False) + async def _(user_id: int, group_id: int): + print(user_id, group_id, '第二个使用前函数(before handle)222') + raise NotMeetUseConditionsException("太笨了!") # 抛出异常,阻断使用,并返回信息 + + @shop_register.after_handle(name="测试道具A", load_status=False) + async def _(user_id: int, group_id: int): + print(user_id, group_id, '第一个使用后函数(after handle)') + + +@driver.on_bot_connect +async def _(): + await shop_register.load_register() + diff --git a/poetry.lock b/poetry.lock index d245cb25..75356819 100644 --- a/poetry.lock +++ b/poetry.lock @@ -9,7 +9,7 @@ python-versions = ">=3.6,<4.0" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "aiohttp" @@ -33,7 +33,7 @@ speedups = ["aiodns", "brotlipy", "cchardet"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "anyio" @@ -55,7 +55,7 @@ trio = ["trio (>=0.16)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "apscheduler" @@ -86,7 +86,7 @@ zookeeper = ["kazoo"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "async-timeout" @@ -99,7 +99,7 @@ python-versions = ">=3.5.3" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "asyncpg" @@ -117,7 +117,7 @@ test = ["pycodestyle (>=2.7.0,<2.8.0)", "flake8 (>=3.9.2,<3.10.0)", "uvloop (>=0 [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "attrs" @@ -136,7 +136,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "backports.zoneinfo" @@ -152,7 +152,7 @@ tzdata = ["tzdata"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "beautifulsoup4" @@ -172,21 +172,21 @@ lxml = ["lxml"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "bilireq" -version = "0.2.2.post0" +version = "0.2.3.post0" description = "" category = "main" optional = false python-versions = ">=3.7,<4.0" [package.dependencies] -grpcio = ">=1.46.3,<2.0.0" +grpcio = ">=1.49.1,<2.0.0" httpx = ">=0.23.0,<0.24.0" -protobuf = "3.20.1" -rsa = ">=4.8,<5.0" +protobuf = ">=4.21.7,<5.0.0" +rsa = ">=4.9,<5.0" [package.extras] qrcode = ["qrcode[pil] (>=7.3.1,<8.0.0)"] @@ -194,15 +194,15 @@ qrcode = ["qrcode[pil] (>=7.3.1,<8.0.0)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "black" -version = "22.8.0" +version = "22.10.0" description = "The uncompromising code formatter." category = "main" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7" [package.dependencies] click = ">=8.0.0" @@ -221,11 +221,11 @@ uvloop = ["uvloop (>=0.15.2)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "certifi" -version = "2022.9.14" +version = "2022.9.24" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -234,7 +234,7 @@ python-versions = ">=3.6" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "chardet" @@ -247,7 +247,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "click" @@ -263,7 +263,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "cn2an" @@ -280,7 +280,7 @@ proces = ">=0.1.0" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "colorama" @@ -293,7 +293,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "commonmark" @@ -309,7 +309,7 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "contourpy" @@ -332,7 +332,7 @@ test-no-codebase = ["pytest", "matplotlib", "pillow"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "cycler" @@ -345,7 +345,7 @@ python-versions = ">=3.6" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "dateparser" @@ -369,7 +369,7 @@ langdetect = ["langdetect"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "ecdsa" @@ -389,7 +389,7 @@ gmpy2 = ["gmpy2"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "emoji" @@ -405,7 +405,7 @@ dev = ["pytest", "coverage", "coveralls"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "fastapi" @@ -428,7 +428,7 @@ test = ["pytest (>=6.2.4,<7.0.0)", "pytest-cov (>=2.12.0,<4.0.0)", "mypy (==0.91 [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "feedparser" @@ -444,11 +444,11 @@ sgmllib3k = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "fonttools" -version = "4.37.3" +version = "4.37.4" description = "Tools to manipulate font files" category = "main" optional = false @@ -471,7 +471,7 @@ woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "gino" @@ -495,7 +495,7 @@ tornado = ["gino-tornado (>=0.1.0,<0.2.0)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "greenlet" @@ -511,11 +511,11 @@ docs = ["sphinx"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "grpcio" -version = "1.49.0" +version = "1.49.1" description = "HTTP/2-based RPC framework" category = "main" optional = false @@ -525,12 +525,12 @@ python-versions = ">=3.7" six = ">=1.5.2" [package.extras] -protobuf = ["grpcio-tools (>=1.49.0)"] +protobuf = ["grpcio-tools (>=1.49.1)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "h11" @@ -543,7 +543,7 @@ python-versions = ">=3.6" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "httpcore" @@ -566,7 +566,7 @@ socks = ["socksio (>=1.0.0,<2.0.0)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "httptools" @@ -582,7 +582,7 @@ test = ["Cython (>=0.29.24,<0.30.0)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "httpx" @@ -607,7 +607,7 @@ socks = ["socksio (>=1.0.0,<2.0.0)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "idna" @@ -620,11 +620,11 @@ python-versions = ">=3.5" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "imagehash" -version = "4.3.0" +version = "4.3.1" description = "Image Hashing library" category = "main" optional = false @@ -639,7 +639,28 @@ scipy = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" + +[[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://mirrors.aliyun.com/pypi/simple" +reference = "ali" [[package]] name = "jieba" @@ -652,7 +673,26 @@ python-versions = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[package.source] +type = "legacy" +url = "https://mirrors.aliyun.com/pypi/simple" +reference = "ali" [[package]] name = "kiwisolver" @@ -665,7 +705,7 @@ python-versions = ">=3.7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "loguru" @@ -685,7 +725,7 @@ dev = ["colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "tox (>=3. [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "lxml" @@ -704,7 +744,39 @@ source = ["Cython (>=0.29.7)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" + +[[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://mirrors.aliyun.com/pypi/simple" +reference = "ali" + +[[package]] +name = "markupsafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.source] +type = "legacy" +url = "https://mirrors.aliyun.com/pypi/simple" +reference = "ali" [[package]] name = "matplotlib" @@ -729,7 +801,7 @@ setuptools_scm = ">=7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "msgpack" @@ -742,7 +814,7 @@ python-versions = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "multidict" @@ -755,7 +827,7 @@ python-versions = ">=3.7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "mypy-extensions" @@ -768,7 +840,7 @@ python-versions = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "nonebot-adapter-onebot" @@ -785,32 +857,55 @@ nonebot2 = ">=2.0.0-beta.3,<3.0.0" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "nonebot-plugin-apscheduler" -version = "0.1.4" +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://mirrors.aliyun.com/pypi/simple" +reference = "ali" + +[[package]] +name = "nonebot-plugin-htmlrender" +version = "0.1.1" +description = "通过浏览器渲染图片" +category = "main" +optional = false python-versions = ">=3.7.3,<4.0.0" [package.dependencies] -apscheduler = ">=3.7.0,<4.0.0" -nonebot2 = ">=2.0.0-alpha.8,<3.0.0" +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://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "nonebot2" -version = "2.0.0b5" +version = "2.0.0rc1" description = "An asynchronous python bot framework." category = "main" optional = false -python-versions = ">=3.7.3,<4.0.0" +python-versions = ">=3.8,<4.0" [package.dependencies] fastapi = ">=0.79.0,<0.80.0" @@ -832,7 +927,7 @@ websockets = ["websockets (>=10.0,<11.0)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "numpy" @@ -845,7 +940,7 @@ python-versions = ">=3.8" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "opencv-python" @@ -866,7 +961,7 @@ numpy = [ [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "packaging" @@ -882,7 +977,7 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pathspec" @@ -895,7 +990,7 @@ python-versions = ">=3.7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pillow" @@ -912,7 +1007,7 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "platformdirs" @@ -929,11 +1024,11 @@ test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytes [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "playwright" -version = "1.26.0" +version = "1.27.0" description = "A high-level API to automate web browsers" category = "main" optional = false @@ -943,12 +1038,11 @@ python-versions = ">=3.7" greenlet = "1.1.3" pyee = "8.1.0" typing-extensions = {version = "*", markers = "python_version <= \"3.8\""} -websockets = "10.1" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "proces" @@ -964,11 +1058,11 @@ zhconv = "1.4.3" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "protobuf" -version = "3.20.1" +version = "4.21.7" description = "Protocol Buffers" category = "main" optional = false @@ -977,7 +1071,7 @@ python-versions = ">=3.7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "psutil" @@ -993,7 +1087,7 @@ test = ["ipaddress", "mock", "enum34", "pywin32", "wmi"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pyasn1" @@ -1006,7 +1100,7 @@ python-versions = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pydantic" @@ -1027,7 +1121,7 @@ email = ["email-validator (>=1.0.3)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pyee" @@ -1040,7 +1134,7 @@ python-versions = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pygments" @@ -1056,7 +1150,7 @@ plugins = ["importlib-metadata"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pygtrie" @@ -1069,7 +1163,23 @@ python-versions = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" + +[[package]] +name = "pymdown-extensions" +version = "9.6" +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://mirrors.aliyun.com/pypi/simple" +reference = "ali" [[package]] name = "pyparsing" @@ -1085,7 +1195,7 @@ diagrams = ["railroad-diagrams", "jinja2"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pypinyin" @@ -1098,7 +1208,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "python-dateutil" @@ -1114,7 +1224,7 @@ six = ">=1.5" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "python-dotenv" @@ -1130,7 +1240,7 @@ cli = ["click (>=5.0)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "python-jose" @@ -1153,7 +1263,23 @@ pycryptodome = ["pycryptodome (>=3.3.1,<4.0.0)", "pyasn1"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" + +[[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://mirrors.aliyun.com/pypi/simple" +reference = "ali" [[package]] name = "python-multipart" @@ -1169,11 +1295,11 @@ six = ">=1.4.0" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pytz" -version = "2022.2.1" +version = "2022.4" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -1182,7 +1308,7 @@ python-versions = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pytz-deprecation-shim" @@ -1199,7 +1325,7 @@ tzdata = {version = "*", markers = "python_version >= \"3.6\""} [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pywavelets" @@ -1215,7 +1341,7 @@ numpy = ">=1.17.3" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "pyyaml" @@ -1228,7 +1354,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "regex" @@ -1241,7 +1367,7 @@ python-versions = ">=3.6" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "retrying" @@ -1257,7 +1383,7 @@ six = ">=1.7.0" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "rfc3986" @@ -1276,11 +1402,11 @@ idna2008 = ["idna"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "rich" -version = "12.5.1" +version = "12.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -1297,7 +1423,7 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "rsa" @@ -1313,7 +1439,7 @@ pyasn1 = ">=0.1.3" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "ruamel.yaml" @@ -1333,7 +1459,7 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "ruamel.yaml.clib" @@ -1346,7 +1472,7 @@ python-versions = ">=3.5" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "scipy" @@ -1367,7 +1493,7 @@ dev = ["mypy", "typing-extensions", "pycodestyle", "flake8"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "setuptools-scm" @@ -1389,7 +1515,7 @@ toml = ["setuptools (>=42)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "sgmllib3k" @@ -1402,7 +1528,7 @@ python-versions = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "six" @@ -1415,7 +1541,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "sniffio" @@ -1428,7 +1554,7 @@ python-versions = ">=3.7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "soupsieve" @@ -1441,7 +1567,7 @@ python-versions = ">=3.6" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "sqlalchemy" @@ -1466,7 +1592,7 @@ pymysql = ["pymysql (<1)", "pymysql"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "starlette" @@ -1486,7 +1612,7 @@ full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "tomli" @@ -1499,11 +1625,11 @@ python-versions = ">=3.7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "tomlkit" -version = "0.11.4" +version = "0.11.5" description = "Style preserving TOML library" category = "main" optional = false @@ -1512,11 +1638,11 @@ python-versions = ">=3.6,<4.0" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "typing-extensions" -version = "4.3.0" +version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false @@ -1525,11 +1651,11 @@ python-versions = ">=3.7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "tzdata" -version = "2022.2" +version = "2022.4" description = "Provider of IANA time zone data" category = "main" optional = false @@ -1538,7 +1664,7 @@ python-versions = ">=2" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "tzlocal" @@ -1560,7 +1686,7 @@ test = ["pytest-mock (>=3.3)", "pytest (>=4.3)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "ujson" @@ -1573,7 +1699,7 @@ python-versions = ">=3.7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "uvicorn" @@ -1600,7 +1726,7 @@ standard = ["colorama (>=0.4)", "httptools (>=0.4.0)", "python-dotenv (>=0.13)", [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "uvloop" @@ -1618,7 +1744,7 @@ test = ["flake8 (>=3.9.2,<3.10.0)", "psutil", "pycodestyle (>=2.7.0,<2.8.0)", "p [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "watchfiles" @@ -1634,11 +1760,11 @@ anyio = ">=3.0.0,<4" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "websockets" -version = "10.1" +version = "10.3" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" category = "main" optional = false @@ -1647,7 +1773,7 @@ python-versions = ">=3.7" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "win32-setctime" @@ -1663,7 +1789,7 @@ dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "wordcloud" @@ -1681,7 +1807,7 @@ pillow = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "yarl" @@ -1698,7 +1824,7 @@ multidict = ">=4.0" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" [[package]] name = "zhconv" @@ -1711,12 +1837,29 @@ python-versions = "*" [package.source] type = "legacy" url = "https://mirrors.aliyun.com/pypi/simple" -reference = "ali" +reference = "ali" + +[[package]] +name = "zipp" +version = "3.8.1" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + +[package.source] +type = "legacy" +url = "https://mirrors.aliyun.com/pypi/simple" +reference = "ali" [metadata] lock-version = "1.1" -python-versions = "^3.8" -content-hash = "45c50d3420ccb3521f2483f4811c85bbb1b6e53b11d87281ea9b9359ff6c70eb" +python-versions = "^3.8" +content-hash = "b2a9d5283905fb94ed9f5ec093560a664f81c46cfbc9060cb49014fb42057356" [metadata.files] aiofiles = [ @@ -1830,37 +1973,35 @@ beautifulsoup4 = [ {file = "beautifulsoup4-4.9.3.tar.gz", hash = "sha256:84729e322ad1d5b4d25f805bfa05b902dd96450f43842c4e99067d5e1369eb25"}, ] bilireq = [ - {file = "bilireq-0.2.2.post0-py3-none-any.whl", hash = "sha256:f3bc1b5d413dfb15306c2bcb81347220f232fe0f6b626bb0e922087530a26cc8"}, - {file = "bilireq-0.2.2.post0.tar.gz", hash = "sha256:dbec5f4b4c15d505094bda488b52bf26c79fdc7c28ad98f8db2f61af155cefd0"}, + {file = "bilireq-0.2.3.post0-py3-none-any.whl", hash = "sha256:8d1f98bb8fb59c0ce1dec226329353ce51e2efaad0a6b4d240437b6132648322"}, + {file = "bilireq-0.2.3.post0.tar.gz", hash = "sha256:3185c3952a2becc7d31b0c01a12fda463fa477253504a68f81ea871594887ab4"}, ] black = [ - {file = "black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd"}, - {file = "black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27"}, - {file = "black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747"}, - {file = "black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869"}, - {file = "black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90"}, - {file = "black-22.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe"}, - {file = "black-22.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342"}, - {file = "black-22.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab"}, - {file = "black-22.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3"}, - {file = "black-22.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e"}, - {file = "black-22.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5"}, - {file = "black-22.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411"}, - {file = "black-22.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3"}, - {file = "black-22.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497"}, - {file = "black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c"}, - {file = "black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41"}, - {file = "black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec"}, - {file = "black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4"}, - {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, + {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, + {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, + {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, + {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, + {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, + {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, + {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, + {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, + {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, + {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, + {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, + {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, + {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, + {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, + {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, + {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, + {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, + {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, + {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, + {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, + {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, ] certifi = [ - {file = "certifi-2022.9.14-py3-none-any.whl", hash = "sha256:e232343de1ab72c2aa521b625c80f699e356830fd0e2c620b465b304b17b0516"}, - {file = "certifi-2022.9.14.tar.gz", hash = "sha256:36973885b9542e6bd01dea287b2b4b3b21236307c56324fcc3f1160f2d655ed5"}, + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, ] chardet = [ {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, @@ -1977,8 +2118,8 @@ feedparser = [ {file = "feedparser-6.0.10.tar.gz", hash = "sha256:27da485f4637ce7163cdeab13a80312b93b7d0c1b775bef4a47629a3110bca51"}, ] fonttools = [ - {file = "fonttools-4.37.3-py3-none-any.whl", hash = "sha256:a5bc5f5d48faa4085310b8ebd4c5d33bf27c6636c5f10a7de792510af2745a81"}, - {file = "fonttools-4.37.3.zip", hash = "sha256:f32ef6ec966cf0e7d2aa88601fed2e3a8f2851c26b5db2c80ccc8f82bee4eedc"}, + {file = "fonttools-4.37.4-py3-none-any.whl", hash = "sha256:afae1b39555f9c3f0ad1f0f1daf678e5ad157e38c8842ecb567951bf1a9b9fd7"}, + {file = "fonttools-4.37.4.zip", hash = "sha256:86918c150c6412798e15a0de6c3e0d061ddefddd00f97b4f7b43dfa867ad315e"}, ] gino = [ {file = "gino-1.0.1-py3-none-any.whl", hash = "sha256:56df57cfdefbaf897a7c4897c265a0e91a8cca80716fb64f7d3cf6d501fdfb3d"}, @@ -2041,51 +2182,51 @@ greenlet = [ {file = "greenlet-1.1.3.tar.gz", hash = "sha256:bcb6c6dd1d6be6d38d6db283747d07fda089ff8c559a835236560a4410340455"}, ] grpcio = [ - {file = "grpcio-1.49.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:79298b2b153d00f34ecbf5db8ec1be9bf37172ff9d2b63a2e0c6ef67f85daf1e"}, - {file = "grpcio-1.49.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ebb539e0cf618593dc08ea9bf6fc72c538b632663f8efc1a344f6db62545dfaa"}, - {file = "grpcio-1.49.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:7ea88f3dfe2606a93193e8dc240659b5eedcee77ef90d655cbc792273a5c3eb2"}, - {file = "grpcio-1.49.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a821831518758b725ba857d791a43959e8ffdbe5935e89a50222496fe2ed0f9c"}, - {file = "grpcio-1.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91763e949104894b639ad47243c69988fc0bbdcbead995280f7d3fcba3824a79"}, - {file = "grpcio-1.49.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ad119d3db3a284e8f0dbf0149b904280e17a13c9eca38a250109cbee9d569a1d"}, - {file = "grpcio-1.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e26d4b147447cf63e7e20e92c7b938b6279c0cd463b421f0f6ecc2d991161614"}, - {file = "grpcio-1.49.0-cp310-cp310-win32.whl", hash = "sha256:172cfa96c6d4de9d84bbd00ffea7aebe820f44430d31cdfea6ec6d209007c117"}, - {file = "grpcio-1.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:07bbbb2675d5bcd5ea0dd5dc39d47d8cd9f81e12d5689d79079f5eb9bad87127"}, - {file = "grpcio-1.49.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:a3eccffe9cac99883cbfdcaac0af3d346d5499a7fcb7d57fdd2ec21209471c39"}, - {file = "grpcio-1.49.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:77742b6805c2b46a59b76f924b3018de89c4e3b565df7ef2d79d4d8eecd37a20"}, - {file = "grpcio-1.49.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:875cb37144865cc4d26e91add8c9672cf2c95f3547f15ae3daba8f27064fdb30"}, - {file = "grpcio-1.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1532064b23130be7760c940b82961e3661cb785f686204a937e8edca007069fe"}, - {file = "grpcio-1.49.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3477cec9b89334ddbb09b44cf099e9a81f4090b48fdd63310f91b71a762896d6"}, - {file = "grpcio-1.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb4a3812e90d8189ff96b1779c7e7e56d13e7525ef4928b7d897c62c0d8936e3"}, - {file = "grpcio-1.49.0-cp311-cp311-win32.whl", hash = "sha256:a9e154ff1d55540db0ff9ee123687c45e7946a235d22a44c5347b2384b2a4753"}, - {file = "grpcio-1.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:894fba84ef949c7f2403eaf09c9d2421eeeec447f4d61829353a371d4d1edb57"}, - {file = "grpcio-1.49.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:fcd45c259cabb739b8b0c3a539ad2796f627fef77e53e55e6c2b5389b59a00ff"}, - {file = "grpcio-1.49.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:4ae542364be7b2cb13d8372c2a601a84c77a93327c93a31cda64fd9c5c333448"}, - {file = "grpcio-1.49.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:3e7b20e78b8dcee038002fd42ae13d5e6e81efa7d21cc6682a25f4cbd18f0491"}, - {file = "grpcio-1.49.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82a40b2fea553a85d045b1934633d108643d3b870a08fa19d47137d967e8e716"}, - {file = "grpcio-1.49.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85150bce2438feb2a814e0c2dec09fb6e86a58b69a06279a1a49426b88b84176"}, - {file = "grpcio-1.49.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:db056a709ea38b2da97a6811ed6719329f6576a32240e102e897a05b681a1674"}, - {file = "grpcio-1.49.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:41d8e725b816964691650967b017a621d935ba7393a153fcf8d6dcae5e41e4b3"}, - {file = "grpcio-1.49.0-cp37-cp37m-win32.whl", hash = "sha256:6ea56034245fe04ca3c411d2bf7032782722973e4cd2964e89d55110d2142bac"}, - {file = "grpcio-1.49.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bc39e9bd568b210ba9e44819736eb5e95cada054381dec5a3d2ec0a5f7c0178f"}, - {file = "grpcio-1.49.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:8d6f4ace5b41502b11c2456d2fa3a2d7ee776bbb7d2c3c05e0309d420654c95a"}, - {file = "grpcio-1.49.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:9736f24b9a0a5b66df739fa2e82132c1c420cc470df003e53596dcec8d90a52a"}, - {file = "grpcio-1.49.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:a0c39a3d81a727d36c855781886a66d868681e5dc8de76a766a7c3c4827f649b"}, - {file = "grpcio-1.49.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63c3823fc525882989c0a42191d1efeb37c4d4f4c1dc555cc21d721fe11570e3"}, - {file = "grpcio-1.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0522e5c678411977db57bb6a4c6dd29e1defc0961ebf2c0a29871459cce0fd9"}, - {file = "grpcio-1.49.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3cc65127b0755fc0cf4f7e095f2d0ed25fe225eb1525b76c0a32de3efaf7c22f"}, - {file = "grpcio-1.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:717ed04e949022e33e10c4d11b2a9567da2de5a02019535058482ea54d9f795c"}, - {file = "grpcio-1.49.0-cp38-cp38-win32.whl", hash = "sha256:dcb480c4141dd051120a3de9af555ef09fc3ce1d0cb47e95b22ac1406554af18"}, - {file = "grpcio-1.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:faa91b060bf3c520d0a4f11bd550d1b4026d649f188b082690270182fb462ec4"}, - {file = "grpcio-1.49.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:5df1748ac9d679f47ee39226a7389f73e8c7c49910c7493b0f61735825a0b5ec"}, - {file = "grpcio-1.49.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:4f70df4d99945a7dc4a358cf0d2c027bba2d3125bc8ad1acb069480747fc58de"}, - {file = "grpcio-1.49.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:6cbcbbab1c8f677d6b3bb55b22bfce87bd10713a8ef439098f86ada96e69eda8"}, - {file = "grpcio-1.49.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b40ca1a353ad0410f979d3ac7fdb07e2ad65717411c0c3e2df12a4b811898637"}, - {file = "grpcio-1.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ede5041e8a98ce8761d7b6d966da872ac6a5bf2d8de776b402ea509c8ba8a8bc"}, - {file = "grpcio-1.49.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:49a8a3aa2d61f1940983795cea78d336f86ab2e5c92029adfc7e6a8ee0fe6e3a"}, - {file = "grpcio-1.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b3bc29e95a578b5c5a1bf2908ef56f45ad8b669178298cf6a8357a6883baff99"}, - {file = "grpcio-1.49.0-cp39-cp39-win32.whl", hash = "sha256:60d31d1377429f0f83fe10887276e8bdef16fb297dfbccab896a145d7b171bc8"}, - {file = "grpcio-1.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:4e0374c5b31fdf5cd4a2f3209e5341762a34c80acedbaca0896ccb904ecdd707"}, - {file = "grpcio-1.49.0.tar.gz", hash = "sha256:90ec337f36db26fbc70a4c032bcbabb2008f950f4194e99385118a12688fdf92"}, + {file = "grpcio-1.49.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:fd86040232e805b8e6378b2348c928490ee595b058ce9aaa27ed8e4b0f172b20"}, + {file = "grpcio-1.49.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6fd0c9cede9552bf00f8c5791d257d5bf3790d7057b26c59df08be5e7a1e021d"}, + {file = "grpcio-1.49.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:d0d402e158d4e84e49c158cb5204119d55e1baf363ee98d6cb5dce321c3a065d"}, + {file = "grpcio-1.49.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:822ceec743d42a627e64ea266059a62d214c5a3cdfcd0d7fe2b7a8e4e82527c7"}, + {file = "grpcio-1.49.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2106d9c16527f0a85e2eea6e6b91a74fc99579c60dd810d8690843ea02bc0f5f"}, + {file = "grpcio-1.49.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:52dd02b7e7868233c571b49bc38ebd347c3bb1ff8907bb0cb74cb5f00c790afc"}, + {file = "grpcio-1.49.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:120fecba2ec5d14b5a15d11063b39783fda8dc8d24addd83196acb6582cabd9b"}, + {file = "grpcio-1.49.1-cp310-cp310-win32.whl", hash = "sha256:f1a3b88e3c53c1a6e6bed635ec1bbb92201bb6a1f2db186179f7f3f244829788"}, + {file = "grpcio-1.49.1-cp310-cp310-win_amd64.whl", hash = "sha256:a7d0017b92d3850abea87c1bdec6ea41104e71c77bca44c3e17f175c6700af62"}, + {file = "grpcio-1.49.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:9fb17ff8c0d56099ac6ebfa84f670c5a62228d6b5c695cf21c02160c2ac1446b"}, + {file = "grpcio-1.49.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:075f2d06e3db6b48a2157a1bcd52d6cbdca980dd18988fe6afdb41795d51625f"}, + {file = "grpcio-1.49.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46d93a1b4572b461a227f1db6b8d35a88952db1c47e5fadcf8b8a2f0e1dd9201"}, + {file = "grpcio-1.49.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc79b2b37d779ac42341ddef40ad5bf0966a64af412c89fc2b062e3ddabb093f"}, + {file = "grpcio-1.49.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5f8b3a971c7820ea9878f3fd70086240a36aeee15d1b7e9ecbc2743b0e785568"}, + {file = "grpcio-1.49.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49b301740cf5bc8fed4fee4c877570189ae3951432d79fa8e524b09353659811"}, + {file = "grpcio-1.49.1-cp311-cp311-win32.whl", hash = "sha256:1c66a25afc6c71d357867b341da594a5587db5849b48f4b7d5908d236bb62ede"}, + {file = "grpcio-1.49.1-cp311-cp311-win_amd64.whl", hash = "sha256:6b6c3a95d27846f4145d6967899b3ab25fffc6ae99544415e1adcacef84842d2"}, + {file = "grpcio-1.49.1-cp37-cp37m-linux_armv7l.whl", hash = "sha256:1cc400c8a2173d1c042997d98a9563e12d9bb3fb6ad36b7f355bc77c7663b8af"}, + {file = "grpcio-1.49.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:34f736bd4d0deae90015c0e383885b431444fe6b6c591dea288173df20603146"}, + {file = "grpcio-1.49.1-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:196082b9c89ebf0961dcd77cb114bed8171964c8e3063b9da2fb33536a6938ed"}, + {file = "grpcio-1.49.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c9f89c42749890618cd3c2464e1fbf88446e3d2f67f1e334c8e5db2f3272bbd"}, + {file = "grpcio-1.49.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64419cb8a5b612cdb1550c2fd4acbb7d4fb263556cf4625f25522337e461509e"}, + {file = "grpcio-1.49.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8a5272061826e6164f96e3255405ef6f73b88fd3e8bef464c7d061af8585ac62"}, + {file = "grpcio-1.49.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ea9d0172445241ad7cb49577314e39d0af2c5267395b3561d7ced5d70458a9f3"}, + {file = "grpcio-1.49.1-cp37-cp37m-win32.whl", hash = "sha256:2070e87d95991473244c72d96d13596c751cb35558e11f5df5414981e7ed2492"}, + {file = "grpcio-1.49.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fcedcab49baaa9db4a2d240ac81f2d57eb0052b1c6a9501b46b8ae912720fbf"}, + {file = "grpcio-1.49.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:afbb3475cf7f4f7d380c2ca37ee826e51974f3e2665613996a91d6a58583a534"}, + {file = "grpcio-1.49.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a4f9ba141380abde6c3adc1727f21529137a2552002243fa87c41a07e528245c"}, + {file = "grpcio-1.49.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:cf0a1fb18a7204b9c44623dfbd1465b363236ce70c7a4ed30402f9f60d8b743b"}, + {file = "grpcio-1.49.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17bb6fe72784b630728c6cff9c9d10ccc3b6d04e85da6e0a7b27fb1d135fac62"}, + {file = "grpcio-1.49.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18305d5a082d1593b005a895c10041f833b16788e88b02bb81061f5ebcc465df"}, + {file = "grpcio-1.49.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b6a1b39e59ac5a3067794a0e498911cf2e37e4b19ee9e9977dc5e7051714f13f"}, + {file = "grpcio-1.49.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e20d59aafc086b1cc68400463bddda6e41d3e5ed30851d1e2e0f6a2e7e342d3"}, + {file = "grpcio-1.49.1-cp38-cp38-win32.whl", hash = "sha256:e1e83233d4680863a421f3ee4a7a9b80d33cd27ee9ed7593bc93f6128302d3f2"}, + {file = "grpcio-1.49.1-cp38-cp38-win_amd64.whl", hash = "sha256:221d42c654d2a41fa31323216279c73ed17d92f533bc140a3390cc1bd78bf63c"}, + {file = "grpcio-1.49.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:fa9e6e61391e99708ac87fc3436f6b7b9c6b845dc4639b406e5e61901e1aacde"}, + {file = "grpcio-1.49.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9b449e966ef518ce9c860d21f8afe0b0f055220d95bc710301752ac1db96dd6a"}, + {file = "grpcio-1.49.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:aa34d2ad9f24e47fa9a3172801c676e4037d862247e39030165fe83821a7aafd"}, + {file = "grpcio-1.49.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5207f4eed1b775d264fcfe379d8541e1c43b878f2b63c0698f8f5c56c40f3d68"}, + {file = "grpcio-1.49.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b24a74651438d45619ac67004638856f76cc13d78b7478f2457754cbcb1c8ad"}, + {file = "grpcio-1.49.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fe763781669790dc8b9618e7e677c839c87eae6cf28b655ee1fa69ae04eea03f"}, + {file = "grpcio-1.49.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2f2ff7ba0f8f431f32d4b4bc3a3713426949d3533b08466c4ff1b2b475932ca8"}, + {file = "grpcio-1.49.1-cp39-cp39-win32.whl", hash = "sha256:08ff74aec8ff457a89b97152d36cb811dcc1d17cd5a92a65933524e363327394"}, + {file = "grpcio-1.49.1-cp39-cp39-win_amd64.whl", hash = "sha256:274ffbb39717918c514b35176510ae9be06e1d93121e84d50b350861dcb9a705"}, + {file = "grpcio-1.49.1.tar.gz", hash = "sha256:d4725fc9ec8e8822906ae26bb26f5546891aa7fbc3443de970cc556d43a5c99f"}, ] h11 = [ {file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"}, @@ -2147,12 +2288,20 @@ idna = [ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] imagehash = [ - {file = "ImageHash-4.3.0-py2.py3-none-any.whl", hash = "sha256:afe0bcb17c88e6f28fd69b91f05c4f207b3d5018431c3f3e632af2162e451d03"}, - {file = "ImageHash-4.3.0.tar.gz", hash = "sha256:3e843fed202105374b71767f93e6791a476dc92d212668dd3a6db61bfb18faf9"}, + {file = "ImageHash-4.3.1-py2.py3-none-any.whl", hash = "sha256:5ad9a5cde14fe255745a8245677293ac0d67f09c330986a351f34b614ba62fb5"}, + {file = "ImageHash-4.3.1.tar.gz", hash = "sha256:7038d1b7f9e0585beb3dd8c0a956f02b95a346c0b5f24a9e8cc03ebadaf0aa70"}, +] +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"}, ] jieba = [ {file = "jieba-0.42.1.tar.gz", hash = "sha256:055ca12f62674fafed09427f176506079bc135638a14e23e25be909131928db2"}, ] +jinja2 = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] kiwisolver = [ {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, @@ -2164,6 +2313,21 @@ kiwisolver = [ {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, + {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, + {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, @@ -2196,6 +2360,16 @@ kiwisolver = [ {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, ] loguru = [ @@ -2264,6 +2438,52 @@ lxml = [ {file = "lxml-4.6.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5d5254c815c186744c8f922e2ce861a2bdeabc06520b4b30b2f7d9767791ce6e"}, {file = "lxml-4.6.5.tar.gz", hash = "sha256:6e84edecc3a82f90d44ddee2ee2a2630d4994b8471816e226d2b771cda7ac4ca"}, ] +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"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] matplotlib = [ {file = "matplotlib-3.6.0-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:6b98e098549d3aea2bfb93f38f0b2ecadcb423fa1504bbff902c01efdd833fd8"}, {file = "matplotlib-3.6.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:798559837156b8e2e2df97cffca748c5c1432af6ec5004c2932e475d813f1743"}, @@ -2431,12 +2651,16 @@ nonebot-adapter-onebot = [ {file = "nonebot_adapter_onebot-2.1.3-py3-none-any.whl", hash = "sha256:d44eb7b119fdcc3f7936c77e2c0922728c959ad6d6b36ebd004e94856d9ccf49"}, ] nonebot-plugin-apscheduler = [ - {file = "nonebot-plugin-apscheduler-0.1.4.tar.gz", hash = "sha256:7541cfb2af48f244b74b66fd14f6486ef39a6d79f17b15c31cf1c6ad9a9632ca"}, - {file = "nonebot_plugin_apscheduler-0.1.4-py3-none-any.whl", hash = "sha256:c904c344c22c8fb2bafec9875ee195b7be7d1f0b758a04e96da6758d62cf4e83"}, + {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.0b5-py3-none-any.whl", hash = "sha256:5cfbfcd62ffcf55f884f9fb750a71cd92c97e347c99e891ef617da4d445a1f22"}, - {file = "nonebot2-2.0.0b5.tar.gz", hash = "sha256:fccb5af749cceb289d756901b7abc7a679e5952dbe88c8b6ad8b2d906715c3ee"}, + {file = "nonebot2-2.0.0rc1-py3-none-any.whl", hash = "sha256:99c70300b9d0755bba6ed50b7399f44f6213e119157bc026b960b3e157a38416"}, + {file = "nonebot2-2.0.0rc1.tar.gz", hash = "sha256:6e5a0abf24086d05d5c2a56c971a551ece2a343ff29f83b76b398bf717b92e16"}, ] numpy = [ {file = "numpy-1.23.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9f707b5bb73bf277d812ded9896f9512a43edff72712f31667d0a8c2f8e71ee"}, @@ -2496,8 +2720,8 @@ pillow = [ {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-macosx_10_10_x86_64.whl", hash = "sha256:adabc0bce035467fb537ef3e5e74f2847c8af217ee0be0455d4fec8adc0462fc"}, + {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:336b9036127eab855beec9662ac3ea13a4544a523ae273cbf108b228ecac8437"}, {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"}, @@ -2550,43 +2774,33 @@ platformdirs = [ {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, ] playwright = [ - {file = "playwright-1.26.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:4841796a44582b0d4cc0424ebce2da717d3aa04adb4051145dc480be198549bb"}, - {file = "playwright-1.26.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5d910b865a6c539d3589d1a9a67d221f060460b812b65f933e872f8762bd640a"}, - {file = "playwright-1.26.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:fd7546d4b61ebe7fd1f1fa5eebdaf884263d97b111be6208a02a1bde5f36308f"}, - {file = "playwright-1.26.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:c6d9df284a74897eb667ee8e865137ed2fbdd93b8ba8f43e257871a3fbf1e9c4"}, - {file = "playwright-1.26.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759292562f50e7f04ef75eac7039ab7149461b2ac97c91f77d73cc974b3f49bb"}, - {file = "playwright-1.26.0-py3-none-win32.whl", hash = "sha256:aa3e8ee10bce4d8992a8332f4358ab571724dfd0c34540e6b56e7ac062cc6e20"}, - {file = "playwright-1.26.0-py3-none-win_amd64.whl", hash = "sha256:a04a549a32cea8000036274af6fe7e7b7ac3697021cd3cc2bb3e92341b89147d"}, + {file = "playwright-1.27.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:cd1ebac1e261eb58b393f9f504c223b0129dda3a19a41bba47c86abbd1301ca7"}, + {file = "playwright-1.27.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b5ae41c4313af04b9deb2b2cf6c1ebeb9deb1fa66149d8026ce48a45cbaaeb08"}, + {file = "playwright-1.27.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:8c0989016156539f58286831c4ff200260f2173e4026330697e257aa7609f7eb"}, + {file = "playwright-1.27.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:7c0bd4af19ea145cd3aa4f9f1009e4e4b0ffd05a78235c5338a35e83366e68b5"}, + {file = "playwright-1.27.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bb56b53fa10aaedb32c28eef06a0579244c2ccf3ddf9238fb09044bfb6c493e"}, + {file = "playwright-1.27.0-py3-none-win32.whl", hash = "sha256:fe90b890061f729d2ea2f547fc5b316a5e6361e3659fbc639ee35e08be38d13f"}, + {file = "playwright-1.27.0-py3-none-win_amd64.whl", hash = "sha256:8cbeab451099cf0d52d9e80baf970363f900c8cc85ecf4d7dcde76a86c47880a"}, ] proces = [ {file = "proces-0.1.2-py3-none-any.whl", hash = "sha256:82b765c70ebe790aae03159617710d03bcec3c98d6c7190f126bf307eecd0fd3"}, {file = "proces-0.1.2.tar.gz", hash = "sha256:99fc87148aff66fb0ca83b66562d6c61b2a2ba4bdff7c9eec64c02df7917d51f"}, ] protobuf = [ - {file = "protobuf-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996"}, - {file = "protobuf-3.20.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"}, - {file = "protobuf-3.20.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde"}, - {file = "protobuf-3.20.1-cp310-cp310-win32.whl", hash = "sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c"}, - {file = "protobuf-3.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7"}, - {file = "protobuf-3.20.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153"}, - {file = "protobuf-3.20.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f"}, - {file = "protobuf-3.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20"}, - {file = "protobuf-3.20.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531"}, - {file = "protobuf-3.20.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e"}, - {file = "protobuf-3.20.1-cp37-cp37m-win32.whl", hash = "sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c"}, - {file = "protobuf-3.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067"}, - {file = "protobuf-3.20.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf"}, - {file = "protobuf-3.20.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab"}, - {file = "protobuf-3.20.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c"}, - {file = "protobuf-3.20.1-cp38-cp38-win32.whl", hash = "sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7"}, - {file = "protobuf-3.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739"}, - {file = "protobuf-3.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7"}, - {file = "protobuf-3.20.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f"}, - {file = "protobuf-3.20.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9"}, - {file = "protobuf-3.20.1-cp39-cp39-win32.whl", hash = "sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8"}, - {file = "protobuf-3.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91"}, - {file = "protobuf-3.20.1-py2.py3-none-any.whl", hash = "sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388"}, - {file = "protobuf-3.20.1.tar.gz", hash = "sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9"}, + {file = "protobuf-4.21.7-cp310-abi3-win32.whl", hash = "sha256:c7cb105d69a87416bd9023e64324e1c089593e6dae64d2536f06bcbe49cd97d8"}, + {file = "protobuf-4.21.7-cp310-abi3-win_amd64.whl", hash = "sha256:3ec85328a35a16463c6f419dbce3c0fc42b3e904d966f17f48bae39597c7a543"}, + {file = "protobuf-4.21.7-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:db9056b6a11cb5131036d734bcbf91ef3ef9235d6b681b2fc431cbfe5a7f2e56"}, + {file = "protobuf-4.21.7-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:ca200645d6235ce0df3ccfdff1567acbab35c4db222a97357806e015f85b5744"}, + {file = "protobuf-4.21.7-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:b019c79e23a80735cc8a71b95f76a49a262f579d6b84fd20a0b82279f40e2cc1"}, + {file = "protobuf-4.21.7-cp37-cp37m-win32.whl", hash = "sha256:d3f89ccf7182293feba2de2739c8bf34fed1ed7c65a5cf987be00311acac57c1"}, + {file = "protobuf-4.21.7-cp37-cp37m-win_amd64.whl", hash = "sha256:a74d96cd960b87b4b712797c741bb3ea3a913f5c2dc4b6cbe9c0f8360b75297d"}, + {file = "protobuf-4.21.7-cp38-cp38-win32.whl", hash = "sha256:8e09d1916386eca1ef1353767b6efcebc0a6859ed7f73cb7fb974feba3184830"}, + {file = "protobuf-4.21.7-cp38-cp38-win_amd64.whl", hash = "sha256:9e355f2a839d9930d83971b9f562395e13493f0e9211520f8913bd11efa53c02"}, + {file = "protobuf-4.21.7-cp39-cp39-win32.whl", hash = "sha256:f370c0a71712f8965023dd5b13277444d3cdfecc96b2c778b0e19acbfd60df6e"}, + {file = "protobuf-4.21.7-cp39-cp39-win_amd64.whl", hash = "sha256:9643684232b6b340b5e63bb69c9b4904cdd39e4303d498d1a92abddc7e895b7f"}, + {file = "protobuf-4.21.7-py2.py3-none-any.whl", hash = "sha256:8066322588d4b499869bf9f665ebe448e793036b552f68c585a9b28f1e393f66"}, + {file = "protobuf-4.21.7-py3-none-any.whl", hash = "sha256:58b81358ec6c0b5d50df761460ae2db58405c063fd415e1101209221a0a810e1"}, + {file = "protobuf-4.21.7.tar.gz", hash = "sha256:71d9dba03ed3432c878a801e2ea51e034b0ea01cf3a4344fb60166cb5f6c8757"}, ] psutil = [ {file = "psutil-5.9.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:8f024fbb26c8daf5d70287bb3edfafa22283c255287cf523c5d81721e8e5d82c"}, @@ -2672,8 +2886,13 @@ pygments = [ {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.6-py3-none-any.whl", hash = "sha256:1e36490adc7bfcef1fdb21bb0306e93af99cff8ec2db199bd17e3bf009768c11"}, + {file = "pymdown_extensions-9.6.tar.gz", hash = "sha256:b956b806439bbff10f726103a941266beb03fbe99f897c7d5e774d7170339ad9"}, +] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, @@ -2694,12 +2913,16 @@ 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-multipart = [ {file = "python-multipart-0.0.5.tar.gz", hash = "sha256:f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43"}, ] pytz = [ - {file = "pytz-2022.2.1-py2.py3-none-any.whl", hash = "sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197"}, - {file = "pytz-2022.2.1.tar.gz", hash = "sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5"}, + {file = "pytz-2022.4-py2.py3-none-any.whl", hash = "sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91"}, + {file = "pytz-2022.4.tar.gz", hash = "sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174"}, ] pytz-deprecation-shim = [ {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"}, @@ -2847,8 +3070,8 @@ rfc3986 = [ {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, ] rich = [ - {file = "rich-12.5.1-py3-none-any.whl", hash = "sha256:2eb4e6894cde1e017976d2975ac210ef515d7548bc595ba20e195fb9628acdeb"}, - {file = "rich-12.5.1.tar.gz", hash = "sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca"}, + {file = "rich-12.6.0-py3-none-any.whl", hash = "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e"}, + {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"}, ] rsa = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, @@ -2974,16 +3197,16 @@ tomli = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] tomlkit = [ - {file = "tomlkit-0.11.4-py3-none-any.whl", hash = "sha256:25d4e2e446c453be6360c67ddfb88838cfc42026322770ba13d1fbd403a93a5c"}, - {file = "tomlkit-0.11.4.tar.gz", hash = "sha256:3235a9010fae54323e727c3ac06fb720752fe6635b3426e379daec60fbd44a83"}, + {file = "tomlkit-0.11.5-py3-none-any.whl", hash = "sha256:f2ef9da9cef846ee027947dc99a45d6b68a63b0ebc21944649505bf2e8bc5fe7"}, + {file = "tomlkit-0.11.5.tar.gz", hash = "sha256:571854ebbb5eac89abcb4a2e47d7ea27b89bf29e09c35395da6f03dd4ae23d1c"}, ] typing-extensions = [ - {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, - {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, + {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.2-py2.py3-none-any.whl", hash = "sha256:c3119520447d68ef3eb8187a55a4f44fa455f30eb1b4238fa5691ba094f2b05b"}, - {file = "tzdata-2022.2.tar.gz", hash = "sha256:21f4f0d7241572efa7f7a4fdabb052e61b55dc48274e6842697ccdf5253e5451"}, + {file = "tzdata-2022.4-py2.py3-none-any.whl", hash = "sha256:74da81ecf2b3887c94e53fc1d466d4362aaf8b26fc87cda18f22004544694583"}, + {file = "tzdata-2022.4.tar.gz", hash = "sha256:ada9133fbd561e6ec3d1674d3fba50251636e918aa97bd59d63735bef5a513bb"}, ] tzlocal = [ {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"}, @@ -3113,54 +3336,54 @@ watchfiles = [ {file = "watchfiles-0.17.0.tar.gz", hash = "sha256:ae7c57ef920589a40270d5ef3216d693f4e6f8864d8fc8b6cb7885ca98ad2a61"}, ] websockets = [ - {file = "websockets-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:38db6e2163b021642d0a43200ee2dec8f4980bdbda96db54fde72b283b54cbfc"}, - {file = "websockets-10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e1b60fd297adb9fc78375778a5220da7f07bf54d2a33ac781319650413fc6a60"}, - {file = "websockets-10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3477146d1f87ead8df0f27e8960249f5248dceb7c2741e8bbec9aa5338d0c053"}, - {file = "websockets-10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb01ea7b5f52e7125bdc3c5807aeaa2d08a0553979cf2d96a8b7803ea33e15e7"}, - {file = "websockets-10.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9fd62c6dc83d5d35fb6a84ff82ec69df8f4657fff05f9cd6c7d9bec0dd57f0f6"}, - {file = "websockets-10.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3bbf080f3892ba1dc8838786ec02899516a9d227abe14a80ef6fd17d4fb57127"}, - {file = "websockets-10.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5560558b0dace8312c46aa8915da977db02738ac8ecffbc61acfbfe103e10155"}, - {file = "websockets-10.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:667c41351a6d8a34b53857ceb8343a45c85d438ee4fd835c279591db8aeb85be"}, - {file = "websockets-10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:468f0031fdbf4d643f89403a66383247eb82803430b14fa27ce2d44d2662ca37"}, - {file = "websockets-10.1-cp310-cp310-win32.whl", hash = "sha256:d0d81b46a5c87d443e40ce2272436da8e6092aa91f5fbeb60d1be9f11eff5b4c"}, - {file = "websockets-10.1-cp310-cp310-win_amd64.whl", hash = "sha256:b68b6caecb9a0c6db537aa79750d1b592a841e4f1a380c6196091e65b2ad35f9"}, - {file = "websockets-10.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a249139abc62ef333e9e85064c27fefb113b16ffc5686cefc315bdaef3eefbc8"}, - {file = "websockets-10.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8877861e3dee38c8d302eee0d5dbefa6663de3b46dc6a888f70cd7e82562d1f7"}, - {file = "websockets-10.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e3872ae57acd4306ecf937d36177854e218e999af410a05c17168cd99676c512"}, - {file = "websockets-10.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b66e6d514f12c28d7a2d80bb2a48ef223342e99c449782d9831b0d29a9e88a17"}, - {file = "websockets-10.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9f304a22ece735a3da8a51309bc2c010e23961a8f675fae46fdf62541ed62123"}, - {file = "websockets-10.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:189ed478395967d6a98bb293abf04e8815349e17456a0a15511f1088b6cb26e4"}, - {file = "websockets-10.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:08a42856158307e231b199671c4fce52df5786dd3d703f36b5d8ac76b206c485"}, - {file = "websockets-10.1-cp37-cp37m-win32.whl", hash = "sha256:3ef6f73854cded34e78390dbdf40dfdcf0b89b55c0e282468ef92646fce8d13a"}, - {file = "websockets-10.1-cp37-cp37m-win_amd64.whl", hash = "sha256:89e985d40d407545d5f5e2e58e1fdf19a22bd2d8cd54d20a882e29f97e930a0a"}, - {file = "websockets-10.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:002071169d2e44ce8eb9e5ebac9fbce142ba4b5146eef1cfb16b177a27662657"}, - {file = "websockets-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cfae282c2aa7f0c4be45df65c248481f3509f8c40ca8b15ed96c35668ae0ff69"}, - {file = "websockets-10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:97b4b68a2ddaf5c4707ae79c110bfd874c5be3c6ac49261160fb243fa45d8bbb"}, - {file = "websockets-10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c9407719f42cb77049975410490c58a705da6af541adb64716573e550e5c9db"}, - {file = "websockets-10.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d858fb31e5ac992a2cdf17e874c95f8a5b1e917e1fb6b45ad85da30734b223f"}, - {file = "websockets-10.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7bdd3d26315db0a9cf8a0af30ca95e0aa342eda9c1377b722e71ccd86bc5d1dd"}, - {file = "websockets-10.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e259be0863770cb91b1a6ccf6907f1ac2f07eff0b7f01c249ed751865a70cb0d"}, - {file = "websockets-10.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6b014875fae19577a392372075e937ebfebf53fd57f613df07b35ab210f31534"}, - {file = "websockets-10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:98de71f86bdb29430fd7ba9997f47a6b10866800e3ea577598a786a785701bb0"}, - {file = "websockets-10.1-cp38-cp38-win32.whl", hash = "sha256:3a02ab91d84d9056a9ee833c254895421a6333d7ae7fff94b5c68e4fa8095519"}, - {file = "websockets-10.1-cp38-cp38-win_amd64.whl", hash = "sha256:7d6673b2753f9c5377868a53445d0c321ef41ff3c8e3b6d57868e72054bfce5f"}, - {file = "websockets-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ddab2dc69ee5ae27c74dbfe9d7bb6fee260826c136dca257faa1a41d1db61a89"}, - {file = "websockets-10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:14e9cf68a08d1a5d42109549201aefba473b1d925d233ae19035c876dd845da9"}, - {file = "websockets-10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e4819c6fb4f336fd5388372cb556b1f3a165f3f68e66913d1a2fc1de55dc6f58"}, - {file = "websockets-10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05e7f098c76b0a4743716590bb8f9706de19f1ef5148d61d0cf76495ec3edb9c"}, - {file = "websockets-10.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5bb6256de5a4fb1d42b3747b4e2268706c92965d75d0425be97186615bf2f24f"}, - {file = "websockets-10.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:888a5fa2a677e0c2b944f9826c756475980f1b276b6302e606f5c4ff5635be9e"}, - {file = "websockets-10.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6fdec1a0b3e5630c58e3d8704d2011c678929fce90b40908c97dfc47de8dca72"}, - {file = "websockets-10.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:531d8eb013a9bc6b3ad101588182aa9b6dd994b190c56df07f0d84a02b85d530"}, - {file = "websockets-10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0d93b7cadc761347d98da12ec1930b5c71b2096f1ceed213973e3cda23fead9c"}, - {file = "websockets-10.1-cp39-cp39-win32.whl", hash = "sha256:d9b245db5a7e64c95816e27d72830e51411c4609c05673d1ae81eb5d23b0be54"}, - {file = "websockets-10.1-cp39-cp39-win_amd64.whl", hash = "sha256:882c0b8bdff3bf1bd7f024ce17c6b8006042ec4cceba95cf15df57e57efa471c"}, - {file = "websockets-10.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:10edd9d7d3581cfb9ff544ac09fc98cab7ee8f26778a5a8b2d5fd4b0684c5ba5"}, - {file = "websockets-10.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa83174390c0ff4fc1304fbe24393843ac7a08fdd59295759c4b439e06b1536"}, - {file = "websockets-10.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:483edee5abed738a0b6a908025be47f33634c2ad8e737edd03ffa895bd600909"}, - {file = "websockets-10.1-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:816ae7dac2c6522cfa620947ead0ca95ac654916eebf515c94d7c28de5601a6e"}, - {file = "websockets-10.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1dafe98698ece09b8ccba81b910643ff37198e43521d977be76caf37709cf62b"}, - {file = "websockets-10.1.tar.gz", hash = "sha256:181d2b25de5a437b36aefedaf006ecb6fa3aa1328ec0236cdde15f32f9d3ff6d"}, + {file = "websockets-10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978"}, + {file = "websockets-10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b529fdfa881b69fe563dbd98acce84f3e5a67df13de415e143ef053ff006d500"}, + {file = "websockets-10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f351c7d7d92f67c0609329ab2735eee0426a03022771b00102816a72715bb00b"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379e03422178436af4f3abe0aa8f401aa77ae2487843738542a75faf44a31f0c"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e904c0381c014b914136c492c8fa711ca4cced4e9b3d110e5e7d436d0fc289e8"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e7e6f2d6fd48422071cc8a6f8542016f350b79cc782752de531577d35e9bd677"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9c77f0d1436ea4b4dc089ed8335fa141e6a251a92f75f675056dac4ab47a71e"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e6fa05a680e35d0fcc1470cb070b10e6fe247af54768f488ed93542e71339d6f"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2f94fa3ae454a63ea3a19f73b95deeebc9f02ba2d5617ca16f0bbdae375cda47"}, + {file = "websockets-10.3-cp310-cp310-win32.whl", hash = "sha256:6ed1d6f791eabfd9808afea1e068f5e59418e55721db8b7f3bfc39dc831c42ae"}, + {file = "websockets-10.3-cp310-cp310-win_amd64.whl", hash = "sha256:347974105bbd4ea068106ec65e8e8ebd86f28c19e529d115d89bd8cc5cda3079"}, + {file = "websockets-10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fab7c640815812ed5f10fbee7abbf58788d602046b7bb3af9b1ac753a6d5e916"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:994cdb1942a7a4c2e10098d9162948c9e7b235df755de91ca33f6e0481366fdb"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aad5e300ab32036eb3fdc350ad30877210e2f51bceaca83fb7fef4d2b6c72b79"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e49ea4c1a9543d2bd8a747ff24411509c29e4bdcde05b5b0895e2120cb1a761d"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ea6b300a6bdd782e49922d690e11c3669828fe36fc2471408c58b93b5535a98"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ef5ce841e102278c1c2e98f043db99d6755b1c58bde475516aef3a008ed7f28e"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d1655a6fc7aecd333b079d00fb3c8132d18988e47f19740c69303bf02e9883c6"}, + {file = "websockets-10.3-cp37-cp37m-win32.whl", hash = "sha256:83e5ca0d5b743cde3d29fda74ccab37bdd0911f25bd4cdf09ff8b51b7b4f2fa1"}, + {file = "websockets-10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:da4377904a3379f0c1b75a965fff23b28315bcd516d27f99a803720dfebd94d4"}, + {file = "websockets-10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a1e15b230c3613e8ea82c9fc6941b2093e8eb939dd794c02754d33980ba81e36"}, + {file = "websockets-10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31564a67c3e4005f27815634343df688b25705cccb22bc1db621c781ddc64c69"}, + {file = "websockets-10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c8d1d14aa0f600b5be363077b621b1b4d1eb3fbf90af83f9281cda668e6ff7fd"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fbd7d77f8aba46d43245e86dd91a8970eac4fb74c473f8e30e9c07581f852b2"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:210aad7fdd381c52e58777560860c7e6110b6174488ef1d4b681c08b68bf7f8c"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6075fd24df23133c1b078e08a9b04a3bc40b31a8def4ee0b9f2c8865acce913e"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f6d96fdb0975044fdd7953b35d003b03f9e2bcf85f2d2cf86285ece53e9f991"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c7250848ce69559756ad0086a37b82c986cd33c2d344ab87fea596c5ac6d9442"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:28dd20b938a57c3124028680dc1600c197294da5db4292c76a0b48efb3ed7f76"}, + {file = "websockets-10.3-cp38-cp38-win32.whl", hash = "sha256:54c000abeaff6d8771a4e2cef40900919908ea7b6b6a30eae72752607c6db559"}, + {file = "websockets-10.3-cp38-cp38-win_amd64.whl", hash = "sha256:7ab36e17af592eec5747c68ef2722a74c1a4a70f3772bc661079baf4ae30e40d"}, + {file = "websockets-10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a141de3d5a92188234afa61653ed0bbd2dde46ad47b15c3042ffb89548e77094"}, + {file = "websockets-10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:97bc9d41e69a7521a358f9b8e44871f6cdeb42af31815c17aed36372d4eec667"}, + {file = "websockets-10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6353ba89cfc657a3f5beabb3b69be226adbb5c6c7a66398e17809b0ce3c4731"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec2b0ab7edc8cd4b0eb428b38ed89079bdc20c6bdb5f889d353011038caac2f9"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:85506b3328a9e083cc0a0fb3ba27e33c8db78341b3eb12eb72e8afd166c36680"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8af75085b4bc0b5c40c4a3c0e113fa95e84c60f4ed6786cbb675aeb1ee128247"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07cdc0a5b2549bcfbadb585ad8471ebdc7bdf91e32e34ae3889001c1c106a6af"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5b936bf552e4f6357f5727579072ff1e1324717902127ffe60c92d29b67b7be3"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e4e08305bfd76ba8edab08dcc6496f40674f44eb9d5e23153efa0a35750337e8"}, + {file = "websockets-10.3-cp39-cp39-win32.whl", hash = "sha256:bb621ec2dbbbe8df78a27dbd9dd7919f9b7d32a73fafcb4d9252fc4637343582"}, + {file = "websockets-10.3-cp39-cp39-win_amd64.whl", hash = "sha256:51695d3b199cd03098ae5b42833006a0f43dc5418d3102972addc593a783bc02"}, + {file = "websockets-10.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:907e8247480f287aa9bbc9391bd6de23c906d48af54c8c421df84655eef66af7"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b1359aba0ff810d5830d5ab8e2c4a02bebf98a60aa0124fb29aa78cfdb8031f"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93d5ea0b5da8d66d868b32c614d2b52d14304444e39e13a59566d4acb8d6e2e4"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7934e055fd5cd9dee60f11d16c8d79c4567315824bacb1246d0208a47eca9755"}, + {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, + {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, ] win32-setctime = [ {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, @@ -3280,3 +3503,7 @@ yarl = [ zhconv = [ {file = "zhconv-1.4.3.tar.gz", hash = "sha256:ad42d9057ca0605f8e41d62b67ca797f879f58193ee6840562c51459b2698c45"}, ] +zipp = [ + {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, + {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, +] diff --git a/pyproject.toml b/pyproject.toml index 39bfd25a..ec43eba7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,13 +12,12 @@ url = "https://mirrors.aliyun.com/pypi/simple/" [tool.poetry.dependencies] python = "^3.8" -nonebot2 = "^2.0.0-beta.4" +nonebot2 = "^2.0.0rc1" nonebot-adapter-onebot = "^2.0.0-beta.1" aiofiles = "^0.8.0" aiohttp = "3.7.4.post0" beautifulsoup4 = "4.9.3" feedparser = "^6.0.8" -gino = "^1.0.1" httpx = "^0.23.0" ImageHash = "^4.2.1" jieba = "^0.42.1" diff --git a/utils/decorator/shop.py b/utils/decorator/shop.py index e03ea290..6b92ca99 100644 --- a/utils/decorator/shop.py +++ b/utils/decorator/shop.py @@ -1,9 +1,9 @@ -from typing import Callable, Union, Tuple +from typing import Callable, Union, Tuple, Optional +from nonebot.adapters.onebot.v11 import MessageSegment, Message from nonebot.plugin import require - -use = require("use") -shop = require("shop_handle") +require("use") +require("shop_handle") class ShopRegister(dict): @@ -12,6 +12,44 @@ class ShopRegister(dict): self._data = {} self._flag = True + def before_handle(self, name: Union[str, Tuple[str, ...]], load_status: bool = True): + """ + 说明: + 使用前检查方法 + 参数: + :param name: 道具名称 + :param load_status: 加载状态 + """ + def register_before_handle(name_list: Tuple[str, ...], func: Callable): + if load_status: + for name_ in name_list: + if not self._data[name_]: + self._data[name_] = {} + if not self._data[name_].get('before_handle'): + self._data[name_]['before_handle'] = [] + self._data[name]['before_handle'].append(func) + _name = (name,) if isinstance(name, str) else name + return lambda func: register_before_handle(_name, func) + + def after_handle(self, name: Union[str, Tuple[str, ...]], load_status: bool = True): + """ + 说明: + 使用后执行方法 + 参数: + :param name: 道具名称 + :param load_status: 加载状态 + """ + def register_after_handle(name_list: Tuple[str, ...], func: Callable): + if load_status: + for name_ in name_list: + if not self._data[name_]: + self._data[name_] = {} + if not self._data[name_].get('after_handle'): + self._data[name_]['after_handle'] = [] + self._data[name_]['after_handle'].append(func) + _name = (name,) if isinstance(name, str) else name + return lambda func: register_after_handle(_name, func) + def register( self, name: Tuple[str, ...], @@ -21,13 +59,15 @@ class ShopRegister(dict): limit_time: Tuple[int, ...], load_status: Tuple[bool, ...], daily_limit: Tuple[int, ...], + is_passive: Tuple[bool, ...], + icon: Tuple[str, ...], **kwargs, ): def add_register_item(func: Callable): if name in self._data.keys(): raise ValueError("该商品已注册,请替换其他名称!") - for n, p, d, dd, l, s, dl in zip( - name, price, des, discount, limit_time, load_status, daily_limit + for n, p, d, dd, l, s, dl, pa, i in zip( + name, price, des, discount, limit_time, load_status, daily_limit, is_passive, icon ): if s: _temp_kwargs = {} @@ -36,46 +76,58 @@ class ShopRegister(dict): _temp_kwargs[key.split("_", maxsplit=1)[-1]] = value else: _temp_kwargs[key] = value - self._data[n] = { + temp = self._data.get(n, {}) + temp.update({ "price": p, "des": d, "discount": dd, "limit_time": l, "daily_limit": dl, + "icon": i, + "is_passive": pa, "func": func, "kwargs": _temp_kwargs, - } + }) + self._data[n] = temp return func return lambda func: add_register_item(func) async def load_register(self): + from basic_plugins.shop.use.data_source import register_use, func_manager + from basic_plugins.shop.shop_handle.data_source import register_goods # 统一进行注册 if self._flag: # 只进行一次注册 self._flag = False for name in self._data.keys(): - await shop.register_goods( + await register_goods( name, self._data[name]["price"], self._data[name]["des"], self._data[name]["discount"], self._data[name]["limit_time"], self._data[name]["daily_limit"], + self._data[name]["is_passive"], + self._data[name]["icon"], ) - use.register_use( + register_use( name, self._data[name]["func"], **self._data[name]["kwargs"] ) + func_manager.register_use_before_handle(name, self._data[name].get('before_handle', [])) + func_manager.register_use_after_handle(name, self._data[name].get('after_handle', [])) def __call__( self, - name: Union[str, Tuple[str, ...]], - price: Union[float, Tuple[float, ...]], - des: Union[str, Tuple[str, ...]], - discount: Union[float, Tuple[float, ...]] = 1, - limit_time: Union[int, Tuple[int, ...]] = 0, - load_status: Union[bool, Tuple[bool, ...]] = True, - daily_limit: Union[int, Tuple[int, ...]] = 0, + name: Union[str, Tuple[str, ...]], # 名称 + price: Union[float, Tuple[float, ...]], # 价格 + des: Union[str, Tuple[str, ...]], # 简介 + discount: Union[float, Tuple[float, ...]] = 1, # 折扣 + limit_time: Union[int, Tuple[int, ...]] = 0, # 限时 + load_status: Union[bool, Tuple[bool, ...]] = True, # 加载状态 + daily_limit: Union[int, Tuple[int, ...]] = 0, # 每日限购 + is_passive: Union[bool, Tuple[bool, ...]] = False, # 被动道具(无法被'使用道具'命令消耗) + icon: Union[str, Tuple[str, ...]] = False, # 图标 **kwargs, ): _tuple_list = [] @@ -89,35 +141,15 @@ class ShopRegister(dict): f"注册商品 {name} 中 name,price,des,discount,limit_time,load_status,daily_limit 数量不符!" ) _current_len = _current_len if _current_len > -1 else 1 - _name = name if isinstance(name, tuple) else (name,) - _price = ( - price - if isinstance(price, tuple) - else tuple([price for _ in range(_current_len)]) - ) - _discount = ( - discount - if isinstance(discount, tuple) - else tuple([discount for _ in range(_current_len)]) - ) - _limit_time = ( - limit_time - if isinstance(limit_time, tuple) - else tuple([limit_time for _ in range(_current_len)]) - ) - _des = ( - des if isinstance(des, tuple) else tuple([des for _ in range(_current_len)]) - ) - _load_status = ( - load_status - if isinstance(load_status, tuple) - else tuple([load_status for _ in range(_current_len)]) - ) - _daily_limit = ( - daily_limit - if isinstance(daily_limit, tuple) - else tuple([daily_limit for _ in range(_current_len)]) - ) + _name = self.__get(name, _current_len) + _price = self.__get(price, _current_len) + _discount = self.__get(discount, _current_len) + _limit_time = self.__get(limit_time, _current_len) + _des = self.__get(des, _current_len) + _load_status = self.__get(load_status, _current_len) + _daily_limit = self.__get(daily_limit, _current_len) + _is_passive = self.__get(is_passive, _current_len) + _icon = self.__get(icon, _current_len) return self.register( _name, _price, @@ -126,9 +158,14 @@ class ShopRegister(dict): _limit_time, _load_status, _daily_limit, + _is_passive, + _icon, **kwargs, ) + def __get(self, value, _current_len): + return value if isinstance(value, tuple) else tuple([value for _ in range(_current_len)]) + def __setitem__(self, key, value): self._data[key] = value @@ -151,4 +188,18 @@ class ShopRegister(dict): return self._data.items() +class NotMeetUseConditionsException(Exception): + + """ + 不满足条件异常类 + """ + + def __init__(self, info: Optional[Union[str, MessageSegment, Message]]): + super().__init__(self) + self._info = info + + def get_info(self): + return self._info + + shop_register = ShopRegister() diff --git a/utils/manager/__init__.py b/utils/manager/__init__.py index 0e5e172e..b2f1b158 100755 --- a/utils/manager/__init__.py +++ b/utils/manager/__init__.py @@ -14,11 +14,6 @@ from .requests_manager import RequestManager from configs.path_config import DATA_PATH -# 全局字典 -GDict = { - "run_sql": [] # 需要启动前运行的sql语句 -} - # 群功能开关 | 群被动技能 | 群权限 管理 group_manager: Optional[GroupManager] = GroupManager( DATA_PATH / "manager" / "group_manager.json" diff --git a/utils/utils.py b/utils/utils.py index f8229192..535de1f7 100755 --- a/utils/utils.py +++ b/utils/utils.py @@ -18,8 +18,17 @@ try: except ModuleNotFoundError: import json +require("nonebot_plugin_apscheduler") +from nonebot_plugin_apscheduler import scheduler -scheduler = require("nonebot_plugin_apscheduler").scheduler +scheduler = scheduler + +# 全局字典 +GDict = { + "run_sql": [], # 需要启动前运行的sql语句 + "_shop_before_handle": {}, # 商品使用前函数 + "_shop_after_handle": {}, # 商品使用后函数 +} class CountLimiter: @@ -110,8 +119,8 @@ class BanCheckLimiter: self.mint[key] = 0 return False if ( - self.mint[key] >= self.default_count - and time.time() - self.mtime[key] < self.default_check_time + self.mint[key] >= self.default_count + and time.time() - self.mtime[key] < self.default_check_time ): self.mtime[key] = time.time() self.mint[key] = 0 @@ -402,7 +411,7 @@ def cn2py(word: str) -> str: def change_pixiv_image_links( - url: str, size: Optional[str] = None, nginx_url: Optional[str] = None + url: str, size: Optional[str] = None, nginx_url: Optional[str] = None ): """ 说明: @@ -422,8 +431,8 @@ def change_pixiv_image_links( if nginx_url: url = ( url.replace("i.pximg.net", nginx_url) - .replace("i.pixiv.cat", nginx_url) - .replace("_webp", "") + .replace("i.pixiv.cat", nginx_url) + .replace("_webp", "") ) return url