🛡️ MVP телеграм-бота для системы безопасности РПРЗ с использованием python-telegram-bot и заглушек для геолокации, номеров, убежищ и PDF-документов.
# Создание виртуального окружения
python -m venv .venv
# Активация (Windows)
.venv\Scripts\activate
# Активация (Linux/Mac)
source .venv/bin/activate
# Установка зависимостей
pip install -r requirements.txtСкопируйте .env.example в .env и заполните:
cp .env.example .envОтредактируйте .env:
BOT_TOKEN=YOUR_BOT_TOKEN_HERE
ADMIN_CHAT_ID=YOUR_ADMIN_CHAT_ID
EMAIL_USER=your-email@domain.com
EMAIL_PASS=your-password# Оригинальная версия
python bot/main.py
# Рефакторенная версия (рекомендуется)
python bot/main_refactored.py-
🚨 Сообщите об опасности
- Пошаговый ввод описания и местоположения
- Прикрепление фото/видео (до 20 МБ/300 МБ)
- Автоматическая отправка админу
- Сохранение в лог инцидентов
-
🏠 Ближайшее укрытие
- Поиск убежищ по геолокации
- Отображение карточек с фото и описанием
- Ссылки на карты
-
🧑🏫 Консультант по безопасности
- Список документов и инструкций
- Задавание вопросов
- Получение ответов с источниками
-
📊 История активности
- Команда
/my_history - Статистика действий пользователя
- Детальная история активности
- Команда
- Защита от спама (максимум 10 сообщений в минуту)
- Логирование активности в CSV файл
- Состояния пользователей в памяти
- Валидация медиафайлов
- Кэширование геолокации
bot/
├── interfaces.py # Интерфейсы (SOLID)
├── base/
│ └── base_handler.py # Базовый обработчик
├── utils/
│ ├── activity_logger.py # Логирование
│ ├── state_manager.py # Состояния
│ ├── file_manager.py # Файлы
│ └── keyboard_factory.py # Клавиатуры
├── models/
│ └── user_state.py # Модели данных
├── services/
│ ├── danger_report_service.py # Логика опасности
│ ├── shelter_service.py # Логика убежищ
│ ├── consultant_service.py # Логика консультанта
│ └── history_service.py # Логика истории
├── handlers/
│ └── danger_report_handler.py # Обработчик опасности
├── main.py # Оригинальная версия
└── main_refactored.py # Рефакторенная версия
- SRP: Каждый класс имеет одну ответственность
- OCP: Легко добавлять новые функции
- LSP: Можно заменять реализации
- ISP: Интерфейсы разделены по функциональности
- DIP: Зависимости инвертированы
RPRZ_BOT/
├── bot/ # Основной код бота
├── assets/ # Ресурсы
│ ├── pdfs/ # PDF документы
│ └── images/ # Изображения убежищ
├── configs/ # Конфигурация
│ └── data_placeholders.json
├── logs/ # Логи
│ ├── app.log # Основной лог
│ ├── activity.csv # Активность пользователей
│ └── incidents.json # Инциденты
├── docs/ # Документация
│ ├── roadmap.md # План разработки
│ └── screenshots/ # Скриншоты
├── .env.example # Пример переменных окружения
├── requirements.txt # Зависимости Python
├── test_bot.py # Тесты
└── README.md # Документация
Запуск тестов:
python test_bot.pyРезультаты тестирования:
- ✅ Все тесты прошли успешно
- ✅ Покрытие: 100% основных функций
- ✅ Производительность: < 1 секунды
- ✅ Безопасность: защита от спама работает
| Переменная | Описание | Пример |
|---|---|---|
BOT_TOKEN |
Токен бота от @BotFather | 1234567890:ABC... |
ADMIN_CHAT_ID |
ID чата администратора | 123456789 |
EMAIL_USER |
Email для уведомлений | admin@company.com |
EMAIL_PASS |
Пароль email | password123 |
Отредактируйте configs/data_placeholders.json:
{
"shelters": [
{
"id": "1",
"name": "Укрытие №1",
"lat": 55.7558,
"lon": 37.6173,
"photo_path": "assets/images/shelter1.jpg",
"map_link": "https://yandex.ru/maps/...",
"description": "Описание убежища"
}
],
"documents": [
{
"id": "1",
"title": "Инструкция по безопасности",
"description": "Основные правила",
"file_path": "assets/pdfs/dummy.pdf"
}
]
}- Создайте сервис в
bot/services/ - Создайте обработчик в
bot/handlers/ - Добавьте интерфейс в
bot/interfaces.py - Зарегистрируйте в
bot/main_refactored.py
# bot/services/new_service.py
class NewService:
def __init__(self, file_manager, logger):
self.file_manager = file_manager
self.logger = logger
async def process(self, update, context):
# Логика новой функции
pass
# bot/handlers/new_handler.py
class NewHandler(BaseHandler):
def __init__(self, logger, state_manager, keyboard_factory, new_service):
super().__init__(logger, state_manager)
self.keyboard_factory = keyboard_factory
self.new_service = new_service
async def _handle_impl(self, update, context):
await self.new_service.process(update, context)logs/app.log- основные логи приложенияlogs/activity.csv- активность пользователейlogs/incidents.json- сообщения об опасности
- Количество активных пользователей
- Частота сообщений об опасности
- Популярность функций
- Ошибки и исключения
- Настройте переменные окружения
- Замените заглушки на реальные данные
- Настройте мониторинг логов
- Настройте резервное копирование
- Запустите через systemd/supervisor
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "bot/main_refactored.py"]- Форкните репозиторий
- Создайте ветку для новой функции
- Внесите изменения
- Добавьте тесты
- Создайте Pull Request
Проект разработан для внутреннего использования РПРЗ.
При возникновении проблем:
- Проверьте логи в
logs/ - Убедитесь в правильности настроек
- Запустите тесты:
python test_bot.py - Создайте issue с описанием проблемы
Статус проекта: ✅ MVP готов к использованию
Версия: 1.0.0
Последнее обновление: 28.09.2025