Перейти к содержанию

Клавиатуры и вложения

В vkbottle предусмотрено множество способов сериализации в объекты vk. Здесь будет рассмотрена клавиатура и все виды вложений

Клавиатура

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

Генераторы, как и их составляющие, импортируются из корневого пакета vkbottle либо из vkbottle.tools

Билдер-генератор клавиатуры Keyboard

Как и все его элементы полностью типизирован, рекомендуем к использованию:

from vkbottle import Keyboard

Keyboard принимает one_time (bool) и inline (bool) (для чего они нужны читайте в документации вконтакте)

У Keyboard есть методы: add, принимающий action и color; row(); get_json()

add - добавляет кнопку к текущему ряду кнопок

row - переводит "курсор" на следующий ряд кнопок

get_json - возвращает уже готовый json для прикрепления клавиатуры к сообщению (p.s. если клавиатура статична, это лучше делать сразу после генерации вне хендлера чтобы не тратить время на json.dumps каждый раз в хендлере)

Старый генератор клавиатуры keyboard_gen

Он считается устаревшим, но многим почему-то нужен, поэтому оставим это здесь

Вложения

Для того чтобы отправить вложение вконтакте вам нужно иметь его вида "type{OWNER_ID}_{ITEM_ID}", например "photo-41629685_457239401"

Строку такого вида можно передать в метод отправки сообщения как attachment и вложение отправится (пример [первый хендлер]),

но такую ссылку вы можете получить только загрузив картинку на сервера вконтакте, что делать если картинку нужно загружать на сервера вконтакте прямо во время выполнения хендлера?

Для этого есть аплоадеры!

Подробная документация по аплоадерам Пример с аплоадером [второй хендлер]

Все аплоадеры импортируются из корневого пакета vkbottle или из vkbottle.tools

Вам, скорее всего, понадобится только метод .upload (предполагается что вы уже прочитали документацию, упомянутую выше)

file_source принимает путь к файлу (еще он может принимать BytesIO, то есть читаемым файлом, если говорить упрощенно)

У аплоадеров могут быть и другие индивидуальные поля в методе upload, но что туда передать должно быть понятно из контекста, если вы забыли передать какое то поле вам будет показано чего не хватает

Еще есть темплейты

Темплейты получились у вконтакте довольно странными (~~как и многие другие вещи~~), но их поддержка в vkbottle тоже есть

Для того чтобы понимать как должны работать темплейты и как делать элементы с идентичной "структурой" рекомендуется прочитать документацию вконтакте по темплейтами

TemplateElement - обертка над элементом, по названиям полей вопросов возникнуть не должно, если возникли - возможно вы плохо ознакомились с документацей вконтакте

template_gen - принимает темплейт элементы:

from vkbottle.tools import template_gen, TemplateElement

my_template = template_gen(TemplateElement(...), TemplateElement(...), TemplateElement(...))

my_template - уже готовый json для отправки в сообщении как template

Вот пример отправки темплейта в среде хендлера с ивентом message:

message.answer("Отправляю темплейт", template=my_template)

Экзамплы по этой части туториала