Python Телеграм бот создание меню с подсказками айограм

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

Вопрос остается в другом: как сделать бота так, чтобы не растратить миллионы на отладку и работу? Несмотря на то, что существует огромное количество автоматических конструктов, все равно нужно потратить немало времени на разбор алгоритма и итогового кода. К тому же они не могут гарантировать корректную работу абсолютно всех функций. Например, когда кто-то захочет связать курс доллара с днями проигрышей «Спартака», ему придется самостоятельно настраивать логику в собственной программе.

Программирование — вот, за чем стоит создание качественного бота. И мы попросту не могли обойти эту тему стороной, потому что с помощью Python создать автоматизированную систему в Телеграме проще простого. Копируем код, исследуем каждую строчку и удивляемся результатам!

Как сделать меню для Телеграм бота на aiogram Python

Действие 1. Немного теории-базы для понимания принципа работы API Telegram

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

Разработчики Telegram создали функционал для удобного использования API HTML. Он, в свою очередь, зависит от URL, общий вид функции:

При этом #названиеметода# — может быть как getChat (открыть чат), sendMessage (отправить сообщение), так и getUpdates (обновление). Для подтверждения подлинности бота в системе внутри каждой программной строки указывается токен — специальные символы, создающиеся при формировании бота.

Общий вид токена представлен далее:

При этом стоит понимать, что большая часть методов требует предоставления дополнительных параметров. В случае с sendMessage — непосредственный текст и chat_id. Именно поэтому внутри ботов реализуются как POST, так и GET запросы, которые передаются как URL-строки (например, application/#x-www-form-urlencoded#) и могут быть представлены только в кодировке UTF-8.

После того, как API-функция получает запрос, бот отправляет ответ формата JSOM. Предположим, что ранее был выполнен запрос данных при помощи метода getME, в таком случае пользователь получит ответ следующего вида:

В том случае, если значение поля «ok» равно true, результат обработки появится в поле, именованном «field». В ином случае текст ошибки можно будет найти в «description».

Второй вопрос, который необходимо изучить — каким образом бот будет получать сообщения от пользователей, и как реализуется дальнейшая обработка?

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

Первый — ручная обработка методов при помощи getUpdates. То есть, бот будет получать объекты-массив формата Update. При этом сама функция работает как длинный опрос, то есть, изначально пользователи отправляют запросы, система обрабатывает их, выдает результат, и идет откат к первому действию, пока не закончится работа бота. Если не хочется производить повторную работу и тратить вычислительные мощности, лучше задуматься над параметром offset.

Метод getUpdates настоятельно рекомендуется использовать, если:

  1. Нет желания формировать произвольную настройку HTTPS.
  2. Производится работа со скриптовыми языками, трудно встраиваемыми в деятельность веб-серверов.
  3. Бот находится время от времени в высокой нагрузке.
  4. Периодически производится смена сервера для бота.

Второй — использование метода setWebhooks. Таким образом Телеграм будет автоматически перенаправлять все запросы на конкретно указанный URL сразу же, как они будут появляться. При этом необходимо заранее позаботиться о подготовке HTTPS-сертификата, либо создать новые, но обязательно их заверить.

Метод Webhooks является одним из оптимальных в том случае, если:

  1. Используется веб-язык для дополнения программирования (PHP, HTML).
  2. Бот не страдает от высокой нагрузки и нет необходимости самостоятельной обработки запросов.
  3. У бота есть стабильное место внутри веб-сервера.

Третий, не менее важный вопрос: каким образом производится регистрация бота внутри социальной сети Телеграм?

Еще по теме:  Вконтакте удалить в Телеграмме ранее отправленные сообщения

Касательно Python, одна из наиболее часто используемых библиотек — PyTelegramBotAPI. Она написана в соответствии с базовыми принципами ООП и является лишь оболочкой для HTML-запросов. При этом все типы данных представляют собой отдельные классы.

Действие 2. Подготовка плацдарма для взлета бота

Основа бота на Python — новейшая библиотека PyTelegramBotAPI (в простонародье «Телебот»). Прежде чем начинать работу непосредственно с программированием, необходимо убедиться, что на компьютере установлена актуальная версия программного обеспечения. Функция для Linux:

После этого при помощи командной строки (Windows) или терминала (Linux) необходимо произвести установку библиотеки:

На этом все приготовления закончены — настоятельно рекомендуется использовать версию Python 3-го поколения (3.7+). Это избавит от проблем с совместимостью, наиболее актуальные версии расположены на официальном сайте.

Действие 3. Настройка речевого аппарата бота

Вне зависимости от того, в какой именно среде будет писаться код (блокнот, Jupyter Notebook), программирование будет одинаковым — использование long pool, много упорства и немало фантазии под соусом из функционала библиотеки Телебота.

При этом стоит понимать, что поле «content_types» может принимать различные значения в зависимости от ситуаций — это может быть набор-массив, числа, знаки и тому подобное. Например:

Благодаря указанной функции бот будет реагировать на все присланные текстовые, видео- и аудиосообщения. Более подробно о рассматриваемых типах мессенджей можно прочитать в официальной документации Телебота.

Дальнейший код является сугубо демонстрационным и лишь описывает основной синтаксис взаимодействия библиотеки Телебот и Python. Постараемся создать такую программу, чтобы пользователь писал «Привет», а в ответ получал эксклюзивный «Привет от Партнеркина!».

if message.text == «Привет»:

bot.send_message(message.from_user.id, «Привет от Партнеркина!»)

elif message.text == «/help»:

bot.send_message(message.from_user.id, «Напиши «Привет»)»)

