Telegram bot виды клавиатур

Привет я new в stackoverflow также на python. Я хочу сделать клавиатуру (replykeyboardmarkup), которая считывает данные из базы данных и каждую кнопку на каждой строке клавиатуры, чтобы показать. Я хочу создать пользовательскую клавиатуру в telegram.bot Например: у нас есть массив строк, которые получают из базы данных. Как мы можем передавать данные из массива в InlineKeyboardMarkup? динамичная, отзывчивая кнопка. Что я могу сделать? thankss

Satria 08 авг. 2017, в 06:35
Поделиться

Привет, добро пожаловать в стек переполнения. Пожалуйста, обратитесь к ссылке « Как спросить» для получения более подробной информации о том, как задать вопрос и соответственно обновить свой вопрос.

Jeroen Heier 08 авг. 2017, в 04:01
Поделиться:

4 ответа

В API Telegram Bot они не упоминали о том, как работать с динамическим InlineKeyboardButton. Но есть способ сделать это с помощью CallbackQuery. В следующем примере предполагается, что переменная stringList будет содержать результаты запроса к базе данных, для этого я использую stringList в качестве словаря Pyton с Python 3.7 и pyTelegramBotAPI, который реализован для Telegram Bot API.

Разработка Telegram Bot на Python. (2.1 Клавиатуры. Текстовые кнопки)


stringList =

Позвольте создавать кнопки в соответствии со списком строк, импортируя типы из telebot. Здесь callback_data выполняет List, который помогает нам передавать данные от кнопки обработчикам запросов. Существует ограничение, если ваши callback_data больше 64 байт. Telegram Bot API сгенерирует ответ BUTTON_DATA_INVALID.

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

markup = types.InlineKeyboardMarkup() for key, value in stringList.items(): markup.add(types.InlineKeyboardButton(text=value, callback_data=»[‘value’, ‘» + value + «‘, ‘» + key + «‘]»), types.InlineKeyboardButton(text=crossIcon, callback_data=»[‘key’, ‘» + key + «‘]»))

Ниже изображение является результатом кода выше.

Я использую этот крестик, чтобы показать вам, как удалить динамическую кнопку и как отредактировать InlineKeyboardButton, удалив эту динамическую кнопку. Как вы можете видеть (код выше), есть два CallbackQuery, которые обрабатывают первую кнопку и перекрестную кнопку.

Вы можете захватить первую кнопку callback_data в следующих строках кода.

