Не работает код для клавиатуры vk-api python
Здравствyйте, я нашёл в интернете код через который можно в лс группы вконтакте добавить клавиатуру. Почему то этот код запускается без ошибок но в лс бота после отправки сообщения с текстом 'клавиатура' клавиатура не появляется.
import vk_api
import time
import json
token = "токен"
vk = vk_api.VkApi(token=token)
vk._auth_token()
def get_button(label, color, payload=""):
return {
"action": {
"type": "text",
"payload": json.dumps(payload),
"label": label
},
"color": color
}
keyboard = {
"one_time": False,
"buttons": [
get_button(label="Кнопка 1", color="positive"),
get_button(label="Кнопка 2", color="negative"),
get_button(label="Кнопка 3", color="primary"),
get_button(label="Кнопка 4", color="default")
]
}
keyboard = json.dumps(keyboard, ensure_ascii=False).encode('utf-8')
keyboard = str(keyboard.decode('utf-8'))
while True:
try:
messages = vk.method("messages.getConversations", {"offset": 0, "count": 20})
if messages["count"] >= 1:
id = messages["items"][0]["last_message"]["from_id"]
body = messages["items"][0]["last_message"]["text"]
if body == "привет":
vk.method("messages.send", {"peer_id": id, "message": "Привет друг"})
elif body == "клавиатура":
vk.method("messages.send", {"peer_id": id, "message": "Выберите кнопку!", "keyboard": keyboard})
elif body == "Кнопка 1":
vk.method("messages.send", {"peer_id": id, "message": body})
elif body == "Кнопка 2":
vk.method("messages.send", {"peer_id": id, "message": body})
elif body == "Кнопка 3":
vk.method("messages.send", {"peer_id": id, "message": body})
elif body == "Кнопка 4":
vk.method("messages.send", {"peer_id": id, "message": body})
elif body == "Начать":
vk.method("messages.send", {"peer_id": id, "message": "Начнем"})
else:
vk.method("messages.send", {"peer_id": id, "message": "Не понял тебя!"})
time.sleep(0.5)
except Exception as E:
time.sleep(1)
Ответы (2 шт):
Автор решения: Rufat
→ Ссылка
Возможно поможет замена строки:
body = messages["items"][0]["last_message"]["text"]
на следующую:
body = messages["items"][0]["last_message"]["text"].lower()
Автор решения: Михаил Муругов
Если хотите по-своему, то:
→ Ссылка
В библиотеке vk_api уже есть методы, позволяющие работать с клавиатурой. Не изобретайте велосипед
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
keyboard = VkKeyboard(one_time=False)
keyboard.add_button(label="Кнопка 1", color=VkKeyboardColor.POSITIVE) # Зелёный цвет
keyboard.add_line() # Следующие кнопки будут под этой
keyboard.add_button(label="Кнопка 2", color=VkKeyboardColor.PRIMARY) # Синий цвет
keyboard.add_button(label="Кнопка 3", color=VkKeyboardColor.DEFAULT) # Белый цвет
# ...
vk.method("messages.send",
{
"peer_id": id,
"message": "Выберите кнопку!",
"keyboard": keyboard.get_keyboard() # Возвращает JSON нашей клавиатуры
}
)
Если хотите по-своему, то:
- Во-первых, замените значение параметра
payloadпо умолчанию наNone, потому что пустая строка иNoneэто разные вещи.
def get_button(label, color, payload=None):
- Во-вторых, поле
buttonsдолжно содержать список списков, где список первого уровня это ряды, а списки второго уровня это кнопки в ряду.
keyboard = {
"one_time": False,
"buttons": [
[ # Эти кнопки будут в первом ряду
get_button(label="Кнопка 1", color="positive"),
get_button(label="Кнопка 2", color="negative"),
get_button(label="Кнопка 3", color="primary")
],
[ # Эта кнопка будет во втором ряду
get_button(label="Кнопка 4", color="default")
]
]
}