Телеграм бот на питоне пошагово

Чат-бот в Telegram на python и aiogram. Создание первого Telegram бота на Python. Част. Выбираем библиотеку и пишем первого бота.

Разбираемся, как написать чат-бота с помощью библиотеки aiogram. Весь код — внутри статьи.

Компании используют чат-ботов в Telegram для разных задач: рассылают новости о новых акциях, принимают платежи или даже организуют службу технической поддержки. Обычные пользователи тоже используют их для своих бытовых нужд — ведут учёт личных финансов или оформляют посты в социальных сетях.

В этой статье мы научимся с нуля создавать чат-ботов с помощью Python: выберем лучшую библиотеку и напишем на ней эхо-бота, который отвечает на сообщения пользователя точно такими же сообщениями. Это первая часть урока по чат-ботам в Telegram — во второй части мы добавим новые фичи.

Библиотеки для создания бота

Для создания Telegram-ботов на Python существует несколько десятков библиотек. Они различаются популярностью, размером комьюнити и функциональностью. Рассмотрим самые популярные.

Пишем TELEGRAM бота на Python

Современная библиотека, набирающая популярность. Работает с асинхронным подходом к выполнению кода. Это позволяет не останавливать работу бота в ожидании ответа пользователя. У aiogram подробная документация и большое русскоязычное комьюнити. В этой и последующих статьях цикла мы будем работать как раз с этой библиотекой.

Одна из первых библиотек для создания ботов. Отличается от aiogram синхронным подходом к работе, то есть при ожидании ответа от пользователя выполнение кода останавливается.

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

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

Для этого нам необходимо:

Устанавливаем Python и создаём виртуальное окружение

На macOS или Linux. Python установлен в эти операционные системы изначально. Чтобы проверить его наличие, откройте терминал и введите команду:

Если у вас не установлен Python:
Переходите на официальный сайт, скачиваете актуальную версию и устанавливаете её.

Не забудьте поставить галочку add PATH во время установки

После установки и проверки Python требуется установить виртуальное окружение с помощью virtualenv.

Это специальный инструмент, который позволяет изолировать друг от друга проекты в разработке, независимо устанавливая для них библиотеки и пакеты. Удобно, когда вы работаете над разными приложениями одновременно.

virtualenv устанавливается через терминал:

sudo pip3 install virtualenv

После этого необходимо создать директорию для проекта, внутри которой будет работать виртуальное окружение:

Команда mkdir создаст папку cd переведёт нас в неё. Теперь в этой директории будут храниться файлы проекта, связанные с нашим ботом.

Развернём виртуальное окружение внутри папки

virtualenv venv -p python3

Теперь его активируем. Если этого не сделать, то оно не будет работать.

Шаг 2
Создаём бота

Открываем его, жмём кнопку «Запустить» и вводим команду /newbot:

Теперь напишем название и юзернейм для нашего бота. Назовём его echo_skillbox_bot (теперь это имя занято, так что вам надо будет придумать своё). В ответ придёт наш токен, который мы будем использовать для подключения к API Telegram.

Этот токен мы сохраняем — он потребуется нам в будущем.

Python-telegram-bot примеры. Самый простой бот

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

Еще по теме:  Безлимит на мессенджеры Телеграмм

# -*- coding: utf-8 -*- from telegram.ext import Updater # пакет называется python-telegram-bot, но Python- from telegram.ext import CommandHandler # модуль почему-то просто telegram ¯_(ツ)_/¯ def start(bot, update): # подробнее об объекте update: https://core.telegram.org/bots/api#update bot.sendMessage(chat_id=update.message.chat_id, text=»Здравствуйте.») updater = Updater(token=’TOKEN’) # тут токен, который выдал вам Ботский Отец! start_handler = CommandHandler(‘start’, start) # этот обработчик реагирует # только на команду /start updater.dispatcher.add_handler(start_handler) # регистрируем в госреестре обработчиков updater.start_polling() # поехали!

создаёт бота, который сухо отвечает «Здравствуйте.» при нажатии на кнопку Start (или ручном вводе команды /start ) и многозначительно молчит при любых последующих действиях с вашей стороны.Соответственно, если мы захотим повесить обработчики любых текстовых сообщений или любых команд, нам нужно будет написать

from telegram.ext import Filters, MessageHandler def handle_text(bot, update): # … def handle_command(bot, update): # … # MessageHandler — более универсальный обработчик, который берёт на вход фильтр text_handler = MessageHandler(Filters.text, self.handle_text) command_handler = MessageHandler(Filters.command, self.handle_command) # регистрируем свеженькие обработчики в диспетчере updater.dispatcher.add_handler(text_handler) # без регистрации будет работать, updater.dispatcher.add_handler(command_handler) # но не больше трёх месяцев (шутка)

(За дальнейшими подробностями с чистой совестью отсылаю к.)Нагруженные этим теоретическим минимумом, мы можем наконец подумать, как нам писать своего нетривиального бота. Для начала давайте вернёмся к постановке задачи. Под диалоговым ботом я подразумеваю бота, который главным образом ведёт обычный текстовый диалог с пользователем — с вопросами, ответами, нелинейным сюжетом, разочаровывающими концовками и всем в таком духе (играли в «»?) Напротив, не попадают в сферу наших текущих интересов боты, разным образом расширяющие функционал Telegram (вроде); соответственно, мы опустим добавление всяких плюшек вроде,,и всего такого прочего.Проблема сложных диалоговых ботов в том, что нетривиальный диалог требует хранения состояния. Работа асинхронных диалогов требует постоянных прерываний на ожидание сообщения от пользователя; состояние нужно сохранять, потом восстанавливать, прыгать к коду, ответственному за обработку очередного сообщения, и так далее; в общем, организация кода становится проблемой довольно угнетающей. Прервать, продолжить… ничего не напоминает? Что ж, посмотрим, как обозначенную проблему можно изящнейше обойти с помощью магии yield .

Чат-боты в Telegram на python. част. Callback-кнопки и редактирование сообщений

Прежде, чем мы перейдем к другим кнопкам, давайте познакомимся с функциями редактирования сообщений, коих тоже три: editMessageText (редактирование текста), editMessageCaption (редактирование подписи к медиа) и editMessageReplyMarkup (редактирование инлайн-клавиатуры). В рамках этого урока рассмотрим только первую функцию, остальные работают аналогично и предлагаются для самостоятельного изучения.
Чтобы отредактировать сообщение, нам надо знать, про какое именно идёт речь. В случае, если оно было отправлено самим ботом, идентификаторами служит связка chat_id + message_id . Но если сообщение было отправлено в инлайн-режиме, то ориентироваться надо по параметру inline_message_id .

И вот теперь вернемся к нашим баранам кнопкам. На очереди – Callback . Это, на мой взгляд, самая крутая фича нового обновления. Колбэк-кнопки позволяют выполнять произвольные действия по их нажатию. Всё зависит от того, какие параметры каждая кнопка в себе несёт. Соответственно, все нажатия будут приводить к отправке боту объекта CallbackQuery , содержащему поле data , в котором написана некоторая строка, заложенная в кнопку, а также либо объект Message , если сообщение отправлено ботом в обычном режиме, либо поле inline_message_id , если сообщение отправлено в инлайн-режиме.

Приведу пример, после которого все вопросы должны отпасть: пусть, например, если сообщение отправлено ботом в обычном режиме, то нажатие на кнопку заменит текст сообщения на “Пыщь”, если в инлайн – то “Бдыщь”. При этом в обоих случаях значение callback_data будет равно test . Что для этого нужно сделать: во-первых, написать простейший хэндлер для всех входящих сообщений, во-вторых, написать простейший хэндлер для инлайн-сообщений, в-третьих, написать простейший хэндлер для колбэка, который определит, из какого режима пришло сообщение.

Aiogram python. Установка ¶

Для начала давайте создадим каталог для бота, организуем там virtual environment (далее venv) и установим библиотеку aiogram .
Проверим, что установлен Python версии 3.9 (если вы знаете, что установлен 3.9 и выше, можете пропустить этот раздел):

Еще по теме:  Платный аккаунт в Телеграмме что дает

$ python3.9 Python 3.9.9 (main, Jan 11 2022, 16:35:07) on linux Type «help», «copyright», «credits» or «license» for more information. >>> exit() $

Теперь создадим файл requirements.txt , в котором укажем используемую нами версию aiogram. Также нам понадобится библиотека python-dotenv для файлов конфигурации.

О версиях aiogram

В этой главе используется aiogram 3.x , перед началом работы рекомендую заглянуть в канал релизов библиотеки и проверить наличие более новой версии. Подойдёт любая более новая, начинающаяся с цифры 3, поскольку aiogram 2.x более рассматриваться не будет и считается устаревшим.

$ python3.9 -m venv venv $ echo «aiogram==3.0.0b7» > requirements.txt $ echo «python-dotenv==0.21.1» >> requirements.txt $ source venv/bin/activate (venv) $ pip install -r requirements.txt # …здесь куча строк про установку… Successfully installed …тут длинный список… $

