Telegram-бот, предупреждающий о малом остатке на транспортной карте с сайта s-otk.ru https://t.me/sotkbot
This repository has been archived on 2025-09-14. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
Find a file
2022-11-24 19:19:10 +04:00
.vscode Initial commit 2022-11-13 17:47:01 +04:00
src Fix invoice callback_dataa 2022-11-24 19:19:10 +04:00
test Initial commit 2022-11-13 17:47:01 +04:00
.eslintrc.cjs Initial commit 2022-11-13 17:47:01 +04:00
.gitignore SOTK integration 2022-11-13 20:02:18 +04:00
babel.config.cjs Initial commit 2022-11-13 17:47:01 +04:00
banner.png Banner 2022-11-13 21:45:26 +04:00
jest.config.js Initial commit 2022-11-13 17:47:01 +04:00
LICENSE.md Initial commit 2022-11-13 17:47:01 +04:00
package-lock.json Fixes #1 2022-11-18 22:48:14 +04:00
package.json Fixes #1 2022-11-18 22:48:14 +04:00
pfp.png Banner 2022-11-13 21:45:26 +04:00
README.md User's collection 2022-11-22 19:11:42 +04:00
tsconfig.json Initial commit 2022-11-13 17:47:01 +04:00

Бот Telegram для s-otk.ru

Telegram-бот, предупреждающий о малом остатке на транспортной карте с сайта s-otk.ru

Banner

Развернутая версия: https://t.me/sotkbot

Работает на моей же библиотеке s-otk-js

Установка

  1. Клонируйте репозиторий
  2. Установите зависимости командой npm i
  3. Добавьте токен в файл .env в корне проекта с ключом TELEGRAM_BOT_API_TOKEN и другими (см. раздел .env)
  4. Запустите базу данных командой mongod и создайте коллекции s-otk-bot.cards и s-otk-bot.users (+ в последней уник. индекс на users.userID): db.createCollection('cards'), db.createCollection('users'), db.users.createIndex({ userID: 1 }, { unique: true })
  5. Запустите бота командой 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

Лицензия

MIT