# Школьный бот - Мышонок 🐭 ![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54) ![Babel](https://img.shields.io/badge/Babel-F9DC3e?style=for-the-badge&logo=babel&logoColor=black) ![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white) ![Nix](https://img.shields.io/badge/NIX-5277C3.svg?style=for-the-badge&logo=NixOS&logoColor=white) - Школьный Telegram бот, для общения с учениками и проведенния различных мероприятий онлайн. Бот имеет полностью настроенный функционал для работы в качестве предложки школьной группы. Также в нем есть инструменты администрирования, статистика. - С помощью бота вы также можете получить доступ к эксклюзивным стикерам школы. - Также это хороший проект для того, чтобы позаимствовать из него некоторый штучки. Например, его структуру (работа с роутерами, разделение по директориям для удобного масштабирования), админ-панель, работу с БД и ее настройка, всякие фильтры, мидлвари и состояния тоже присутствуют и могут помочь в ваших проектах. - Ну и конечно не забываем про локализацию и использование Docker. - Бот распространяется под свободной лицензией, берите что хотите и используйте как вам нужно. ## Техническая часть 📃 - Бот написан на Python 3.11 с применением асинхронной библиотеки Aiogram (States, Middlewares, Custom Filters). - При локальной разработке во время запуска в основной Python скрипт можно передавать параметры для очистки базы данных или обновления профиля бота из настроек в папке Mousey/Bot. При развертке с помощью Docker бот автоматически обновит свой профиль. - База данных - PostgreSQL, взаимодействие осуществляется с помощью библиотеки SQLAlchemy. - Также используется асинхронный клиент Redis для машины состояний (подробнее в документации Aiogram: States). - Весь текст для диалогов бота находится в отдельном файле локализации (для локализации используется Babel и i18n мидлвари aiogram'a). - Логирование главный событий + настройки для логов (автоудаление логов, сжатие файлов логов) осуществляется с помощью loguru. - Бот развертывается с помощью Docker Compose или Podman Compose. - Разработка осуществлялась с помощью NixOS с использованием Nix Shell. ## Содержание .env-файла 📭 - Файл находится в корневой папке проекта, так и называется .env - Вы также можете изучить example.env (не забудьте проверить, заполнены ли все строки с тегом FIXME) - Подробное содержание .env файла (вместо значений в круглых скобках необходимо указать ваши данные): 1. BOT_TOKEN = (ваш токен бота) 2. REDIS_HOST = "redis" 3. REDIS_PORT = 6379 4. POSTGRES_HOST = "postgres" 5. POSTGRES_PORT = 5432 6. POSTGRES_USER = "MouseyBot" 7. POSTGRES_PASSWORD = (пароль для БД) 8. POSTGRES_DB = "mousey_bot" 9. DB_URL = "postgresql+asyncpg://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}" 10. MAIN_ADMIN_ID = (Telegram ID главного админа) ## Если ваш выбор - NixOS ❄️ - Файл Shell/default.nix содержит все необходимые конфигурации для установки podman-compose, который изначально служил для развертки софта. - Воспользуйтесь nix-shell: nix-shell ./Shell ## Развертка с помощью Docker 🤓 - Я использую docker и docker-compose-v2, однако можно использовать и docker-compose-v1 или podman. - Шаги для развертки бота: 1. Скопируйте проект 2. Скопируйте example.env как .env 3. Заполните .env файл 4. Выполните: docker compose -f Docker/docker-compose.yaml --env-file .env up ## Удачи в использовании! 🫶