---
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).