Обратите внимание на префикс «venv» в терминале. Он указывает, что мы находимся в виртуальном окружении с именем «venv». Проверим, что внутри venv вызов команды python указывает на всё тот же Python 3.9:

(venv) $ python Python 3.9.9 (main, Jan 11 2022, 16:35:07) on linux Type «help», «copyright», «credits» or «license» for more information. >>> exit() (venv) $ deactivate $

Последней командой deactivate мы вышли из venv, чтобы он нам не мешал.

Если для написания ботов вы используете PyCharm, рекомендую также установить сторонний плагин Pydantic для поддержки автодополнения кода в телеграмных объектах.

Самообучающийся чат-бот python. Что делают Chatbots?

Современные чат-боты не полагаются исключительно на текст, и часто показывают полезные карточки, изображения, ссылки и формы, предоставляя опыт, подобный приложению.

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

  1. Чат-боты на основе правил Это множество ботов отвечают на вопросы, основываясь на некоторых простых правилах, по которым они обучаются.
  2. Самообучающиеся чат-боты : На это разнообразие ботов полагаются Искусственный интеллект (AI) https://lajfhak.ru-land.com/stati/chat-bot-v-telegram-na-python-i-aiogram-sozdanie-pervogo-telegram-bota-na-python-chast» target=»_blank»]lajfhak.ru-land.com[/mask_link]

    Пишем Telegram Bot на Python

    Python – язык программирования высокого уровня, который появился сравнительно недавно. Однако его простота и легкий синтаксис уже сделали язык лидером в программировании. Многие предпочитают Python для создания Telegram Bot.

    Что требуется для создания бота

    1. Среда программирования Python.
    2. Если у вас установлена версия до 3.4, то следует скачать Gid и Pip. Первое – система управления версиями, второе – система управления пакетами Python. Pip позволяет устанавливать пакеты из командной строки.
    3. Регистрация на GitHub.com
    4. Регистрация на сервере Heroku.com.

    Последние два позволят развернуть бот в сети.

    Создаем бота

    В результате вы получите токен – символьно-числовую последовательность, уникальную для каждого бота Telegram. Именно с помощью этого идентификатора отправляются запросы на сайт https://api.telegram.org.

    Каждый запрос имеет вид:

    Методы описаны в документации к Telegram Bot API и являются стандартными. Задача программиста при написании бота заключается в создании кода, который получает сообщения от пользователя и отправляет команду боту на выполнение действий. Запрос может выглядеть следующим образом:

    Это пример отправки сообщения для клиента Telegram. Обязательно необходимо знать параметр id_chat – это идентификатор чата. Узнать его можно из ответа, который присылает сервер, который имеет вид JSON-строки:

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

    Пишем бота для Telegram на Python

    Сначала создадим программный код. Необходимо установить Python и среду разработки.

    1. Скачайте Python с официального сайта https://www.python.org/downloads/
    2. Установите, обязательно указав «Add Python to Path».
    3. Проверьте установку, открыв командную строку и набрав pip. Должен появится справочный материал по pip.

    Откройте среду программирования IDLE. Это делается через пуск, в главном меню ищите раздел с установленным Python и выбирайте нужную команду. Отроется окно. Создайте в нем новый файл и вставьте программный код бота Telegram на Python.

    import requests
    import datetime
    #Установка адреса бота
    url = https://api.telegram.org/bot507226896:AAGT_fsEO1milOkqbNp-VolQDJ0tGjaPvD7/
    #Поиск последнего сообщения из массива чата с пользователем Telegram.
    def lastUpdate(dataEnd):
    res = dataEnd[‘result’]
    totalUpdates = len(res) — 1
    return res[totalUpdates]
    #Получение идентификатора чата Telegram
    def getChatID(update):
    chatID = update[‘message’][‘chat’][‘id’]
    return chatID
    #отправка запроса sendMessage боту
    def sendResp(chat, value):
    settings =
    resp = requests.post(url + ‘sendMessage’, data=settings)
    return resp
    #Get-запрос на обновление информации к боту. Результат – строка json. Метод .json позволяет развернуть ее в массив
    def getUpdatesJson(request):
    settings =
    response = requests.get(request + ‘getUpdates’, data=settings)
    return response.json()
    #Главная функция
    def main():
    chatID = getChatID(lastUpdate(getUpdatesJson(url)))
    sendResp(chatID, ‘Ваше сообщение’)
    updateID = lastUpdate(getUpdatesJson(url))[‘update_id’]
    #Бесконечный цикл, который отправляет запросы боту на получение обновлений
    while True:
    #Если обновление есть, отправляем сообщение
    if updateID == lastUpdate(getUpdatesJson(url))[‘update_id’]:
    sendResp(getChatID(lastUpdate(getUpdatesJson(url))), ‘проба’)
    updateID += 1
    sleep(1)
    #Запуск главной функции
    if __name__ == ‘__main__’:
    main()

    Python чувствителен к пробелам и табуляции, поэтому выполните Format-Untabify Region.

    Запустите здесь же в среде разработки. В созданном боте Telegram должно появиться сообщение «Ваше сообщение Проба».

    Разворачиваем проект на сервере

    Самое сложное – заставить наш проект для Telegram работать на сервере. Мы воспользуемся бесплатным сервисом Heroku.

    1. Устанавливаем окружение, набирая pip install pipenv – ее надо набрать в командной строке.
    2. Регистрируемся на Heroku.com
    3. Устанавливаем интерфейс командной строки Heroku (CLI)
      https://devcenter.heroku.com/articles/getting-started-with-python#set-up
    4. В командной строке набираем Heroku и Enter
    5. Вводим адрес электронной почты, с которым регистрировались на сервере, и пароль, придуманный при регистрации
    6. Создаем папку. Ее лучше создать в папке с Python. Для примера создадим папку run
    7. Набираем virtualenv run , чтобы инициализировать в ней virtualenv.
    8. Регистрируемся на github.com и создаем свой репозиторий
    9. Переходим в папку run с помощью cd run
    10. Клонируем репозиторий git командой git clone https:/github.com/ВАШЕ_ИМЯ/ВАШ РЕПОЗИТОРИЙ . ВАШЕ_ИМЯ – имя пользователя на github
    11. Скопируйте скрипт в папку созданного репозитория (она появится в run)
    12. Зайдите в папку run/scripts , чтобы запустить файл activate.bat. Если он сработал успешно, то перед адресом в командной строке будет стоять название вашей папки. Например,
    13. Перейдем в папку run , затем в папку репозитория с помощью команды cd
    14. Установим модуль requests. Наберем pip install requests
    15. Чтобы создать зависимость введите pip freeze > requirements.txt
    16. В папке run создайте файл Procfile или Procfile.windows (для Windows) и сохраните в нем строку web: python bot.py, где bot.py – имя вашего файла с программой для бота
    17. В папке репозитория создайте файл __init__.py. Он будет пустым

    Далее последовательно набирайте в командной строке

    Вы увидите сообщение об инициализации пустого репозитория.

    Внимание, после add пробел и точка! Добавляет файлы в локальный депозиторий.

    Выполнение команды занимает некоторое время, необходимо подождать.

    git commit -m ‘short message that describe changes to commit’
    Фиксирует изменения в репозитории.
    git push -u https://github.com/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_РЕПОЗИТОРИЯ
    Позволит развернуть проект на github.

    Затем выполните команды:

    heroku create имя проекта

    В результате вы получите адрес вашего проекта, например, runbot.herokuapp.com.

    git push heroku master

    Ждем окончания процесса компиляции проекта.

    heroku ps:scale web=1
    heroku open

    Последняя команда откроет ваше приложение на сервере. Бот на Питоне для Телеграмма начнет свою работу.

    На сайте с документацией можно посмотреть другие Telegram Bot примеры на Python.

    Источник: telegramzy.ru

    Учебник по разработке бота для Telegram на Python

    Отличный учебник для тех, кто хочет научиться писать ботов для Telegram с использованием библиотеки pyTelegramBotAPI. Существует альтернативный вариант мана, написанный другим автором, там используется библиотека aiogram.

    Учебник по разработке бота для Telegram на Python 1

    Учебник здесь

    Все исходные коды к урокам расположены в этом репозитории

    Читайте анонсы и посты целиком в ЖЖ, Medium, Голосе и Яндекс.Дзен!

    Поддержите мой блог финансово. Все донаты пойдут на оплату хостинга и развитие сайта!

    wargm.ru - рейтинг серверов

    Telegram

    Your Browser Does Not Support iframes!

    Последние

    Рубрики

    Подписаться
    Соединить с D
    Соединить с D
    0 комментариев
    Inline Feedbacks
    View all comments

    СЧЕТЧИКИ

    РЕКЛАМА И ДОНАТЫ

    Социальные сети

    Использование материалов разрешается с активной ссылкой на levashove.ru.

    Источник: levashove.ru

Рейтинг
( Пока оценок нет )
Загрузка ...