"""Команды экономики: очищение, яички и реакция на сообщения.""" from __future__ import annotations import random from datetime import date, datetime from aiogram import Router from aiogram.filters import Command from aiogram.types import Message from bot.services import access, alerts from bot.services import economy as economy_service from common.config import get_settings from common.texts import system from common.texts.render import render from common.texts.store import get_text router = Router(name="economy") #: Окно сезонного события «яички». EGG_EVENT_START = date(2025, 4, 1) EGG_EVENT_END = date(2025, 4, 20) #: Шанс выпадения монетки на сообщение. COIN_CHANCE = 27 # из 100 @router.message(Command("очищение", ignore_case=True)) async def purification_handler(message: Message) -> None: if not await access.check_user(message): return result = await economy_service.purify(message.from_user.id) if not result.success: context = {"h": result.hours, "m": result.minutes, "s": result.seconds} await message.answer(render(await get_text("economy.no_purification"), context)) else: context = {"money_add": result.money_add, "exp_add": result.exp_add} await message.answer(render(await get_text("economy.purification"), context)) await alerts.notify_purification( message.bot, username=message.from_user.username, user_id=message.from_user.id, result=result, ) @router.message(Command("яички", ignore_case=True)) async def eggs_handler(message: Message) -> None: today = datetime.now(get_settings().tzinfo).date() if not (EGG_EVENT_START <= today <= EGG_EVENT_END): await message.answer(system.MSG_EGGS_TOO_EARLY) return if not await access.check_user(message): return result = await economy_service.collect_eggs(message.from_user.id) if not result.success: context = {"h": result.hours, "m": result.minutes, "s": result.seconds} await message.answer(render(await get_text("economy.no_eggs"), context)) else: await message.answer(render(await get_text("economy.eggs"), {"eggs": result.eggs})) @router.message() async def message_handler(message: Message) -> None: """Случайная монетка за активность в основном чате.""" if not await access.check_user(message): return if message.chat.id != get_settings().chat_id: return if random.randrange(1, 100) == COIN_CHANCE: await message.reply(system.MSG_COIN) await economy_service.add_coins(message.from_user.id, 1)