Как сделать клавиатуру в телеграмм боте

Добавил пользователь Владимир З.
Обновлено: 10.09.2024

Для работы понадобятся

  • Редактор кода, чтобы писать код. Если не знаете, какой выбрать — мы уже рассказывали. Если не умеете писать код, то вот инструкция, как его написать и запустить.
  • Node.js любой версии, выше 0.12. Нужно, чтобы библиотека для ботов заработала. Как установить Node.js.
  • Консоль. Или встроенный в систему вариант, или какой-нибудь другой.
  • VPN. Возможно но не факт, потому что Телеграм работает не везде.

Шаг 1. Регистрируем бота

Находим в поиске Телеграма бота @botFather — это главный инструмент для создания ботов. Набираем в нём /newbot .

Придумываем название и имя боту. Название — то, как он будет подписан в списке контактов. Имя — строка, по которой его можно будет найти. Обратите внимание, что имя должно оканчиваться на bot . В ответ мы получим токен — длинную последовательность символов, которая пригодится нам в будущем. Мы назвали бота echoKeksBot , но вам придётся придумать другое название, потому что это уже занято. Извините.

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

Шаг 2. Создаём проект

Создаем папку в любом месте и открываем её в консоли. Там пишем npm init -y — эта команда создаст файл package.json , который выглядит примерно так:

Содержимое файла package.json

Теперь установим node-telegram-bot-api — это библиотека для создания телеграм-ботов на Node.js. Введём команду:

Шаг 3. Запускаем бота

Тут всё просто, в консоли пишем node index.js , заходим к нашему боту в телеграм и начинаем с ним общаться. Не закрывайте консоль — бот работает только на вашем компьютере, и без консоли он не станет отвечать.

Запуск бота

Как видим, бот успешно отвечает. Но бот-повторяха — не интересно, усложним задачу. Пусть бот присылает нам картинку.

Шаг 4. Отсылаем картинку

Добавим картинку с Кексом в папку с проектом. Для отправки изображения используем метод .sendPhoto() — передадим в него id чата и путь до картинки. Получится такой код:

Запускаем бота, проверяем, работает:

Получаем от бота изображение с Кексом

Шаг 5. Добавим клавиатуру. И пёсика

Добавим фотографию милого пёсика в корень проекта. Теперь там две картинки.

Получаем от бота изображение с пёсиком

Чтобы отличить первые 2 кнопки, воспользуемся полем callback_data , где будем передавать тип кнопки. Для обработки нажатий добавим слушателя на событие callback_query , и в зависимости от значения query.data отправим нужную картинку к пользователю.

Не забудем про возможные ошибки и предложим пользователю попробовать снова, если он ввёл что-то не то. Перезапустим бота и проверим — всё работает. Главное — не закрывать консоль, иначе бот перестанет отвечать.

Полный файл с кодом: index.js.

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

Познакомьтесь с JavaScript бесплатно

На интерактивных тренажёрах. А вместе с JavaScript — бесплатное знакомство с HTML и CSS.

Предполагается, что вы уже ознакомлены с Bot API. В противном случае прочитайте, пожалуйста, описание ботов для разработчиков.

Сегодня мы представляем крупнейшее обновление платформы ботов с июля 2015 года. Была добавлена масса новых возможностей и инструментов, которые позволят создавать простые и удобные интерфейсы для ботов любой сложности.

Новые инлайн клавиатуры

Кнопки бота music
Кнопки бота music

Кнопки с обратной связью

Уведомления сверху

Пример: @music. Этот бот использует кнопки с обратной связью для перехода между страницами с результатами поиска.

URL-кнопки

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

URL-кнопка

Переход в инлайн-режим

Коллбэк-кнопка

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

Местоположения и номера телефонов

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

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

Запрос номера телефона и местоположения

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

Пример: @foursquare. Этот бот спросит разрешение на предоставление геоинформации для поиска мест поблизости.

