Как написать телеграмм бота на Python: пошаговое руководство

Добро пожаловать в мир Telegram ботов! Сегодня Telegram боты становятся все популярнее и находят применение в самых разных областях: от интернет-маркетинга и контекстной рекламы до организации бизнеса и общения с пользователями. В этой статье мы обсудим, зачем стоит создавать бота и какие задачи он может решать, а также научимся создавать собственного Telegram бота на Python.

Подготовка к разработке

Установка Python

Прежде чем начать разработку, необходимо установить Python. Современные версии Python можно загрузить с официального сайта python.org. После установки Python убедитесь, что он правильно настроен, запустив в консоли команду:

python --version

Кроме Python, нам понадобятся некоторые библиотеки. Давайте установим библиотеку python-telegram-bot:

pip install python-telegram-bot

Создание Telegram бота

Для начала работы нам нужен Telegram бот. Создание нового бота осуществляется через специального бота Telegram — BotFather. Следуйте этим шагам:

  1. Откройте Telegram и найдите бота BotFather.
  2. Введите команду /newbot и следуйте инструкциям.
  3. В конце вы получите токен доступа, который нужно будет использовать в коде.

Основы работы с библиотекой python-telegram-бот

Библиотека python-telegram-bot предоставляет удобный интерфейс для работы с Telegram API. Основные компоненты включают Updater, Dispatcher, JobQueue и различные обработчики событий (Handler).

  • Updater: Управляет получением обновлений от Telegram.
  • Dispatcher: Отправляет полученные обновления к соответствующим обработчикам.
  • Handlers: Компоненты, которые выполняются на основе типа обновления (например, команды, сообщения, кнопки).

Создание простого бота

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

Создадим простую файловую структуру для нашего проекта:

my_bot/
|-- bot.py
|-- requirements.txt

Код бота

Теперь мы готовы написать код нашего бота. В файле bot.py напишем следующий код:

import logging
from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext

# Включение логирования
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)

def start(update: Update, context: CallbackContext) -> None:
    """Отправляет сообщение, когда команда /start запускается."""
    update.message.reply_text('Привет! Я твой Telegram бот!')

def echo(update: Update, context: CallbackContext) -> None:
    """Отправляет обратно любое сообщение от пользователя."""
    update.message.reply_text(update.message.text)

def main() -> None:
    """Запуск бота."""
    updater = Updater('YOUR_TOKEN')
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()
Реклама

Этот код создает простого Telegram бота, который отвечает на команду /start и эхо-сообщением возвращает текст каждого сообщения, отправленного пользователем.

Добавление функциональности

Обработка команд

Попробуем добавить новую команду, например, /help. Для этого добавим новый обработчик команды.

def help_command(update: Update, context: CallbackContext) -> None:
    """Отправляет сообщение с информацией о доступных командах."""
    update.message.reply_text('Доступные команды:\n/start - начать\n/help - помощь')

# Добавим обработчик в функцию main()
dispatcher.add_handler(CommandHandler('help', help_command))

Хранение данных

Для хранения данных можно использовать SQLite. Давайте добавим функционал для сохранения и чтения пользовательских данных.

Создадим файл database.py:

import sqlite3

def init_db():
    conn = sqlite3.connect('bot.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, message TEXT)''')
    conn.commit()
    conn.close()

def save_message(user_id: int, message: str):
    conn = sqlite3.connect('bot.db')
    c = conn.cursor()
    c.execute('INSERT INTO users (user_id, message) VALUES (?, ?)', (user_id, message))
    conn.commit()
    conn.close()

def get_messages(user_id: int):
    conn = sqlite3.connect('bot.db')
    c = conn.cursor()
    c.execute('SELECT message FROM users WHERE user_id=?', (user_id,))
    messages = c.fetchall()
    conn.close()
    return messages

Во main.py добавим вызов функций из нашего дата-слоя:

from database import init_db, save_message, get_messages

# Вызываем init_db() в main()
init_db()

def echo(update: Update, context: CallbackContext) -> None:
    """Отправляет обратно любое сообщение от пользователя и сохраняет его в базу данных."""
    save_message(update.message.from_user.id, update.message.text)
    update.message.reply_text(update.message.text)

Развертывание бота

Для развертывания бота на сервере можно использовать Heroku. Создайте новый проект на Heroku и установите необходимые переменные окружения. Перед этим, создайте Procfile:

web: python bot.py

Добавьте все файлы в репозиторий Git и запустите деплой:

git add .
git commit -m "Initial commit"
heroku create
git push heroku master

Заключение

Создание Telegram бота — это увлекательное и полезное занятие, которое открывает множество новых возможностей. Мы разобрали основные шаги и подходы, которые помогут вам начать, но на этом ваше изучение не заканчивается.

Полезные ресурсы

Надеюсь, эта статья была полезной и поможет вам стать мастером в разработке Telegram ботов на Python!


Добавить комментарий