from typing import Union from aiogram.types import ( FSInputFile, CallbackQuery, Message, ReplyKeyboardMarkup, InlineKeyboardMarkup ) from aiogram.utils.keyboard import ReplyKeyboardBuilder, InlineKeyboardBuilder # Настройка экспорта в модули __all__ = ('msg', 'msg_photo', 'markups',) def markups(markup: Union[ InlineKeyboardBuilder, ReplyKeyboardBuilder, InlineKeyboardMarkup, ReplyKeyboardMarkup, None] = None, ) -> None: """Получение маркапа""" reply_markup: Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, None] = None if markup: if isinstance(markup, InlineKeyboardBuilder): reply_markup = markup.as_markup() elif isinstance(markup, ReplyKeyboardBuilder): reply_markup = markup.as_markup(resize_keyboard=True) elif isinstance(markup, (InlineKeyboardMarkup, ReplyKeyboardMarkup)): reply_markup = markup return reply_markup async def msg( message: Message | CallbackQuery, text: str = "Сообщение отправлено!", markup: Union[ InlineKeyboardBuilder, ReplyKeyboardBuilder, InlineKeyboardMarkup, ReplyKeyboardMarkup, None, ] = None, ) -> None: """ Шаблон для отправки текстового сообщения или ответа на callback-запрос. Args: message (Message | CallbackQuery): Сообщение или callback-запрос. text (str): Текст сообщения. markup (Union[InlineKeyboardBuilder, ReplyKeyboardBuilder, InlineKeyboardMarkup, ReplyKeyboardMarkup, None]): Клавиатура для сообщения. Может быть билдера или готовый объект. """ if isinstance(message, Message): await message.reply(text=text, reply_markup=markups(markup)) else: await message.message.reply(text=text, reply_markup=markups(markup)) async def msg_photo( message: Message | CallbackQuery, file: str = "assets/default.jpg", text: str = "Сообщение отправлено!", markup: Union[ InlineKeyboardBuilder, ReplyKeyboardBuilder, InlineKeyboardMarkup, ReplyKeyboardMarkup, None, ] = None, ) -> None: """ Шаблон для отправки фотографии с подписью или ответа на callback-запрос. Args: message (Message | CallbackQuery): Сообщение или callback-запрос. file (str): Путь к файлу фотографии. text (str): Подпись к фото. markup (Union[InlineKeyboardBuilder, ReplyKeyboardBuilder, InlineKeyboardMarkup, ReplyKeyboardMarkup, None]): Клавиатура для сообщения. Может быть билдера или готовый объект. """ if isinstance(message, Message): await message.reply_photo(photo=FSInputFile(file), caption=text, reply_markup=markups(markup)) else: await message.message.reply_photo(photo=FSInputFile(file), caption=text, reply_markup=markups(markup))