# Разработка Telegram бота на Python


<!--more-->

## Разработка Telegram-бота с использованием библиотеки Python-telegram-bot

Telegram-боты становятся все более популярными благодаря своей функциональности и простоте использования.
В этой статье мы рассмотрим, как создать простого Telegram-бота с использованием библиотеки **python-telegram-bot**.

Для начала необходимо создать виртуальное окружение:

```bash
python3 -m venv .venv

.venv\Scripts\activate # для Windows.
.venv/bin/acivate # для Linux систем.
```

Затем надо установить библиотеку python-telegram-bot. Это можно сделать с помощью pip:

```bash
pip install python-telegram-bot
```

Для создания бота в Telegram:

Откройте Telegram и найдите бота `@BotFather`. Отправьте команду `/newbot` и следуйте инструкциям для создания нового бота.
После создания бота вы получите токен, который будет использоваться для взаимодействия с API Telegram.

## Обработчики

### Команды
Теперь, когда у нас есть токен, мы можем приступить к написанию кода. Создадим файл bot.py и добавим следующий код:

```python
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes

# Функция, которая будет вызываться при команде /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text("Привет! Я ваш Telegram-бот.")

    
# Основная функция для запуска бота
def main() -> None:
    # Вставьте сюда ваш токен
    app = Application.builder().token("YOUR_TOKEN_HERE").build()

    # Регистрация обработчика
    app.add_handler(CommandHandler("start", start))

    # Запуск бота
    app.run_polling()

if __name__ == "__main__":
    main()
```

Замените **YOUR_TOKEN_HERE** на токен, полученный от BotFather. После этого запустите бота:


```bash
python3 bot.py
```

Теперь ваш бот будет работать и отвечать на команду `/start`.

### Добавление новых команд

Вы можете легко расширить функциональность вашего бота, добавляя новые команды. Например, давайте добавим команду `/help`,
которая будет выводить список доступных команд:

```python
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes

# Функция, которая будет вызываться при команде /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text("Привет! Я ваш Telegram-бот.")

# Новая функция для команды /help
async def help(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text(
        """
        Список команд:
        /start - Приветсвенное сообщение.
        /help - Помощь.
        """
    )
    
def main() -> None:

    app = Application.builder().token("YOUR_TOKEN_HERE").build()

    app.add_handler(CommandHandler("start", start))
    
    # Регистрация нового обработчика
    app.add_handler(CommandHandler("help", help))


    # Запуск бота
    app.run_polling()

if __name__ == "__main__":
    main()
```

### Текстовые сообщения

Вы также можете обрабатывать текстовые сообщения, отправленные пользователями. Для этого добавьте следующий обработчик:

```python
from telegram import Update
from telegram.ext import Application, MessageHandler, ContextTypes, filters

async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text(update.message.text)
    
    
def main() -> None:

    app = Application.builder().token("YOUR_TOKEN_HERE").build()

    # Регистрация обработчика
    app.add_handler(MessageHandler(filters.TEXT, echo))

    # Запуск бота
    app.run_polling()

if __name__ == "__main__":
    main()
```

Данный код будет дублировать все текстовые сообщения пользователя.

Обработчиков довольно много, но самые основные и часто используемые это **MessageHandler** и **CommandHandler**. Как их использовать
было показано выше.

Так же объект **filters** позволяет обрабатывать все возможные сообщения в чате, будь это текст,
фото, видео и т.д. Для лучшего понимания рекомендую ознакомиться с [документацией](https://docs.python-telegram-bot.org).

