Telegram bot ответ на сообщение python
Обновлено: 02.07.2024
В первой части мы сделали гороскоп на Python, который выдаёт нам прогноз на день по знаку зодиака. Сегодня пойдём дальше: теперь этот же генератор гороскопов будет встроен в Телеграм в виде бота.
Да. То, что обычно на курсах продают за 50 тысяч рублей, мы вам сейчас расскажем за 15 минут бесплатно.
Как всё будет работать
В этом проекте три звена: наш компьютер с Python, сервер Телеграма и Телеграм-клиент.
На компьютере работает интерпретатор Python, а внутри интерпретатора крутится наша программа на Python. Она отвечает за весь контент: в неё заложены все шаблоны текста, вся логика, всё поведение.
Внутри программы на Python работает библиотека, которая отвечает за общение с сервером Телеграма. В библиотеку мы вшили секретный ключ, чтобы сервер Телеграма понимал, что наша программа связана с определённым ботом.
Когда клиент с Телеграмом запрашивает у бота гороскоп, запрос приходит на сервер, а сервер отправляет его на наш компьютер. Запрос обрабатывается программой на Python, ответ идёт на сервер Телеграма, сервер отдаёт ответ клиенту. Изи:
Обратите внимание, что работать наш бот будет только тогда, когда включён компьютер и на нём запущена программа на Python. Если компьютер выключится, пропадёт интернет или вы отключите интерпретатор, то бот работать перестанет: запросы будут приходить, но никто на них не ответит. В одной из следующих частей мы сделаем так, чтобы это всё работало на удалённом сервере и было всегда доступно.
Что будем делать
Если записать пошагово наш план, то он будет выглядеть так:
Теперь по очереди разберём каждый пункт.
В Телеграме находим канал @BotFather — он отвечает за регистрацию новых ботов:
Первый в списке со специальным значком подтверждения — это он.
Нажимаем Start и пишем команду /newbot. Нас по очереди спросят про название бота и его никнейм (мы придумали только с третьей попытки, потому что остальные были заняты):
С третьей попытки нам дали нового бота и токен для управления. Токен нужен для управления ботом, поэтому на экране его нет.
2. Установка библиотеки
Есть два основных способа работать с телеграмом в Python: через библиотеку telebot и с помощью Webhook. Мы будем использовать библиотеку — так проще и быстрее.
Чтобы её установить, запускаем командную строку от имени администратора (если у вас Windows) и пишем команду pip install pytelegrambotapi
Чтобы программа на Python умела управлять Телеграм-ботами, нужно в самое начало кода добавить строки:
И последнее, что нам осталось сделать до запуска, — добавить после метода такую строчку:
Добавляем кнопки
Чтобы пользователям нашего бота было удобно, покажем им сразу все знаки зодиака в виде кнопок. А потом сделаем так, что когда на них нажимаешь — появляется гороскоп для этого знака на сегодня.
Кнопки есть, но пока не работают. Сейчас исправим.
Добавляем обработчик кнопок
Скорее всего, вы заметили, что в каждой кнопке у нас написано callback_data='zodiac' . Это значит, что при нажатии на любую кнопку у нас будет вызываться один и тот же метод, который отвечает за гороскоп. Если вы хотите сделать честный гороскоп, придётся в каждой кнопке прописать своё название обработчика, а потом задать его поведение, тоже для каждой кнопки.
Давайте сделаем обработчик кнопок, который будет реагировать на 'zodiac' и выдавать случайный текст, как в исходной программе. Для этого добавим новый метод в программу:
Нажимаем на кнопку — получаем текст гороскопа.
Убираем лишнее
Теперь у нас есть готовый бот, и нам осталось только убрать лишний код, который раньше отвечал за вывод знаков зодиака в консоли. После чистки получаем готовую программу:
Как видно, большую часть кода занимает тупое перечисление всех знаков зодиака. Мы могли бы автоматизировать это через циклы, но на улице такая хорошая погода, что мы это отложим.
Что дальше
- можно сделать индивидуальный гороскоп для каждого знака;
- научить бота новым командам;
- присылать свежий гороскоп каждое утро;
- наладить непрерывную работу на веб-сервере.
Напишите в комментариях, что бы вы хотели от такого бота? Что должен уметь идеальный бот с гороскопом?
Создание бота
Для регистрации нового бота необходимо обратиться к боту BotFather. Для этого в строке поиска наберите BotFather и в показанных результатах найдите интересующего нас бота:
Обратите внимание на его имя, изображение и знак в виде галочки, говорящий о том, что это действительно отец всех ботов.
Первым шагом нам предлагают дать имя новому боту, оно может быть произвольным. Мы назовем его PocketAdmin:
Теперь требуется указать идентификатор бота (username), он должен заканчиваться на _bot и быть уникальным в системе. Мы укажем PocketAdminTech_bot:
Обязательно сохраните токен и храните его в тайне!
Установка Python и библиотеки pyTelegramBotAPI
Чтобы установить пакет pyTelegramBotAPI воспользуемся pip:
На этом подготовительная работа завершена, приступаем непосредственно к написанию нашего бота.
Пишем Telegram Bot на Python
Так как наш бот создается в ознакомительных целях и не будет содержать много кода, то писать я его буду сразу на сервере с установленной Centos 8 используя обычный редактор nano. Создадим файл bot.py, открыв его nano:
Для начала импортируем библиотеку pyTelegramBotAPI:
Затем зададим переменную token равную нашему токену, который мы получили от BotFather для взаимодействия с Telegram Bot Api:
Далее задается декоратор. Пока наш бот будет обрабатывать только команду start:
и в ответ писать нам “Привет!”:
Чтобы бот постоянно ожидал запрос от пользователя в конце пропишем:
В итоге мы получим код:
Затем откроем нашего бота (можно найти по имени) и напишем ему команду /start:
Поздравлю с первыми словами нашего бота PocketAdmin!
Использование прокси в telebot
При запуске скрипта может появиться ошибка следующего вида:
где login:password@ip:port – соответствующие данные для подключения к прокси.
Если при использовании прокси возникают ошибки, подобные: Not supported proxy scheme socks5 или Missing dependencies for SOCKS support, то необходимо установить модули:
Думаю тут все понятно. На слово “Привет” бот будет отвечать “Ещё раз привет!”, а на “Пока” – “Пока!”. Весь код нашего telegram bot на python теперь будет выглядеть следующим образом:
Перезапустим скрипт и пообщаемся с ботом:
Таким образом мы можем описывать различные диалоги с ботом.
Клавиатура в Telegram Bot на Python
Апи телеграма позволяет использовать свою клавиатуру, а точнее быстрые кнопки, позволяющие пользователю отправлять текст по их нажатию.
Добавим в обработчик команды /start клавиатуру с кнопками “Привет “и “Пока”:
И запустим измененный скрипт. Как только мы отправим боту команду /start у нас внизу появится наша клавиатура:
InLine клавиатура
Давайте добавим простой вопрос от бота на команду /test:
Переменная markup объявляет новую переменную с inline keyboard, а markup.add – создает отдельную кнопку. Основные параметры при создании кнопки – text и callback_data: первый отвечает за текст на кнопке, второй – данные, которые будут переданы боту при выборе пользователем определенного варианта ответа.
Запустим скрипт и напишем /test:
Отлично, все работает. Но будет лучше, если после ответа, клавиатура будет исчезать из чата. Это можно сделать добавив в конец функции query_handler следующую строку:
Это функция редактирования клавиатуры, вызванная без указания объекта клавиатуры. Теперь после ответа пользователя клавиатура будет убрана ботом:
Конечный листинг телеграм бот на питоне
Мы рассмотрели лишь малую часть возможностей 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() .
Весь код созданного бота:
Содержание раздела:
Проект создан частными лицами и не имеет внешнего финансирования. Если есть возможность поддержать нас: будем очень признательны. Денежные средства пойдут на оплату сервера и дальнейшее развитие. Перечислите любую сумму, которая будет комфортна:
Читайте также: