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

Условие (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