Перейти к основному содержимому

Условие (condition)

Проверяет значение переменной или свойство пользователя и направляет поток по разным веткам. Аналог if/else в программировании. Это чисто логическая нода — она не отправляет сообщений, а только определяет, по какому пути продолжится сценарий.

Когда использовать​

  • Проверить подписку на канал перед доступом к контенту
  • Разделить логику для админов и обычных пользователей
  • Проверить, заполнена ли переменная (анкета, email, роль)
  • Ветвление по типу чата (приватный / группа / канал)
  • Числовые проверки (баланс > 0, возраст >= 18, попытки < 3)
  • Проверить, является ли пользователь Premium или ботом

Настройки​

ПолеОписание
ПеременнаяИмя переменной для проверки. Скрывается автоматически, если все ветки — системные
ВеткиСписок условий: оператор + значение + целевой узел. Порядок имеет значение — первое сработавшее условие определяет путь
Режим подпискиДля is_subscribed/is_not_subscribed с несколькими каналами: all (все) или any (хотя бы один)

Как выглядит в редакторе​

Condition нода с ветвлением по is_admin

Справа — панель свойств: ветка «Если пользователь — администратор бота» ведёт к чтению таблицы, ветка «Иначе» — к сообщению об отсутствии прав.

Операторы​

Проверки переменных​

Строковые операторы сравнивают переменную как текст.

ОператорОписаниеПример значения
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 Premiumcallback_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