Skip to content

Doczadrot/RPRZbOT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Телеграм-бот системы безопасности РПРЗ

🛡️ MVP телеграм-бота для системы безопасности РПРЗ с использованием python-telegram-bot и заглушек для геолокации, номеров, убежищ и PDF-документов.

🚀 Быстрый старт

1. Установка зависимостей

# Создание виртуального окружения
python -m venv .venv

# Активация (Windows)
.venv\Scripts\activate

# Активация (Linux/Mac)
source .venv/bin/activate

# Установка зависимостей
pip install -r requirements.txt

2. Настройка переменных окружения

Скопируйте .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

3. Запуск бота

# Оригинальная версия
python bot/main.py

# Рефакторенная версия (рекомендуется)
python bot/main_refactored.py

📋 Функциональность

Основные функции:

  1. 🚨 Сообщите об опасности

    • Пошаговый ввод описания и местоположения
    • Прикрепление фото/видео (до 20 МБ/300 МБ)
    • Автоматическая отправка админу
    • Сохранение в лог инцидентов
  2. 🏠 Ближайшее укрытие

    • Поиск убежищ по геолокации
    • Отображение карточек с фото и описанием
    • Ссылки на карты
  3. 🧑‍🏫 Консультант по безопасности

    • Список документов и инструкций
    • Задавание вопросов
    • Получение ответов с источниками
  4. 📊 История активности

    • Команда /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    # Рефакторенная версия

Принципы SOLID:

  • 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"
    }
  ]
}

🔧 Разработка

Добавление новых функций:

  1. Создайте сервис в bot/services/
  2. Создайте обработчик в bot/handlers/
  3. Добавьте интерфейс в bot/interfaces.py
  4. Зарегистрируйте в 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 - сообщения об опасности

Метрики:

  • Количество активных пользователей
  • Частота сообщений об опасности
  • Популярность функций
  • Ошибки и исключения

🚀 Развертывание

Продакшн:

  1. Настройте переменные окружения
  2. Замените заглушки на реальные данные
  3. Настройте мониторинг логов
  4. Настройте резервное копирование
  5. Запустите через systemd/supervisor

Docker (планируется):

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "bot/main_refactored.py"]

🤝 Вклад в проект

  1. Форкните репозиторий
  2. Создайте ветку для новой функции
  3. Внесите изменения
  4. Добавьте тесты
  5. Создайте Pull Request

📝 Лицензия

Проект разработан для внутреннего использования РПРЗ.

📞 Поддержка

При возникновении проблем:

  1. Проверьте логи в logs/
  2. Убедитесь в правильности настроек
  3. Запустите тесты: python test_bot.py
  4. Создайте issue с описанием проблемы

Статус проекта: ✅ MVP готов к использованию

Версия: 1.0.0

Последнее обновление: 28.09.2025

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages