Система розыгрышей среди бустеров вашего канала или группы
В данной статье мы разберём создание системы розыгрышей за голоса (бусты) на ваши ресурсы через мини-приложение на PuzzleBot. Рассмотрим оформление дизайна, техническая реализация и настройка баз данных для запуска системы.
В качестве среды разработки мы используем сервис PuzzleBot, а в качестве базы данных – NocoDB. При желании можно выбрать другую базу данных.
Опробовать функционал можно тут - t.me/StructurePuzzleBot/contest
Разработка
NocoDB
Для начала создадим базу данных NocoDB (назовём её "Розыгрыш") с двумя таблицами:
1. Создадим таблицу "Участники". Она будет содержать следующие столбцы:
- user_id — число — данный столбец будет содержать ID участника розыгрыша.
- user_name — текст — данный столбец будет содержать имя участника.
- number — число — данный столбец будет содержать порядковый номер участника, что будет необходимо для определения победителя случайным образом.
2. Создадим таблицу "Победители" со столбцами:
- user_id — число — данный столбец будет содержать ID победителя.
- user_name — текст — данный столбец будет содержать имя победителя.
Переменные
Создадим следующие переменные:
Глобальные:
- members_num – числовая – значение по умолчанию "0" – эта переменная позволит задавать порядковый номер участникам.
Персональные:
- winners_list – интегрированная: NocoDB – значение по умолчанию "none" (кавычки писать не надо):
Выберите базу данных "Розыгрыш"
Выберите таблицу "Победители"
Откройте дополнительные настройки и переключите параметр "Вариант поиска" на "Все"
В поле "Значение" выберите тип "Строка"
В качестве разделителя укажите "\n" (без кавычек)
В поле "Шаблон" введите:
- contest_decription – формула:
Я же использовал формулу:
- member_num – текстовая
- random_member – формула:
- get_random_member_id – интегрированная: NocoDB:
Выберите базу данных "Розыгрыш"
Выберите таблицу "Участники"
Добавьте фильтр соответствия столбца number и переменной {{member_num}}
В поле "Название столбца" выберите "user_id"
- get_random_member_name – интегрированная: NocoDB:
Выберите базу данных "Розыгрыш"
Выберите таблицу "Участники"
Добавьте фильтр соответствия столбца number и переменной {{member_num}}
В поле "Название столбца" выберите "user_name"
Конструктор
1. Создадим мини-приложение "Вступление в розыгрыш"
Данное мини-приложение будет нести ознакомительный характер, поэтому его можно заполнить любой информацией. Я же заполнил следующими несколькими HTML блоками:
Этот HTML-блок создаёт красивое вступление с Lottie-анимацией, градиентным фоном и частицами на заднем плане. Также в text title и text date можно указать заголовок и дату окончания розыгрыша соответственно.
Этот HTML-блок будет отображать дополнительную информацию о розыгрыше. Если розыгрыш завершён в этом блоке будет отображаться список победителей. Заголовок winner-title можно изменить, а описание советую менять в формуле переменной contest_decription.
Добавьте фиксированную клавиатуру с двумя кнопками:
- "Отдать голос" – ссылка (браузер по умолчанию). Укажите ссылку на ресурс формата https://t.me/username?boost. Нажатие на эту кнопку откроет окно "Голосов" ресурса.
- "Участвовать" — кнопка-условие. Введите название кнопки-условия: "Участвовать в конкурсе". Ниже мы разберём её настройку.
2. Создадим кнопку-условие "Участвовать в конкурсе" со следующими правилами:
Правило 1:
Создайте условие проверки значения переменной.
Укажите следующее выражение: winners_list – полное совпадение – "-none" (кавычки писать не надо).
В "Название кнопки" введите "Розыгрыш завершён"
В действиях выберите: "Без действия"
Правило 2:
Создайте условие проверки строки NocoDB.
Выберите базу данных "Розыгрыш"
Выберите таблицу "Участники"
Добавьте фильтр с выражением, проверяющим соответствие поля user_id с переменной {{USER_ID_TEXT}}
В "Название кнопки" введите "Вы уже участвуете"
В действиях выберите: "Без действия"
Исключающее правило:
В "Название кнопки" введите "Участвовать"
В действиях добавьте "Отправить команду или условие" и введите условие "Проверка голоса". Создание и настройку этого условия мы разберём ниже.
3. Создадим условие "Проверка голоса"
В правиле добавим проверку "Голос для ресурсов (Boost)"
Выберите ресурсы, которым необходимо будет дать голос
Дополнительно можно указать количество голосов на каждый ресурс или в сумме.
В действиях:
Добавим действие изменение переменной members_num по выражению +1
Добавим действие "Создать строку (NocoDB)"
Выберем базу "Розыгрыш"
Выберем таблицу "Участники"
Заполним поля следующим образом:
- user_id: {{USER_ID_TEXT}}
- user_name: {{FIRST_AND_LAST_NAME}}
- number: {{members_num}}
Добавим действие "Переход к мини-приложению" и укажите мини-приложение "Теперь в розыгрыше". Позже мы разберём её создание.
Исключающее правило:
Добавим действие "Переход к мини-приложению" и укажите мини-приложение "Условия не выполнены". Ниже мы разберём её создание.
4. Создадим два мини-приложения: "Теперь в розыгрыше" и "Условия не выполнены". Технически эти мини-приложения очень похожи – единственное, что в них будет отличаться, это текст попапа.
Создайте в обоих мини-приложениях HTML блок с кодом:
Замените в этом коде miniAppId на ID мини-приложения "Вступление в розыгрыш". Чтобы получить данный ID, необходимо опубликовать изменения, открыть мини-приложение "Вступление в розыгрыш" и скопировать значение после startapp= в ссылке для его открытия. Оно выглядит примерно так: c3a4efad48231cd3.
Затем измените тексты попапа в полях h2 и p в мини-приложении "Условия не выполнены" на тексты, подобные: "Условия не выполнены. Повторите попытку, выполнив условия."
Добавьте в обоих мини-приложениях блок "Подставновка" и в поле "Название Мини-приложения" введите "Вступление в розыгрыш". Это позволит сделать эффект всплывающего попапа над основным мини-приложением.
5. Создадим команду "Определить победителя". Эту команду следует выполнить в момент окончания розыгрыша, так как она выберет случайного участника из таблицы и добавит его в список победителей. Команду необходимо выполнить столько раз, сколько победителей должно быть. Команду необходимо выполнять только относительно себя. Рекомендуется включить опцию "Выполнение только из клавиатуры" в дополнительных настройках.
Действия:
Добавьте действие "Изменить переменную" и введите выражение member_num = {{random_member}}
Добавьте действие "Создать строку (NocoDB)":
Выберите базу данных "Розыгрыш"
Выберите таблицу "Победители"
Введите следующие значения для столбцов:
- user_id: {{get_random_member_id}}
- user_name: {{get_random_member_name}}
По желанию можно добавить действие отправки команды с поздравлением с включенной опцией "Выполнить другому пользователю", в поле получателя введите {{get_random_member_id}}. Таким образом победитель получит уведомление.
Всё готово 🎉
Больше уроков, кейсов и познавательных материалов:
Мой личный телеграм: