Исходный код denoise_bot.routers.magic_button
import os
import random
from aiogram import F, Router
from aiogram.fsm.context import FSMContext
from aiogram.types import CallbackQuery, FSInputFile
from .start import menu_buttons
from .button_states import Form
magic = Router()
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
CATS_IMAGES_DIR = os.path.join(BASE_DIR, "cats")
CUTE_CAPTIONS = [
"Мур-мур-мур! 😻",
"Котька в ударе!",
"Пушистый комочек счастья 🐾",
"Ты сегодня молодец, как этот котик!",
"Мягкий и пушистый, как твое настроение сейчас!",
"Котик одобряет твой выбор!",
"Умиротворение в каждом взгляде 😊",
"Ты заслужил этого котика!",
"Пушистый антистресс в твоем чатике!",
"Мурчание передается через фото!",
]
[документация]
@magic.callback_query(Form.is_choosing, F.data.startswith("magic_action"))
async def handle_magic_button(callback: CallbackQuery, state: FSMContext) -> None:
"""Обработчик нажатия на кнопку - отправляет котиков сразу"""
await callback.answer()
try:
cat_images = [f for f in os.listdir(CATS_IMAGES_DIR) if f.lower().endswith((".jpg", ".jpeg", ".png"))]
if not cat_images:
await callback.message.answer(_("Котики куда-то убежали... Попробуйте позже!"))
return
num_images = min(random.randint(1, 5), len(cat_images))
selected_images = random.sample(cat_images, num_images)
for image_name in selected_images:
image_path = os.path.join(CATS_IMAGES_DIR, image_name)
caption = random.choice(CUTE_CAPTIONS)
photo = FSInputFile(image_path)
await callback.message.answer_photo(photo, caption=caption)
await callback.message.answer(_("Вот ваша порция котиков! 😊"), reply_markup=menu_buttons())
await state.set_state(Form.is_choosing)
except Exception as e:
await callback.message.answer(_("Произошла ошибка при загрузке котиков 😿"))