LeadConverter
Search…
Считает разницу во времени
Сейчас мы соберём простого бота, который будет считать сколько осталось дней до какого-то события
Этот бот будет уметь:
  • Считать, сколько часов осталось до нового года
  • Считать, сколько дней прошло от твоего дня рождения
  • Считать, сколько времени прошло между датами
В этих сценариях мы будем работать с функцией "date_diff" (разница во времени)
В этом примере мы не показываем КАЖДЫЙ шаг, как в стартовом обучении, чтобы не усложнять чтение.
Мы рассчитываем, что ты уже знаком с основными возможностями платформы. Если нет - рекомендуем сначала изучить раздел Боты.
Но, не пугайся, эта статья будет раскрыта достаточно подробно, чтобы её понял даже новичок :)
Если в процессе чтения примера у тебя возникают какие-либо вопросы - ты можешь обратиться в поддержку, мы поможем :)
Создаём бота, после чего пишем приветственное сообщение. Добавляем кнопки, чтобы можно было выбрать один из сценариев:
Все картинки кликабельны, нажимай на неё, чтобы увеличить :)

Создаем сценарий «Сколько мне дней»

Чтобы узнать, сколько лет подписчику - нужно спросить у него дату его рождения.
Создаем новый блок "сообщение", тянем к нему связь от кнопки "Сколько мне дней"
Создаем сообщение типа "Вопрос", и создаем переменную "дата от" в неё будет помещен введённый пользователем ответ.
Отлично, теперь мы хотим быть уверены, что пользователь действительно прислал нам дату.
Давай создадим условие, и проверим, что наша переменна "дата от", в которой сейчас хранится ответ пользователя, соответствует нужному формату.
Для проверки формата мы будем использовать регулярное выражение
1
^(0?[1-9]|[12][0-9]|3[01]).(0?[1-9]|1[012]).((19|20)[0-9]{2})$
Copied!
Я взял его из этого списка. Оно проверяет, является ли присланный текст датой в формате ДД.ММ.ГГГГ. Если твоя задача отличается от примера, и тебе нужно проверить какой-то другой формат - напиши в поддержку, мы поможем тебе составить нужное.
В общем, создаем блок "условие", который будет проверять, что параметр "дата от" соответствует регулярке *регулярка указана выше*
Если пользователь введет текст в другом формате - сработает красный выход, мы сообщим ему об ошибке, и запросим ввести дату в правильном формате. Пока пользователь не введет корректную дату - дальше по сценарию он не пройдёт.
Осталось реализовать последний блок, который будет считать результат, и присылать его пользователю.
Для этого мы будем использовать функцию date_diff. Как мы видим из описания функции - первым аргументом нужно написать формат, в котором будет посчитано значение. Мы хотим узнать разницу в днях, поэтому выбираем "days"
Вторым аргументом нужно передать дату рождения пользователя.
Третий аргумент можно не передавать, по умолчанию сравнение будет происходить с текущим временем.
Собираем всё вышесказанное в одну строку , и получаем:
1
[date_diff]days|({дата от})[/date_diff]
Copied!
Вместо этой конструкции будет выведено количество дней между переданной и текущей датами. Давай добавим это в блок "сообщение".
Ну что, давай проверим результат?
Так, кажется все работает. Но мне не нравится это "10031 дней". Давай добавим возможность склонять даты, чтобы привести всё в опрятный вид. Заодно покажу тебе ещё кое что...
Вынесем рассчёт дней в блок "действие", чтобы было удобнее с ним работать. Поместим результат рассчёта в переменную "количество дней".
Теперь мы можем использовать переменную "количество дней" вместо вызова функции. Так менее громоздко, да и каждый раз пересчитывать не придётся.
Так же исправим вывод сообщения. Добавим функцию skl. Составляем функцию как в описании, получаем такой результат:
1
({количество дней}) [skl]({количество дней})|день|дня|дней[/skl]
Copied!
Вставляем это в наше сообщение, результат:
Снова проверим, как работает бот
Отлично! Всё работает. Мы закончили реализацию этой ветки бота :)

Создаем сценарий «Сколько часов до нового года»

Для того, чтобы нам узнать сколько часов осталось до нового года - первым делом нужно узнать, а какой следующий год? Мы же планируем всё автоматизировать, а не корректировать сценарий нашего бота раз в год.
Сейчас будет сложная математика уровня второго класса:
Чтобы узнать какой следующий год - нужно взять текущий год, и прибавить к нему 1.
Сложение дат выполняется с помощью функции date_calc.
Чтобы получить первое января следующего года, нужно написать такую функцию
1
[date_calc]01.01.%Y|+1 year[/date_calc]
Copied!
В результате мы получим дату 1-го января следующего года. Она будет иметь вид 01.01.2022 (если сейчас 2021й год, естественно).
Last modified 2mo ago