Telegram bot ответ на сообщение python

Обновлено: 02.07.2024

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

Да. То, что обычно на курсах продают за 50 тысяч рублей, мы вам сейчас расскажем за 15 минут бесплатно.

Как всё будет работать

В этом проекте три звена: наш компьютер с Python, сервер Телеграма и Телеграм-клиент.

На компьютере работает интерпретатор Python, а внутри интерпретатора крутится наша программа на Python. Она отвечает за весь контент: в неё заложены все шаблоны текста, вся логика, всё поведение.

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

Когда клиент с Телеграмом запрашивает у бота гороскоп, запрос приходит на сервер, а сервер отправляет его на наш компьютер. Запрос обрабатывается программой на Python, ответ идёт на сервер Телеграма, сервер отдаёт ответ клиенту. Изи:

Телеграм-бот на Python

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

Что будем делать

Если записать пошагово наш план, то он будет выглядеть так:

Теперь по очереди разберём каждый пункт.

В Телеграме находим канал @BotFather — он отвечает за регистрацию новых ботов:


Первый в списке со специальным значком подтверждения — это он.

Нажимаем Start и пишем команду /newbot. Нас по очереди спросят про название бота и его никнейм (мы придумали только с третьей попытки, потому что остальные были заняты):


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

2. Установка библиотеки

Есть два основных способа работать с телеграмом в Python: через библиотеку telebot и с помощью Webhook. Мы будем использовать библиотеку — так проще и быстрее.

Чтобы её установить, запускаем командную строку от имени администратора (если у вас Windows) и пишем команду pip install pytelegrambotapi

Чтобы программа на Python умела управлять Телеграм-ботами, нужно в самое начало кода добавить строки:

И последнее, что нам осталось сделать до запуска, — добавить после метода такую строчку:

Добавляем кнопки

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


Кнопки есть, но пока не работают. Сейчас исправим.

Добавляем обработчик кнопок

Скорее всего, вы заметили, что в каждой кнопке у нас написано callback_data='zodiac' . Это значит, что при нажатии на любую кнопку у нас будет вызываться один и тот же метод, который отвечает за гороскоп. Если вы хотите сделать честный гороскоп, придётся в каждой кнопке прописать своё название обработчика, а потом задать его поведение, тоже для каждой кнопки.

Давайте сделаем обработчик кнопок, который будет реагировать на 'zodiac' и выдавать случайный текст, как в исходной программе. Для этого добавим новый метод в программу:


Нажимаем на кнопку — получаем текст гороскопа.

Убираем лишнее

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

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

Что дальше

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

Напишите в комментариях, что бы вы хотели от такого бота? Что должен уметь идеальный бот с гороскопом?

Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!

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

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

Telegram BotFather

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

telegram botfather start

telegram newbot

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

telegram name bot

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

telegram token bot

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

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

Чтобы установить пакет 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 на python теперь будет выглядеть следующим образом:

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

telegram bot диалог

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

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

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

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

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

telegram bot api keyboard

InLine клавиатура

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

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

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

telegram bot api inline keyboard

telegram bot api inline keyboard answer

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

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

telegram bot api remove inline keyboard

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

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


В этой статье мы реали­зуем прос­той, но край­не полез­ный про­ект на Python — бота для Telegram. Боты — это неболь­шие скрип­ты, которые могут вза­имо­дей­ство­вать с API, что­бы получать сооб­щения от поль­зовате­ля и отправ­лять информа­цию в раз­ные чаты и каналы.

Python для новичков

  • / newbot — соз­дать нового бота;
  • / mybots — редак­тировать ваших ботов;
  • / setname — сме­нить имя бота;
  • / setdescription — изме­нить опи­сание бота;
  • / setabouttext — изме­нить информа­цию о боте;
  • / setuserpic — изме­нить фото ава­тар­ки бота;
  • / setcommands — изме­нить спи­сок команд бота;
  • / deletebot — уда­лить бота.

От­пра­вим бате‑боту коман­ду / newbot , что­бы соз­дать нового бота. В ответ он поп­росит ввес­ти имя будуще­го бота, его мож­но писать на рус­ском. Пос­ле вво­да име­ни нуж­но будет отпра­вить адрес бота, при­чем он дол­жен закан­чивать­ся на сло­во bot. Нап­ример, xakepbot или xakep_bot . Если адрес будет уже кем‑то занят, BotFather нач­нет изви­нять­ся и про­сить при­думать что‑нибудь дру­гое.

Для вза­имо­дей­ствия с Telegram API есть нес­коль­ко готовых модулей. Самый прос­той из них — Telebot. Что­бы уста­новить его, набери

В Linux, воз­можно, понадо­бит­ся написать pip3 вмес­то pip , что­бы ука­зать, что мы хотим работать с треть­ей вер­сией Python.

Эхо-бот

Для начала реали­зуем так называ­емо­го эхо‑бота. Он будет получать от поль­зовате­ля тек­сто­вое сооб­щение и воз­вра­щать его.

Пакет python-telegram-bot предоставляет чистый интерфейс Python для Telegram Bot API. Он совместим с версиями Python 3.6+. Пакет python-telegram-bot также может работать с PyPy3 (официально не поддерживается), хотя раньше было много проблем.

В дополнение к чистой реализации API эта библиотека содержит ряд высокоуровневых классов, которые делают разработку ботов простой и понятной. Эти классы содержатся в модуле telegram.ext .

Реализация чистого API без расширений telegram.ext доступна как отдельный пакет python-telegram-bot-raw .

Установка пакета python-telegram-bot в виртуальное окружение:

Пакет python-telegram-bot в основном будет разбираться на примерах. Содержание, обзорного/вводного материала по библиотеке ниже. Меню с материалами по всему разделу - справа. Поехали.

Содержание:

Чистая реализация официального Telegram Bot API.

API бота предоставляется через класс telegram.Bot . Методы, определенные в telegram.Bot являются эквивалентами в виде методов snake_case , описанных в официальной документации Telegram Bot API. Для удобства, также доступны точные названия методов в виде camelCase , указанные в документации Telegram. Так, например, вызов telegram.Bot.send_message совпадает с вызовом метода telegram.Bot.sendMessage .

Все классы объектов Telegram Bot API расположены в основном модуле пакета telegram , например, класс объекта Message доступен как telegram.Message .

Чтобы сгенерировать токен доступа, необходимо пообщаться с @BotFather и выполнить несколько простых шагов, описанных в разделе Команды и оповещения @BotFather в Telegram.

Чтобы получить представление об API и о том, как его использовать с пакетом python-telegram-bot , запустите интерпретатор Python и выполните следующие несколько шагов.

Сначала создаем экземпляр telegram.Bot . Константу TOKEN следует заменить токеном API, который был получен от @BotFather :

На чистом API это выглядит следующим образом:

Получение изображения, отправленного боту:

Примечание. Метод .send_message , как и любой из методов send_* класса Bot возвращает экземпляр класса Message , поэтому его можно использовать в коде позже.

Примечание. Существуют эквиваленты этого метода для ответа с фотографиями, аудио и т. д., а так же аналогичные эквиваленты встречаются по всей библиотеке python-telegram-bot .

Модуль расширения telegram.ext .

Модуль расширений telegram.ext построен поверх чистой реализации Telegram Bot API. Он предоставляет простой в использовании интерфейс и снимает с программиста некоторую работу.

Он состоит из нескольких классов, но два наиболее важных - это telegram.ext.Updater и telegram.ext.Dispatcher .

Каждый обработчик является экземпляром подкласса класса telegram.ext.Handler . Пакет python-telegram-bot предоставляет классы обработчиков почти на все стандартные случаи, но если нужно что-то конкретное, то можно создать собственный обработчик, наследуясь от класса Handler .

Создание Telegram bot, шаг за шагом.

Примечание. Аргумент use_context=True (по умолчанию False ) - это специальный аргумент, необходимый только для python-telegram-bot меньше 12 версии. Это обеспечивает лучшую обратную совместимость со старыми версиями и дает пользователям время для обновления. Начиная с 13-ой версии, значение аргумента use_context=True используется по умолчанию (указывать не нужно).

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

Примечание. если хотите узнать больше об обработке исключений с python-telegram-bot , прочтите подраздел об "Обработка исключений".

И это все, что нужно! Для запуска бота дописываем команду:

Начните чат со своим ботом и введите команду /start - если все пойдет хорошо, он ответит.

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

Добавим боту другую функциональность и реализуем команду /caps , которая будет принимать какой-то текст в качестве аргумента и отвечать на него тем же текстом, только в верхнем регистре. Аргументы команды (например /caps any args ) будут поступать в функцию обратного вызова в виде списка ['any', 'args'] , разделенного по пробелам:

Примечание. Обратите внимание на использование context.args . Объект CallbackContext будет иметь много разных атрибутов в зависимости от того, какой обработчик используется.

Режим встроенных запросов.

Если необходимо реализовать такую функциональность для своего бота, то сначала необходимо изменить конфигурацию в @BotFather , включив этот режим при помощи команды /setinline . Иногда требуется какое-то время, пока бот не зарегистрируется в качестве встроенного бота на вашем клиенте. Можно ускорить процесс, перезапустив приложение Telegram или иногда просто нужно немного подождать.

Здесь используется ряд новых типов:

Теперь бот может работать и через режим встроенных запросов.

Остановить бота можно командой updater.stop() .

Примечание. Объект Updater запускается в отдельном потоке, это хорошо, если вы запускаете команды в интерпретаторе Python. Но если запустить скрипт с написанным ботом, то вероятно, удобнее будет останавливать бота, нажатием Ctrl + C , отправив сигнал процессу бота. Для этого, после запуска бота командой updater.start_polling() допишите в коде следующей строкой команду updater.idle() .

Весь код созданного бота:

Содержание раздела:

Проект создан частными лицами и не имеет внешнего финансирования. Если есть возможность поддержать нас: будем очень признательны. Денежные средства пойдут на оплату сервера и дальнейшее развитие. Перечислите любую сумму, которая будет комфортна:

Читайте также: