Как написать своего бота для telegram на python

Zoloto585CPA

Telegram Bot на Python 3

В данной статье мы напишем telegram bot на python, который сможет отвечать на наши сообщения, взаимодействовать с нами, предлагая варианты ответов в виде кнопок и обрабатывать выбранный нами результат, выполняя команды на сервере. Взаимодействовать с Telegram Bot Api мы будем с помощью библиотеки pyTelegramBotAPI (telebot) написанной на Python.

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

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

Telegram BotFather

Обратите внимание на его имя, изображение и знак в виде галочки, говорящий о том, что это действительно отец всех ботов.

Выберите его и в диалоговом окне напишите команду /start и бот в ответном сообщение пришлет список всех доступных команд:

telegram botfather start

Нас интересует создание нового бота, поэтому выбираем команду /newbot. Команду можно как напечатать самостоятельно, так и выбрать мышью в сообщении и она автоматически отправится:

telegram newbot

Первым шагом нам предлагают дать имя новому боту, оно может быть произвольным. Мы назовем его PocketAdmin:

telegram name bot

Теперь требуется указать идентификатор бота (username), он должен заканчиваться на _bot и быть уникальным в системе. Мы укажем PocketAdminTech_bot:

telegram token bot

На этом создание бота завершено. В последнем сообщении нам пришла ссылка на нашего нового бота t.me/PocketAdminTech_bot и токен (закрашен), необходимый для взаимодействия с API.

Обязательно сохраните токен и храните его в тайне!

Установка Python и библиотеки pyTelegramBotAPI

Скачать Python можно с официального сайта (как установить пакет на Centos 8 можно ознакомиться в данной заметке) и мы не будем заострять внимание на данном вопросе.

Чтобы установить пакет pyTelegramBotAPI воспользуемся pip:

На этом подготовительная работа завершена, приступаем непосредственно к написанию нашего бота.

Пишем Telegram Bot на Python

Так как наш бот создается в ознакомительных целях и не будет содержать много кода, то писать я его буду сразу на сервере с установленной Centos 8 используя обычный редактор nano. Создадим файл bot.py, открыв его nano:

Для начала импортируем библиотеку pyTelegramBotAPI:

Затем зададим переменную token равную нашему токену, который мы получили от BotFather для взаимодействия с Telegram Bot Api:

Далее задается декоратор. Пока наш бот будет обрабатывать только команду start:

и в ответ писать нам “Привет!”:

Чтобы бот постоянно ожидал запрос от пользователя в конце пропишем:

В итоге мы получим код:

Затем откроем нашего бота (можно найти по имени) и напишем ему команду /start:

telegram bot api start

Поздравлю с первыми словами нашего бота PocketAdmin!

Использование прокси в telebot

При запуске скрипта может появиться ошибка следующего вида:

Чтобы исправить её, можно попробовать подключиться через прокси:

где login:password@ip:port – соответствующие данные для подключения к прокси.

Если при использовании прокси возникают ошибки, подобные: Not supported proxy scheme socks5 или Missing dependencies for SOCKS support, то необходимо установить модули:

Ответы бота на сообщения пользователя

Аналогично хэндлерам для команд, в telegram bot api есть возможность обрабатывать сообщения от пользователя. Для этого используется тип text. Например, мы можем запрограммировать бота отвечать на определенные фразы или слова пользователя:

Думаю тут все понятно. На слово “Привет” бот будет отвечать “Ещё раз привет!”, а на “Пока” – “Пока!”. Весь код нашего telegram bot на python теперь будет выглядеть следующим образом:

Перезапустим скрипт и пообщаемся с ботом:

telegram bot диалог

Таким образом мы можем описывать различные диалоги с ботом.

Клавиатура в Telegram Bot на Python

Апи телеграма позволяет использовать свою клавиатуру, а точнее быстрые кнопки, позволяющие пользователю отправлять текст по их нажатию.

Добавим в обработчик команды /start клавиатуру с кнопками “Привет “и “Пока”:

И запустим измененный скрипт. Как только мы отправим боту команду /start у нас внизу появится наша клавиатура:

telegram bot api keyboard

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

InLine клавиатура

На мой взгляд, наиболее интересной является InLine клавиатура. Она позволяет вместе с сообщением отправлять пользователю интерактивные кнопки, например с вариантами ответов, а после их нажатия обрабатывать результат.

Давайте добавим простой вопрос от бота на команду /test:

Переменная markup объявляет новую переменную с inline keyboard, а markup.add – создает отдельную кнопку. Основные параметры при создании кнопки – text и callback_data: первый отвечает за текст на кнопке, второй – данные, которые будут переданы боту при выборе пользователем определенного варианта ответа.

Запустим скрипт и напишем /test:

telegram bot api inline keyboard

Отлично, бот прислал нам варианты ответов. Но при нажатии на кнопку ничего не произойдет, т.к. мы не описали обработку результатов. Исправим это:

bot.answer_callback_quer – это всплывающее окно, которое будет показано пользователю после нажатия кнопки. А в call.data будет передано значение, которое мы указывали при создании клавиатуры в параметре callback_data. Ответим боту, выбрав один из ответов:

telegram bot api inline keyboard answer

Отлично, все работает. Но будет лучше, если после ответа, клавиатура будет исчезать из чата. Это можно сделать добавив в конец функции query_handler следующую строку:

Это функция редактирования клавиатуры, вызванная без указания объекта клавиатуры. Теперь после ответа пользователя клавиатура будет убрана ботом:

telegram bot api remove inline keyboard

Конечный листинг телеграм бот на питоне

Мы рассмотрели лишь малую часть возможностей telegram bot api, однако, это очень полезные инструменты по работе с ним. В конце приведем полный листинг получившегося у нас telegram bot на python:

Введение, простой echo-бот

Приветствую тебя, читатель! Telegram Bot API – это мощный инструмент для вообще чего угодно. Автоматизация действий, работа с пользователями, онлайн-магазины, игры и много чего ещё. В этом учебнике мы научимся писать ботов для Telegram на языке Python.

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

Язык программирования будет Python 3, но это не означает, что любители PHP, Ruby и т.д. в пролёте; все основные принципы совпадают. Я не буду особо останавливаться на описании самого языка, желающие могут ознакомиться с документацией по Python здесь.

Zoloto585CPA

Подготовка к запуску

Взаимодействие ботов с людьми основано на HTTP-запросах. Чтобы не мучаться с обработкой «сырых» данных, воспользуемся библиотекой pyTelegramBotAPI, которая берет на себя все нюансы отправки и получения запросов, позволяя сконцентрироваться непосредственно на логике. Установка библиотеки предельно простая:

Теперь можно выйти из режима Python-консоли (Ctrl+Z или Ctrl+D, или exit() )

Пишем простого echo-бота

Ну, довольно слов, перейдем к делу. В качестве практики к первому уроку, напишем бота, повторяющего присланное текстовое сообщение. Создадим каталог, а внутри него 2 файла: bot.py и config.py . Я рекомендую выносить различные константы и настройки в файл config.py , дабы не загромождать другие. В файл config.py впишем:

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

У читателя возникнет вопрос: зачем там символ “@”? Что это вообще за message_handler ? Дело в том, что после приёма сообщения от Telegram его надо обработать по-разному в зависимости от того, что это за сообщение: текст “привет” или текст “пока”, может быть, вообще стикер или музыка. Первое, что придёт в голову – написать множество конструкций if-then-else , но такой подход некрасивый и позволяет быстро запутаться.
Для решения этой проблемы автор библиотеки pyTelegramBotAPI реализовал механизм хэндлеров, которые используют питоновские декораторы (пока просто запомним это слово). В хэндлере описывается, в каком случае необходимо выполнять ту или иную функцию. Например, хэндлер @bot.message_handler(content_types=["text"]) выполнит нижестоящую функцию, если от Telegram придёт текстовое сообщение, а хэндлер @bot.message_handler(commands=["start"]) сработает при получении команды /start.

Теперь запустим бесконечный цикл получения новых записей со стороны Telegram:

Функция infinity_polling запускает т.н. Long Polling, бот должен стараться не прекращать работу при возникновении каких-либо ошибок. При этом, само собой, за ботом нужно следить, ибо сервера Telegram периодически перестают отвечать на запросы или делают это с большой задержкой приводя к ошибкам 5xx)

Делаем простого бота в Telegram

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

У вас должен быть установлен Python 3. Если нет, то вы можете прочитать здесь как это сделать на Windows.

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

1. Регистрация бота
Бота нужно сначала создать и зарегисрировать в Телеграме. Для этого существует отец все ботов(BotFather), который создает их.

Откройте Телеграм и найдите через Поиск бота BotFather.

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

Для создания нового бота, вам нужно нажать на команду /newbot или вы можете сразу написать ему так. Вас попросят дать название своему боту.

В самом начале есть ссылка на вашего бота, начинающаяся на t.me/. Нажав на нее вы перейдете к вашему боту. Также эту ссылку можно отправлять всем.

