EnotPRO Logo EnotPRO

TakeUser

TakeUser — реакция загружает данные о пользователе.

📝 Назначение

Используется для загрузки информации о пользователе в целевые переменные для последующей обработки. После выполнения реакции данные доступны в переменной ${target.from}.

⚙️ Параметры

Параметр Тип Обязательный Описание
user_id Integer/String ❌ Нет ID пользователя или @username
Упоминания Boolean ❌ Нет Поддерживать ли text_mention (упоминания)
Устанавливать chat Boolean ❌ Нет Заменять target.chat на target.from

📍 Результат

После выполнения реакции данные становятся доступны в переменной:

${target.from}

Структура ${target.from}:

Поле Тип Описание
id Integer ID пользователя
first_name String Имя
last_name String Фамилия (если есть)
username String Username (если есть)
is_bot Boolean Является ли ботом
language_code String Код языка пользователя
is_premium Boolean Есть ли Telegram Premium

📝 Форматы указания пользователя

1. По ID

user_id: 123456789

2. По @username

user_id: @username

3. Через упоминание (text_mention)

Telegram предоставляет 3 способа указать пользователя:

Способ Формат Пример Когда использовать
ID Число 123456789 Универсальный способ
@username Текст с @ @username Для публичных username
text_mention Специальная сущность entities[].user Для упоминаний без @

Что такое text_mention?

text_mention — это специальная сущность в Telegram, которая позволяет ссылаться на пользователя без использования символа @. Она встречается в сообщениях, где пользователь упомянут через интерфейс Telegram (например, при вводе @username в поле ввода).

Где находится text_mention:

В отличие от ID и username, которые всегда находятся в update.message.from, text_mention находится внутри массива entities и его расположение не статично:

{
  "message": {
    "text": "Пример упоминания",
    "entities": [
      {
        "type": "text_mention",
        "offset": 0,
        "length": 7,
        "user": {
          "id": 7042623778,
          "first_name": "Example",
          "last_name": "07"
        }
      }
    ]
  }
}

⚠️ Важно: text_mention может находиться на любой позиции в массиве entities (не обязательно entities.0). Для поиска всех упоминаний используйте макрос !{list.find}.

Как получить ID из text_mention:

${update.message.entities.0.user.id}

Но так как индекс может быть любым, рекомендуется использовать цикл или макрос для поиска всех text_mention:

!{list.find|list: ${update.message.entities}; value: text_mention; key: type}

Сравнение способов

Способ Где находится Статичность Сложность
ID ${update.message.from.id} Всегда на одном месте Низкая
@username ${update.message.from.username} Всегда на одном месте Низкая
text_mention ${update.message.entities.N.user.id} Позиция может меняться Средняя

🔧 Опция «Устанавливать chat»

По умолчанию структура target выглядит так:

"target": {
  "chat": {
    "id": -1001798752916,
    "title": "Group Testing",
    "type": "supergroup",
    "username": "rdn123gd"
  },
  "from": {
    "first_name": "Example",
    "id": 7042623778,
    "is_bot": false,
    "language_code": "ru",
    "last_name": "07",
    "name": "Example 07",
    "type": "user"
  }
}
  • ${target.chat} — информация о чате, где произошло событие
  • ${target.from} — информация о пользователе

Если включить опцию «Устанавливать chat», ${target.chat} будет дублировать информацию из ${target.from}:

"target": {
  "chat": {
    "first_name": "Example",
    "id": 7042623778,
    "last_name": "07",
    "type": "user"
  },
  "from": {
    "first_name": "Example",
    "id": 7042623778,
    "is_bot": false,
    "language_code": "ru",
    "last_name": "07",
    "name": "Example 07",
    "type": "user"
  }
}

💡 Совет: Используйте эту опцию, если нужно отправить сообщение пользователю из ${target.chat} (например, при массовых операциях).

🧪 Примеры использования

Пример 1: Загрузка пользователя по ID

Параметры TakeUser:

  • user_id: 123456789

Результат: ${target.from.id} = 123456789

Пример 2: Загрузка пользователя по @username

Параметры TakeUser:

  • user_id: @username

Пример 3: Загрузка из упоминания

Задача: Извлечь пользователя, упомянутого в сообщении.

Реакции:

  1. TakeUserУпоминания: true
  2. SendMessage → текст: Вы упомянули пользователя ${target.from.name}

Пример 4: Загрузка пользователя из команды

Задача: Извлечь пользователя из команды /ban @username.

Обработчик: Команда /ban @username

Реакции:

  1. TakeUseruser_id: @username
  2. BanChatMemberuser_id: ${target.from.id}

🔄 Особенности поведения

Ситуация Поведение
Пользователь не найден ${target.from} будет пустым или содержать только переданный ID
Неверный формат ID Реакция не загрузит данные
Упоминания не включены text_mention игнорируются
Опция «Устанавливать chat» включена target.chat дублирует target.from

🔗 Связанные реакции

Реакция Назначение
TakeChat Загрузить данные о чате
LoadUser Загрузить пользователя из базы
TakeExternal Загрузить внешнего пользователя
TakeReply Загрузить автора сообщения, на которое ответили

🔗 Связанные разделы

Раздел Описание
Целевые переменные Работа с target.from и target.chat
Обработчики команд Извлечение пользователей из команд
© 2025 EnotPRO. Все права защищены.