if (call.data.startswith(«[‘value'»)): print(f»call.data : , type : «) print(f»ast.literal_eval(call.data) : , type : «) valueFromCallBack = ast.literal_eval(call.data)[1] keyFromCallBack = ast.literal_eval(call.data)[2] bot.answer_callback_query(callback_query_id=call.id, show_alert=True, text=»You Clicked » + valueFromCallBack + » and key is » + keyFromCallBack)

Еще по теме:  Как начать чат с собой в Телеграмме

Есть два оператора печати, чтобы точно определить, какой тип данных мы будем обрабатывать. Первый оператор print показывает нам строковый тип List, когда мы нажимаем первую кнопку John.

call.data : [‘value’, ‘John’, ‘Name’] , type :

Пишем своего telegram-бота на Python, ч.2

Telegram бот на python aiogram #5 Клавиатуры и кнопки


Pocket Coder ‍
Приветствую! В данной статье я расскажу вам про типы клавиатур в telegram-ботах и их вызов с помощью библиотеки pyTelegramBotAPI.

Виды клавиатур

В Telegram существует 2 типа клавиатур: Inline и Reply.

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

InlineKeyboardMarkup — это уже настоящая кастомная клавиатура. С её помощью мы можем выполнять более сложные действия. Она привязывается к сообщению, с которым была отправлена.

Вывод клавиатур с помощью PyTelegramBotAPI

Ну что-же, давайте перейдём к коду. Для начала нам нужно импортировать модуль types (именно с его помощью мы будем вызывать клавиатуры). Сделать это можно с помощью данной строки:

from telebot import types

Теперь приступим к вызову нашей первой Reply клавиатуры.

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

mm = types.ReplyKeyboardMarkup(row_width=2)

row_width=2 означает, что у нашей клавиатуры будет по 2 кнопки в строке, как на скриншоте ниже.

Также мы можем сделать кнопки в клавиатуре поменьше с помощью параметра resize_keyboard=True

Далее нам нужно создать переменные в которые мы запишем названия наших кнопок. Делаем это с помощью данных строк:

button1 = types.KeyboardButton(» Привет») button2 = types.KeyboardButton(» Как дела?»)

Теперь нам нужно добавить данные кнопки в клавиатуру.

mm.add(button1,button2)

Готово! Клавиатура создана, теперь нам нужно вывести данную клавиатуру вместе с сообщением. Для этого в конце сообщения через запятую вводим:

reply_markup=mm

У нас должна выйти такая строка:

Теперь при виде команды /start бот будет отправлять нам сообщение «Hello World!» и прикреплять к данному сообщению клавиатуру с кнопками «Привет» и «Как дела».

Давайте включим бота и проверим нашу клавиатуру.

Отлично, работает!

Но при нажатии на кнопку бот ничего не будет делать в ответ. Давайте это исправим!

Для этого сделаем обработчик сообщений и в него добавим названия наших кнопок.

Отлично! Теперь в ответ на «Привет» бот будет присылать нам «Привет!», а в ответ на «Как дела?» будет присылать нам «Отлично!».

Давайте включим бота и проверим его на работоспособность!

Теперь бот отвечает при нажатии на кнопки в нашем меню. Теперь давайте перейдем к Inline клавиатурам.

Inline клавиатуры

С Inline клавиатурами всё немного посложнее, потому что мы будем обрабатывать не текстовые сообщения, а callback_data.

Давайте перейдём к созданию Inline клавиатуры. Для этого также создадим переменную, которая будет передавать параметры клавиатуры.

otvet = types.InlineKeyboardMarkup(row_width=2)

Параметры у Inline клавиатуры точно такие-же, как и у Reply клавиатуры.

Теперь давайте добавим кнопки в нашу Inline клавиатуру.

button1 = types.InlineKeyboardButton(» Хорошо», callback_data=’good’) button2 = types.InlineKeyboardButton(» Плохо», callback_data=’bad’)

Здесь мы пропишем название нашей кнопки и сам callback_data, который мы будем обрабатывать.

Далее добавляем наши кнопки в клавиатуру с помощью строки:

otvet.add(button1,button2)

И теперь прикрепляем нашу клавиатуру к сообщению как в случае с Reply клавиатурой:

reply_markup=otvet

У вас должна выйти примерно вот такая строка.

Теперь включаем бота и проверяем нашу клавиатуру:

Как мы видим — клавиатура прикрепилась к сообщению.

Теперь нам нужно добавить обработчик callback_data с помощью данных строк:

Теперь при нажатии на кнопку «Хорошо» бот будет отвечать «Круто!», а при нажатии на «Плохо» будет отвечать «Ничего, все наладится!»

Проверим, отвечает ли бот при нажатии на кнопки в клавиатуре:

Как мы видим — бот отвечает нам при нажатии на кнопки клавиатуры.

Поздравляю! Теперь вы умеете вызывать клавиатуры с помощью библиотеки pyTelegramBotAPI

В следующем уроке мы научимся использовать базу данных sqlite3, отправлять emoji (костей) с нужным нам числом, а также начнём делать свой первый проект (мини-казино).

Спасибо за внимание! ✨

Конечный код:

Источник: telegra.ph

Telegram bot: как отправить сообщение с встроенной клавиатурой и скрыть пользовательскую клавиатуру одновременно?

можно ли это сделать? Сообщение имеет только один reply_markup собственность и может быть либо InlinkeKeyboardMarkup или ReplyKeyboardHide . Единственный способ сделать это — отправить 2 сообщения (сначала скрыть клавиатуру и 2nd с встроенной клавиатурой), но это не было бы лучшим решением с точки зрения пользовательского опыта. Я в порядке, чтобы сделать пару запросов, но хочу иметь только 1 сообщение, видимое пользователю.

автор: Alexander Trakhimenok

6 ответов

Это невозможно прямо сейчас. Telegram Bot API в настоящее время позволяет отправлять только один тип клавиатуры: встроенный или простой (включая KeyboardHide и другие).

автор: ihoru

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

ReplyKeyboardMarkup MyButton = new ReplyKeyboardMarkup(); MyButton.OneTimeKeyboard = true;

вы даже можете сделать его более гибким, добавив Это:

MyButton.ResizeKeyboard = true;
автор: Mayer Sariggs

но вы можете отправить два сообщения, первый из которых отправит ReplyKeyboardHide/ReplyKeyboardRemove, а второй отправит встроенную клавиатуру

автор: Kirill

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

// send a fake message Message sentMsg = bot.SendTextMessageAsync(chatID, «.», replyKeyboardMarkup: new ReplyKeyboardRemove()).Result; // remove the fake message bot.DeleteMessageAsync(chatID, sentMsg.MessageId); // send the main message with it’s keyboard bot.SendTextMessageAsync(chatID, «the next message», replyKeyboardMarkup: new ReplyKeyboardMarkup(keyboardData));
автор: Emad Armoun

просто установите для свойства OneTimeKeyboard значение true,

Button.OneTimeKeyboard = true;

Как только кнопка используется, она никогда не отображается снова

вам лучше использовать inlinekeyboard как для Да / нет, так и для предыдущей клавиатуры, которую вы хотите показать после нажатия да или нет. таким образом, вы можете отредактировать сообщение yes/no inlinekeyboard и показать новую клавиатуру.

вы можете отправить inlineKeyboard и, проверив его callBackQuery.Параметр данных вы можете отредактировать отправленное сообщение еще раз и показать новое сообщение.

ниже приведен пример сообщения об обновлении json:

, «message»: < «message_id»: 22, «from»: < «id»: 3576731383, «first_name»: «the_bot_name», «username»: «mybot_bot» >, «chat»: < «id»: 111745258, «first_name»: «eric», «username»: «. «, «type»: «private» >, «date»: 1492113810, «text»: «sent message» >, «chat_instance»: «5419183837652256438», «data»: «yes» >>

поэтому, когда пользователь нажимает на да или нет, вы получите сообщение об обновлении. основываясь на приведенном выше сообщении об обновлении, chatid и messageid известны так, используя телеграмму c#.Библиотека ботов код редактирования выглядит так:

var chatid= 111745258; var messageid=22; TelegramBotClient api = new TelegramBotClient(«YOUR_TOKEN»); var new_keyboard = new InlineKeyboardMarkup( new[] < new[] < new InlineKeyboardButton(«step_1″,»step1») , >, new[] < new InlineKeyboardButton(«step_2″,»step2»), new InlineKeyboardButton(«step_3″,»step3»), >, new[] < new InlineKeyboardButton(«step_4″,»step4»), >>); api.EditMessageReplyMarkupAsync(chatid, messageid, replyMarkup: new_keyboard);

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

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