Это статья из серии о телеграм-ботах. Я по частям расскажу о важных моментах в pytelegrambotapi. Сразу полезная информация: я начал учиться делать ботов по этой статье и всем ее рекомендую.
21 624 просмотров
Кнопки в телеграм бывают двух видов — inline и обычные (reply).
Обычные вы видите вместо клавиатуры, все, что они делают, как правило, — отправляют текстовое сообщение боту.
обычные кнопки
Но, перед тем, как сделать кнопку, нужно создать клавиатуру. Для обычных кнопок она одна, для inline другая, вот обычная:
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=False, one_time_keyboard=True)
resize_keyboard: bool — необязательный | будет ли клавиатура растягиваться (по умолчанию: без значения)
one_time_keyboard: bool — необязательный разовая ли клавиатура (по умолчанию: без значения)
selective: bool — необязательный | кому показывать (по умолчанию: без значения)
row_width: int — обязательный | количество столбцов кнопок (по умолчанию: 3)
ДИСКОРД БОТ #11 | КНОПКИ / РОЛИ ПО КНОПКЕ / BUTTONS | DISNAKE/DISCORDPY | DISCORD BOT PYTHON
input_field_placeholder: str — необязательный | заменяет текст-заглушку в поле ввода (по умолчанию: без значения)
Создав клавиатуру, создадим к ней кнопку:
stop = types.KeyboardButton(text=’отмена ❌’)
text: str — обязательный | текст кнопки. Если указан только он, то кнопка будет просто отправлять текст при нажатии.
request_contact: bool — необязательный | если указан как true то пользователь при нажатии отправит свой контакт. Доступен только в приватных чатах.
request_location: bool — необязательный | если указан как true, то пользователь при нажатии отправит свою локацию. Доступен только в приватных чатах.
request_poll: bool — необязательный | если указан как true, то пользователь при нажатии отправит свою локацию. Доступен только в приватных чатах.
web_app: WebAppInfo — необязательный | если указан как true, то при нажатии откроется страница указанного веб-приложения — про это есть отдельная статья. Доступен только в приватных чатах.
После создания кнопки ее нужно добавить в клавиатуру вот так:
keyboard.add(stop)
И далее дать эту клавиатуру пользователю с сообщением:
bot.send_message(message.chat.id, ‘Клавиатура с одной кнопкой, reply_markup=keyboard)
- Отправить можно только одну клавиатуру за раз
- Это актуально для всех типов клавиатур.
Inline-кнопки вы видите под сообщением.
Источник: vc.ru
Как сделать кнопки в боте Телеграм на Python?
Сегодня мы познакомимся с такой замечательной фичей Telegram-ботов, как кнопки.
Прежде всего, чтобы избежать путаницы, определимся с названиями.
То, что цепляется к низу экрана вашего устройства, будем называть обычными кнопками , а то, что цепляется непосредственно к сообщениям, назовём инлайн-кнопками.
Кнопки как шаблоны
Этот вид кнопок появился вместе с Bot API в далёком 2015 году и представляет собой не что иное, как шаблоны сообщений.
Принцип простой: что написано на кнопке, то и будет отправлено в текущий чат. Соответственно, чтобы обработать нажатие такой кнопки, бот должен распознавать входящие текстовые сообщения.
Напишем хэндлер, который будет при нажатии на команду /start отправлять сообщение с двумя кнопками:
Обратите внимание, что т.к. обычные кнопки- суть шаблонных сообщений, то их можно создавать не только как объекты KeyboardButton , но и как обычные строки.
Что ж, запустим бота и обалдеем от громадных кнопок:
Смотрим — действительно красиво:
Осталось научить бота реагировать на нажатие таких кнопок.
Как уже было сказано выше, необходимо делать проверку на полное совпадение текста.
Сделаем это двумя способами: через специальный фильтр Text и обычной лямбдой:
Чтобы удалить кнопки, необходимо отправить новое сообщение со специальной «удаляющей» клавиатурой типа ReplyKeyboardRemove.
await message.reply(«Отличный выбор!», reply_markup=types.ReplyKeyboardRemove())
Помимо стандартных опций, описанных выше, aiogram немного расширяет функциональность клавиатур параметром row_width.
При его использовании, фреймворк автоматически разобьёт массив кнопок на строки по N элементов в каждой, где N — значение row_width , например, row_width=2. Попробуйте!
Специальные обычные кнопки
В Telegram существует три специальных вида обычных кнопок, не являющихся шаблонами: для отправки текущей геолокации, для отправки своего номера телефона и ярлык для создания опроса/викторины. Для первых двух типов достаточно установить булевый флаг, а для опросов и викторин нужно передать специальный тип KeyboardButtonPollType и, по желанию, указать тип создаваемого объекта.
Впрочем, проще один раз увидеть код:
Теперь поговорим про Инлайн-кнопки
URL-кнопки и колбэки
В отличие от обычных кнопок, инлайновые цепляются не к низу экрана, а к сообщению, с которым были отправлены.
Мы рассмотрим два типа таких кнопок: URL и Callback.
Самые простые инлайн-кнопки относятся к типу URL, т.е. «ссылка». Поддерживаются только протоколы HTTP(S) и tg://
А если хотите обе кнопки в ряд, то уберите row_width=1 (тогда будет использоваться значение по умолчанию 3).
С URL-кнопками больше обсуждать, по сути, нечего, поэтому перейдём к гвоздю сегодняшней программы — Callback-кнопкам .
Это очень мощная штука, которую вы можете встретить практически везде.
Но как же обработать нажатие? Если раньше мы использовали message_handler для обработки входящих сообщений, то теперь будем использовать callback_query_handler для обработки колбэков.
Ориентироваться будем на «значение» кнопки, т.е. на её data:
Ой, а что это за часики? Оказывается, сервер Telegram ждёт от нас подтверждения о доставке колбэка, иначе в течение 30 секунд будет показывать специальную иконку.
Чтобы скрыть часики, нужно вызвать метод answer() у колбэка (или использовать метод API answer_callback_query() ).
В общем случае, в метод answer() можно ничего не передавать, но можно вызвать специальное окошко (всплывающее сверху или поверх экрана):
В функции send_random_value мы вызывали метод answer() не у message , а у call.message .
Это связано с тем, что колбэк-хэндлеры работают не с сообщениями (тип Message ), а с колбэками (тип CallbackQuery ), у которого другие поля, и само сообщение — всего лишь его часть.
Учтите также, что message — это сообщение, к которому была прицеплена кнопка (т.е. отправитель такого сообщения — сам бот).
Если хотите узнать, кто нажал на кнопку, смотрите поле from (в вашем коде это будет call.from_user , т.к. слово from зарезервировано в Python)
Перейдём к примеру посложнее.
Пусть пользователю предлагается сообщение с числом 0, а внизу три кнопки: +1, -1 и Подтвердить.
Первыми двумя он может редактировать число, а последняя удаляет всю клавиатуру, фиксируя изменения.
Хранить значения будем в памяти в словаре.
И, казалось бы, всё работает:
Но теперь представим, что ушлый пользователь сделал следующее: вызвал команду /numbers (значение 0), увеличил значение до 1, снова вызвал /numbers (значение сбросилось до 0) и отредактировал нажал кнопку «+1» на первом сообщении.
Что произойдёт?
Бот по-честному отправит запрос на редактирование текста со значением 1, но т.к. на том сообщении уже стоит цифра 1, то Bot API вернёт ошибку, что старый и новый тексты совпадают, а бот словит исключение: aiogram.utils.exceptions.MessageNotModified: Message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message
С этой ошибкой вы, скорее всего, будете поначалу часто сталкиваться, пытаясь редактировать сообщения.
Но, в действительности, решается проблема очень просто: мы проигнорируем исключение MessageNotModified.
# from aiogram.utils.exceptions import MessageNotModified # from contextlib import suppress async def update_num_text(message: types.Message, new_value: int): with suppress(MessageNotModified): await message.edit_text(f»Укажите число: «, reply_markup=get_keyboard())
Если теперь вы попробуете повторить пример выше, то указанное исключение в этом блоке кода бот просто-напросто проигнорирует.
Фабрика колбэков
В aiogram существует т.н. фабрика колбэков. Вы создаёте объект CallbackData , указываете ему префикс и произвольное количество доп. аргументов, которые в дальнейшем указываете при создании колбэка для кнопки.
Например, рассмотрим следующий объект:
# from aiogram.utils.callback_data import CallbackData cb= CallbackData(«post», «id», «action»)
Тогда при создании кнопки вам надо указать её параметры так:
button = types.InlineKeyboardButton( text=»Лайкнуть», callback_data=cb.new(id=5, action=»like») )
В примере выше в кнопку запишется callback_data , равный post:5:like, а хэндлер на префикс post будет выглядеть так:
В предыдущем примере с числами мы грамотно выбрали callback_data , поэтому смогли легко запихнуть все обработчики в один хэндлер.
Но можно логически разнести обработку инкремента и декремента от обработки нажатия на кнопку «Подтвердить» .
Для этого в фильтре фабрики можно указать желаемые значения какого-либо параметра. Давайте перепишем наш пример с использованием фабрики:
Источник: seochao.ru
как как создать кнопку в Discord Py
Enter a world where style is an expression of individuality. From fashion trends to style tips, we’re here to ignite your imagination, empower your self-expression, and guide you on a sartorial journey that exudes confidence and authenticity in our как как создать кнопку в Discord Py section.
скачай бесплатно книги страница 65
D0 96 D0 B8 D0 B2 D0 Be D1 82 D0 Bd D1 8b D0 B5 20 D0 B0 D1 84 D1 80 D0 B8 D0 Ba D0 B8 20 D0 Bd
цветы в живописи маслом картинки D0 Ba D0 B0 D1 80 D1 82 D0 B8 D0 Bd D1 8b D0 Bc D0 B0 D1 81 D0
Довів до істерики російську блогершу і фанатку СССР (eng Sub)
Довів до істерики російську блогершу і фанатку СССР (eng Sub)
Монети Русі з тризубами (срібники і златники) і не тільки можна замовити тут: arteldelo .ua video uploaded from my mobile phone. Монети Русі з тризубами (срібники і златники) і не тільки можна замовити тут: arteldelo .ua Источники изображений: 1. youtu.be 60tohvjkvje 2. Эндокринолог с научным подходом Подписывайтесь, чтобы не пропустить другие полезные видео Записаться на Монети Русі з тризубами (срібники і златники) і не тільки можна замовити тут: arteldelo .ua Сериал Кухня, 22 серия Узнай, почему роллы называются “Филадельфия” и “Калифорния”, а не по японски: Монети Русі з тризубами (срібники і златники) і не тільки можна замовити тут: arteldelo .ua Монети Русі з тризубами (срібники і златники) і не тільки можна замовити тут: arteldelo .ua Мій patreon: patreon morozenko Мій telegram канал: t.me morozenko o Мій instagram: В прошлом году в Узбекистане заявки на эмиграцию в США подали более 2 млн человек originally published at hello to all , welcome to my channel which i provide legal advice and real estate investment services in ukraine subscribe to
Conclusion
After exploring the topic in depth, it is clear that article delivers useful information regarding как как создать кнопку в Discord Py. From start to finish, the writer demonstrates a deep understanding on the topic. Notably, the discussion of Z stands out as a highlight. Thank you for taking the time to this article. If you have any questions, feel free to reach out through social media.
I look forward to hearing from you. Moreover, below are a few related content that might be interesting:
Источник: otosection.com