Добрый день, пишу бот для вк на питоне, и столкнулся с проблемой такого рода. По задумки пользователь пишет буквы д бот отправляет клавиатуру с двумя кнопками, пользователь выбирает одну их них и дальше обработчик выполняет действие. Проблема в том что не могу придумать условие по которому будет срабатывать нажатие кнопки. Знаю что можно сделать условие по тексту который будет выдавать клавиатура, но меня это не устраивает.
Код:
import vk_api # подключаем библиотеку с работай вк
from vk_api.longpoll import VkLongPoll, VkEventType # импортируем функции из библиотеке
from vk_api.utils import get_random_id # импорт функции для создания случайных чисел для присвоения их
# сообщениям оправленным нашим ботом для того чтобы не отправить одно сообщение 2 раза пользователю
from vk_api.keyboard import VkKeyboard, VkKeyboardColor # vk_api.keyboard работа с клавиатуров вк бота
# VkKeyboard функция создания(вызова) клавиатуры
# VkKeyboardColor функция выбора цвета и типа клавиатуры
import json
import sqlite3 # модуль работы с базами
import pyowm # импорт модуля работы с погодой
from pyowm.utils import config
from pyowm.utils import timestamps
def write_message(id_user, message):
# authorize.method обращаемся к арi вк
# метод вк messages.send служит для отправки сообщений
# 'user_id': sender айди пользователя кому отправляем сообщение
# 'message': message, текст сообщения оправки
# "random_id": get_random_id() нужен для того чтобы одно и тоже сообщение не отправлялось дважды
authorize.method('messages.send', {'user_id': id_user, 'message': message, 'random_id': get_random_id(), 'keyboard': keyboard.get_keyboard()})
# в переменную заносим наш токен группы бота
# прова доступа все права
token = "68ce18fa6a3b70506b3f5fb0d24f252afecb52a63a7a6c7a482ba8c42d3820bb1737c06d97553b0513e48"
# создаем подключение ссесии с вк по нашему токену
authorize = vk_api.VkApi(token = token)
# показываем серверу вк каким арi мы будем пользоваться и сразу авторизуемся
longpoll = VkLongPoll(authorize)
# getting_api - в переменную к авторизации добавляем доступ к апи вк
# get_api() - функция получения доступа к методам API вк
getting_api = authorize.get_api()
# keyboard переменая содержит вызов функции клавиатуры
# VkKeyboard, функция создающая клавиатуру
keyboard = VkKeyboard(one_time=True)
# добавляем в нашу переменную кнопку, так как сейчас переменная пустая
# .add_button() - функция добавления кнопки с заданным параметром
keyboard.add_callback_button('Выбрать город', color=VkKeyboardColor.POSITIVE, payload={"button": "1"})
#.add_line() добавляет перенос на следующую строку после кнопки
# для красивого размещение кнопок в интерфейсе
keyboard.add_line()
keyboard.add_callback_button('Подписка на рассылку прогноза', color=VkKeyboardColor.PRIMARY, payload={'button':"2"})
#зацикливаем цикл для выполнения бота постоянно
# для этого используем longpoll.listen()
# мы ждем сообщение от сервера вк
# в нашем случае работает тогда когда получим новое сообщение группе
for event in longpoll.listen():
# условие получения нового сообщения and event.to_me проверка на то что сообщение прислали нам
# event.text проверка на то что в сообщение пришел текс та не фото и т.д.
# MESSAGE_NEW апи из вк
if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
# заносим в переменную текст полученного сообщения
reseived_message = event.text
#gorod_pogoda_segony = pogoda_segodny(reseived_message)
# полученный текст переводим в верхний регист, для защиты от разного регистра
reseived_message = reseived_message.upper()
# помещаем в переменную айди отправителя сообщения
id_user = event.user_id
# реализация логики общения с пользователем
# если в сообщение пришло привет
if reseived_message == "Д":
write_message(id_user, "Выберите город для того чтобы узнать температуру в городе, или подписка для того чтобы получать рассылку прогноза погоды")
if ?????????????????:
кпонке задан параметр, по которому можно понять какая кнопка нажата, но вот как вытащить этот параметр из сообщения направленного после нажатия кнопки, я не могу придумать
keyboard.add_callback_button('Выбра ть город', color=VkKeyboardColor.POSITIVE,
payload={"button": "1"})