Бот для счёта разницы во времени

В инструкции мы покажем, как собрать простого бота, который будет отсчитывать дни до какого-то события.

Также бот может высчитать...

  • ...сколько часов осталось до нового года;

  • ...сколько дней прошло от вашего дня рождения;

  • ...сколько времени прошло между датами.

В этих сценариях мы будем работать с функцией "date_diff" (разница во времени).

Важно!

В этом примере мы не показываем КАЖДЫЙ шаг, как в стартовом обучении, чтобы не усложнять чтение.

Поэтому, прежде чем приступить к выполнению инструкции, рекомендуем сначала изучить раздел Боты.

Приступаем 🎓

Создаём бота, после чего пишем приветственное сообщение. Добавляем кнопки, чтобы можно было выбрать один из сценариев.

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

Чтобы узнать, сколько лет подписчику, нужно спросить дату его рождения.

  1. Далее создаём новый блок "Сообщение", тянем к нему связь от кнопки "Сколько мне дней".

  2. Создаём сообщение типа "Вопрос" и добавляем переменную "дата от". В неё будет помещён введённый пользователем ответ.

Отлично, теперь необходимо увериться, что пользователь действительно прислал нам дату.

Нужно создать условие и проверить, что наша переменная "дата от", в которой сейчас хранится ответ пользователя, соответствует нужному формату.

Для проверки формата мы будем использовать следующее регулярное выражение 👇

^(0?[1-9]|[12][0-9]|3[01]).(0?[1-9]|1[012]).((19|20)[0-9]{2})$

Оно взято из этого списка. Регулярное выражение проверяет, является ли присланный текст датой в формате ДД.ММ.ГГГГ.

Если ваша задача отличается от примера и вам нужно проверить какой-то другой формат, напишите нам в поддержку. Мы поможем вам составить иное выражение ❤️

  1. Создаём блок "Условие", который будет проверять, что параметр "дата от" соответствует регулярному выражению (регулярке). Если пользователь введёт текст в другом формате, сработает красный выход. Мы сообщим ему об ошибке и запросим ввести дату в правильном формате. Пока пользователь не введет корректную дату, дальше по сценарию он не пройдёт.

  1. Осталось реализовать последний блок, который будет считать результат и присылать его пользователю. Для этого мы будем использовать функцию date_diff.

  • Первым аргументом нужно написать формат, в котором будет посчитано значение. Мы хотим узнать разницу в днях, поэтому выбираем "days".

  • Вторым аргументом нужно передать дату рождения пользователя.

  • Третий аргумент можно не передавать, по умолчанию сравнение будет происходить с текущим временем.

  1. Собираем всё вышесказанное в одну строку и получаем:

    [date_diff]days|({дата от})[/date_diff]

    Вместо этой конструкции будет выведено количество дней между переданной и текущей датами. Добавим получившуюся строку в блок "Сообщение".

Всё работает, но "10031 дней" смотрится не очень красиво да и неудобно. Чтобы привести всё в опрятный вид, добавим возможность склонять даты.

  1. Вынесем расчёт дней в блок "Действие" для удобства работы с ним. Поместим результат расчёта в переменную "количество дней".

Теперь мы можем использовать переменную "количество дней" вместо вызова функции. Так менее громоздко, да и каждый раз пересчитывать не придётся.

  1. Также исправим вывод сообщения. Добавим функцию skl. Составляем функцию, как в описании, и получаем такой результат 👇

({количество дней}) [skl]({количество дней})|день|дня|дней[/skl]
  1. Вставляем строку в наше сообщение.

  1. Снова проверим, как работает бот.

Отлично! Всё работает. Мы закончили реализацию этой ветки бота.

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

Для того, чтобы нам узнать, сколько часов осталось до нового года, первым делом нужно узнать, а какой следующий год? Мы же планируем всё автоматизировать, а не корректировать сценарий нашего бота раз в год.

Сейчас будет сложная математика уровня второго класса:

  • Чтобы узнать какой следующий год - нужно взять текущий год и прибавить к нему 1.

  • Сложение дат выполняется с помощью функции date_calc.

  • Чтобы получить первое января следующего года, нужно написать такую функцию

[date_calc]01.01.%Y|+1 year[/date_calc]

В результате мы получим дату 1-го января следующего года. Она будет иметь вид 01.01.2022 (если сейчас 2021-й год, естественно).

Остались вопросы? Задайте их в нашу техподдержку!

Мы всегда рады помочь ☺️👇

💟pageКак задать вопрос в поддержку?

Last updated