Skip to content

maxim-vdonsk/WaterExpress

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WaterExpress — Telegram-бот для доставки воды

Простой и удобный Telegram-бот для оформления заказов на доставку воды. Клиенты могут создать заявку прямо в чате, а менеджер получает уведомление с деталями заказа.


Оглавление


Возможности

  • 📍 Геолокация — клиент может отправить свою геопозицию, и бот автоматически определит адрес
  • 📞 Контакт — запрос номера телефона через кнопку Telegram
  • 📅 Календарь — выбор даты доставки через интерактивный календарь
  • 🧾 Оформление заказа — указание количества бутылок
  • 💾 База данных — все заказы сохраняются в SQLite
  • 🔔 Уведомления — менеджер мгновенно получает информацию о новом заказе

Технологии

Технология Версия Описание
Python 3.8+ Язык программирования
python-telegram-bot 20.8 Библиотека для работы с Telegram Bot API
requests 2.31.0 HTTP-запросы к Nominatim API
sqlite3 встроенный База данных для хранения заказов

Требования

Перед началом работы убедитесь, что у вас установлены:

  • Python 3.8 или выше (проверьте командой: python3 --version)
  • pip — менеджер пакетов Python (проверьте: pip --version)
  • Токен бота — получите у @BotFather
  • ID менеджера — узнайте через @userinfobot

Установка

Шаг 1: Клонируйте или скачайте проект

cd WaterExpress-main

Шаг 2: Создайте виртуальное окружение (рекомендуется)

Для macOS/Linux:

python3 -m venv venv
source venv/bin/activate

Для Windows:

python -m venv venv
venv\Scripts\activate

Зачем нужно виртуальное окружение?
Оно изолирует зависимости проекта от системных пакетов Python.

Шаг 3: Установите зависимости

pip install -r requirements.txt

Настройка

Шаг 1: Создайте файл конфигурации

В проекте уже есть файл config.py с заглушками. Заполните его своими данными:

# config.py

# Токен бота от @BotFather
TELEGRAM_TOKEN = "1234567890:ABCdefGHIjklMNOpqrsTUVwxyz"

# ID менеджера (число без кавычек)
MANAGER_ID = 123456789

Шаг 2: Как получить токен бота

  1. Откройте @BotFather в Telegram
  2. Отправьте команду /newbot
  3. Придумайте имя боту (например, WaterDelivery Bot)
  4. Придумайте юзернейм боту (должен заканчиваться на bot, например water_express_bot)
  5. BotFather выдаст токен — скопируйте его в config.py

Шаг 3: Как узнать свой ID

  1. Откройте @userinfobot
  2. Нажмите Start
  3. Бот покажет ваш ID — скопируйте число в config.py

Запуск

python bot.py

Если всё настроено правильно, вы увидите:

2024-03-18 10:00:00 - __main__ - INFO - База данных проверена/создана
2024-03-18 10:00:00 - __main__ - INFO - Бот запущен...

Остановка бота

Нажмите Ctrl + C в терминале.


Структура проекта

WaterExpress-main/
├── bot.py              # Точка входа (запуск бота)
├── config.py           # Конфигурация (токен, ID менеджера)
├── database.py         # Работа с базой данных SQLite
├── utils.py            # Вспомогательные функции (геолокация, календарь)
├── handlers/           # Обработчики диалогов
│   ├── __init__.py
│   ├── start.py        # /start и первое сообщение
│   ├── address.py      # Ввод адреса и геолокация
│   ├── phone.py        # Ввод телефона
│   ├── calendar.py     # Календарь для выбора даты
│   └── order.py        # Оформление заказа (бутылки, БД, менеджер)
├── requirements.txt    # Зависимости проекта
├── README.md           # Этот файл
└── baza.db             # База данных (создаётся автоматически)

Краткое описание файлов

Файл Описание
bot.py Точка входа: инициализация приложения, настройка ConversationHandler
config.py Конфигурационные данные (токен, ID) — не коммитьте в репозиторий!
database.py Функции для работы с SQLite: create_database(), save_order()
utils.py Вспомогательные функции: get_address_from_location(), generate_calendar()
handlers/start.py Обработчики команды /start и начального сообщения
handlers/address.py Обработчик ввода адреса и геолокации
handlers/phone.py Обработчик ввода номера телефона
handlers/calendar.py Обработчик календаря для выбора даты
handlers/order.py Обработчик количества бутылок, сохранение в БД, уведомление менеджера
requirements.txt Список внешних библиотек для установки через pip
baza.db SQLite-база с заказами — создаётся при первом запуске

Как это работает

Этапы диалога (ConversationHandler)

┌─────────────┐
│   /start    │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│   Адрес     │ ← Геолокация или текст
└──────┬──────┘
       │
       ▼
┌─────────────┐
│   Телефон   │ ← Контакт или ввод вручную
└──────┬──────┘
       │
       ▼
┌─────────────┐
│   Дата      │ ← Выбор из календаря
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  Бутылки    │ ← Число
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  Сохранить  │ → Запись в БД + уведомление менеджеру
└─────────────┘

Работа с базой данных

Таблица clients создаётся автоматически:

CREATE TABLE clients (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    data_delivery TEXT,      -- Дата доставки
    client_name TEXT,        -- Имя клиента
    client_address TEXT,     -- Адрес
    number TEXT              -- Телефон
);

Частые ошибки

1. ModuleNotFoundError: No module named 'telegram'

Решение: Установите зависимости:

pip install -r requirements.txt

2. ImportError: cannot import name 'TELEGRAM_TOKEN' from 'config'

Решение: Проверьте, что файл config.py заполнен корректными данными.

3. Unauthorized или Bot was blocked by the user

Решение: Менеджер заблокировал бота. Разблокируйте @BotFather или проверьте ID.

4. Бот не отвечает на команды

Решение:

  • Проверьте, что бот запущен (python bot.py)
  • Убедитесь, что токен верный
  • Попробуйте отправить /start

5. Ошибка при работе с геолокацией

Решение: Nominatim API может быть недоступен. Проверьте интернет-соединение.


Полезные команды

Команда Описание
/start Запустить бота заново
Ctrl + C Остановить бота в терминале

Просмотр базы данных

# Установите SQLite CLI (если нет)
# macOS: brew install sqlite
# Linux: sudo apt install sqlite3

sqlite3 baza.db "SELECT * FROM clients;"

Для разработчиков

Модульная структура

Проект разделён на логические модули для удобства поддержки:

bot.py (Точка входа)
    │
    ├── config.py (Настройки)
    ├── database.py (БД)
    ├── utils.py (Утилиты)
    └── handlers/ (Обработчики)
        ├── start.py
        ├── address.py
        ├── phone.py
        ├── calendar.py
        └── order.py

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

Если хотите расширить функционал:

  1. Создайте новый файл в handlers/ (например, feedback.py)
  2. Напишите асинхронную функцию-обработчик
  3. Добавьте импорт в handlers/__init__.py
  4. Зарегистрируйте в ConversationHandler.states

Полезные ссылки


Лицензия

Проект создан в учебных целях.


Автор

maxim-vdonsk — Junior Python Developer 🚰


Контакты

About

Telegram-бот для оформления заказов на доставку воды. Геолокация, календарь, уведомление менеджера.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages