Напишем простой диалоговый Telegram-бот на Python, который в дальнейшем можно дополнить различными функциями, и запустим его на сервере Heroku.
- Настройка
- Создание Telegram-бота
- Деплой на Heroku
- Заключение
Настройка
- свой токен;
- адрес Telegram API (https://api. telegram .org/bot);
- ссылку на документацию.
Далее начните беседу с ботом. Введите в поисковой строке его имя и нажмите /start . Отправьте любое сообщение: оно станет первым обновлением, которое получит бот.
Если вы в первый раз работаете с API, то разобраться поможет браузер. Откройте новую вкладку и перейдите по ссылке:
https://api. telegram .org/bot /getUpdates
Так вы отправите запрос на сервер Telegram , и он ответит вам в формате JSON:
< «ok»:true, «result»:[< «update_id»:523349956, «message»:< «message_id»:51, «from»:< «id»:303262877, «first_name»:»YourName» >, «chat»:< «id»:303262877, «first_name»:»YourName», «type»:»private» >, «date»:1486829360, «text»:»Hello» > >] >
Если вы откроете раздел метода /sendMessage , то увидите, что он принимает два параметра: chat_id и text . Вы можете создавать цепочки параметров в адресной строке браузера, используя ? для первого параметра и text=test
Попробуйте получить ответ от вашего бота, подставив в качестве chat_id значение, полученное после вызова /getUpdates (в нашем примере это 303262877 ). Текст сообщения может быть любым. Запрос должен выглядеть так:
Пишем telegram бота на Python. Часть 1. Github.
https://api.telegram.org/bot/sendMessage?chat_id=303262877 ? Вы можете сделать то же самое, добавив словарь в качестве второго дополнительного параметра в функциях get / post из пакета requests.
Главный минус текущего скрипта — необходимость запускать его всякий раз, когда нужно, чтобы бот отправил сообщение. Исправим это.
Чтобы бот слушал сервер и получал обновления, нужно запустить основной цикл. После import requests добавьте from time import sleep и замените две последние строки на следующий код:
def main(): update_id = last_update(get_updates_json(url))[‘update_id’] while True: if update_id == last_update(get_updates_json(url))[‘update_id’]: send_mess(get_chat_id(last_update(get_updates_json(url))), ‘test’) update_id += 1 sleep(1) if __name__ == ‘__main__’: main()
Хотя мы и добавили таймаут в 1 секунду, пример выше можно использовать только в обучающих целях, поскольку он использует частые опросы (short polling), что плохо влияет на сервер Telegram .
Есть ещё два способа получения обновлений через API — длинные опросы (long polling) и вебхуки (webhooks). Если мы будем использовать способ получения обновлений через getUpdates без параметров, то запросы будут происходить слишком часто.
Переключимся на длинные опросы. Сперва изменим первую функцию, добавив в неё параметр timeout . Сам по себе он не уменьшит частоту проверки обновлений и будет работать только в том случае, когда обновлений нет. Чтобы помечать уже просмотренные обновления, нужно добавить параметр сдвига offset :
def get_updates_json(request): params = response = requests.get(request + ‘getUpdates’, data=params) return response.json()
Теперь Telegram-бот на Python должен работать нормально, но его всё ещё можно улучшить. Давайте инкапсулируем все функции в один класс. Должно получиться что-то вроде этого:
import requests import datetime class BotHandler: def __init__(self, token): self.token = token self.api_url .format(token) def get_updates(self, offset=None, timeout=30): method = ‘getUpdates’ params = resp = requests.get(self.api_url + method, params) result_json = resp.json()[‘result’] return result_json def send_message(self, chat_id, text): params = method = ‘sendMessage’ resp = requests.post(self.api_url + method, params) return resp def get_last_update(self): get_result = self.get_updates() if len(get_result) > 0: last_update = get_result[-1] else: last_update = get_result[len(get_result)] return last_update
Последний штрих — объявим переменные и научим бота приличным манерам. Сделаем так, чтобы бот приветствовал вас раз в день, при этом фраза должна зависеть от времени суток. Для этого добавьте следующий код в ваш скрипт:
greet_bot = BotHandler(token) greetings = (‘здравствуй’, ‘привет’, ‘ку’, ‘здорово’) now = datetime.datetime.now() def main(): new_offset = None today = now.day hour = now.hour while True: greet_bot.get_updates(new_offset) last_update = greet_bot.get_last_update() last_update_id = last_update[‘update_id’] last_chat_text = last_update[‘message’][‘text’] last_chat_id = last_update[‘message’][‘chat’][‘id’] last_chat_name = last_update[‘message’][‘chat’][‘first_name’] if last_chat_text.lower() in greetings and today == now.day and 6 ‘.format(last_chat_name)) today += 1 elif last_chat_text.lower() in greetings and today == now.day and 12 ‘.format(last_chat_name)) today += 1 elif last_chat_text.lower() in greetings and today == now.day and 17 ‘.format(last_chat_name)) today += 1 new_offset = last_update_id + 1 if __name__ == ‘__main__’: try: main() except KeyboardInterrupt: exit()
Теперь вы можете улучшать бота так, как захотите. Можно, например, настроить отправку медиафайлов или добавить собственные кнопки.
Деплой на Heroku
Последним шагом будет развёртывание бота на сервере. Зарегистрируйтесь на GitHub, если у вас ещё нет там аккаунта, и установите Git. Для этого на Linux выполните следующую команду:
$ sudo apt-get install git-all
На macOS и Windows его нужно скачать и установить вручную. И не забудьте зарегистрироваться на Heroku. Установите virtualenv:
$ pip install virtualenv
Создайте новую папку и перейдите в неё в терминале или командной строке. Инициализируйте в ней virtualenv :
$ virtualenv my_env
Имя не имеет значения, но лучше сделать его интуитивно понятным. Перейдите в папку my_env . Теперь нужно склонировать git-репозиторий. Введите команду:
$ git clone https://github.com/имя_вашего_профиля/имя_вашего_репозитория
Поместите скрипт в папку, полученную в результате выполнения команды git clone . Вернитесь в папку my_env и запустите virtualenv :
$ scriptsactivate.bat
$ source bin/activate
Если вы успешно запустили virtualenv , приглашение командной строки должно начинаться с (my_env). Перейдите в папку репозитория и ещё раз установите модуль requests:
$ pip install requests
Теперь нужно создать список зависимостей Heroku. Это несложно. Введите:
$ pip freeze > requirements.txt
Создайте Procfile . В этом файле следует разместить инструкции по работе со скриптом. Имя файла обязательно должно быть Procfile ( Procfile.windows в случае с Windows). У него не должно быть других расширений. Содержимое файла должно быть таким (замените my_bot на имя вашего скрипта):
web: python my_bot.py
Добавьте файл __init__.py в вашу папку. Он может быть пустым, но должен там быть. Отправьте коммит с изменениями в репозиторий:
$ git init $ git add . $ git commit -m ‘короткое сообщение, описывающее изменения в коммите’ $ git push -u https://github.com/имя_вашего_профиля/имя_вашего_репозитория
Теперь развернём Telegram-бота на Heroku. Можно использовать и панель управления на сайте, но мы потренируемся делать всё через консоль.
Если вы пользуетесь macOS или Windows, установите интерфейс командной строки, следуя гайду. Если у вас Ubuntu, используйте следующие команды:
$ sudo add-apt-repository «deb https://cliassets.heroku.com/branches/stable/apt ./» $ curl -L https://cli-assets.heroku.com/apt/release.key | $ sudo apt-key add — $ sudo apt-get update $ sudo apt-get install heroku
Теперь выполните следующие команды:
$ heroku login $ heroku create $ git push heroku master $ heroku ps:scale web=1 $ heroku open
С этого момента приложение должно работать на сервере Heroku. Если что-то пойдёт не так, проверить логи можно следующим образом:
$ heroku logs —tail
Заключение
Поздравляем! Теперь вы знаете, как писать ботов для Telegram на Python. Лучше изучить возможности Telegram-ботов поможет видеокурс — в нём используется PHP, но суть та же.
Источник: news.myseldon.com
Создание бота в Телеграм Питон 3: пример программирования, как сделать кнопки для чата и написать код
FAQ
Автор fast12v0_steleg На чтение 7 мин Просмотров 200 Опубликовано 14.01.2020
Каждый, кто хоть раз сталкивался с мессенджером Телеграм, был впечатлен его функционалом. Здесь позволено не только общаться с друзьями в личных сообщениях, читать новости и делать каналы.
Преимуществом сервиса является возможность создавать и использовать ботов. Программировать их можно на любом языке, но самым распространенным выбором сегодня стал Питон. В статье подробно рассмотрим, как сделать python telegram bot.
Немного теории об API
Application Programming Interface – интерфейс, при помощи которого разработчик способен формировать приложения. Инструкция по использованию представлена на сайте stelegram.ru.
Благодаря ему получается настроить разные части веб программы таким образом, чтобы они гармонично и корректно взаимодействовали между собой.
Изначально api использовался для передачи информации и приказов между разными переменными программами. Сегодня он дает возможность получить доступ к ресурсам на другом сервере.
Его применение имеет такие достоинства:
- Доступность партнерских программ.
- Работа с пре-форматированными ссылками, загружающимися одновременно с ID.
- Возможность предоставлять максимально точные и актуальные данные в любой момент времени.
- Получение ответных данных в JSON или XML форматах.
- Публичными. К ним легко получить доступ.
- Приватными. Может использоваться исключительно внутри одной компании. Если у нее разработано много продуктов, то интерфейс позволяет разным программам взаимодействовать между собой.
К основным задачам Application Programming Interface относят:
- помощь в написании кодов;
- преобразование сложных задач в простые.
Инструкция по созданию телеграм-бот на Python
Существует несколько вариантов получения собственного робота:
- Написать его самостоятельно. Для этого можно использовать различные языки программирования. Одним из наиболее понятных и востребованных на данный момент является Питон. Такой способ хоть и трудоемкий, но при этом позволяет получить универсальное решение.
- Воспользоваться услугами конструктора. Но здесь можно столкнуться с ограниченным функционалом, которого не всегда бывает достаточно, чтобы воплотить то, что вы хотите.
- Покупка. Однако, нужно понимать, что в основном, чтобы написать telebot, используется язык python. А он считается настолько легким, что применить его могут даже новички, потому лучше попробовать самому.
Известно два класса ботов, способных самообучаться и работать по определенным правилам:
- Первый вид менее распространен. Робот обучен определенным правилам, основываясь на которые он отвечает на поставленные вопросы. Bot занимается регулярной обработкой простых запросы, а очень сложные у него могут вызвать проблемы.
- Самообучающийся робот более эффективен. Он бывает следующих видов:
- поисковым – использует для ответа реплики, прописанные в базе библиотеки. В зависимости от контекста разговора он выбирает text из списка;
- генеративным – способен сам создавать сообщения на основе изученных слов в запросе.
Свой телеграм-бот на Питон можно сделать самостоятельно. Рассмотрим подробную инструкцию.
Регистрация бота
Дополнительно укажите name. В ответ он пришлет ссылку на документацию (documentation) и токен. Их желательно сразу сохранить, так как они будут единственным ключом к авторизации при взаимодействии с помощником.
Установка
Для начала проводится установка программы.
Есть несколько способов:
- Скачать с сайта, нажав значение install.
- Те, кто пользуется ОС Linux, имеют возможность запустить ее из менеджера пакетов.
- Владельцы macOS должны поставить приложение Homebrew.
- Воспользоваться интерпритатором программы, позволяющей работать онлайн.
- При работе на мобильном устройстве представлена среда программирования Питон.
После загрузки следует установить pip – систему управления пакетами. Важно использовать последние версии. При необходимости можно провести ее обновление.
Написание кода
За создание и функционирование робота отвечает модуль python telegram bot api. Для этого нужно послать следующее: pip install pyTelegramBotAPI.
Писать код получится где угодно. Это может быть вордовский файл или блокнот. Но гораздо эффективнее это делать в умной среде. Здесь автоматически будут подсвечиваться возможные ошибки в проекте.
Создание кода начинаем с подключения телебота. Здесь понадобится сохраненный раньше токен. Первая строка будет выглядеть следующим образом: message: TOKEN=ключ, который прислал бот.
Во второй строке создает объект, который обзываем bot. В аргументах прописывается код аутентификации.
Далее необходимо продумать, что должен уметь делать помощник. В каталоге pyTelegramBotAPI есть декораторы, используя которые робот научится отвечать на стандартные вопросы.
Протестировать его можно, выполнив команду python полный_ путь_ к_ файлу/test.py. робот должен отвечать.
Настройка и запуск бота
Для того, чтобы помощник мог работать, нужно:
- Войти в мессенджер.
- Открыть аккаунт робота.
- В новом диалоговом окне кликнуть на изображение с тремя точками вверху.
- Дальше перейти к пункту Настройки.
Чтобы запустить робота, нужно:
- В строке поиска на клавиатуре руками ввести name помощника и начать диалог с ним.
- Добавить его к каналу при помощи кнопки «Добавить нового участника».
- Осталось из списка выбрать нужный вариант и кликнуть элемент «Invite».
Обработчики команд
Для обработки используется специальная программа Handler. Она работает с медиафайлами и текстовым материалом. Но в нашем случае утилита нужна для того, чтобы передавать боту команды.
Обработчика также можно добавить самостоятельно. В таком случае на первой строке следует вбить «handler». Этот параметр срабатывает всегда, за исключением ввода «help» или «старт».
Обработчики кнопок
В основе программы telegram api python также будет исходник клавиатуры. При подготовке к работе KeyboardButton обязательным параметром является текст (text), который юзер сможет переслать после нажатия на данную клавишу.
При написании кода используются различные методы:
- Add – количество кнопок любое. При этом они выстраиваются в ряд. Если установленная изначально ширина уже достигнута, импортируем их.
- Row – число клавиш также не ограничено, но все они расположены в одной строке.
- Insert – напоминает первый способ, но иконки добавляются к последнему ряду.
Встроенный режим
Это один вид взаимодействия с ботами. С его помощью они получили еще больше возможностей. Такие роботы способны выполнять любые задачи. Например, из examples: отправка text из сайта в чат, размещение гифки или картинки.
Генератор для диалогового бота
Используя конструкцию yield from, роботы создают друг для друга курс на выполнение определенной задачи. Для этого применяется модуль itertools.
Генераторы для python telegram bot proxy являются отличным инструментом. Они дают возможность упростить код и продолжить беседу с нужного момента.
Развертывание бота на сервере
Это завершающий этап создания помощника в Тelegram. Для этого не нужно приобретать дорогую аппаратуру. Можно воспользоваться облачными прокси ресурсами с протоколом mtproto, где предлагают разместить любое приложение бесплатно.
Вначале придется зарегистрировать аккаунт на GitHub. С этой учетной записью получится развернуть бота на Heroku proxy. Если приложение не работает, рекомендуется проверить журналы.
Из-за блокировки мессенджера в России, им нельзя воспользоваться. Но можно пойти в обход запрету, установив VPN.
Выводы
Python – программа для написания скриптов в Телеграм с нуля, которые станут отличным помощником владельцу канала. Они умеют автопостить, форматировать материал, ведут статистику, создают кнопки на русском или другом языке и прочее.
Детальную инструкцию увидите на видео:
Источник: stelegram.ru
Деплоймент бота на Heroku
Рано или поздно в разработке ботов вы столкнетесь с проблемой хостинга бота. Скорее всего, у вас нет своего собственного сервера, а платить за виртуальный не каждый хочет, да и настройка виртуального сервера может казаться чем-то непосильным для начинающих разработчиков. К счастью, есть много сервисов, предоставляющих хостинг приложений бесплатно. Одним из таких есть Heroku. Сегодня я расскажу, как легко и быстро развернуть простенького бота на данной платформе.
Почему именно Heroku? Она была одной из первых платформ, предоставляющих услуги типа PaaS (Platform as a Service) и есть лидером в этой сфере. Используя такие облачные сервисы, разработчик должен предоставить только приложение. Обо всем остальном – серверное железо, операционная система, интерпретатор языка и база данных, позаботится сервис.
По умолчанию, Heroku предлагает до 5 приложений на аккаунт и дает 550 бесплатных дино-часов в месяц. Если же подключить к аккаунту банковскую карту, их к-во расширится до 1000. Подробнее о фри дино-часах можно почитать здесь.
Регистрация и установка клиента Heroku
Прежде всего, для использования Heroku, нужно авторизироваться. Если у вас нет аккаунта, создайте его, перейдя по этой ссылке. Затем нужно установить Heroku Toolbelt. Эта утилита на данный момент поддерживает основные ОС: Windows, macOS и Linux.
Скачать и установить Heroku CLI на Windows или macOS можно прямо отсюда. На Ubuntu/Debian платформах вам понадобится ввести данную комманду:
$ curl https : / / cli — assets . heroku . com / install — ubuntu . sh | sh
После установки, чтобы убедиться, что все установилось, откройте консоль и введите heroku :
Если все работает, логинимся, используя данные, введенные при регистрации:
$ heroku login
Создание приложения
Сегодня мы будем деплоить бота, написанного во второй части. Для начала создадим наше приложение под названием momentumbots :
Вывод команды показывает, что приложение было успешно создано и доступно на https://momentumbots.herokuapp.com .
Имя momentumbots уже занято мной, так что придумайте свое
Если же не указывать название приложения, то будет сгенерировано рандомное название:
Ставим Вебхуки
В прошлых частях мы писали ботов, использующих Long Polling. Суть его в том, что на сервера Телеграмма периодически приходят запросы на получение обновлений. Это ненадежно, т.к. сервера Telegram могут возвращать ошибку 504, вырубая бота. Используя же вебхуки, мы устанаваливаем URL, на который будут приходить обновления автоматически, таким образом избавляясь от этой проблемы. Вебхуки в тг работают только по HTTPS. Благо, Heroku предоставляет доступ к приложению через HTTPS и SSL-сертификат, освободжая нас от заботы о создании сертификатов.
В качестве веб-сервера будем использовать Flask, однако вам не составит труда разобраться с другими фреймворками. На Github-странице pyTelegramBotAPI, помимо Flask’а, есть примеры для aiohttp, CherryPy, CPython и Tornado.
Добавим в config.py переменную, которая хранит название нашего приложения:
Источник: momentum-bots.top