--- url: /templates/beginners/conditions.md description: >- Как показывать разный текст разным участникам с помощью условий if, elseif и else — объяснение для новичков. --- # Условия «если… то…»

Иногда одно и то же сообщение должно звучать по-разному: новичку — одно, опытному участнику — другое, администратору — третье. Для этого есть условия.

## Как выглядит условие { #if } Условие читается почти как обычная фраза: «если у участника Premium, то написать „спасибо за поддержку Telegram“». ```template Привет, {{ member.name }}! {% if member.isPremium %}Спасибо, что поддерживаешь Telegram ⭐{% endif %} ``` Разберем по частям: * `{% if … %}` — начало условия. После `if` пишется то, что проверяем. * Текст между `{% if %}` и `{% endif %}` бот покажет, **только если условие выполнено**. * `{% endif %}` — конец условия. Без него бот не поймет, где заканчивается текст, и выдаст ошибку. Обратите внимание: здесь скобки с процентами `{% %}`, а не двойные фигурные `{{ }}`. Процентные скобки ничего не печатают — они говорят боту, что делать. ## «Иначе» { #else } Чтобы показать другой текст, когда условие не выполнено, добавьте `{% else %}`: ```template {% if member.rank.level >= 10 %} С возвращением, ветеран! {% else %} Добро пожаловать! Общайся, и твой уровень будет расти. {% endif %} ``` Если уровень 10 и выше — «С возвращением, ветеран!», иначе — второе приветствие. ## Несколько вариантов { #elseif } `{% elseif … %}` добавляет еще одну проверку. Бот проверяет условия сверху вниз и берет **первое подходящее**: ```template {% if member.isOwner %} 👑 Создатель чата на связи! {% elseif member.isAdmin %} 🛡 Администратор {{ member.name }} здесь. {% elseif member.rank.level >= 20 %} 🏆 Опытный участник {{ member.name }}. {% else %} 👋 Привет, {{ member.name }}! {% endif %} ``` 🛡 Администратор Анна здесь. ## Сравнения { #compare } | Знак | Значит | Пример | |---|---|---| | `==` | равно | `member.status == 'creator'` | | `!=` | не равно | `member.language != 'ru'` | | `>` | больше | `member.rank.level > 5` | | `<` | меньше | `member.warnCount < 3` | | `>=` | больше или равно | `chat.memberCount >= 1000` | | `<=` | меньше или равно | `member.rank.level <= 1` | ::: warning Одно «равно» или два? Для сравнения пишите **два** знака: `==`. Один знак `=` используется, только чтобы запомнить значение (об этом ниже). ::: Текст для сравнения берите в кавычки — одинарные `'…'` или двойные `"…"`: ```template {% if member.language == 'en' %}Hello!{% else %}Привет!{% endif %} ``` Числа в кавычки брать не нужно: `member.rank.level >= 10`. ## Несколько условий сразу { #and-or } | Слово | Значит | Пример | |---|---|---| | `and` | и то, и другое | `member.rank.level >= 10 and member.warnCount == 0` | | `or` | хотя бы одно | `member.isAdmin or member.moderator` | | `not` | наоборот | `not (member.isPremium)` | ```template {% if member.rank.level >= 10 and member.warnCount == 0 %} Ты образцовый участник — ни одного предупреждения на 10+ уровне! {% endif %} ``` ::: tip Ставьте скобки Если в условии есть и `and`, и `or`, обязательно ставьте скобки — так вы точно скажете боту, что проверять вместе: ```template {% if (member.isAdmin or member.moderator) and member.warnCount == 0 %} ``` Без скобок бот читает условие строго слева направо, и результат может удивить. С `not` тоже удобнее ставить скобки: `not (member.bot)`. ::: ## Проверка «есть ли значение» { #empty } Просто напишите переменную — условие выполнится, если в ней что-то есть: ```template {% if member.username %} Твой username: @{{ member.username }} {% else %} У тебя нет username — его можно задать в настройках Telegram. {% endif %} ``` Бот считает «пустым» отсутствующее значение, пустой текст, пустой список, `false` и число 0. ## Запомнить значение { #set } Если одно и то же значение нужно несколько раз, запомните его под коротким именем с помощью `{% set %}`: ```template {% set lvl = member.rank.level %} {% if lvl >= 50 %}Легенда{% elseif lvl >= 20 %}Ветеран{% elseif lvl >= 5 %}Активный{% else %}Новичок{% endif %} ``` `set` — «запомнить». Слева имя (любое, латиницей), справа значение. Дальше в шаблоне можно писать `lvl` вместо `member.rank.level`. ## Лишние пустые строки { #whitespace } Строки, на которых стоят только `{% if %}`, `{% else %}` и `{% endif %}`, в сообщении превращаются в пустые строки. Чтобы их убрать, добавьте дефис внутрь скобок: `{%-` убирает пробелы и переносы **перед** островком, `-%}` — **после** него. ```template Привет! {%- if member.isPremium %} ⭐{% endif %} ``` Результат: «Привет! ⭐» в одну строку. Подробнее — в статье [Островки кода](../advanced/syntax#whitespace). ## Что дальше { #next } * Условия — лишь один из [тегов](../advanced/tags). Есть еще цикл `for`, который повторяет текст для каждого элемента списка. * Попробуйте [кнопки под сообщением](./buttons). * Если что-то не работает, загляните в [частые ошибки](./mistakes).