"""Команды экономики: очищение, яички и реакция на сообщения.""" from __future__ import annotations import random from datetime import 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.eggs import egg_event_period, is_egg_event_active from common.texts import system from common.texts.render import render from common.texts.store import get_text router = Router(name="economy") #: Шанс выпадения монетки на сообщение. COIN_CHANCE = 27 # из 100 @router.message(Command("очищение", "purify", 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("яички", "eggs", ignore_case=True)) async def eggs_handler(message: Message) -> None: settings = get_settings() if not is_egg_event_active(settings): today = datetime.now(settings.tzinfo).date() start, _ = egg_event_period(settings, today) await message.answer(system.MSG_EGGS_TOO_EARLY if today < start else system.MSG_EGGS_EVENT_OVER) 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)