Небольшой класc, который принимает объект события в aiogram и ускоряет темп разработки. В общем года 2 назад я его начал делать, по мере надобности добавлял новые переменные. Возможно много лишнего для кого то, а для кого то не хватает чего то, измените под себя. СКАЧАТЬ(ТЫК) ЛИБО ПРЯМ ТУТ from aiogram.types import CallbackQuery, Message class GetData: def __init__(self, data): if isinstance(data, Message): self.username = data.from_user.username self.user_id = data.from_user.id self.chat_id = data.chat.id self.name = data.from_user.full_name self.message_id = data.message_id if data.text is not None: self.text = data.text elif data.caption is not None: self.text = data.caption else: self.text = '' if data.forward_from_chat is not None: self.forward_message = data.forward_from_chat self.forward_message_chat_id = data.forward_from_chat.id self.forward_message_chat_title = data.forward_from_chat.title if data.photo != []: if data.photo is not None: self.photo_id = data.photo[0].file_id self.photo = data.photo else: self.photo_id = None else: self.photo_id = None if data.document != []: if data.document is not None: self.document_id = data.document.file_id self.document = data.document else: self.document_id = None else: self.document_id = None if data.video != []: if data.video is not None: self.video_id = data.video.file_id self.video = data.video else: self.video_id = None else: self.video_id = None if data.animation != []: if data.animation is not None: self.animation_id = data.animation.file_id self.animation = data.animation else: self.animation_id = None else: self.animation_id = None if data.sticker != []: if data.sticker is not None: self.sticker_id = data.sticker.file_id self.sticker = data.sticker self.custom_emoji = data.sticker.custom_emoji_id else: self.sticker_id = None else: self.sticker_id = None if isinstance(data, CallbackQuery): self.username = data.from_user.username self.user_id = data.from_user.id self.chat_id = data.message.chat.id self.name = data.from_user.full_name self.message_id = data.message.message_id self.callback_data = data.data Code from aiogram.types import CallbackQuery, Message class GetData: def __init__(self, data): if isinstance(data, Message): self.username = data.from_user.username self.user_id = data.from_user.id self.chat_id = data.chat.id self.name = data.from_user.full_name self.message_id = data.message_id if data.text is not None: self.text = data.text elif data.caption is not None: self.text = data.caption else: self.text = '' if data.forward_from_chat is not None: self.forward_message = data.forward_from_chat self.forward_message_chat_id = data.forward_from_chat.id self.forward_message_chat_title = data.forward_from_chat.title if data.photo != []: if data.photo is not None: self.photo_id = data.photo[0].file_id self.photo = data.photo else: self.photo_id = None else: self.photo_id = None if data.document != []: if data.document is not None: self.document_id = data.document.file_id self.document = data.document else: self.document_id = None else: self.document_id = None if data.video != []: if data.video is not None: self.video_id = data.video.file_id self.video = data.video else: self.video_id = None else: self.video_id = None if data.animation != []: if data.animation is not None: self.animation_id = data.animation.file_id self.animation = data.animation else: self.animation_id = None else: self.animation_id = None if data.sticker != []: if data.sticker is not None: self.sticker_id = data.sticker.file_id self.sticker = data.sticker self.custom_emoji = data.sticker.custom_emoji_id else: self.sticker_id = None else: self.sticker_id = None if isinstance(data, CallbackQuery): self.username = data.from_user.username self.user_id = data.from_user.id self.chat_id = data.message.chat.id self.name = data.from_user.full_name self.message_id = data.message.message_id self.callback_data = data.data ВОТ ПРИМЕР ЕГО ИСПОЛЬЗОВАНИЯ from app.utils import GetData from aiogram import types, Bot # ПРИМЕР С ВСПОМОГАТЕЛЬНЫМ КЛАССОМ async def message_handler(message: types.Message, bot: Bot): info = GetData(message) await bot.send_message( chat_id=info.user_id, text=f"USERNAME: {info.username}\n" f"USER_ID: {info.user_id}" f"CHAT_ID: {info.chat_id}" f"FULL NAME: {info.name}", ) async def callback_query_handler(callback_query: types.CallbackQuery, bot: Bot): info = GetData(callback_query) await bot.send_message( chat_id=info.user_id, text=f"USERNAME: {info.username}\n" f"USER_ID: {info.user_id}" f"CHAT_ID: {info.chat_id}" f"FULL NAME: {info.name}", ) # ПРИМЕР БЕЗ ВСПОМОГАТЕЛЬНОГО КЛАССА async def message_handler(message: types.Message, bot: Bot): await bot.send_message( chat_id=message.from_user.id, text=f"USERNAME: {message.from_user.username}\n" f"USER_ID: {message.from_user.id}" f"CHAT_ID: {message.chat.id}" f"FULL NAME: {message.from_user.full_name}", ) async def callback_query_handler(callback_query: types.CallbackQuery, bot: Bot): await bot.send_message( chat_id=callback_query.from_user.id, text=f"USERNAME: {callback_query.from_user.username}\n" f"USER_ID: {callback_query.from_user.id}" f"CHAT_ID: {callback_query.message.chat.id}" f"FULL NAME: {callback_query.from_user.full_name}", ) # ЭТО ЗАТЯГИВАЕТ, # ЧТО ТЕБЕ ДОСТАТОЧНО СМЕНИТЬ MESSAGE НА CALLBACK_QUERY # И НЕ ПРИХОДИТСЯ ПИСАТЬ ЛИШНЕГО. # РАНЬШЕ ПРИХОДИЛОСЬ ПРОВЕРЯТЬ CAPTION ИЛИ TEXT В СООБЩЕНИИ async def message_handler(message: types.Message, bot: Bot): await bot.send_message( chat_id=message.from_user.id, text=message.text if message.text else message.caption, ) # ТЕПЕРЬ GETDATA ЗА ТЕБЯ ПОЙМЕТ ЧТО ТАМ CAPTION ИЛИ TEXT async def message_handler(message: types.Message, bot: Bot): info = GetData(message) await bot.send_message( chat_id=info.user_id, text=info.text, ) Python from app.utils import GetData from aiogram import types, Bot # ПРИМЕР С ВСПОМОГАТЕЛЬНЫМ КЛАССОМ async def message_handler(message: types.Message, bot: Bot): info = GetData(message) await bot.send_message( chat_id=info.user_id, text=f"USERNAME: {info.username}\n" f"USER_ID: {info.user_id}" f"CHAT_ID: {info.chat_id}" f"FULL NAME: {info.name}", ) async def callback_query_handler(callback_query: types.CallbackQuery, bot: Bot): info = GetData(callback_query) await bot.send_message( chat_id=info.user_id, text=f"USERNAME: {info.username}\n" f"USER_ID: {info.user_id}" f"CHAT_ID: {info.chat_id}" f"FULL NAME: {info.name}", ) # ПРИМЕР БЕЗ ВСПОМОГАТЕЛЬНОГО КЛАССА async def message_handler(message: types.Message, bot: Bot): await bot.send_message( chat_id=message.from_user.id, text=f"USERNAME: {message.from_user.username}\n" f"USER_ID: {message.from_user.id}" f"CHAT_ID: {message.chat.id}" f"FULL NAME: {message.from_user.full_name}", ) async def callback_query_handler(callback_query: types.CallbackQuery, bot: Bot): await bot.send_message( chat_id=callback_query.from_user.id, text=f"USERNAME: {callback_query.from_user.username}\n" f"USER_ID: {callback_query.from_user.id}" f"CHAT_ID: {callback_query.message.chat.id}" f"FULL NAME: {callback_query.from_user.full_name}", ) # ЭТО ЗАТЯГИВАЕТ, # ЧТО ТЕБЕ ДОСТАТОЧНО СМЕНИТЬ MESSAGE НА CALLBACK_QUERY # И НЕ ПРИХОДИТСЯ ПИСАТЬ ЛИШНЕГО. # РАНЬШЕ ПРИХОДИЛОСЬ ПРОВЕРЯТЬ CAPTION ИЛИ TEXT В СООБЩЕНИИ async def message_handler(message: types.Message, bot: Bot): await bot.send_message( chat_id=message.from_user.id, text=message.text if message.text else message.caption, ) # ТЕПЕРЬ GETDATA ЗА ТЕБЯ ПОЙМЕТ ЧТО ТАМ CAPTION ИЛИ TEXT async def message_handler(message: types.Message, bot: Bot): info = GetData(message) await bot.send_message( chat_id=info.user_id, text=info.text, ) И многие другие задачи можно вывести под капот, чтобы ускорить свой процесс разработки, отталкивайтесь от этого файла. Кто то может скажет, что это лишняя хуета, может быть и так для кого-то, но лично мне уже неудобно писать без него.