Отправка случайных команд без повторения инструментами PuzzleBot

В этой статье мы делаем отправку случайных команд без повторения используя исключительно PuzzleBot.

Отправка случайных команд без повторения инструментами PuzzleBot

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

Разработка

Переменные

Для решения этой задачи мы используем ряд зависимых друг от друга переменных-формул. На практике достаточно скопировать и соблюдать синтаксис, чтобы всё работало.

Отправка случайных команд без повторения инструментами PuzzleBot

Создайте текстовую переменную {{commands_list}}, эта переменная будет содержать массив из команд, которые бот будет отправлять в случайном порядке. Сейчас поясню:
В поле "Значение по умолчанию" переменной укажите:

[{"name": "name_1"}, {"name": "name_2"}, {"name": "name_3"}, {"name": "name_4"}]

Во второй паре кавычек (значении) укажите название команды, как вместо name_1, name_2.

Имя команды может быть на любом языке, использовать экранируемые символы нельзя. Имя параметра ("name") всегда должно быть статичным. Играться с разделителями, переносами и пробелами вне кавычек не советую. Список можно продолжать бесконечно. Например:

[{"name": "Регистрация пользователя"}, {"name": "Обработка заявок"}, {"name": "Проверка подписки"}]
Отправка случайных команд без повторения инструментами PuzzleBot

Не правильно:

[ {"name": "Регистрация "пользователя""}, {"name": "Обработка заявок"}, {"name": "Проверка подписки"} ]
[{"name": "Регистрация пользователя"} , {"name": "Обработка заявок"} , {"name": "Проверка подписки"}]
[{"name":"Регистрация пользователя"} {"name":"Обработка заявок"} {"name":"Проверка подписки"}]

Создайте числовую переменную {{N}}. Позже она будет записывать номер объекта, из которой будет выводиться название команды.

Создайте переменную {{get_N_command_name}} с типом формула:

json_extract({{commands_list}}, ("$[" + ({{N}}-1) + "].name"))

Эта формула необходима для вывода названия команды N-ного объекта. Проще говоря эта переменная будет отображать название случайной команды из списка.

Отправка случайных команд без повторения инструментами PuzzleBot

Создайте переменные с типом формула:

  • {{part_1}}, со значением:
"/\{\\\"name\\\":\\s*\\\"" + {{get_N_command_name }} + "\\\"},\\s*\n?/"
  • {{part_2}}, со значением:
"/,\\s*\n?\\{\\\"name\\\":\\s*\\\"" + {{get_N_command_name}} + "\\\"}/"
  • {{part_3}}, со значением:
"/\\{\\\"name\\\":\\s*\\\"" + {{get_N_command_name}} + "\\\"}/"

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

Отправка случайных команд без повторения инструментами PuzzleBot

Создайте переменную {{edited_list}} с типом формула. Она будет выводить обновленный список команд исключая отправленные команды. Укажите формулу:

reg_replace((reg_replace((reg_replace({{commands_list}}, {{part_1}}, "")), {{part_2}}, "")), {{part_3}}, "")

Создайте переменную {{quantity_objects}} с типом формула. Она будет выводить все запятуи из массива объектов. Это будет нужно, чтобы корректно посчитать оставшееся количество команд, доступных пользователю. Формула:

reg_replace(json_extract({{commands_list}}, "$[*].name"), "/[^,]/", "")

Создайте последнюю переменную {{random_N}} с типом формула. Она будет выдавать случайных номер объекта относительно количества запятуй. Формула:

random((strlen({{quantity_objects}}) + 1))
Отправка случайных команд без повторения инструментами PuzzleBot

Конструктор

Достаточно создать по одной команде и условию, чтобы наша структура заработала:

Пример структуры.
Пример структуры.

Создайте команду "Получение команды". Добавьте действия:

  • Изменить переменную: Изменяем переменную {{N}} на {{random_N}}
  • Отправить условие: Указываем условие "Отправка случайной команды" (создадим на следующем этапе)
Отправка случайных команд без повторения инструментами PuzzleBot

Создаём условие "Отправка случайной команды". Добавим проверку значения переменной. Укажем проверку наличия значения переменной random_NВ действиях указываем:

1. Отправить запрос: Указываем адрес https://api.puzzlebot.top/?token=XXX&method=sendCommand, где вместо XXX нужно указать токен своего бота из Входящих запросов PuzzleBot.

В параметрах укажите:

  • Ключ: command_name
  • Значение: {{get_N_command_name}}
  • Ключ: tg_chat_id
  • Значение: {{USER_ID_TEXT}}

Добавьте действие "Изменить переменную". В поле "Название переменной" укажите commands_list, в "Выражение": {{edited_list}}

В исключениях:

Добавьте действие "Отправить команду", укажите название любой команды, которая будет отправляться после отправки всех команд. Чтобы возобновить список команд у пользователя, укажите в действиях любой из команд "Очистить переменную" и введите commands_list.

Отправка случайных команд без повторения инструментами PuzzleBot

Всё готово! 🔥 Теперь при вызове команды "Получение команды" пользователь получит случайную команду из списка, а в последующих вызовах команды повторяться не будут.

Отправка случайных команд без повторения инструментами PuzzleBot
3
1
1
1 комментарий