Инлайн-боты 2.0

Инлайн-боты тоже не остались без изменений.

Новые типы контента

Все виды контента

Пример: @stickers. Этот бот ищет стикеры по вашему запросу.

Кнопка переключения

Пример: Бот @youtube позволяет привязать ваш аккаунт Telegram к профилю в YouTube.

Улучшенный интерфейс инлайн-режима

Новое поле ввода

Однократное нажатие на крестик очистит поле поиска, а повторное—выйдет из встроенного режима.

Администрирование групп

Наконец, самое интересное: постепенно в Bot API будут добавляться инструменты для управления группами. В первую очередь это методы удаления участников из групп и супергрупп.

Сайт про Telegram на русском (неофициальный).

Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.

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

Сейчас работаем в классе Bot

Для начала создадим саму клавиатуру как глобальную переменную

ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();

В новой функции создаем список кнопок

ArrayListKeyboardRow> keyboard = new ArrayList

Сделаем несколько кнопок в 2 ряда с помощью KeyboardRow

KeyboardRow keyboardFirstRow = new KeyboardRow();

KeyboardRow keyboardSecondRow = new KeyboardRow();

Корректируем некоторые параметры клавиатуры

Немного документации от Telegram Bot API:

ResizeKeyboard

Указывает клиенту подогнать высоту клавиатуры под количество кнопок (сделать её меньше, если кнопок мало). По умолчанию False, то есть клавиатура всегда такого же размера, как и стандартная клавиатура устройства.

Selective

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

OneTimeKeyboard

Далее добавляем нужные нам кнопки

Создадим условие для перехода в меню

Пускай, если человек напишет "Меню" или "Привет"

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

3) Полезная Информация

Так делаем и со следующими командами

Вуаля! Наша клавиатура готова(Меню)

Обработку нажатий и много рутиной работы мы сделаем в следующей главе, а сейчас немного изменим забытый нами класс Book для дальнейшей работы

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

Еще давайте добавим класс Top

В этом классе мы будем выводить самые популярные книги и стихи за нужное нам время

Создадим в нашем классе две функции

String[] getTopPoems(String period) // выводим топ стихов

String[] getTopBook(String period) // выводит топ книг

period - период))

Для того что-бы узнать ссылки периодов заходим на сайт и смотрим)

Делаем для каждого перихода своё условие

Проделываем все условия в обоих функциях

Далее наша любимая часть, парсинг

Вопрос: Почему элементов массива всего 20?

Теперь все тоже делаем и в классе Book:

Для того что-бы вас не томить, давайте сразу обработаем наше меню

Переходим к классу Bot:

Создадим функцию getTopPoem(String[] text)

функцию getInfoBook изменяем на

getInfoBook(String href[])

Теперь будем получать информацию о многих книгах

Берем все что там есть в цикл for

и в конце делаем отправку, в конце цикла

Теперь обрабатываем всё

Добавляем глобальную переменную lastMassage типа String что-бы знать что искать Стихи или Книги

Переходим в функцию getMassage

Пишем для каждого периода свое возвращение

Теперь обработка когда переходим на Книги или Стихи что-бы присвоить lastMassage

Там очень много стихов, прошу поверить на слово ))

Если делать очень много запросов то бот будет отвечать намного дольше. Зависит от хост машины.

Вот сама функция getUpdates:

Вот функция sendMessage:

Как я понял reply_markup отвечает за вывод клавиатуры,но как её вывести я так и не понял

В reply_markup передается inline_keyboard из массива массивов объектов кнопок.
Кнопка состоит из text и одного обязательного callback_data.

Блок "сallback_query" говорит о нажатии на кнопку

Спасибо большое за помощь.
Я сделал вот так:

И получилось вывести inline и reply клавиатуры.

В reply_markup передается inline_keyboard из массива массивов объектов кнопок.
Кнопка состоит из text и одного обязательного callback_data.

