| .vscode | ||
| src | ||
| test | ||
| .eslintrc.cjs | ||
| .gitignore | ||
| babel.config.cjs | ||
| banner.png | ||
| jest.config.js | ||
| LICENSE.md | ||
| package-lock.json | ||
| package.json | ||
| pfp.png | ||
| README.md | ||
| tsconfig.json | ||
Бот Telegram для s-otk.ru
Telegram-бот, предупреждающий о малом остатке на транспортной карте с сайта s-otk.ru
Развернутая версия: https://t.me/sotkbot
Работает на моей же библиотеке s-otk-js
Установка
- Клонируйте репозиторий
- Установите зависимости командой
npm i - Добавьте токен в файл .env в корне проекта с ключом
TELEGRAM_BOT_API_TOKENи другими (см. раздел .env) - Запустите базу данных командой
mongodи создайте коллекцииs-otk-bot.cardsиs-otk-bot.users(+ в последней уник. индекс на users.userID):db.createCollection('cards'),db.createCollection('users'),db.users.createIndex({ userID: 1 }, { unique: true }) - Запустите бота командой
npm run build && npm start
.env
| Ключ | Описание |
|---|---|
| BOT_SOTK_USERNAME | Имя пользователя для бота |
| BOT_SOTK_PASSWORD | Пароль пользователя для бота |
| CRONJOB_SOTK_USERNAME | Имя пользователя для кронтаска |
| CRONJOB_SOTK_PASSWORD | Пароль пользователя для кронтаска |
Ключи с префиксом BOT используются для бот-апи в Telegram, через эти аккаунты проводится первичная проверка и настройка карты, например, при добавлении карты в список для отслеживания
Ключи с префиксом CRONJOB используются для запланированной проверки баланса. Предполагается, что вы будете использовать для этого cron.
Использование
Бот поддерживает привязку и отвязку карт. Максимальное кол-во прикрепленных карт можно поменять в константе MAX_LINKED_CARDS файле src/cardsList.ts
Для отслеживания баланса используется скрипт src/cron/index.ts, который вы можете запускать так часто, как захотите. Он проходится по всем картам в БД и запрашивает баланс. Если баланс слишком маленький, отправляет уведомление пользователю в сообщении. Если на момент отправки пользователь остановил бота, удаляет все его карты из БД.
Для работы src/cron/index.ts использует сессию, созданную при старте бота и сохраненную в файл session.json в корне
TODO
- Батчить отправку результатов по конкретной карте нескольким пользователям
- Параллелизировать получение балансов карт
- Создать пул из пользователей s-otk.ru
- Обсуждение здесь: Issue #2
- Удалять из БД карты, которые несколько раз вызвали ошибку (или хотя бы помечать как невалидные для пропуска в будущем)
- Менять threshold в зависимости от типа карты (стоимость одной поездки этого тарифа карты*4)
Донат
Я не получил грант за разработку этого бота, меня не приглашали работать в ОТК, а все мои письма игнорируют :(
Поддержите меня! hloth.dev/donate