else:

bot.send_message(message.from_user.id, «Партнеркин помогает с /help»)

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

Вне зависимости от того будет ли находиться пользователь в диалоге, каждую секунду бот будет спрашивать непосредственно у социальной сети «Пишет ли мне этот пользователь в этом диалоге?». Постепенно расширяясь на множество диалогов, возможно увеличение времени задержки.

Действие 4. Добавление логики и мозгов

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

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

def get_price(message):

global price;

while price == 0: #проверка, что цена не равна 0

try:

price = count*100 #проверка, что

except Exception:

bot.send_message(message.from_user.id, Некорректное количество товара);

keyboard = types.InlineKeyboardMarkup(); //кнопочки

key_yes = types.InlineKeyboardButton(text=’Да’, callback_data=’yes’); #кнопка «Да»

keyboard.add(key_yes); #добавление кнопки в клавиатуру

key_no= types.InlineKeyboardButton(text=’Нет’, callback_data=’no’);

keyboard.add(key_no);

question= ‘Итоговая стоимость ‘+str(age)+’ за ‘+name+’ в количестве ‘+price+’?’)

bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)

Вне зависимости от того, что именно нажмет пользователь, настоящий код не будет переводить его куда-либо дальше. А все потому, что до сих пор не был прописан код-обработчик:

Самый последний шаг — добавить типы из начальной библиотеки:

Действие 5. Расширение функционала

Функционал Телебота поистине безграничен — постоянно добавляются новые фишки, пользователи демонстрируют исключительные функции, которые в режиме реального времени позволяют не столько взаимодействовать с пользователями, сколько снимают данные и фиксируют сигналы для работы (с валютами, например).

Но касательно работы с пользователями, разработчики постарались по максимуму, добавив, например, целых два типа кнопок:

Классическая RelpyKeyboardMarkup — кнопки расположены непосредственно под полем ввода сообщения:

Современная InlineKeyboardMarkup — кнопки привязаны к конкретному сообщению:

Также стоит понимать, что полноценные проекты все равно рано или поздно потребуют дополнений в виде активных баз данных. Для организации подобного функционала рекомендуется использовать docker-compose — он объединяет множество массивов в один контейнер. Данная библиотека позволяет не только создавать новые базы данных, но и налаживает связь между существующими.

Эксперты отвечают

М Михаил

Телеграм-боты могут всё, что угодно?

Вынужден разочаровать тех, кто представляет ботов, как инструмент исключительно для автоответов и искусственной активности. Думайте о Telegram боте как об автоматизированной учетной записи, которая может выполнять для вас некоторые действия. Например, вы хотите поделиться ссылкой YouTube в групповом чате, но у вас пока нет ссылки.

Еще по теме:  Почему в Телеграмме не могу отправить голосовое сообщение

Если планируется работа с достаточно крупными проектами, рекомендуется также начать работу с виртуальным выделенным сервером (VPS). В отличие от стандартного AWS он обладает большими возможностями для гибкого программирования, а также устанавливается в процессе использования библиотеки Docker.

Вывод

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

Источник: partnerkin.com

Создаем бота для Telegram

Александр Менщиков

В рамках данной статьи я расскажу о том, как быстро и легко написать программу-бота для популярного мессенджера Telegram. Писать бота мы будем на языке Python, параллельно изучая его основы. Договоримся, что вы используете Linux в качестве операционной системы, либо знаете как выполнить аналоги команд в Windows.

Установка необходимых библиотек

Нам понадобятся следующие библиотеки и программы:

  • pip — менеджер пакетов для Python
  • python — интерпретатор языка
  • virtualenv — виртуальное окружение
  • telebot — обертка над telegram API для языка Python

Теперь откроем консоль и наберем несколько команд. Первым делом загрузим менеджер пакетов для питона и виртуальное окружение, внутри которого мы будем устанавливать все остальные пакеты, чтобы не засорять систему и не порождать конфликтов с другими проектами. Также скачаем проект telebot, который носит название pyTelegramBotAPI.

sudo apt-get install python-pip sudo pip install pyTelegramBotAPI sudo pip install virtualenv

Следующая команда создаст в вашей директории новую директорию venv, в которой будет хранить все локальные библиотеки. Подробности про виртуальные окружения можно прочитать по адресу: http://docs.python-guide.org/en/latest/dev/virtualenvs/ Можно работать и без виртуального окружения, но тогда убедитесь, что устанавливаемые вами библиотеки не конфликтуют с другими библиотеками в системе (например, могут сломаться некоторые программы, заточенные под старые версии пакетов).

virtualenv venv

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

source venv/bin/activate

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

Код довольно интуитивен, поясним только основные идеи. Когда пользователь будет вводить команды /start и /help — выполнится функция send_welcome, которая отправит пользователю в чат сообщение с приветствием. При вводе /auth пока ничего происходить не будет.

Запустите бота командой:

python simplebot.py
/setdescription

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

/setcommands

Выберите бота из списка и в следующем письме введите перечень команд в формате:

команда1 — Описание команды команда2 — Еще одно описание команды

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

If you like this article, share a link with your friends

Read more

We talk about interesting technologies and share our experience of using them.

Источник: codex.so

Как создать Telegram бота с помощью Python

Python

Представьте, что у вас есть бот в мессенджере, который присылает вам случайно выбранную картинку с собачкой, когда вам захочется. Звучит здорово, да? Давайте сделаем такого.

В этом уроке мы будем использовать Python 3, библиотеку python-telegram-bot и публичный API RandomDog.

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

Начнём

Перед тем как писать программу, нам нужно сгенерировать токен для нашего бота. Токен понадобится для доступа к API Telegram’а, и установки необходимых зависимостей.

1. Создаём нового бота в BotFather

Если вы задумали создавать бота для Telegram, сначала его нужно зарегистрировать, перед тем как использовать. Когда вы регистрируете бота, вы получаете токен для доступа к API Telegram’а

Перейдите по ссылке BotFather (у вас должно быть установлено приложение Telegram) и создайте нового бота, отправив команду /newbot . Следуйте инструкциям, пока не получите имя пользователя и токен для вашего бота. Ссылка для доступа к боту выглядит так: https://telegram.me/YOUR_BOT_USERNAME , а токен вот так:

Еще по теме:  Почему в ТГ появляются каналы на которые ты не подписан

704418931:AAEtcZ*************

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

Команда для установки библиотеки:

pip3 install python-telegram-bot

Если всё прошло гладко, то можно двигаться дальше.

Пишем программу

Наш бот должен возвращать изображение с пёсиком, когда мы отправляем команду /bop . Генерировать случайные изображения, нам поможет публичным API от RandomDog.

Рабочий процесс нашего бота очень прост:

запрос к API -> получить URL изображение -> отправить изображение

1. Импорт библиотек

Для начала импортируем все нужные библиотеки.

from telegram.ext import Updater, CommandHandler import requests import re

2. Доступ к API и получение URL изображения

Давайте создадим функцию для получения URL. Используя библиотеку запросов, мы можем обратится к API и получить json данные.

contents = requests.get(‘https://random.dog/woof.json’).json()

Проверить json данные можно в браузере по ссылке https://random.dog/woof.json . Вы увидите что-то вроде этого:

Получаем URL, чтобы иметь возможность отправить изображение:

image_url = contents[‘url’]

Оформим этот код в виде функции get_url() .

def get_url(): contents = requests.get(‘https://random.dog/woof.json’).json() url = contents[‘url’] return url

3. Отправляем картинку

Чтобы отправить сообщение/изображение, нам понадобится два параметра: URL изображения и ID получателя — это может быть ID группы или ID пользователя.

Получить URL изображения можно вызвав функцию get_url() .

url = get_url()

Чтобы получить ID получателя, используйте этот код:

chat_id = update.message.chat_id

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

bot.send_photo(chat_id=chat_id, photo=url)

Оберните код в функцию bop и убедитесь, что код выглядит следующим образом:

def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url)

4. Основная программа

И наконец, создайте ещё одну функцию с именем main , чтобы запускать программу. Не забудьте заменить YOUR_TOKEN на токен, который вы сгенерировали ранее.

def main(): updater = Updater(‘YOUR_TOKEN’) dp = updater.dispatcher dp.add_handler(CommandHandler(‘bop’,bop)) updater.start_polling() updater.idle() if name == ‘__main__’: main()

В итоге, ваш код должен выглядеть вот так:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get(‘https://random.dog/woof.json’).json() url = contents[‘url’] return url def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater(‘YOUR_TOKEN’) dp = updater.dispatcher dp.add_handler(CommandHandler(‘bop’,bop)) updater.start_polling() updater.idle() if __name__ == ‘__main__’: main()

5. Запуск программы

Отлично! Мы почти закончили. Давайте проверим работу программы. Сохраните файл и назовите его main.py . Теперь её можно запускать, командой:

python3 main.py

Запустите бота перейдя по ссылке https://telegram.me/YOUR_BOT_USERNAME . Отправьте команду /bop . Если всё работает как надо, вы увидите случайное изображение с пёсиком. Миленько.

Исправляем ошибки

Отлично! Теперь у вас есть работающий бот.

Есть ещё кое-что. API RandomDog генерирует не только изображения, но ещё видео и гифки. Мы не сможем получить видео или GIF от API, потому что произойдёт ошибка.

Давайте это исправим, чтобы бот отправлял нам только изображения. Если нам попадётся видео или GIF, мы снова будем вызывать API, пока не получим изображение.

1. Проверяем расширение файла с помощью регулярного выражения

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

Отличить изображение от видео или GIF, можно по расширению файла. Нам понадобится последняя часть URL.

https://random.dog/*****.JPG

Во-первых, необходимо определить, какие расширения файлов допускаются в нашей программе.

allowed_extension = [‘jpg’,’jpeg’,’png’]

Затем использовать регулярное выражение, чтобы извлечь расширение файла из URL.

file_extension = re.search(«([^.]*)$»,url).group(1).lower()

Создайте функцию get_image_url() , используя этот код. Она будет перебирать URL, пока вы не получите файл с подходящим расширением (jpg, jpeg, png).

def get_image_url(): allowed_extension = [‘jpg’,’jpeg’,’png’] file_extension = » while file_extension not in allowed_extension: url = get_url() file_extension = re.search(«([^.]*)$»,url).group(1).lower() return url

2. Модифицируем код

Отлично! Теперь нам осталось заменить строку url = get_url() в функции bop() на url = get_image_url() . Ваш код должен выглядеть так:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get(‘https://random.dog/woof.json’).json() url = contents[‘url’] return url def get_image_url(): allowed_extension = [‘jpg’,’jpeg’,’png’] file_extension = » while file_extension not in allowed_extension: url = get_url() file_extension = re.search(«([^.]*)$»,url).group(1).lower() return url def bop(bot, update): url = get_image_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater(‘YOUR_TOKEN’) dp = updater.dispatcher dp.add_handler(CommandHandler(‘bop’,bop)) updater.start_polling() updater.idle() if __name__ == ‘__main__’: main()

Всё должно работать идеально. Этот код можно найти на моём GitHub.

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

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

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