Прямо зараз актуальна версія цього проєкту, як ідеї - 2.n... Чому 2? Бо перша реалізація на Tkinter давно архівована і писалась на колінці, хоч і була дуже корисна в той час. Я росту, а зі мною і проєкти. Вже цього року я і сам здаю НМТ і стаю абітурієнтом, але закидати проєкт не збираюся. Далі - більше. Тож в планах в мене перехід на версію 3.0! Проєкт буде переписаний з нуля на чисту архітектуру і нову мову програмування - Golang. Сама суть буде та сама, як і функціонал (з можливими покращеннями), але в планах зробити проєкт модульним, щоб кожен бажаючий, що знає Golang, міг сам написати свою реалізацію взаємодії. Чи буде це власний telegram-bot, чи discord-bot, чи навіть реалізації на CLI-tool. Проєкт залишається відкритим, кожен, хто захоче, може побачити повний його код в мене на Github, але це буде вже інший репозиторій. Цей репозиторій піде в Archive, як і попередній.
Проєкт переходить від моноліту на Python до модульної архітектури на Go. Використовуємо стандарт Standard Go Project Layout для максимальної чистоти та масштабованості.
cmd/— Точки входу:cmd/bot/main.go— лише запуск Telegram-бота.cmd/desktop/main.go— запуск Wails-додатка.cmd/server/main.go— запуск сервера для сайту
pkg/— Публічне "Ядро" (Core):pkg/parser/— універсальний парсер (vstup.osvita.ua, abit-poisk).pkg/abit/— структури даних (Student, NMT, ВНЗ) та логіка розрахунку балів.pkg/calculator/— алгоритм "The Technique" для оцінки реальних шансів.pkg/visualizer/— інтерфейс для візуалізації графіків.pkg/.../— всі інші корисні інтерфейси
internal/— Приватна реалізація:internal/bot/— хендлери, меню та логіка діалогів Telegram.internal/desktop/— Go-бекенд для Wails.internal/server/— Логіка для сервера.internal/visualizer/— "важкий" модуль для генерації графіків (Matplotlib-style).internal/.../— всі інші логіки.
wails-frontend/— інтерфейс десктоп-версії на Svelte + TypeScript.server-frontend/— інтерфейс сайт-версії на Svelte + TypeScript.
| Функціонал | Python (зараз) | Go (3.0) |
|---|---|---|
| Telegram API | aiogram |
telebot або tgbotapi |
| Парсинг | BeautifulSoup4 / aiohttp |
goquery / resty |
| БД | SQLAlchemy (PostgreSQL) |
sqlx або gorm (PostgreSQL / SQLite) |
| Графіки | Matplotlib |
gonum/plot |
| GUI | — | Wails/Web (Svelte/TS) |
| Контейнер | python:3.x-slim (~400MB) |
scratch (~30-50MB) |
Для створення мінімального статичного бінарника використовуємо:
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o abitassistant ./cmd/bot
CGO_ENABLED=0: повна незалежність від системних бібліотек (ідеально дляscratch).-ldflags="-s -w": видаляє дебаг-інфо, зменшуючи вагу файлу на ~30%.scratch: порожній Docker-образ вагою 0 байт, де лежить тільки твій бінарник.
- Модульність: Можна підключити
pkg/parserдо будь-якого іншого проєкту черезgo get. - Легкість: Умований CLI-tool не тягне за собою бібліотеки графіків, якщо вони йому не потрібні (завдяки імпортам у Go).
- Швидкість: Парсинг на горутинах буде в рази швидшим за асинхронність Python.