Vk Api: ошибка с if
Вечер добрый! Недавно начала работу с VkApi, для того, чтобы написать бота для своей студии. Так вот в чём заключилась моя проблема сегодня. Если я создаю if внутри if'a, происходит такой прикол, в общем чего я тут говорю, лучше кодом покажу!
# -*- coding: utf8 -*-
import vk_api
import time
import random2
from config import config_pass
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
token = config_pass
bh = vk_api.VkApi(token = token)
give = bh.get_api()
longpoll = VkLongPoll(bh)
vk_session = vk_api.VkApi(token=token)
vk = vk_session.get_api()
def blasthack(id, text):
bh.method('messages.send', {'user_id' : id, 'message' : text, 'random_id': 0})
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
if event.to_me:
message = event.text.lower()
id = event.user_id
message = event.text.lower()
id = event.user_id
if message == 'начать':
blasthack(id, 'Тестовое сообщение')
if message == 'привет':
blasthack(id, 'Тестовое сообщение 2')
else:
blasthack(id, 'Чёт не то ты сделал')
Собственно, что тут происходит. У нас есть блок кода: if message == 'начать' и if message == 'привет', message == 'привет' находится внутри message == 'начать', потому при вводе первой команды ( Начать ) для активации первого блока message == 'начать', сообщение пользователя ( Начать ) проверяется также и в блоке message == 'привет' и т.к. Начать != Привет на экран будет выведено: Чёт не то ты сделал. В этом и заключается моя проблема. Python 1 сообщение проверяет в if'ах и не даёт времени для ввода сообщения Привет, он сразу проверяет Начать и в 1 и во 2 блоке кода. Мне же нужно, чтобы после ввода команды Начать у меня было время, чтобы ввести ещё и команду привет. Надеюсь объяснил понятно и максимально надеюсь на помощь. Вроде изучаю пайтон уже несколько лет, а сейчас сижу тут как затупок не могу рядовую проблему решить :)
Ответы (1 шт):
Можно организовать state machine, например. Чтобы после обработки одного сообщения возвращаться в цикл. Для этого, как вариант, хранить где-то этап, на котором находится обработка сообщений.
Что-то вроде этого:
wait_for = 'начать'
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
if event.to_me:
message = event.text.lower()
id = event.user_id
if wait_for == 'начать':
if message == 'начать':
blasthack(id, 'Тестовое сообщение')
wait_for = 'привет'
else:
blasthack(id, 'Чёт не то ты сделал')
elif wait_for == 'привет':
if message == 'привет':
blasthack(id, 'Тестовое сообщение 2')
else:
blasthack(id, 'Чёт не то ты сделал')
wait_for = 'начать' # где на самом деле возвращаться на предыдущий этап зависит от логики вашей программы