Code Monkey home page Code Monkey logo

pizza-bot's Introduction

Pizza shop in telegram (bot)

Бот-магазин по продаже и доставке пиццы.

Установка и настройки:

  • Скачайте код.
  • Установите зависимости:
pip install -r requirements.txt
  • Запишите переменные окружения в файле .env в формате КЛЮЧ=ЗНАЧЕНИЕ (звездочкой отмечены необязательные):

MOLTIN_CLIENT_ID - Client id на Moltin.

MOLTIN_CLIENT_SECRET - Client server на Moltin.

TG_TOKEN - Телеграм токен. Получить у BotFather.

DATABASE_HOST - Адрес базы данных redis.

DATABASE_PORT - Порт базы данных redis.

DATABASE_PASSWORD - Пароль базы данных redis.

TG_CHAT_ID - ID чата в телеграм, в который будут приходить логи.

YANDEX_API_KEY - API Яндекс-геокодера.

PROVIDER_TOKEN - Токен для выставления счетов. Получить через BotFather.

*PRODUCTS_PATH - Путь до json-файла с данными продуктов.

*PIZZERIAS_PATH - Путь до json-файла с данными пиццерий.

PAGE_ACCESS_TOKEN - Токен для страницы бота в Facebook (воспользуйтесь инструкцией)

VERIFY_TOKEN - Токен для валидации вебхука в Facebook (воспользуйтесь инструкцией)

Запуск телеграм-бота:

Введите команду:

python3 tg_bot.py

Настройка и запуск фейсбук-бота на удаленном сервере:

  • Подключитесь к серверу, загрузите код, установите виртуальное окружение и установите зависимости.
  • Перейдите в директорию для создания демона:
cd /etc/systemd/system
  • Создайте демона {название_файла}.service.
  • Скопируйте содержимое и вставьте в созданный файл, заменив пути до директорий на свои:
[Unit]
Description=Фейсбук-бот по продаже пиццы.

[Service]
WorkingDirectory={путь_до_директории_с_проектом}
ExecStart={путь_до_директории_с_проектом}/venv/bin/gunicorn -w 2 -b 127.0.0.1:8090 fb-bot:app
Restart=always

[Install]
WantedBy=multi-user.target

  • Демон создан, запустите его:
systemctl start {название_демона}.service
  • Чтобы служба запускалась при загрузке системы, используйте команду:
systemctl enable {название_демона}.service
  • Уcтановите nginx:
sudo apt install nginx
  • Перейдите в директорию с конфигами nginx:
cd /etc/nginx/sites-enabled/
  • Удалите дефолдный конфиг и ссздайте свой с любым названием:
server {
  server_name {ваш домен}; # замените домен на свой
  location / {
    include '/etc/nginx/proxy_params';
    proxy_pass http://127.0.0.1:8090/;  # ! порт должен совпадать с тем, что указан в демоне
  }
  • Уставите Certbot. Выберите нужные вам варианты в зависимости от вашей системы.
  • Запустите nginx:
systemctl start nginx.service
  • Чтобы служба запускалась при загрузке системы, используйте команду:
systemctl enable nginx.service
  • Воспользуйтесь инструкцией для подключения бота к вашей странице на Facebook.

Скрипт upload_data.py:

Загружает данные на Moltin, создает модели Pizzeria (с полями: Address, Alias, Longitude, Latitude, Courier id) и Customer Address (с полями: Latitude, Longitude).

Для запуска вызовите команду:

python3 upload_data.py

Скрипт берет данные из двух json-файлов:

  • Файл с данными продуктов (по умолчанию products.json)

Пример содержимого:

[
    {
        "name": "Чизбургер-пицца",
        "description": "мясной соус болоньезе, моцарелла, лук, соленые огурчики, томаты, соус бургер",
        "product_image": {
            "url": "https://dodopizza-a.akamaihd.net/static/Img/Products/Pizza/ru-RU/1626f452-b56a-46a7-ba6e-c2c2c9707466.jpg"
        },
        "price": 395
    },
    {
        "name": "Крэйзи пепперони ",
        "description": "Томатный соус, увеличенные порции цыпленка и пепперони, моцарелла, кисло-сладкий соус",
        "product_image":{
            "url": "https://dodopizza-a.akamaihd.net/static/Img/Products/Pizza/ru-RU/7aa1638e-1bee-4162-a2df-6bbaf683a486.jpg"
        },
        "price": 425
    }
]
  • Файл с данными о пиццериях (по умолчанию pizzerias.json)

Пример содержимого:

[
    {
        "alias": "Афимолл",
        "address": {
           "full": "Москва, набережная Пресненская дом 2"
        },
        "coordinates": {
            "lat": "55.749299",
            "lon": "37.539644"
        },
        "courier_id": 1045671239
    },
    {
        "alias": "Ясенево",
        "address": {
            "full": "Москва, проспект Новоясеневский дом вл7"
        },
        "coordinates": {
            "lat": "55.607489",
            "lon": "37.532367"
        },
        "courier_id": 1045671242
    }
]

Скрипт update_db.py:

Запуск скрипта вручную:
python3 update_db.py

При первом запуске скрипт скачает данные с Moltin и загрузит в базу данных Pedis.

При последующих запусках скрипт будет проверять Moltin на обновление данных, если они изменились, то обновит данные в Redis.

Автоматический запуск скрипта на удаленном сервере:
  • Перейдите в следующую директорию:
cd /etc/systemd/system
  • Создайте демона с содержимым (например update-db.service):
[Service]
WorkingDirectory={путь_до_папки_с_проектом}
ExecStart={путь_до_папки_с_проектом}/venv/bin/python3.9 update_db.py
Restart=on-abort

[Install]
WantedBy=multi-user.target
  • Создайте таймер, который будет запускать демона раз в пять минут, тем самым проверять и при необходимости обновлять БД (например update-db.timer, имя должно совпадать с демоном):
[Unit]
Description=Таймер для обновления БД в fb-bot

[Timer]
OnBootSec=300
OnUnitActiveSec=5min

[Install]
WantedBy=multi-user.target

pizza-bot's People

Contributors

evgen4ikrus avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.