From e4786d8b6884b4fb6dc3318ea95fcbb4ae3dfbe9 Mon Sep 17 00:00:00 2001 From: Egor Deev Date: Tue, 6 Oct 2026 01:10:52 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=82=D0=B0=D1=82=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=C2=AB=D0=B7=D0=B0=20=D0=BC=D0=B5=D1=81?= =?UTF-8?q?=D1=8F=D1=86=C2=BB=20=D0=BE=D0=B1=D0=BD=D1=83=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=B2=20=D0=BD=D0=B0=D1=87=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=20=D0=BC=D0=B5=D1=81=D1=8F=D1=86=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Раньше месячные счётчики нигде не сбрасывались — ни в коде, ни на сервере — и копились с момента создания таблиц. При первом запуске месяц только запоминается (в таблице meta), обнуление — со следующей смены месяца. --- code/bot.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/code/bot.py b/code/bot.py index b1c551b..64b6245 100644 --- a/code/bot.py +++ b/code/bot.py @@ -1,14 +1,43 @@ import asyncio import logging +from datetime import date -from init import bot, dp +from init import bot, dp, db, dm from handlers import router +def reset_month_if_needed(today=None): + """Статистика «за месяц» раньше нигде не обнулялась и копилась с момента создания таблиц. + При первом запуске месяц только запоминается — обнуление со следующей смены месяца""" + key = (today or date.today()).strftime("%Y-%m") + saved = db.get_meta("month") + if saved == key: + return False + if saved is not None: + db.reset_month() + dm.reset_all() + logging.info("Месячная статистика обнулена: %s → %s", saved, key) + db.set_meta("month", key) + return saved is not None + + +async def month_watcher(): + while True: + try: + reset_month_if_needed() + except Exception: + logging.exception("Не удалось обнулить месячную статистику") + await asyncio.sleep(600) + + async def main() -> None: dp.include_router(router) await bot.delete_webhook(drop_pending_updates=True) - await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types(), skip_updates=True) + watcher = asyncio.create_task(month_watcher()) + try: + await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types()) + finally: + watcher.cancel() if __name__ == '__main__':