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: Загрузка из упоминания
Задача: Извлечь пользователя, упомянутого в сообщении.
Реакции:
TakeUser→Упоминания:trueSendMessage→ текст:Вы упомянули пользователя ${target.from.name}
Пример 4: Загрузка пользователя из команды
Задача: Извлечь пользователя из команды /ban @username.
Обработчик: Команда /ban @username
Реакции:
TakeUser→user_id:@usernameBanChatMember→user_id:${target.from.id}
🔄 Особенности поведения
| Ситуация | Поведение |
|---|---|
| Пользователь не найден | ${target.from} будет пустым или содержать только переданный ID |
| Неверный формат ID | Реакция не загрузит данные |
| Упоминания не включены | text_mention игнорируются |
| Опция «Устанавливать chat» включена | target.chat дублирует target.from |
🔗 Связанные реакции
| Реакция | Назначение |
|---|---|
| TakeChat | Загрузить данные о чате |
| LoadUser | Загрузить пользователя из базы |
| TakeExternal | Загрузить внешнего пользователя |
| TakeReply | Загрузить автора сообщения, на которое ответили |
🔗 Связанные разделы
| Раздел | Описание |
|---|---|
| Целевые переменные | Работа с target.from и target.chat |
| Обработчики команд | Извлечение пользователей из команд |