diff --git a/bot/handlers/commands/users/id.py b/bot/handlers/commands/users/id.py
new file mode 100644
index 0000000..caa3a1a
--- /dev/null
+++ b/bot/handlers/commands/users/id.py
@@ -0,0 +1,218 @@
+"""
+Обработчик команды /id для получения информации о пользователе
+"""
+from aiogram import Router, F
+from aiogram.filters import Command
+from aiogram.types import Message, CallbackQuery
+from aiogram.utils.keyboard import InlineKeyboardBuilder
+
+from configs import settings, COMMANDS
+from middleware.loggers import logger
+
+__all__ = ('router',)
+
+router: Router = Router(name='user_id_router')
+
+
+# ================= ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ =================
+
+def get_close_keyboard():
+ """Создаёт клавиатуру с кнопкой закрытия"""
+ ikb = InlineKeyboardBuilder()
+ ikb.button(text='✖️ Закрыть', callback_data='id_close')
+ return ikb.as_markup()
+
+
+# ================= КОМАНДА /ID =================
+
+@router.message(Command(*COMMANDS.get('id', ['id']), prefix=settings.PREFIX, ignore_case=True))
+async def id_cmd(message: Message) -> None:
+ """
+ Показывает информацию о вашем Telegram аккаунте.
+
+ Доступно всем пользователям.
+
+ Использование: /id
+ """
+ user = message.from_user
+
+ if not user:
+ await message.answer('❌ Не удалось получить информацию о пользователе')
+ return
+
+ # === ФОРМИРУЕМ ИНФОРМАЦИЮ ===
+
+ output = '💠 ИНФОРМАЦИЯ О ВАС\n\n'
+
+ # Имя
+ full_name_parts = []
+ if user.first_name:
+ full_name_parts.append(user.first_name)
+ if user.last_name:
+ full_name_parts.append(user.last_name)
+
+ full_name = ' '.join(full_name_parts) if full_name_parts else 'Не указано'
+ output += f'💠 Имя: {full_name}\n'
+
+ # Username
+ if user.username:
+ output += f'💠 Username: @{user.username}\n'
+ else:
+ output += '💠 Username: не установлен\n'
+
+ # ID
+ output += f'💠 ID: {user.id}\n\n'
+
+ # Тип аккаунта
+ if user.is_bot:
+ output += '🤖 Тип: Бот\n'
+ elif getattr(user, 'is_premium', False):
+ output += '💠 Тип: Premium пользователь\n'
+ else:
+ output += '👥 Тип: Обычный пользователь\n'
+
+ # Дополнительная информация
+ output += '\n💠 Дополнительно:\n'
+
+ # Язык
+ if user.language_code:
+ language_names = {
+ 'ru': '🇷🇺 Русский',
+ 'en': '🇬🇧 English',
+ 'uk': '🇺🇦 Українська',
+ 'de': '🇩🇪 Deutsch',
+ 'es': '🇪🇸 Español',
+ 'fr': '🇫🇷 Français',
+ 'it': '🇮🇹 Italiano',
+ 'pt': '🇵🇹 Português',
+ }
+ language = language_names.get(user.language_code, f'🌐 {user.language_code.upper()}')
+ output += f'├─ Язык: {language}\n'
+
+ # Информация о чате
+ if message.chat.type == 'private':
+ output += '├─ Чат: 💬 Личные сообщения\n'
+ else:
+ chat_title = message.chat.title or 'Без названия'
+ chat_types = {
+ 'group': '👥 Группа',
+ 'supergroup': '👥 Супергруппа',
+ 'channel': '📢 Канал'
+ }
+ chat_type = chat_types.get(message.chat.type, '💬 Чат')
+ output += f'├─ Чат: {chat_type}\n'
+ output += f'├─ Название: {chat_title}\n'
+ output += f'├─ Chat ID: {message.chat.id}\n'
+
+ # Получаем количество участников (только для групп)
+ try:
+ member_count = await message.bot.get_chat_member_count(message.chat.id)
+ output += f'├─ Участников: {member_count}\n'
+ except Exception as e:
+ logger.debug(f'Не удалось получить количество участников: {e}', log_type='USER_ID')
+
+ # Message ID
+ output += f'└─ Message ID: {message.message_id}\n\n'
+
+ # Клавиатура
+ keyboard = get_close_keyboard()
+
+ # Отправляем
+ try:
+ await message.answer(
+ text=output,
+ parse_mode='HTML',
+ reply_markup=keyboard
+ )
+
+ logger.debug(f'Команда /id от пользователя {user.id}', log_type='USER_ID')
+
+ except Exception as e:
+ logger.error(f'Ошибка отправки информации о пользователе: {e}', log_type='ERROR')
+ await message.answer('❌ Произошла ошибка при получении информации')
+
+
+# ================= ОБРАБОТЧИК КНОПКИ ЗАКРЫТИЯ =================
+
+@router.callback_query(F.data == 'id_close')
+async def id_close_callback(callback: CallbackQuery) -> None:
+ """Закрывает (удаляет) сообщение с информацией"""
+ try:
+ await callback.message.delete()
+ await callback.answer('✅ Закрыто')
+ except Exception as e:
+ logger.error(f'Ошибка удаления сообщения ID: {e}', log_type='ERROR')
+ await callback.answer('❌ Не удалось удалить сообщение', show_alert=True)
+
+
+# ================= КОМАНДА /MYID (АЛЬТЕРНАТИВА) =================
+
+@router.message(Command(*COMMANDS.get('myid', ['myid']), prefix=settings.PREFIX, ignore_case=True))
+async def myid_cmd(message: Message) -> None:
+ """
+ Быстрый просмотр вашего ID.
+
+ Использование: /myid
+ """
+ user = message.from_user
+
+ if not user:
+ await message.answer('❌ Не удалось получить ID')
+ return
+
+ # Короткий ответ
+ text = f'💠 Ваш ID: {user.id}'
+
+ if user.username:
+ text += f'\n💠 Username: @{user.username}'
+
+ await message.answer(text, parse_mode='HTML')
+
+
+# ================= КОМАНДА /CHATID =================
+
+@router.message(Command(*COMMANDS.get('chatid', ['chatid']), prefix=settings.PREFIX, ignore_case=True))
+async def chatid_cmd(message: Message) -> None:
+ """
+ Показывает ID текущего чата.
+
+ Использование: /chatid
+ """
+ chat = message.chat
+
+ output = '💬 ИНФОРМАЦИЯ О ЧАТЕ\n\n'
+
+ # Тип чата
+ chat_types = {
+ 'private': '💬 Личные сообщения',
+ 'group': '👥 Группа',
+ 'supergroup': '👥 Супергруппа',
+ 'channel': '📢 Канал'
+ }
+ chat_type = chat_types.get(chat.type, '💬 Чат')
+
+ output += f'💠 Тип: {chat_type}\n'
+
+ if chat.title:
+ output += f'📌 Название: {chat.title}\n'
+
+ if chat.username:
+ output += f'💠 Username: @{chat.username}\n'
+
+ output += f'💠 Chat ID: {chat.id}\n'
+
+ # Дополнительная информация для групп
+ if chat.type in ['group', 'supergroup']:
+ try:
+ member_count = await message.bot.get_chat_member_count(chat.id)
+ output += f'👥 Участников: {member_count}\n'
+ except Exception as e:
+ logger.debug(f'Не удалось получить количество участников: {e}', log_type='USER_ID')
+
+ keyboard = get_close_keyboard()
+
+ await message.answer(
+ text=output,
+ parse_mode='HTML',
+ reply_markup=keyboard
+ )