Невозможно отправить клавиатуру через 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
- Не гарантирую результат, но стоит вот так попробовать, ругается на слишком много кнопок в строке