diff --git a/nonebot_plugin_tetris_stats/game_data_processor/__init__.py b/nonebot_plugin_tetris_stats/game_data_processor/__init__.py index 31b98fb..b34ec9f 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/__init__.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/__init__.py @@ -59,11 +59,6 @@ class Processor(ABC): """处理查询消息""" raise NotImplementedError - @abstractmethod - async def generate_message(self) -> str: - """生成消息""" - raise NotImplementedError - def __del__(self) -> None: finish_time = datetime.now(tz=UTC) if Recorder.is_error_event(self.event_id): 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 a36c46b..b4c421e 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 @@ -119,47 +119,10 @@ class Processor(ProcessorMeta): """处理查询消息""" self.command_type = 'query' await self.get_user() - return await self.generate_message() - - async def get_user(self) -> None: - """ - 用于获取 UserName 和 UserID 的函数 - """ - if self.user.name is None: - self.user.name = (await self.get_user_info()).data.user.username - if self.user.ID is None: - self.user.ID = (await self.get_user_info()).data.user.id - - async def get_user_info(self) -> InfoSuccess: - """获取用户数据""" - if self.processed_data.user_info is None: - self.raw_response.user_info = await Cache.get( - splice_url([BASE_URL, 'users/', f'{self.user.ID or self.user.name}']) - ) - user_info: UserInfo = type_validate_json(UserInfo, self.raw_response.user_info) # type: ignore[arg-type] - if isinstance(user_info, InfoFailed): - raise RequestError(f'用户信息请求错误:\n{user_info.error}') - self.processed_data.user_info = user_info - return self.processed_data.user_info - - async def get_user_records(self) -> RecordsSuccess: - """获取Solo数据""" - if self.processed_data.user_records is None: - self.raw_response.user_records = await Cache.get( - splice_url([BASE_URL, 'users/', f'{self.user.ID or self.user.name}/', 'records']) - ) - user_records: UserRecords = type_validate_json(UserRecords, self.raw_response.user_records) # type: ignore[arg-type] - if isinstance(user_records, RecordsFailed): - raise RequestError(f'用户Solo数据请求错误:\n{user_records.error}') - self.processed_data.user_records = user_records - return self.processed_data.user_records - - @override - async def generate_message(self) -> str: - """生成消息""" user_info = await self.get_user_info() user_name = user_info.data.user.username.upper() league = user_info.data.user.league + ret_message = '' if isinstance(league, NeverPlayedLeague): ret_message += f'用户 {user_name} 没有排位统计数据' @@ -195,6 +158,39 @@ class Processor(ProcessorMeta): ret_message += f' ( #{blitz.rank} )' if blitz.rank is not None else '' return ret_message + async def get_user(self) -> None: + """ + 用于获取 UserName 和 UserID 的函数 + """ + if self.user.name is None: + self.user.name = (await self.get_user_info()).data.user.username + if self.user.ID is None: + self.user.ID = (await self.get_user_info()).data.user.id + + async def get_user_info(self) -> InfoSuccess: + """获取用户数据""" + if self.processed_data.user_info is None: + self.raw_response.user_info = await Cache.get( + splice_url([BASE_URL, 'users/', f'{self.user.ID or self.user.name}']) + ) + user_info: UserInfo = type_validate_json(UserInfo, self.raw_response.user_info) # type: ignore[arg-type] + if isinstance(user_info, InfoFailed): + raise RequestError(f'用户信息请求错误:\n{user_info.error}') + self.processed_data.user_info = user_info + return self.processed_data.user_info + + async def get_user_records(self) -> RecordsSuccess: + """获取Solo数据""" + if self.processed_data.user_records is None: + self.raw_response.user_records = await Cache.get( + splice_url([BASE_URL, 'users/', f'{self.user.ID or self.user.name}/', 'records']) + ) + user_records: UserRecords = type_validate_json(UserRecords, self.raw_response.user_records) # type: ignore[arg-type] + if isinstance(user_records, RecordsFailed): + raise RequestError(f'用户Solo数据请求错误:\n{user_records.error}') + self.processed_data.user_records = user_records + return self.processed_data.user_records + @scheduler.scheduled_job('cron', hour='0,6,12,18', minute=0) @retry(exception_type=RequestError, delay=timedelta(minutes=15)) diff --git a/nonebot_plugin_tetris_stats/game_data_processor/top_data_processor/processor.py b/nonebot_plugin_tetris_stats/game_data_processor/top_data_processor/processor.py index 37c8db3..c022aed 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/top_data_processor/processor.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/top_data_processor/processor.py @@ -109,7 +109,21 @@ class Processor(ProcessorMeta): """处理查询消息""" self.command_type = 'query' await self.check_user() - return await self.generate_message() + game_data = await self.get_game_data() + message = '' + if game_data.day is not None: + message += f'用户 {self.user.name} 24小时内统计数据为: ' + message += f"\nL'PM: {round(game_data.day.lpm,2)} ( {round(game_data.day.lpm/24,2)} pps )" + message += f'\nAPM: {round(game_data.day.apm,2)} ( x{round(game_data.day.apm/game_data.day.lpm,2)} )' + else: + message += f'用户 {self.user.name} 暂无24小时内统计数据' + if game_data.total is not None: + message += '\n历史统计数据为: ' + message += f"\nL'PM: {round(game_data.total.lpm,2)} ( {round(game_data.total.lpm/24,2)} pps )" + message += f'\nAPM: {round(game_data.total.apm,2)} ( x{round(game_data.total.apm/game_data.total.lpm,2)} )' + else: + message += '\n暂无历史统计数据' + return message async def get_user_profile(self) -> str: """获取用户信息""" @@ -146,22 +160,3 @@ class Processor(ProcessorMeta): dataframe = read_html(table, encoding='utf-8', header=0)[0] total = Data(lpm=dataframe['lpm'].mean(), apm=dataframe['apm'].mean()) if len(dataframe) != 0 else None return GameData(day=day, total=total) - - @override - async def generate_message(self) -> str: - """生成消息""" - game_data = await self.get_game_data() - message = '' - if game_data.day is not None: - message += f'用户 {self.user.name} 24小时内统计数据为: ' - message += f"\nL'PM: {round(game_data.day.lpm,2)} ( {round(game_data.day.lpm/24,2)} pps )" - message += f'\nAPM: {round(game_data.day.apm,2)} ( x{round(game_data.day.apm/game_data.day.lpm,2)} )' - else: - message += f'用户 {self.user.name} 暂无24小时内统计数据' - if game_data.total is not None: - message += '\n历史统计数据为: ' - message += f"\nL'PM: {round(game_data.total.lpm,2)} ( {round(game_data.total.lpm/24,2)} pps )" - message += f'\nAPM: {round(game_data.total.apm,2)} ( x{round(game_data.total.apm/game_data.total.lpm,2)} )' - else: - message += '\n暂无历史统计数据' - return message diff --git a/nonebot_plugin_tetris_stats/game_data_processor/tos_data_processor/processor.py b/nonebot_plugin_tetris_stats/game_data_processor/tos_data_processor/processor.py index a4da875..00e7043 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/tos_data_processor/processor.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/tos_data_processor/processor.py @@ -123,7 +123,24 @@ class Processor(ProcessorMeta): """处理查询消息""" self.command_type = 'query' await self.get_user() - return await self.generate_message() + user_info = (await self.get_user_info()).data + message = f'用户 {user_info.name} ({user_info.teaid}) ' + if user_info.ranked_games == '0': + message += '暂无段位统计数据' + else: + message += f', 段位分 {round(float(user_info.rating_now),2)}±{round(float(user_info.rd_now),2)} ({round(float(user_info.vol_now),2)}) ' + game_data = await self.get_game_data() + if game_data is None: + message += ', 暂无游戏数据' + else: + message += f', 最近 {game_data.num} 局数据' + message += f"\nL'PM: {game_data.lpm} ( {game_data.pps} pps )" + message += f'\nAPM: {game_data.apm} ( x{game_data.apl} )' + message += f'\nADPM: {game_data.adpm} ( x{game_data.adpl} ) ( {game_data.vs}vs )' + message += f'\n40L: {float(user_info.pb_sprint)/1000:.2f}s' if user_info.pb_sprint != '2147483647' else '' + message += f'\nMarathon: {user_info.pb_marathon}' if user_info.pb_marathon != '0' else '' + message += f'\nChallenge: {user_info.pb_challenge}' if user_info.pb_challenge != '0' else '' + return message async def get_user(self) -> None: """ @@ -234,25 +251,3 @@ class Processor(ProcessorMeta): adpl=round((adpm / lpm), 2), vs=round((adpm / 60 * 100), 2), ) - - @override - async def generate_message(self) -> str: - """生成消息""" - user_info = (await self.get_user_info()).data - message = f'用户 {user_info.name} ({user_info.teaid}) ' - if user_info.ranked_games == '0': - message += '暂无段位统计数据' - else: - message += f', 段位分 {round(float(user_info.rating_now),2)}±{round(float(user_info.rd_now),2)} ({round(float(user_info.vol_now),2)}) ' - game_data = await self.get_game_data() - if game_data is None: - message += ', 暂无游戏数据' - else: - message += f', 最近 {game_data.num} 局数据' - message += f"\nL'PM: {game_data.lpm} ( {game_data.pps} pps )" - message += f'\nAPM: {game_data.apm} ( x{game_data.apl} )' - message += f'\nADPM: {game_data.adpm} ( x{game_data.adpl} ) ( {game_data.vs}vs )' - message += f'\n40L: {float(user_info.pb_sprint)/1000:.2f}s' if user_info.pb_sprint != '2147483647' else '' - message += f'\nMarathon: {user_info.pb_marathon}' if user_info.pb_marathon != '0' else '' - message += f'\nChallenge: {user_info.pb_challenge}' if user_info.pb_challenge != '0' else '' - return message