Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shasoka/bookkeeper_exam
Саймон! - Telegram бот для подготовки к экзамену по бухгалтерскому учету
https://github.com/shasoka/bookkeeper_exam
aiogram aiohttp postgresql sqlalchemy telegram-bot-api
Last synced: 2 months ago
JSON representation
Саймон! - Telegram бот для подготовки к экзамену по бухгалтерскому учету
- Host: GitHub
- URL: https://github.com/shasoka/bookkeeper_exam
- Owner: shasoka
- License: mit
- Created: 2024-06-12T16:11:15.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-06-29T20:40:16.000Z (7 months ago)
- Last Synced: 2024-07-01T01:07:41.480Z (7 months ago)
- Topics: aiogram, aiohttp, postgresql, sqlalchemy, telegram-bot-api
- Language: Python
- Homepage: https://t.me/bookkeeping_examinator_bot
- Size: 14.6 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## ![Simon Logo](readme_images/logo_30x30_rounded.png) Саймон! 🎓
>[!CAUTION]
> ⚠️ **_Саймон_** прекратил свою работу `04.07.2024`. Спасибо всем пользователям!**Привет! Я бот для подготовки к экзамену по бухгалтерскому учету. Приятно познакомиться!** 🤝
## Содержание
- [Примеры работы](#примеры-работы)
- [Реализация](#реализация)
- [Структура проекта](#структура-проекта)
- [Использованные инструменты](#использованные-инструменты)
- [Деплой](#деплой)
- [Развертывание](#развертывание)
- [Немного радости](#немного-радости)## Примеры работы
Предлагаю вам посмотреть на меня в **_деле_**! [Кликай!](https://youtu.be/DJ0eLfxAC94?si=uhO5ksbtv60hmVyR) 👈
> 🚂 Ссылка ведет на **_YouTube_**.
## Реализация
### Структура проекта
🗄 Ниже приведена структура файлов и директорий проекта:
```
\---bookkeeper_exam
| .gitignore
| LICENSE
| README.md
|
+---readme_images
| simon_1.jpg
| simon_2.jpg
| simon_3.jpg
|
\---server
| .env # Файл с переменными окружения
| requirements.txt
|
+---migrations # SQL-скрипты для создания и заполнения БД
| createdb.sql
| questions.sql
| sections.sql
| sessions.sql
| themes.sql
|
+---src # Директория с исходным кодом
| | cli.py
| | config.py
| | main.py
| | setup.py
| |
| +---database
| | connection.py
| | models.py
| |
| +---enums
| | colors.py
| | literals.py
| | logs.py
| | markups.py
| | strings.py
| | types.py
| |
| +---handlers
| | buttons_handler.py
| | commands_handler.py
| | exam_handler.py
| | poll_handler.py
| | quiz_handler.py
| | utility_handlers.py
| |
| +---loggers
| | setup.py
| |
| +---middlewares
| | auth_middleware.py
| | log_middleware.py
| | miscellaneous.py
| | update_middleware.py
| |
| \---services
| entities_service.py
| utility_service.py
|
\---static # Исходные "сырые" файлы с вопросами
parsed.json
raw.pdf
```### Использованные инструменты
1. Язык программирования - `Python 3.12.4`;
2. Фреймворк для работы с `TelegramBotAPI` - `aiogram 3.7.0`;
3. ORM-библиотека - `SQLAlchemy 2.0.30`;
4. СУБД - `PostgreSQL 16`;
5. Прочие зависимости описаны в файле `server/requirements.txt`.> 📄 **_Весь код задокументирован_**. Вы можете ознакомиться с каждой интересующей вас строкой!
### Деплой
🌐 Для деплоя проекта использовался _serverless_ сервис [Render.com](https://render.com/).
Были развернуты два web-сервиса:
- Webhook-сервис, на котором **Саймон** "слушает" входящие запросы от Telegram ✈️;
- Сервис pgAdmin для удобного доступа к БД.А также инстанс БД `PostgreSQL 16`.
Так выглядит **Dashboard** деплоя:
![Render Dashboard](readme_images/render_dashboard.png)
И ~~великолепные~~ логи:
![Deploy logs](readme_images/logs.png)
## Развертывание
> 🛠 **Саймон** может быть запущен в двух режимах - `webhook`/`polling`. Выбрать режим запуска можно с помощью следующих аргументов командной строки:
> 1. `--webhook`
> 2. `--polling`
>
> В инструкции ниже описан процесс развертывания **_только_** в режиме `--polling` 😢Для локального развертывания необходимо прочесть некоторые 🪄 **_заклинания_** 🪄 в следующем порядке:
1. При помощи [BotFather](https://t.me/BotFather) создать нового бота. Можете заполнить информацию о нем и добавить аватар, если желаете.
2. **[НЕОБЯЗАТЕЛЬНО]** _Для удобства_ зарегистрируйте команды, которые будут доступны из `Меню`:
- `/start`;
- `/restart`;
- `/exam`;
- `/heal`;
- `/change_hints_policy`.
3. Получите токен доступа. Он должен выглядеть примерно так: `1234567890:aBCDeFghIjKLmnoPQRSTUvwXYzAbcDefGHi`.
4. Клонируйте этот репозиторий с помощью `git clone`.
5. Находясь в папке `server` создайте виртуальное окружение и установите зависимости:
```console
python -m venv venv
.\venv\Scripts\activate
pip install -r .\requirements.txt
```
6. Создайте и заполните БД:
```console
psql -U postgres -f .\migrations\createdb.sql -f .\migrations\questions.sql -f .\migrations\sections.sql -f .\migrations\sessions.sql -f .\migrations\themes.sql
```
> ⚠️ Обратите внимание на то, что в `58` строке файла `createdb.sql` необходимо указать ваш `TelegramID`:
> ```sql
> INSERT INTO users (telegram_id) VALUES ('<ВАШ_TG_ID>');
> ```
> Получить свой идентификатор можно у **_[этого бота](https://t.me/useridinfobot)_**.
7. Создайте файл окружения `.env` и заполните его по примеру файла `example.env`.
8. Запустите бота командой:
```console
python .\src\main.py --polling
```
9. Победа! ✅## Немного радости
📸 Вот вам напоследок несколько моих фотокарточек для поднятия настроения:
#
**_Made by [@shasoka](https://t.me/shasoka)_**