From 09e18c526a0b76602c88374fbfbd796ab2ae1c7e Mon Sep 17 00:00:00 2001 From: scdhh Date: Sun, 9 Oct 2022 13:37:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../io_data_processor/processor.py | 34 +++++++++++-------- .../io_data_processor/request.py | 9 +++-- .../game_data_processor/top_data_processor.py | 24 +++++++------ .../game_data_processor/tos_data_processor.py | 21 +++++++----- nonebot_plugin_tetris_stats/utils/database.py | 2 ++ 6 files changed, 55 insertions(+), 36 deletions(-) diff --git a/.gitignore b/.gitignore index a4e4801..f4c6ad2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ dist test* Untitled* *copy* +.vscode diff --git a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/processor.py b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/processor.py index 96963ae..7da22ea 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/processor.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/processor.py @@ -30,16 +30,18 @@ class Processor: if user_data[1] is False: return f'用户信息请求错误:\n{user_data[2]["error"]}' user_id = await cls.get_user_id(user_data[2]) - if qq_number is None: # 理论上是不会有None出现的, ide快乐行属于是( - logger.error('获取QQ号失败') - return '获取QQ号失败' - return ( - await DataBase.write_bind_info( - qq_number=qq_number, - user=user_id, - game_type='IO' + if qq_number is None: # 理论上是不会有None出现的, ide快乐行属于是( + logger.error('获取QQ号失败') + return '获取QQ号失败' + return ( + await DataBase.write_bind_info( + qq_number=qq_number, + user=user_id, + game_type='IO' + ) ) - ) + logger.error('预期外行为, 请上报GitHub') + return '出现预期外行为,请查看后台信息' @classmethod async def handle_query(cls, message: str, qq_number: int | None): @@ -68,8 +70,8 @@ class Processor: @classmethod async def get_user_data( cls, - user_name: str = None, - user_id: str = None + user_name: str | None = None, + user_id: str | None = None ) -> tuple[bool, bool, dict[str, Any]]: '''获取用户数据''' if user_name is not None and user_id is None: @@ -83,8 +85,8 @@ class Processor: @classmethod async def get_solo_data( cls, - user_name: str = None, - user_id: str = None + user_name: str | None = None, + user_id: str | None = None ) -> tuple[bool, bool, dict[str, Any]]: '''获取Solo数据''' if user_name is not None and user_id is None: @@ -162,7 +164,11 @@ class Processor: return blitz_stats @classmethod - async def generate_message(cls, user_name: str = None, user_id: str = None) -> str: + async def generate_message( + cls, + user_name: str | None = None, + user_id: str | None = None + ) -> str: '''生成消息''' user_data, solo_data = await gather( cls.get_user_data(user_name=user_name, user_id=user_id), diff --git a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/request.py b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/request.py index ba4f684..2a6354d 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/request.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/request.py @@ -68,7 +68,10 @@ class Request: else: assert isinstance(response, Response) cls._headers = await response.request.all_headers() - cls._cookies = {i['name']: i['value'] for i in await context.cookies()} + try: + cls._cookies = {i['name']: i['value'] for i in await context.cookies()} + except KeyError: + cls._cookies = None await page.close() await context.close() return True, data['success'], data @@ -139,10 +142,10 @@ class Request: async with session.get(url, headers=cls._headers) as resp: data = await resp.json() return True, data['success'], data - except aiohttp.client_exceptions.ClientConnectorError as error: + except aiohttp.client_exceptions.ClientConnectorError as error: # type: ignore logger.error(f'请求错误\n{error}') return False, False, {} - except aiohttp.client_exceptions.ContentTypeError: + except aiohttp.client_exceptions.ContentTypeError: # type: ignore return await cls._anti_cloudflare(url) @classmethod diff --git a/nonebot_plugin_tetris_stats/game_data_processor/top_data_processor.py b/nonebot_plugin_tetris_stats/game_data_processor/top_data_processor.py index 45b7c58..0ef3964 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/top_data_processor.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/top_data_processor.py @@ -33,16 +33,16 @@ async def _(event: MessageEvent, matcher: Matcher): if await check_user(user_data[1]) is False: await matcher.finish('用户不存在') user_name = await get_user_name(user_data[1]) - if event.sender.user_id is None: # 理论上是不会有None出现的, ide快乐行属于是( - logger.error('获取QQ号失败') - await matcher.finish('获取QQ号失败') - await matcher.finish( - await DataBase.write_bind_info( - qq_number=event.sender.user_id, - user=user_name, - game_type='TOP' - ) - ) + if event.sender.user_id is None: # 理论上是不会有None出现的, ide快乐行属于是( + logger.error('获取QQ号失败') + await matcher.finish('获取QQ号失败') + await matcher.finish( + await DataBase.write_bind_info( + qq_number=event.sender.user_id, + user=user_name, + game_type='TOP' + ) + ) @TopStats.handle() @@ -69,6 +69,8 @@ async def _(event: MessageEvent, matcher: Matcher): message = (f'* 由于无法验证绑定信息, 不能保证查询到的用户为本人\n{await generate_message(bind_info)}') elif decoded_message[0] == 'Name': message = await generate_message(decoded_message[1][1]) + else: + raise ValueError('预期外行为, 请上报GitHub') await matcher.finish(message) @@ -79,7 +81,7 @@ async def get_user_data(user_name: str) -> tuple[bool, str]: async with aiohttp.ClientSession() as session: async with session.get(url) as resp: return True, await resp.text() - except aiohttp.client_exceptions.ClientConnectorError as error: + except aiohttp.client_exceptions.ClientConnectorError as error: # type: ignore logger.error(error) return False, '' diff --git a/nonebot_plugin_tetris_stats/game_data_processor/tos_data_processor.py b/nonebot_plugin_tetris_stats/game_data_processor/tos_data_processor.py index d2f2a6e..6e7ea08 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/tos_data_processor.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/tos_data_processor.py @@ -30,6 +30,8 @@ async def _(event: MessageEvent, matcher: Matcher): message = await generate_message(tea_id=event.sender.user_id) elif decoded_message[0] == 'Name': message = await generate_message(user_name=decoded_message[1][1]) + else: + raise ValueError('预期外行为, 请上报GitHub') await matcher.finish(message) @@ -40,14 +42,14 @@ async def request(url: str) -> tuple[bool, bool, dict[str, Any]]: async with session.get(url) as resp: data = await resp.json() return True, data['success'], data - except aiohttp.client_exceptions.ClientConnectorError as error: + except aiohttp.client_exceptions.ClientConnectorError as error: # type: ignore logger.error(f'请求错误\n{error}') return False, False, {} async def get_user_info( - user_name: str = None, - tea_id: int = None + user_name: str | None = None, + tea_id: int | None = None ) -> tuple[bool, bool, dict[str, Any]]: '''获取用户信息''' if user_name is not None and tea_id is None: @@ -60,8 +62,8 @@ async def get_user_info( async def get_user_data( - user_name: str = None, - tea_id: int = None, + user_name: str | None = None, + tea_id: int | None = None, other_parameter: str = '' ) -> tuple[bool, bool, dict[str, Any]]: '''获取用户数据''' @@ -77,8 +79,8 @@ async def get_user_data( async def get_rank_stats(user_info: dict) -> dict[str, float]: '''获取Rank数据''' data = user_info['data'] + rank_stats = {} if int(data['rankedGames']) != 0: - rank_stats = {} rank_stats['Rating'] = round(float(data['ratingNow']), 2) rank_stats['RD'] = round(float(data['rdNow']), 2) rank_stats['Vol'] = round(float(data['volNow']), 3) @@ -87,8 +89,8 @@ async def get_rank_stats(user_info: dict) -> dict[str, float]: async def get_game_data(user_data: dict) -> dict[str, int | float]: '''获取游戏数据''' + game_data: dict[str, int | float] = {} if user_data['data'] != []: - game_data: dict[str, int | float] = {} weighted_total_lpm = weighted_total_apm = weighted_total_adpm = total_time = num = 0 for i in user_data['data']: # 排除单人局和时间为0的游戏 @@ -136,7 +138,10 @@ async def get_pb_data(user_info: dict) -> dict[str, float | str]: return pb_data -async def generate_message(user_name: str = None, tea_id: int = None) -> str: +async def generate_message( + user_name: str | None = None, + tea_id: int | None = None +) -> str: '''生成消息''' user_info, user_data = await gather( get_user_info(user_name=user_name, tea_id=tea_id), diff --git a/nonebot_plugin_tetris_stats/utils/database.py b/nonebot_plugin_tetris_stats/utils/database.py index 90347a1..7c1ccf0 100644 --- a/nonebot_plugin_tetris_stats/utils/database.py +++ b/nonebot_plugin_tetris_stats/utils/database.py @@ -76,6 +76,8 @@ class DataBase(): cursor.execute( f'INSERT INTO {game_type}BIND (QQ, USER) VALUES (?, ?)', (qq_number, user)) message = '绑定成功' + else: + raise ValueError('预期外行为, 请上报GitHub') db.commit() return message