diff --git a/nonebot_plugin_tetris_stats/config/migrations/09d4bb60160d_rename_field.py b/nonebot_plugin_tetris_stats/config/migrations/09d4bb60160d_rename_field.py new file mode 100644 index 0000000..31a5aca --- /dev/null +++ b/nonebot_plugin_tetris_stats/config/migrations/09d4bb60160d_rename_field.py @@ -0,0 +1,51 @@ +"""Rename field + +迁移 ID: 09d4bb60160d +父迁移: b9d65badc713 +创建时间: 2024-04-23 23:42:04.541672 + +""" + +from __future__ import annotations + +from collections.abc import Sequence + +import sqlalchemy as sa +from alembic import op + +revision: str = '09d4bb60160d' +down_revision: str | Sequence[str] | None = 'b9d65badc713' +branch_labels: str | Sequence[str] | None = None +depends_on: str | Sequence[str] | None = None + + +def upgrade(name: str = '') -> None: + if name: + return + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('nonebot_plugin_tetris_stats_iorank', schema=None) as batch_op: + batch_op.alter_column('create_time', new_column_name='update_time', existing_type=sa.DateTime()) + batch_op.drop_index('ix_nonebot_plugin_tetris_stats_iorank_create_time') + op.create_index( + batch_op.f('ix_nonebot_plugin_tetris_stats_iorank_update_time'), + 'nonebot_plugin_tetris_stats_iorank', + ['update_time'], + unique=False, + ) + # ### end Alembic commands ### + + +def downgrade(name: str = '') -> None: + if name: + return + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('nonebot_plugin_tetris_stats_iorank', schema=None) as batch_op: + batch_op.alter_column('update_time', new_column_name='create_time') + batch_op.drop_index(batch_op.f('ix_nonebot_plugin_tetris_stats_iorank_update_time')) + op.create_index( + 'ix_nonebot_plugin_tetris_stats_iorank_create_time', + 'nonebot_plugin_tetris_stats_iorank', + ['create_time'], + unique=False, + ) + # ### end Alembic commands ### diff --git a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/__init__.py b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/__init__.py index 2179c63..c99ca30 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/__init__.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/__init__.py @@ -151,19 +151,19 @@ async def _(matcher: Matcher, rank: Rank): .where(IORank.rank == rank) .order_by( func.abs( - func.julianday(IORank.create_time) - - func.julianday(latest_data.create_time - timedelta(hours=24)) + func.julianday(IORank.update_time) + - func.julianday(latest_data.update_time - timedelta(hours=24)) ) ) .limit(1) ) ).one() message = '' - if (datetime.now(UTC) - latest_data.create_time.replace(tzinfo=UTC)) > timedelta(hours=7): + if (datetime.now(UTC) - latest_data.update_time.replace(tzinfo=UTC)) > timedelta(hours=7): message += 'Warning: 数据超过7小时未更新, 请联系Bot主人查看后台\n' message += f'{rank.upper()} 段 分数线 {latest_data.tr_line:.2f} TR, {latest_data.player_count} 名玩家\n' if compare_data.id != latest_data.id: - message += f'对比 {(latest_data.create_time-compare_data.create_time).total_seconds()/3600:.2f} 小时前趋势: {f"↑{difference:.2f}" if (difference:=latest_data.tr_line-compare_data.tr_line) > 0 else f"↓{-difference:.2f}" if difference < 0 else "→"}' + message += f'对比 {(latest_data.update_time-compare_data.update_time).total_seconds()/3600:.2f} 小时前趋势: {f"↑{difference:.2f}" if (difference:=latest_data.tr_line-compare_data.tr_line) > 0 else f"↓{-difference:.2f}" if difference < 0 else "→"}' else: message += '暂无对比数据' avg = get_metrics(pps=latest_data.avg_pps, apm=latest_data.avg_apm, vs=latest_data.avg_vs) @@ -188,7 +188,7 @@ async def _(matcher: Matcher, rank: Rank): f'APM: {latest_data.high_apm[1]} By: {latest_data.high_apm[0]["name"].upper()}\n' f'ADPM: {max_vs.adpm} ( {max_vs.vs}vs ) By: {latest_data.high_vs[0]["name"].upper()}\n' '\n' - f'数据更新时间: {latest_data.create_time.replace(tzinfo=UTC).astimezone(ZoneInfo("Asia/Shanghai")).strftime("%Y-%m-%d %H:%M:%S")}' + f'数据更新时间: {latest_data.update_time.replace(tzinfo=UTC).astimezone(ZoneInfo("Asia/Shanghai")).strftime("%Y-%m-%d %H:%M:%S")}' ) await matcher.finish(message) diff --git a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/model.py b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/model.py index 5d5651f..b29e2f9 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/model.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/model.py @@ -23,9 +23,7 @@ class IORank(MappedAsDataclass, Model): high_pps: Mapped[tuple[dict[str, str], float]] = mapped_column(JSON) high_apm: Mapped[tuple[dict[str, str], float]] = mapped_column(JSON) high_vs: Mapped[tuple[dict[str, str], float]] = mapped_column(JSON) - create_time: Mapped[datetime] = mapped_column( + update_time: Mapped[datetime] = mapped_column( DateTime, - default=lambda: datetime.now(tz=UTC), index=True, - init=False, ) 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 611c12b..d5c8046 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 @@ -208,6 +208,7 @@ async def get_io_rank_data() -> None: high_pps=(build_extremes_data(rank_users, pps, _max)), high_apm=(build_extremes_data(rank_users, apm, _max)), high_vs=(build_extremes_data(rank_users, vs, _max)), + update_time=league_all.cache.cached_at, ) ) async with get_session() as session: @@ -218,6 +219,6 @@ async def get_io_rank_data() -> None: @driver.on_startup async def _() -> None: async with get_session() as session: - latest_time = await session.scalar(select(IORank.create_time).order_by(IORank.id.desc()).limit(1)) + latest_time = await session.scalar(select(IORank.update_time).order_by(IORank.id.desc()).limit(1)) if latest_time is None or datetime.now(tz=UTC) - latest_time.replace(tzinfo=UTC) > timedelta(hours=6): await get_io_rank_data()