Муню

X
//
Главная » All » Telegram бот на Python. Практические примеры

Telegram бот на Python. Практические примеры

Время чтение: 7 минут 2020-08-31

Представляю Вашему вниманию практические примеры по теме, как создать Telegram бот на Python3 с использованием библиотеки pyTelegramBotAPI. Тут я не вижу смысла рассказывать о том, как использовать Bot Father, так как, скорее всего это знают все, либо инфы в инете полно. Минимум что будет из банальных примеров — это обработка таких команд, как «/start» и «/help» либо любой бот начинается именно с этого + это будет полезно, для тех кто только начинает свой путь в создании ботов Telegram.

План действий в рамках этой статьи такой. Но она будет дополнятся, так как данную статью я буду использовать для себя в качестве справки… По этому можете добавить страницу в закладки.

  1. Подготовка — Создаём config.py и используем Proxy.
  2. Обработка команд «/start» и «/help».
  3. Обработка простых сообщений. Отправка и получение.
  4. Как скачать и отправить стикер пользователю из бота.
  5. Как отправить и получить документ, аудио, видео и.т.д
  6. Разбираемся с Emoji, как получить код смайла для отправки в сообщении.
  7. Получаем информацию о пользователе, который запустил бота.

Подготовка — Создаём config.py и используем Proxy.

Файл config.py понадобится нам для хранения Токена бота и proxy (Если используете). Сложного тут нет ничего, обычный файл с двумя переменными, которые мы будет использовать в основном файле проекта.

token = 'Token'
proxy = 'socks5://Proxy_User:Proxy_Password@Proxy_IP:Proxy_Port'

Так просто выглядит файл config.py который нужно импортировать в основном файле проекта, созданием которого мы сейчас займемся. Я его так и назову «telegram_bot.py»

import telebot
from telebot import apihelper # Нужно для работы Proxy
import config # Импорт config.py
import urllib.request # request нужен для загрузки файлов от пользователя

bot = telebot.TeleBot(config.token) # Передаём токен из файла config.py
apihelper.proxy = {'http':config.proxy} # Передаём Proxy из файла config.py


bot.polling() # запускаем бота

Практически Telegram бот на Python уже готов к работе и его можно запустить, если нет ошибок то бот работает. Но есть одна проблема. Бот работает через прокси, а библиотека request, которая нам нужна для загрузки файлов от пользователя, в данном случаи не использует прокси, по этому скачивать файлы не получиться… Это дело можно исправить, но лучше использовать VPN а от proxy отказаться.

В дальнейшем будем считать, что у нас настроен VPN ну или бот пишется непосредственно на сервере))) Теперь когда с подключением разобрались, пришло время научить бота совершать какие либо действия.

Обработка команд «/start» и «/help».

Библиотека «pyTelegramBotAPI» использует декораторы, это очень удобно и практично. Посмотрим как это работает на примере обработки команд «/start» и «/help».

@bot.message_handler(commands=['start', 'help'])
def welcome(message):
    pass # Тут можно обработать одну из команд start или help

Если пользователь Вашего бота отправить одну из команд start или help то сработает функция «welcome()» (Название функции может быть произвольным) главное что бы она принимала обязательный параметр «message» в котором содержится много полезной информации.

А вот пример как работают декораторы. Мы можем обработать команды в разных функциях.

# Тут работаем с командой start
@bot.message_handler(commands=['start'])
def welcome_start(message):
    bot.send_message(message.chat.id, 'Приветствую тебя user')

# Тут работаем с командой help
@bot.message_handler(commands=['help'])
def welcome_help(message):
    bot.send_message(message.chat.id, 'Чем я могу тебе помочь')

Все получается аккуратно и логично, запутаться что и где уже стало сложнее, а значит разработка бота сводится не к рутине а к удовольствию =)

Обработка простых сообщений. Отправка и получение.

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

Типов сообщений в pyTelegramBotAPI достаточно. Некоторые из них для примера «text, audio, document» и.т.д. Рассмотрим пример

@bot.message_handler(content_types=["text"])
def content_text(message):
    print('Боту отправили обычный текст')

@bot.message_handler(content_types=["document"])
def content_document(message):
    print('Боту отправили документ')

Так же можно записать следующим образом @bot.message_handler(content_types=[«text», «document», «audio»]) Надеюсь с этим все понятно, и работа декораторов Вам понятна.

Как получить простое сообщение от пользователя.

Ранее я уже сказал что в «message» много интересного. Там же и находится сообщение которое напечатал пользователь боту. Прочитать его можно так.

@bot.message_handler(content_types=["text"])
def text(message):
    print(message.text)

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

Как отправить простое сообщение пользователю.

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

@bot.message_handler(content_types=["text"])
def text(message):
    if message.text == 'hello':
        bot.send_message(message.chat.id, 'И тебе hello')

Вызываем метод «send_message» и передаём ему собственно ID и текст сообщение. В данном примере происходит следующие: Если пользователь напишет «hello» то бот ему ответит «И тебе hello»

Как скачать и отправить стикер пользователю из Telegram бота

Думаю это будет интересный пример, сейчас мы научимся отправлять Стикеры из telegram бот на python3. Для того что бы отправить стикер из бота, нам нужно узнать ID нужного нам стикера. Сделать это просто, отправьте любой стикер боту «@StickerID_Bot» и он в ответ вернёт Вам ID файла.

Как отправить Стикер

@bot.message_handler(content_types=["text"])
def text(message):
    if message.text == 'sticker':
        bot.send_sticker(message.chat.id, 'CAADAgADsQADWQMDAAEJK1niI56hlhYE')

Если пользователь боту пришлёт слово «sticker» то в ответ мы отправим ему свой стикер. За место send_message вызывается метод send_sticker также передаётся id и за место текста отправляется ID стикера. Все просто — стикер отправлен))

Как получить Стикер (Скачать на локальную машину)

Давайте скачаем на локальную машину файл стикера, который прислал пользователь боту.

@bot.message_handler(content_types=["sticker"])
def handle_docs_audio(message):
    # Получим ID Стикера
    sticker_id = message.sticker.file_id
    # Нужно получить путь, где лежит файл стикера на Сервере Телеграмма
    file_info = bot.get_file(sticker_id)
    # Теперь формируем ссылку и скачивам файл
    urllib.request.urlretrieve(f'http://api.telegram.org/file/bot{config.token}/{file_info.file_path}', file_info.file_path)

Собственно опять «message»! Пользователь отправляет нам стикер. Находим ID Стикера и отдаём его методу «get_file» что бы получить путь до файла на сервере телеграмма. А дальше скачаем файл в папку «stickers» которую нужно создать в том каталоге, где находится весь проект бота.

Как отправить и получить документ, аудио, видео, фото и.т.д

Продолжаем пилить telegram бот на python3 и на простом примере разберёмся, как отправлять файлы пользователям telegram бота.

Как отправить файл пользователю бота

Отправляем пользователю фотографию

@bot.message_handler(content_types=["text"])
def text(message):
    if message.text == 'photo':
        file = open('photo.png', 'rb')
        bot.send_photo(message.chat.id, file)

За это отвечает метод «send_photo» Аналогично поступим и с другими типами файлов. Например нам нужно отправить документ «file.txt»

Отправляем пользователю документ

@bot.message_handler(content_types=["text"])
def text(message):
    if message.text == 'document':
        file = open('file.txt', 'rb')
        bot.send_document(message.chat.id, file)

Тут мы уже используем метод «send_document» аналогично поступаем с другими типами файлов аудио, видео и прочие.

Как получить файл от пользователя

Все также как и со стикерами. В этом примере получим документ от пользователя и скачаем его себе на локалку.

@bot.message_handler(content_types=["document"])
def handle_docs_audio(message):
    document_id = message.document.file_id
    file_info = bot.get_file(document_id)
    urllib.request.urlretrieve(f'http://api.telegram.org/file/bot{config.token}/{file_info.file_path}', file_info.file_path)

Получим от пользователя музыку

@bot.message_handler(content_types=["audio"])
def handle_docs_document(message):
    audio_id = message.audio.file_id
    file_info = bot.get_file(audio_id)
    urllib.request.urlretrieve(f'http://api.telegram.org/file/bot{config.token}/{file_info.file_path}', file_info.file_path)

Точно таким-же способом можно получить любой тип файла от пользователей и создать Telegram бот на Python для конвертации файлов или у кого на что фантазии хватает))

X