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

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