Створення скрипт на Python та його встановлення на Ubuntu сервері для Telegram бота

Автор | 21.03.2023

Для початку, що саме бот повинен робити? Наприклад, відповідати на певні команди, відправляти повідомлення, обробляти файли або щось інше? Знання цієї інформації допоможе нам зрозуміти, як саме повинен бути написаний скрипт.

Якщо бот повинен відповідати на певні команди, то ми можемо використовувати бібліотеку python-telegram-bot. Для її встановлення можна використати pip, наприклад, виконавши наступну команду:

pip install python-telegram-bot

Після встановлення бібліотеки можна створити скрипт, в якому будуть оброблюватись команди та відправлятись відповідні повідомлення. Наприклад, ось простий скрипт, який реагує на команду /start та відправляє вітання:

import telegram
from telegram.ext import Updater, CommandHandler

# Ключ бота, який був отриманий під час створення бота
BOT_TOKEN = 'your_bot_token_here'

def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="Привіт, я твій бот! Вітаю!")

def main():
    updater = Updater(token=BOT_TOKEN, use_context=True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

Цей скрипт слухає команду /start та відправляє відповідь у чат з вітанням. Щоб запустити цей скрипт на сервері, вам потрібно зберегти його у файл з розширенням .py, наприклад, bot.py, та виконати наступну команду:

python bot.py

Якщо ви бажаєте, щоб ваш бот відповідав на певні інші команди, то ви можете додати їх використовуючи CommandHandler, подібно до того, як було зроблено з командою /start.

Продовжимо вдосконалення нашого бота…

bot має робити декілька речей: 1) всі звернення до нього писати на вебсторінку: наприклад дата, час і текст або малюнок

Для того, щоб бот зберігав інформацію про всі звернення та відображав її на веб-сторінці, необхідно спочатку налаштувати зберігання даних в базі даних.

  1. Створити базу даних та таблицю, в якій будуть зберігатись дані про звернення.

Наприклад, можна використати MySQL та створити таблицю messages, що міститиме наступні поля:

CREATE TABLE messages (
    id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    message_text TEXT,
    message_photo_url VARCHAR(255)
);
  1. Після створення бази даних та таблиці, необхідно налаштувати з’єднання з базою даних в Python. Для цього можна використати бібліотеку mysql-connector-python.

Наприклад, код для підключення до бази даних буде виглядати так:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="yourdatabase"
)

mycursor = mydb.cursor()
  1. Далі, необхідно написати скрипт, що буде отримувати звернення від користувачів та зберігати їх в базі даних.

Наприклад, код для збереження текстового повідомлення та фото в базі даних буде виглядати так:

import telebot

bot = telebot.TeleBot('TOKEN')

@bot.message_handler(content_types=['text'])
def handle_text_message(message):
    message_text = message.text
    # Збереження текстового повідомлення в базі даних
    sql = "INSERT INTO messages (message_text) VALUES (%s)"
    val = (message_text,)
    mycursor.execute(sql, val)
    mydb.commit()

@bot.message_handler(content_types=['photo'])
def handle_photo_message(message):
    # Отримання URL фото
    photo_url = message.photo[-1].file_id
    message_photo_url = f'https://api.telegram.org/file/bot{bot.token}/{bot.get_file(photo_url).file_path}'
    # Збереження URL фото в базі даних
    sql = "INSERT INTO messages (message_photo_url) VALUES (%s)"
    val = (message_photo_url,)
    mycursor.execute(sql, val)
    mydb.commit()

Наступним кроком буде налаштування веб-сторінки, на якій будуть відображатись збережені звернення.

Крок 4. Створення серверу Flask.

Тепер ми можемо розпочати створення серверу Flask, який буде приймати POST-запити від бота та зберігати інформацію.

  1. Створіть нову папку для проекту Flask:
mkdir flask_project
cd flask_project

2. Створіть віртуальне середовище та активуйте його:

python3 -m venv venv
source venv/bin/activate

3. Встановіть Flask та requests:

pip install Flask requests

4. Створіть файл app.py та додайте наступний код:

from flask import Flask, request

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    data = request.get_json()
    # Збереження отриманої інформації
    date = data['date']
    time = data['time']
    message = data['message']
    with open('messages.txt', 'a') as file:
        file.write(f'{date} {time}: {message}\n')
    return 'success'

if __name__ == '__main__':
    app.run()

Цей код створює веб-сервер Flask, який очікує POST-запити на адресу /webhook. Коли бот буде відправляти повідомлення на цю адресу, сервер зберігає дату, час та текст повідомлення у файл messages.txt.

  1. Запустіть сервер за допомогою команди:
python app.py

Для того, щоб бот викладав на веб-сторінку на локальному сервері nginx, вам потрібно налаштувати nginx, щоб він міг взаємодіяти з вашим Python-скриптом через FastCGI.

Ось кілька кроків, які вам потрібно виконати:

  1. Встановіть пакет python3-dev і python3-pip:
sudo apt-get update
sudo apt-get install python3-dev python3-pip

2. Встановіть бібліотеку flask для Python:

pip3 install flask

3. Створіть Python-скрипт, який буде обробляти запити вашого бота і відображати їх на веб-сторінці. Ось приклад коду:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

Цей код створить веб-додаток, який поверне “Hello, World!” на головну сторінку. Ви можете змінити цю поведінку, щоб додаток повертав потрібну інформацію з вашого бота.

  1. Встановіть uwsgi і uwsgi-plugin-python3:
sudo apt-get install uwsgi uwsgi-plugin-python3

5. Створіть конфігураційний файл для uwsgi в директорії /etc/uwsgi/apps-available з назвою mybot.ini. Ось приклад конфігураційного файлу:

[uwsgi]
plugin = python3
socket = 127.0.0.1:3031
chdir = /path/to/your/python/script/
wsgi-file = yourscript.py
callable = app

6. Створіть символьну посилання на цей файл у директорії /etc/uwsgi/apps-enabled:

sudo ln -s /etc/uwsgi/apps-available/mybot.ini /etc/uwsgi/apps-enabled/

7. Перезапустіть uwsgi і переконайтеся, що він працює:

sudo service uwsgi restart
sudo service uwsgi status

8. Налаштуйте nginx, щоб він використовував uwsgi. Створіть новий файл конфігурації в директорії /etc/nginx/sites-available з назвою mybot. Ось приклад конфігураційного файлу:

server {
    listen 80;
    server_name mybot.local;

    location / {
        include uwsgi_params;
        uwsgi_pass 127

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *