Условие (condition)
Проверяет значение переменной или свойство пользователя и направляет поток по разным веткам. Аналог if/else в программировании. Это чисто логическая нода — она не отправляет сообщений, а только определяет, по какому пути продолжится сценарий.
Когда использовать
- Проверить подписку на канал перед доступом к контенту
- Разделить логику для админов и обычных пользователей
- Проверить, заполнена ли переменная (анкета, email, роль)
- Ветвление по типу чата (приватный / группа / канал)
- Числовые проверки (баланс > 0, возраст >= 18, попытки < 3)
- Проверить, является ли пользователь Premium или ботом
Настройки
| Поле | Описание |
|---|---|
| Переменная | Имя переменной для проверки. Скрывается автоматически, если все ветки — системные |
| Ветки | Список условий: оператор + значение + целевой узел. Порядок имеет значение — первое сработавшее условие определяет путь |
| Режим подписки | Для is_subscribed/is_not_subscribed с несколькими каналами: all (все) или any (хотя бы один) |
Как выглядит в редакторе

Справа — панель свойств: ветка «Если пользователь — администратор бота» ведёт к чтению таблицы, ветка «Иначе» — к сообщению об отсутствии прав.
Операторы
Проверки переменных
Строковые операторы сравнивают переменную как текст.
| Оператор | Описание | Пример значения |
|---|---|---|
filled | Переменная заполнена (не пустая) | — |
empty | Переменная пустая | — |
equals | Равно указанному значению | admin |
not_equals | Не равно указанному значению | banned |
contains | Содержит подстроку | VIP |
not_contains | Не содержит подстроку | спам |
starts_with | Начинается с подстроки | http |
ends_with | Заканчивается на подстроку | .png |
matches_regex | Соответствует регулярному выражению | ^\+?\d{10,15}$ |
Числовые проверки
Числовые операторы работают, только если значение переменной можно преобразовать в число.
| Оператор | Описание | Пример значения |
|---|---|---|
greater_than | Больше числа | 100 |
less_than | Меньше числа | 3 |
between | В диапазоне (включительно) | 18 и 65 (value + value2) |
is_even | Чётное число | — |
is_odd | Нечётное число | — |
divisible_by | Делится на указанное число (без остатка) | 3 |
Системные операторы (без переменной)
Системные операторы проверяют свойства пользователя или тип чата напрямую из контекста Telegram, без чтения пользовательской переменной.
| Оператор | Описание | Откуда данные |
|---|---|---|
is_private | Приватный чат | callback_query.message.chat.type |
is_group | Групповой чат (включая супергруппы) | callback_query.message.chat.type |
is_channel | Канал | callback_query.message.chat.type |
is_admin | Пользователь — администратор бота | Список ADMIN_IDS из .env |
is_premium | Пользователь с Telegram Premium | callback_query.from_user.is_premium (флаг Telegram) |
is_bot | Пользователь — бот | callback_query.from_user.is_bot (флаг Telegram) |
is_subscribed | Подписан на указанный канал/чат | API-вызов getChatMember к Telegram |
is_not_subscribed | Не подписан на указанный канал/чат | API-вызов getChatMember к Telegram |
Источники данных:
- Тип чата (
is_private,is_group,is_channel) — берётся из объектаchatв текущем callback. Не ходит в базу. - Флаги пользователя (
is_premium,is_bot) — берётся из объектаfrom_userв callback. Telegram не всегда передаёт эти поля, поэтому при отсутствии считаетсяfalse. - Администратор (
is_admin) — сравнениеuser_idсо спискомADMIN_IDS, который задаётся в .env при настройке бота. Не ходит ни в какую базу. - Подписка (
is_subscribed,is_not_subscribed) — единственный оператор, который делает API-запрос к Telegram (getChatMember). Проверяет в реальном времени, подписан ли пользователь на указанный канал/чат.
Ветка по умолчанию
| Оператор | Описание |
|---|---|
else | Срабатывает, если ни одно из предыдущих условий не сработало |
Проверка подписки
Операторы is_subscribed и is_not_subscribed проверяют, подписан ли пользователь на указанный канал или чат.
В поле «Значение» укажите @username канала. Можно указать несколько через запятую: @chan1,@chan2,@chan3.
Режим множественной проверки (поле subscriptionMode в ветке):
| Режим | Описание |
|---|---|
all (по умолчанию) | Пользователь подписан на все указанные каналы |
any | Пользователь подписан хотя бы на один из каналов |
Если указан один канал — режим игнорируется.
Примеры
Проверка подписки на канал
Пользователь не получит доступ к контенту, пока не подпишется на канал. Если подписан — переходит к контенту, если нет — к сообщению с просьбой подписаться.
Проверка подписки на несколько каналов
Доступ открывается только после подписки на все три канала одновременно (режим all). Или хотя бы на один (режим any).
Проверка роли пользователя
Переменная user_role проверяется на конкретные значения. Админ → панель админа, модератор → панель модератора, остальные → обычное меню.
Проверка баланса
Числовой оператор greater_than — если баланс больше 0, показать информацию. Если нет — сообщить что пусто.
Проверка типа чата
Разный поток для личных сообщений и групповых чатов. Полезно когда бот работает и там, и там — например, в группе отвечать коротко, а в личке разворачивать полный сценарий.
Важно
- Condition — чисто логическая нода. Она не отправляет сообщений и не показывает кнопки. Для кнопок используйте отдельную keyboard-ноду
- Ветка
else— всегда последняя, срабатывает если ни одно другое условие не подошло - Для системных операторов (
is_private,is_adminи т.д.) поле «Переменная» не нужно и скрывается в UI - Числовые операторы (
greater_than,less_than,between,is_even,is_odd,divisible_by) работают только если значение переменной можно преобразовать в число. Если значение не числовое — ветка не сработает - Операторы
is_even/is_oddне требуют значения;divisible_byиспользует значение как делитель (деление на ноль игнорируется) - Оператор
matches_regexиспользует синтаксис регулярных выражений Python (re.search); значение подставляется в raw-строку, обратные слэши сохраняются - Порядок веток имеет значение: проверяются сверху вниз, первое сработавшее условие определяет путь
- В значениях условий поддерживаются переменные через
{имя}, например{user.balance}
Связанные ноды
- Сообщение — отправить сообщение после ветвления
- Клавиатура — кнопки задаются через отдельную keyboard-ноду
- Set Variable — установить переменную перед проверкой
- User Input — собрать данные перед проверкой
Техническая документация: lib/templates/condition