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 шт):

Автор решения: GrAnd

Можно организовать 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 = 'начать'  # где на самом деле возвращаться на предыдущий этап зависит от логики вашей программы
→ Ссылка