Невозможно отправить клавиатуру через vk_api

Есть такой код:

BUTTONS_IN_ROW = 3

def renderCollection(collection, parent, isAdmin=False):
    keyboard = VkKeyboard(one_time = True)
    print('|Keyboard')
    if isAdmin:
        print('|>adminButtons (added as admin)')
        keyboard.add_button(f'Добавить статью в {parent}', color = VkKeyboardColor.NEGATIVE)
        keyboard.add_button(f'Удалить статью в {parent}', color = VkKeyboardColor.NEGATIVE)
        keyboard.add_line()
    print('|>parentButton '+parent)
    keyboard.add_button(f'{parent}', color = VkKeyboardColor.POSITIVE)
    if collection is not None:
        keyboard.add_line()
        for item in collection:
            if collection.index(item) % BUTTONS_IN_ROW == 0:
                print('|>newLine')
                keyboard.add_line()
            print('|>column '+item)
            keyboard.add_button(f'{item}')
    return keyboard

Раньше код прекрасно работал, но с недавнего времени стал выводить ошибку

ERROR:root:Runtime error (string 96) in function sendMessage()>> [911] Keyboard format is invalid: row 2 contains too much columns

и таков вывод отладки

|Keyboard
|>adminButtons (added as admin)
|>parentButton Меню
|>newLine
|>column Шляпой

по отладке видно, что лишних колонок не создаётся, хотя vk_api выкидывает ошибку.

p.s. функция отправки сообщений

def sendMessage(user_id, kbandmsg):
    try:
        if kbandmsg is not None:
            if kbandmsg[0] is not None:
                vk_api.VkApi(token = getToken()).method('messages.send', {'user_id': user_id,
                                                                          'random_id': get_random_id(),
                                                                          'message': kbandmsg[1],
                                                                          'keyboard': kbandmsg[0].get_keyboard()})
            else:
                vk_api.VkApi(token = getToken()).method('messages.send', {'user_id': user_id,
                                                                          'random_id': get_random_id(),
                                                                          'message': kbandmsg[1]})
        else:
            logger.error(f"Trying to send NoneType object... That's bad!")
    except Exception as e:
        logger.error(f"Runtime error (string 96) in function sendMessage()>> {e}")

p.p.s библиотеку обновил до последней версии, и не в ней дело


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

Автор решения: Batman22827
def renderCollection(collection, parent, isAdmin=False):
   keyboard = VkKeyboard(one_time = True)
   print('|Keyboard')
   s = 0
   if isAdmin:
       print('|>adminButtons (added as admin)')
       keyboard.add_button(f'Добавить статью в {parent}', color=VkKeyboardColor.NEGATIVE)
       keyboard.add_button(f'Удалить статью в {parent}', color= VkKeyboardColor.NEGATIVE)
       keyboard.add_line()
    print('|>parentButton '+parent)
    keyboard.add_button(f'{parent}', color = VkKeyboardColor.POSITIVE)
    if collection is not None:
    keyboard.add_line()
    for item in collection:
        print('|>column '+item)
        keyboard.add_button(f'{item}')
        s+=1
        if s %% 4 == 0:
            keyboard.add_line()
    return keyboard
  • Не гарантирую результат, но стоит вот так попробовать, ругается на слишком много кнопок в строке
→ Ссылка