Не работает кнопка у бота в вк
Пишу бота для группы в контакте. Начал добавлять кнопки, но они не появляются в сообщениях с ботом. При этом ошибки программа не выдает.
import vk_api
from vk_api import VkUpload
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.utils import get_random_id
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
keyboard = VkKeyboard(one_time=False)
keyboard.add_button(label="Кнопка 1", color=VkKeyboardColor.POSITIVE)
token = 'token'
image = ''
vk_session = vk_api.VkApi(token = token)
session_api = vk_session.get_api()
longpull = VkLongPoll(vk_session)
upload = VkUpload(vk_session)
def send_msg(id, msg):
vk_session.method('messages.send', {'user_id': id, 'message': msg, 'random_id': get_random_id()})
def send_loud_photo(id):
vk_session.method('messages.send', {'user_id': id, 'random_id': get_random_id(), 'attachment':
','.join(attachments)})
def send_photo(id, url):
vk_session.method('messages.send', {'user_id': id, 'attachment': url, 'random_id':
get_random_id()})
for event in longpull.listen():
if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
msg = event.text.lower()
id = event.user_id
attachments = []
upload_image = upload.photo_messages(photos=image)[0]
attachments.append('photo{}_{}'.format(upload_image['owner_id'], upload_image['id']))
if msg == 'привет':
send_msg(id, 'Привет')
elif msg == 'фото1':
send_photo(id, 'url')
elif msg == 'фото2':
send_loud_photo(id)
elif msg == 'ссылка':
send_msg(id, r'https://vk.com/id'+str(id))
else:
send_msg(id, 'неизвестное собщение')
Ответы (2 шт):
Автор решения: Lightman LP
→ Ссылка
Вы создали клавиатуру, добавили в неё кнопку, но нигде клавиатуру не отправили.
Автор решения: Komedik
→ Ссылка
Если нужна текстовая кнопка, то напишите:
import json
def get_button(label, color, payload=''):
return {
'action' : {
'type' : 'text',
'payload' : json.dumps(payload),
'label' : label
},
'color' : color
}
keyboard = {
'one_time' : True/False #Уберётся ли клавиатура после нажатия на любую из её кнопок
'buttons' : [ #Кнопки
#Если кнопка одна - оставьте так.
#Если нужно несколько кнопок, то поставьте в конце ",",
#если же нужно разделить по столбцам, то при каждом новом столбце,
#кнопку начала столбца нужно поместить в "[]":
get_button(label='текст кнопки', color='цвет')
[get_button(label='текст кнопки', color='цвет')],
[get_button(label='текст кнопки', color='цвет')],
[get_button(label='текст кнопки', color='цвет')],
[get_button(label='текст кнопки', color='цвет')]
]
}
keyboard = json.dumps(keyboard, ensure_ascii=False).encode('utf-8')
keyboard = str(keyboard.decode('utf-8'))
А также измените части функций send() на это:
def send_msg(id, msg, keyboard):
vk_session.method('messages.send', {'user_id': id, 'message': msg, 'keyboard' : keyboard, 'random_id': get_random_id()})
Если писать так, то будет проще делать клавиатуры, а также вы всегда будете в курсе, где, что и как. Также, такие кнопки можно быстро менять по их типу. Но если не надо - используйте только замену send()