Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2020, 15:47   #1
Resing
 
Регистрация: 11.12.2020
Сообщений: 7
По умолчанию бот для вк - условие по которому будет срабатывать нажатие кнопки

Добрый день, пишу бот для вк на питоне, и столкнулся с проблемой такого рода. По задумки пользователь пишет буквы д бот отправляет клавиатуру с двумя кнопками, пользователь выбирает одну их них и дальше обработчик выполняет действие. Проблема в том что не могу придумать условие по которому будет срабатывать нажатие кнопки. Знаю что можно сделать условие по тексту который будет выдавать клавиатура, но меня это не устраивает.

Код:
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"})
Resing вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler. Нажатие кнопки F9 и условие kuzzyatina Помощь студентам 0 16.06.2014 20:47
While (нажатие кнопки) azhell Общие вопросы Delphi 1 09.08.2011 23:23
отследить нажатие кнопки со стрелкой для раскрытия поля со списком Bezdar Microsoft Office Excel 4 16.03.2010 12:47
нажатие кнопки beygul Помощь студентам 2 30.01.2010 21:34
нажатие кнопки xakkkkker Работа с сетью в Delphi 1 20.11.2008 01:08