Skip to content
This repository was archived by the owner on Oct 14, 2026. It is now read-only.
AleX83XpertPublic archive

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Latest commit

 

History

126 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Warning

This project is currently unusable. Since 1 September 2026, schools in the Sverdlovsk Region have moved from dnevnik.egov66.ru to Gosuslugi My School. Install the official mobile app using the links on the regional service notice; the diary is also available through the “Diary” widget in Sferum/MAX. The old website was the only place where users could obtain tokens for these Telegram and MAX bots, so the bots cannot currently be connected.

Проект в настоящее время не работает. С 1 сентября 2026 года школы Свердловской области перешли с dnevnik.egov66.ru на сервис «Госуслуги Моя школа». Установите официальное мобильное приложение по ссылкам на странице регионального сервиса; дневник также доступен через виджет «Дневник» в Сферуме/MAX. Старый сайт был единственным местом, где можно было получить токены для этих ботов Telegram и MAX, поэтому сейчас подключить ботов невозможно.

I use English due to open source, and Russian due to the project's purpose.

Here's an example / И сразу пример

Telegram: https://t.me/dnevnik66_bot Max: https://max.ru/se13902840_bot

What is that / Что это

en

This is a multi-transport bot (Telegram, MAX) that makes using the Sverdlovsk Region's electronic school diary much more convenient than the diary https://dnevnik.egov66.ru itself.

ru

Это мульти-транспортный бот (Telegram, MAX), дающий возможность гораздо удобнее пользоваться электронным школьным дневником Свердловской области, чем сам дневник https://dnevnik.egov66.ru.

Why / Мотивация

en

To log in to the Sverdlovsk Region's electronic school diary, you first need to log in to Gosuslugi (the government services portal). To log in to Gosuslugi, you have to receive an SMS with a code. To receive the SMS code, you need to enter your username and password. And this happens every single time. Every. Damn. Time.

ru

Чтобы залогиниться в электронный школьный дневник Свердловской области, нужно сначала залогиниться на Госуслуги. Чтобы залогиниться на Госуслуги, нужно получить СМС с кодом. Чтобы получить СМС с кодом нужно ввести логин и пароль. И так каждый раз. Каждый. Чёртов. Раз.

Pros / Преимущества

en

  • No need to log in via Gosuslugi every time.
  • Telegram chat keeps the full history — no admin can retroactively change anything.

ru

  • Не нужно каждый раз логиниться через госуслуги.
  • Чат телеграма хранит всю историю, рука администратора ничего не исправит задним числом.

Cons / Недостатки

en

  • To connect the bot to the diary, you'll need to do a couple of squats. (figuratively — it's a bit of a hassle)
  • Sometimes, when the diary server is down, you have to reconnect the bot all over again.

ru

  • Чтобы подключить бота к дневнику нужно сделать пару приседаний.
  • Иногда, когда сервер дневника лежит, приходится заново подключать бота.

How it looks / Как выглядит

How to start locally / Локальный запуск

  1. Create .env file in the root (see .env.example)

  2. Start databases

docker compose up -d
  1. Start project
npm run dev
  1. Run tests
npm run test

How to start on prod (just an example) / Пример старта на проде

Using only prepared docker images.

You may use docker-compose.prod.yml.

  1. Create .env file on prod server (see .env.example)

  2. Build images

docker build . -t dnevnik-app:latest
docker build ./infra/static-server/ -t static-server:latest
docker build ./infra/load-balancer/ -t load-balancer:latest
  1. Upload images to server
docker save dnevnik-app:latest | ssh user@server "docker load"
docker save static-server:latest | ssh user@server "docker load"
docker save load-balancer:latest | ssh user@server "docker load"
  1. Login to server via ssh
  2. Go to directory with .env and docker-compose.yml
  3. Down&up containers

P.S. You need to migrate database if starting first time or if you created new migrations. Use npm run migrate-apply from the container

Multi-transport support / Мульти-транспортная поддержка

en

The bot supports multiple messenger platforms (transports). Currently:

  • Telegram — via Telegraf, using WebApp for token delivery
  • MAX — via @maxhub/max-bot-api, using a mini-app with HTTP POST for token delivery

Adding a new transport is purely additive: implement a TransportAdapter, create a transports/<platform>/bot.ts, and wire it in keystone.ts. No core files change.

At least one transport token is required (TELEGRAM_BOT_TOKEN or MAX_BOT_TOKEN).

ru

Бот поддерживает несколько мессенджеров (транспортов). Сейчас:

  • Telegram — через Telegraf, использует WebApp для передачи токенов
  • MAX — через @maxhub/max-bot-api, использует мини-приложение с HTTP POST для передачи токенов

Добавление нового транспорта — чисто аддитивное: реализуйте TransportAdapter, создайте transports/<platform>/bot.ts и подключите в keystone.ts. Ядро не меняется.

Требуется хотя бы один токен транспорта (TELEGRAM_BOT_TOKEN или MAX_BOT_TOKEN).

PostgreSQL Version Upgrade / Обновление версии PostgreSQL

When upgrading PostgreSQL between major versions (e.g., 16 → 18), data migration is required due to incompatible data formats.

Backup and Upgrade Process / Процесс резервного копирования и обновления

Method 1: Dump/Restore (Recommended / Рекомендуется)

# 1. Backup current data
docker exec postgresdb pg_dumpall > backup.sql

# 2. Stop PostgreSQL container
docker compose stop postgresdb

# 3. Update image version in docker-compose.yml
# Change: image: postgres:16 → image: postgres:18.1

# 4. Remove old data directory (WARNING: This deletes current data!)
rm -rf ./pgdata/*

# 5. Start with new version
docker compose up -d postgresdb

# 6. Restore data
docker exec -i postgresdb psql < backup.sql

Important Notes / Важные заметки

  • Always test migration on staging first / Всегда тестируйте миграцию на стейдинге
  • Keep backups before any upgrade / Сохраняйте резервные копии перед обновлением
  • Check application compatibility with new PostgreSQL version / Проверьте совместимость приложения с новой версией PostgreSQL
  • Plan for downtime during major version upgrades / Планируйте простой во время обновления между основными версиями

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages