Coder Social home page Coder Social logo

vlad1slove1 / drawbot Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 171 KB

telegram bot to support draws and manage feedback

Makefile 0.16% JavaScript 99.84%
javascript telegraf-framework telegram-bot state-management mongodb express-js google-sheets-api https-server jwt-authentication

drawbot's Introduction

Telegram bot для проведения розыгрышей

Бот упростит проведение розыгрышей как для компании, так и для участников розыгрыша.

  • пользователь сможет без сторонней помощи проверить свои купоны по разным номерам телефона, сможет подписаться на уведомления и не пропустить трансляцию, и объявление победителей
  • компания освобождает человеческие ресурсы на ручную обработку всех запросов и фокусируется только на обращения, отправленные через форму
  • сохраняется статистика использования бота

Функциональность

Бот включает в себя несколько состояний. Чтобы включить нужное состояние, нужно закомментировать активное состояние и раскомментировать нужно в файле src/index.js. По умолчанию включен режим idle. Бот запущен на node express. Открыт https и домен. Используется helmet для защиты от сторонних инъекций и подстановок заголовков. База данных бота синхронизируется с помощью отправки POST запроса, где пользователи (как сущность) передаются в теле запроса. Сервер обрабатывает запросы через уникальный JWT token, передаваемый в заголовок Authorization. При успешном запросе, бот обновит базу данных и загрузит её в гугл табличку.

  1. dev - для проведения тех. работ. Весь функционал отключен. При инициализации бота выведется инф. сообщение

  2. draw - активная фаза розыгрыша. Стостояние включается за несколько дней до розыгрыша. При инициализации, бот выведет приветствие, затем сделает проверку пользователя на админа по его id. Если пользователь админ - ему станут доступны кнопки для рассылки уведомления о начале трансляции и уведомления с победителями. Если это обычный пользователь, бот попросит его поделиться своим контактом. Далее бот выполняет парсинг номера телефона, обращается в базу данных и выводит соответствия в виде списка всех купонов пользователя. Если соответствия не найдены, пользователь получит инф. сообщение.

Доступные команды:

команды находятся в кнопке МЕНЮ в левой нижней части экрана

1. '/start' - инициализирует/перезапускает бота
2. '/check' - проверить купоны на другом номере
3. '/help' - написать в поддержку
4. '/subscribe' - подписаться на уведомления
5. '/unsubscribe' - отписаться от уведомлений

При нажатии кнопки '/check' бот отправит сообщение с правильным форматом номера телефона и будет ждать ответа от пользователя. Ответ проверяется на соответствия в базе данных. Бот покажет совпадения в виде списка, либо выведет инф. сообщение.

При нажатии кнопки '/help' бот отправит сообщение с ссылкой на гугл-форму. Поддержка вручную проверяет все обращения.

При нажатии кнопки '/subscribe' бот добавляет пользователя в базу данных для уведомлений.

При нажатии кнопки '/unsubscribe' бот удаляет пользователя из базы для уведомлений.

Админ-кнопки:

команды находятся в раскрывающемся меню в правой нижней части экрана

1. 'Отправить аннонс 📲' - отправить текстовый аннонс
2. 'Начало трансляции ▶️' - отправить уведомление с ссылкой на трансляцию
3. 'Список победителей 🎟' - отправить уведомление с ссылкой на победителей

При нажатии админ-кнопок бот отправит инф. сообщение и будет ожидать от админа текстовое сообщение (если это аннонс) или ссылку (если это начало трансляции или вывод списка победителей). Далее бот отправит сообщение всем пользователям из базы данных для уведомлений.

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

Доступные команды:

команды находятся в кнопке МЕНЮ в левой нижней части экрана

1. '/start' - инициализирует/перезапускает бота
2. '/check' - проверить купоны на другом номере
3. '/help' - написать в поддержку
4. '/subscribe' - отключена
5. '/unsubscribe' - отключена

Запуск локально

*Для запуска требуются: ОС Linux, пакетный менеджер npm, Node.js версии не ниже 18.х

  1. Скопируйте репозиторий в локальное хранилище
git clone https://github.com/vlad1slove1/drawBot.git <имя_директории>
  1. Перейдите в директорию с ботом
cd <имя_директории>
  1. Установите зависимости
npm ci
  1. Создайте нового телеграм-бота с помощью BotFather по Инструкции
  2. Скопируйте персональный TELEGRAM_BOT_TOKEN из чата с BotFather
  3. Отредактируйте файл .env.example
BOT_TOKEN=<token вашего бота>
PORT=<рекомендуется поставить 3000>
MONGO_HOST=<локальный путь к датабазе>
MONGO_DB_NAME=<наименование датабазы>
MONGO_PARTICIPANTS_COLL=<наименование коллекции с участниками розыгрыша>
MONGO_STAT_USERS_COLL=<наименование коллекции с пользователями для статистики>
MONGO_ADMIN_USERS_COLL=<наименование коллекции с пользователями, которым будут доступны админ-кнопки>
MONGO_USERS_TO_ANNOUNCE_COLL=<наименование коллекции с пользователями для рассылки уведомлений>
FEEDBACK_LINK=<ссылка на гугл-форму>
POST_LINK=<пост с победителями в прошедшем розыгрыше в группе telegram>
GOOGLE_SPREADSHEET_ID=<уникальный ID гугл таблицы с участниками>
GOOGLE_SERVICE_ACCOUNT_EMAIL=<почта гугл service account>
GOOGLE_PRIVATE_KEY=<уникальный ключ, сгенерированный в гугл service account>
EXPRESS_ACCESS_TOKEN=<token для авторизации на сервере при отправке запросов по http>
  1. Переименуйте файл .env.example на .env
  2. Запустите приложение командой
npm run dev
  1. Найдите вашего бота через @<имя_нового_бота>

*Пока приложение запущено, терминал у вас будет занят. Если вы не хотите останавливать приложение и пользоваться терминалом - откройте новый терминал. Чтобы остановить приложение в текущем терминале дважды нажмите комбинацию ctrl + C

Стек

express javascript mongodb nodejs express express

drawbot's People

Contributors

vlad1slove1 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.