А красным цветом внизу написан токен вашего бота. Этот токен как пароль от вашего бота. Его не нужно никому сообщать. Мы будем использовать его при написании программы для бота.

У вас официально есть бот! Конечно, он пока ничего не умеет. Только родился.

2. Первое слово бота Чтобы продолжить дальше, вам нужно научиться работать в Командной строке. Вы можете прочитать статью Работа в терминале в Windows, Linux и MacOS (cli, shell, bash, cmd) .

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

Откройте ваш любимый редактор кода (Sublime Text, PyCharm, Notepad++, Idle и т.п.). Создайте новый пустой файл. Сохраните его с названием bot.py в любую папку(желательно не слишком глубоко, а для начала можно сразу в корне диска С: ).

В этом файле будет написана наша программа для бота. Давайте для начала напишем простую программу, которая печатает текст "Hello World!". Для этого напишите в файле:

Теперь попробуем запустить его. Откройте Командную строку(Windows) или Terminal(Linux, Mac). Использую команду cd перейдите в папку, где вы сохранили файл bot.py.

Эта команда выходит из текущий папки в родительскую папку:

И нажмите Enter. Ваша программа запустится и напечатает "Hello, World!". Мы умеем запускать программы на Python.

Команда print() в языке Python печатает текст на экране. А в скобках нужно указать что именно нужно напечатать. Наш текст для печати мы указали в кавычках. В Python в кавычках записывает любые текстовые данные. И текстовые данные называются строкой или string.

Кроме текстовых данных есть еще числовые данные. И команда print() также умеет их тоже печатать:

Как вы заметили для чисел кавычки не нужны.

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

То вы увидите что программа напечатала на экран не "х", а "Hello World". Потому x — это переменная, которая хранит в себе значение "Hello World".

Также в переменной можно сохранить любые другие значения. И они могут называться как угодно, не только x или y.

Скачиваем библиотеку для создания бота

Чтобы написать бота в Python, нам нужно скачать библиотеку(или пакет) python-telegram-bot для Python. Библиотеки — это дополнительные ресурсы для Python, которые улучшают его способности. Если Python что-то не умеет, вы можете скачать ему библиотеку и он научится как это делать.

Чтобы скачать библиотеку мы будем использовать команду pip. А Pip — это штучка, которая умеет скачивать библиотеки и удалять их. Его еще называют Пакетным менеджером.

Откройте командную строку и напишите:

Значит успешно установлено. Теперь мы можем использовать его.

Пишем программу для бота

Откройте ваш код и удалите все что вы там написали. И для начала создайте переменную token и присвойте этой переменной токен вашего бота. Помните? Когда мы создавали бота, BotFather отправил нам красный токен. У вас будет примерно так:

Токен это строка, поэтому она в кавычках. Здесь мой токен, а вы используйте свой.

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

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

Updater — это объект, который умеет связываться с сервером телеграма и получать от него обновления, т.е. новые сообщения от пользователей. Он после запуска всегда слушает сервер Телеграма.

а про CommandHandler расскажу чуть ниже.

Давайте создадим новый объект Updater и запустим его. Создается он вот так:

Мы создали новый Updater и сохранили его в переменную с именем updater. (Переменные умеют еще и объекты разные хранить.) При создании мы указали токен нашего бота, чтобы он используя этот токен мог получать сообщения именно для нашего бота. А про use_context=True я расскажу в другой раз. Пока просто напишите так.

Теперь запускаем Updater:

Первая строчка запускает, а вторая строчка ждет пока вы нажмете Ctrl+C, а когда нажмете завершает работу бота.

Сейчас ваш код должен выглядеть примерно таким:

Хотя бот запущен, он все равно ничего не имеет. Какой бесполезный бот! Нажмите Ctrl+C чтобы завершить его работу. Обычно завершение занимает 3-5 секунд.

Добавляем обработчик команды
У ботов есть команды. Они начинаются со знака / (слэш). Например: /newbot, /start. У каждого бота они свои. Но у всех есть команда /start, которая запускается когда кто-то начинает чат с ботом.

Мы сейчас сделаем так, чтобы наш бот представлялся, когда кто-то пишет ему команду /start. Для этого нам нужно создать обработчик для команды start. Такой обработчик создается с помощью класса CommandHandler.

У нас в программе есть объект Updater. У него есть помощник, который называется dispatcher(диспетчер или распределитель). Этот dispatcher распределяет сообщения, которые приходят от пользователей по разным обработчикам. Поэтому он должен знать о всех обработчиках.

Мы скажем этому диспетчеру, что у нас есть новый обработчик для команды start:

Zoloto585CPA

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *