Как добавлять кнопки в Телеграмме

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

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

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

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

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

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

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

Урок 2. «Как сделать пост с кнопкой в канале Телеграм»

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

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

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

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

  1. Регистрируем бота в Телеграме.
  2. Устанавливаем Python-библиотеку для работы с Телеграмом.
  3. Добавляем библиотеку в программу с гороскопом и учим программу реагировать на сообщения в чате.
  4. Пишем там же код, который покажет кнопки для выбора знаков зодиака.
  5. Сделаем так, чтобы по кнопкам появлялся гороскоп для этого знака.

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

1. Регистрация нового бота

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

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

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

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

Подключаем библиотеку и получаем сообщения

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

import telebot;
bot = telebot.TeleBot(‘токен’);
Программа-гороскоп
# Подключаем модуль случайных чисел import random # Заготовка для первого предложения first = [«Сегодня — идеальный день для новых начинаний.»,»Оптимальный день для того, чтобы решиться на смелый поступок!»,»Будьте осторожны, сегодня звёзды могут повлиять на ваше финансовое состояние.»,»Лучшее время для того, чтобы начать новые отношения или разобраться со старыми.»,»Плодотворный день для того, чтобы разобраться с накопившимися делами.»] second = [«Но помните, что даже в этом случае нужно не забывать про»,»Если поедете за город, заранее подумайте про»,»Те, кто сегодня нацелен выполнить множество дел, должны помнить про»,»Если у вас упадок сил, обратите внимание на»,»Помните, что мысли материальны, а значит вам в течение дня нужно постоянно думать про»] second_add = [«отношения с друзьями и близкими.»,»работу и деловые вопросы, которые могут так некстати помешать планам.»,»себя и своё здоровье, иначе к вечеру возможен полный раздрай.»,»бытовые вопросы — особенно те, которые вы не доделали вчера.»,»отдых, чтобы не превратить себя в загнанную лошадь в конце месяца.»] third = [«Злые языки могут говорить вам обратное, но сегодня их слушать не нужно.»,»Знайте, что успех благоволит только настойчивым, поэтому посвятите этот день воспитанию духа.»,»Даже если вы не сможете уменьшить влияние ретроградного Меркурия, то хотя бы доведите дела до конца.»,»Не нужно бояться одиноких встреч — сегодня то самое время, когда они значат многое.»,»Если встретите незнакомца на пути — проявите участие, и тогда эта встреча посулит вам приятные хлопоты.»] # выводим знаки зодиака print(«1 — Овен») print(«2 — Телец») print(«3 — Близнецы») print(«4 — Рак») print(«5 — Лев») print(«6 — Дева») print(«7 — Весы») print(«8 — Скорпион») print(«9 — Стрелец») print(«10 — Козерог») print(«11 — Водолей») print(«12 — Рыбы») # Спрашиваем у пользователя про его знак zodiac = int(input(«Введите число с номером знака зодиака: «.format(blue=»33[96m», endcolor=»33[0m»))) # Если число введено верно — выдаём гороскоп if 0 < zodiac < 13: print(random.choice(first), random.choice(second), random.choice(second_add), random.choice(third)) else: print(«Вы ошиблись с числом, запустите программу ещё раз»)

Еще по теме:  Как установить переводчик в Телеграмме на Андроид

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

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

Она скажет программе, чтобы она непрерывно спрашивала у бота, не пришли ли ему какие-то новые сообщения. Запускаем программу и проверяем, как работает наш бот.

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

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

Добавляем код с кнопками в раздел, который реагирует на «Привет»:

# Готовим кнопки keyboard = types.InlineKeyboardMarkup() # По очереди готовим текст и обработчик для каждого знака зодиака key_oven = types.InlineKeyboardButton(text=’Овен’, callback_data=’zodiac’) # И добавляем кнопку на экран keyboard.add(key_oven) key_telec = types.InlineKeyboardButton(text=’Телец’, callback_data=’zodiac’) keyboard.add(key_telec) key_bliznecy = types.InlineKeyboardButton(text=’Близнецы’, callback_data=’zodiac’) keyboard.add(key_bliznecy) key_rak = types.InlineKeyboardButton(text=’Рак’, callback_data=’zodiac’) keyboard.add(key_rak) key_lev = types.InlineKeyboardButton(text=’Лев’, callback_data=’zodiac’) keyboard.add(key_lev) key_deva = types.InlineKeyboardButton(text=’Дева’, callback_data=’zodiac’) keyboard.add(key_deva) key_vesy = types.InlineKeyboardButton(text=’Весы’, callback_data=’zodiac’) keyboard.add(key_vesy) key_scorpion = types.InlineKeyboardButton(text=’Скорпион’, callback_data=’zodiac’) keyboard.add(key_scorpion) key_strelec = types.InlineKeyboardButton(text=’Стрелец’, callback_data=’zodiac’) keyboard.add(key_strelec) key_kozerog = types.InlineKeyboardButton(text=’Козерог’, callback_data=’zodiac’) keyboard.add(key_kozerog) key_vodoley = types.InlineKeyboardButton(text=’Водолей’, callback_data=’zodiac’) keyboard.add(key_vodoley) key_ryby = types.InlineKeyboardButton(text=’Рыбы’, callback_data=’zodiac’) keyboard.add(key_ryby) # Показываем все кнопки сразу и пишем сообщение о выборе bot.send_message(message.from_user.id, text=’Выбери свой знак зодиака’, reply_markup=keyboard)

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

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

Еще по теме:  Бэлла из шоу пацанки Телеграмм

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

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

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

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

Что дальше

Впереди — безграничные возможности:

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

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

Источник: thecode.media

Создание Telegram бота на PHP #3: примеры отправки сообщений с кнопками в Telegram

В новом уроке мы с вами рассмотрим отправку базовых запросов в Telegram. Я покажу вам как отправлять простые текстовые сообщения в Telegram, как отправлять кнопки и дополнительные клавиатуры.

Всю информацию по параметрам запросов мы будем брать из официальной документации Telegram
https://core.telegram.org/bots/api/

Все ответы от Telegram приходят в виде JSON строки. Для удобного отображения массива ответа в браузере, советую вам установить специальное расширение для браузера, которое называется JSON Viewer

  • С помощью параметра text вы можете передать текст кнопки
  • параметр url указывает ссылку, если вам нужно сделать кнопку для перехода на внешний ресурс
  • параметр callback_data указывает строку которая будет возвращена после нажатия на кнопку. Данную строку используют как команду.

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

Таким образом, для создания 2 кнопок в одном ряду, мы будем использовать следующий код

. ‘reply_markup’ => json_encode(array( ‘inline_keyboard’ => array( array( array( ‘text’ => ‘Button 1’, ‘callback_data’ => ‘test_2’, ), array( ‘text’ => ‘Button 2’, ‘callback_data’ => ‘test_2’, ), ) ), )), .

Для создания 2 рядов по 2 кнопки используйте код

. ‘reply_markup’ => json_encode(array( ‘inline_keyboard’ => array( array( array( ‘text’ => ‘Button 1’, ‘callback_data’ => ‘test_2’, ), array( ‘text’ => ‘Button 2’, ‘callback_data’ => ‘test_2’, ), ), array( array( ‘text’ => ‘Button 3’, ‘callback_data’ => ‘test_3’, ), array( ‘text’ => ‘Button 4’, ‘callback_data’ => ‘test_4’, ), ) ), )), .

И для создания одной кнопки в первом ряду и 2 — во втором, используйте следующий код.

. ‘reply_markup’ => json_encode(array( ‘inline_keyboard’ => array( array( array( ‘text’ => ‘Button 2’, ‘callback_data’ => ‘test_2’, ), ), array( array( ‘text’ => ‘Button 3’, ‘callback_data’ => ‘test_3’, ), array( ‘text’ => ‘Button 4’, ‘callback_data’ => ‘test_4’, ), ) ), )), .

Еще по теме:  Что значит синяя звездочка в Телеграмме

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

Отправка клавиатуры в чат

Аналогичные параметры имеет и массив для отправки клавиатуры в чат. Для создания клавиатуры пропишем следующий код.

. ‘reply_markup’ => json_encode(array( ‘keyboard’ => array( array( array( ‘text’ => ‘Тестовая кнопка 1’, ‘url’ => ‘YOUR BUTTON URL’, ), array( ‘text’ => ‘Тестовая кнопка 2’, ‘url’ => ‘YOUR BUTTON URL’, ), )), ‘one_time_keyboard’ => TRUE, ‘resize_keyboard’ => TRUE, )), .

Структура массивом для кнопок та же, но только есть отличие в названиях и количестве параметров.

Ключ inline_keyboard заменяется на keyboard.

А так же для клавиатуры добавляются 2 дополнительных параметра:

  • one_time_keyboard — скрыть клавиатуру, как только она была использована. Клавиатура по-прежнему будет доступна, но клиенты будут автоматически отображать обычную, буквенную клавиатуру в чате — пользователь может нажать специальную кнопку в поле ввода, чтобы снова увидеть пользовательскую клавиатуру. Значение по умолчанию равно false.
  • resize_keyboard — изменяет размер клавиатуры по вертикали для оптимальной подгонки (например, уменьшить клавиатуру, если есть только два ряда кнопок). По умолчанию установлено значение false, и в этом случае пользовательская клавиатура всегда имеет ту же высоту, что и стандартная клавиатура приложения.
  • В новом уроке мы с вами разобрали самый популярный метод для работы с Телеграм ботами — sendMessage. Данный метод позволяет отправлять текстовые сообщения с привязанными кнопками и клавиатурами.
  • Научились удалять сообщения
  • Разобрали какие бывают типы кнопок и научились создавать массивы для гибкой структуры вывода дополнительных клавиатур и кнопок.

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

Дополнения к записи от 04.11.2022

Дополнение от доброго комментатора с сайта Habr, с ником FanatPHP — https://habr.com/ru/users/FanatPHP/

Пользователь предложил добавить вспомогательную функцию для работы с Curl.

function curl($url, $data = [], $method = ‘GET’, $options = []) < $default_options = [ CURLOPT_RETURNTRANSFER =>true, CURLOPT_HEADER => false, CURLOPT_SSL_VERIFYPEER => false, ]; if ($method === ‘GET’) < $url .= (strpos($url, ‘?’) === false) ? ‘?’ : ‘ $url .= http_build_query($data); >if ($method === ‘POST’) < $options[CURLOPT_POSTFIELDS] = http_build_query($data); >if ($method === ‘JSON’) < $options[CURLOPT_POSTFIELDS] = json_encode($data); $options[CURLOPT_HTTPHEADER][] = ‘Content-Type:application/json’; >$ch = curl_init($url); curl_setopt_array($ch, array_replace($default_options, $options)); $result = curl_exec($ch); if ($result === false) < throw new ErrorException(«Curl error: «.curl_error($ch), curl_errno($ch)); >curl_close($ch); return $result; >
$token = «5340791844:AAEXXDduvInvQrlykV91USOQSevrPVU»; $url = «https://api.telegram.org/bot$token/sendMessage»; $getQuery = array( «chat_id» => 1424625511, «text» => «Новое сообщение из формы», «parse_mode» => «html» ); echo curl($url, $getQuery);

На этом всё!
Больше интересных статей в нашей группе — https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи — https://vk.com/prog_time
Так же прокачивайте свои навыки на нашем канале — https://www.youtube.com/c/ProgTime

Наши планы

  • Написание материала для курса по разработке ботов на Telegram
  • Разработка универсального парсера на PHP

Поддержите мой сайт!

Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube

Источник: prog-time.ru

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