Как в VK-API на Python удалить из клавиатуры кнопку с определённым текстом?

Пишу Бота для ВК Сообщества на Python.

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


Ответы (1 шт):

Автор решения: shinoxzu

Заново отправить клавиатуру, но уже без нажатой кнопки.

Предположим, что определять, какую именно кнопку надо удалить, Вы будете по пришедшему из события payload’у. Ход действий будет таким:

  1. Сохраняете объект клавиатуры перед первой отправкой (old_keyboard);
  2. Как только пользователь нажимает на кнопку, Вы создаёте пустой словарь с новой клавиатурой (new_keyboard) и добавляете туда все кнопки, кроме той, payload которой равен payload’у кнопки из события (chosen_button). Также не забудьте проверить, есть ли в ряду вообще кнопки, чтобы не отправлять лишний пустой список;
  3. Отправляете готовую новую клавиатуру и сохраняете ее (в переменную old_keyboard) для дальнейшего использования. Псевдо-код того, как это может выглядеть:
old_keyboard = {
    "one_time": False, 
    "buttons": [
        button1, button2, ...
    ]
}
chosen_button = "button1"
new_keyboard = {
    "one_time": False, 
    "buttons": []
}

for row in old_keyboard["buttons"]:
    to_append = [
        btn for btn in row if button["action"]["payload"] != chosen_button
    ]
    if to_append:
        new_keyboard["buttons"].append(to_append)

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

→ Ссылка