Блок "сallback_query" говорит о нажатии на кнопку

(3) На самом деле тут вопрос не 1С-ный. По работе с телеграмм ботом есть много информации на других ресурсах.

Как написать telegram-бота на python с помощью библиотеки telebot

Установка и настройка

Для начала давайте скачаем сам python. Сделать это можно на официальном сайте. Не забудьте поставить галочку add to PATH во время установки! После установки python’a нам понадобится хороший редактор кода. На помощь приходит компания JetBrains со своим бесплатным PyCharm. Мы уже близко, осталось скачать библиотеку telebot. Для этого заходим в командную строку и пишем:

Если всё прошло успешно, мы можем продолжать!

Думаю все знают о блокировки telegram в России и единственным решением как всегда остаётся vpn. Лично я рекомендую NordVPN.

Bot Father

В поиске telegram находим Bot Farher’a и создаем своего бота с помощью команды /newbot. Затем вводим имя и юзернейм. Обратите внимание, что юзернейм должен оканчиваться на bot!

Пишем telegram-бота на python с помощью библиотеки telebot часть 1

Как вы видите нам выдали специальный api токен, с помощью которого вы сможете управлять своим ботом (в моём случае это: 776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM). Свой токен Вы можете запомнить, но я рекомендую его записать.

Настал момент, которого ждали все. Открываем PyCharm и создаем новый проект.

Как написать telegram-бота на python с помощью библиотеки telebot

Тут рекомендую поставить всё как у меня (название, конечно можно изменить). После создания проекта, давайте создадим файл, в котором будет наш код. Кликните правой кнопкой по папке с вашем проектом, затем New -> Python File. Отлично, начнем писать код. Импортируем библиотеку telebot, с помощью:

Теперь нужно создать переменную bot. На самом деле имя переменной может быть каким угодно, но я привык писать bot.

Напишем декоратор bot.message_handler(), с помощью которого наш бот будет реагировать на команду /start. Для этого в круглых скобках пишем commands=[‘start’]. В итоге у нас должно получиться это:

Как написать telegram-бота на python с помощью библиотеки telebot

Как написать telegram-бота на python с помощью библиотеки telebot

Вот что у вас должно получиться:

Как написать telegram-бота на python с помощью библиотеки telebot

Ну и второй способ, для тех, кто не ищет лёгких путей. Создаем новый декоратор bot.message_handler(), вот только в скобочки пишем content_types=[‘sticker’]. Далее всё как обычно. Создаем функцию, принимающую параметр message, а вот в ней пропишем print(message). Запускаем бота.

Как написать telegram-бота на python с помощью библиотеки telebot

Как написать telegram-бота на python с помощью библиотеки telebot

Как написать telegram-бота на python с помощью библиотеки telebot

Ну а на этом всё! Конечно, это не все возможно ботов в telegram, но основные возможности я вам показал. Спасибо за внимание.

Что такое message?

Теперь когда мы вводим команду /start, наш бот присылает огромное кол-во информации. Все, что мы сейчас получили — это ответ в формате json. Json — это простой формат для хранения структурированных данных. Все выводится в формате: ‘ключ’: значение. Давайте посмотрим на то, что получил я:

Смотрите, у ключа chat есть еще несколько ключей: first_name, last_name, username… и у каждого из них есть свои значения. Теперь обратимся к ключу id:

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

Все идет как надо! Мы получили id чата, собственно как и хотели! А теперь получим имя отправителя. Тут, как вы заметили нужно использовать ключ from_user.

Теперь достанем значение у ключа first_name:

Ну вот и все! За пару секунд мы смогли получить id чата и мое имя в telegram. И еще раз, для тех кто не понял:

Как написать telegram-бота на python с помощью библиотеки telebot

Чтобы получить значение ключа first_name, нам нужно сначала обратиться к ключу chat, а только потом уже к first_name!

Заключение

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

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