@EVG82

Почему не срабатывает FSM?

Не могу понять причину.
Делаю почти по аналогии как в видео
https://www.youtube.com/watch?v=nF1p1JjuR3U&t=150s
Только свои данные подставляю.

Вот кусок кода исполняемого файла:

########################################################################
from create_bot import dp
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
import logging  # ПРОСТО ВЫВОДИТ В КОНСОЛЬ ИНФОРМАЦИЮ, КОГДА БОТ ЗАПУСТИТСЯ
from aiogram import types
from create_bot import dp, bot
from aiogram.dispatcher import Dispatcher
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, \
    InlineKeyboardButton
import sqlite3
import asyncio
import emoji
########################################################################
import datetime
from aiogram.dispatcher.filters import Text
from aiogram.types import message
######################################################################
from aiogram.dispatcher.filters import Command  ## 
from aiogram.contrib.fsm_storage.memory import MemoryStorage  ##
from aiogram.dispatcher.filters.state import StatesGroup, State  ##
######################################################################

from keyboards import start1 ## ИМПОРТИРУЕМ ДАННЫЕ ИЗ ФАЙЛОВ keyboard.py
######################

storage = MemoryStorage()  # FOR FSM
dp = Dispatcher(bot, storage=storage)



'''async def on_startup():
    print('Бот Вышел онлайн')'''
# Тут еще подключение к базе данных будет. чтобы сразу как юзер зашел создадась база данных

logging.basicConfig(format=u'%(filename)s [LINE:%(lineno)d] #%(levelname)-8s [%(asctime)s] %(message)s',
                    level=logging.INFO,
                    )
from handlers import state
#state.register_handlers_state(dp)

#admin.register_handlers_admin(dp)  пока андминки нет он не нужен
from aiogram.dispatcher import FSMContext

class FSMState(StatesGroup):
    waiting_email = State()

@dp.message_handler(commands="start")
async def commands_start(message: types.Message):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton(text="Выбрать", callback_data="start_text"))
    await message.answer("Приветствую тебя, Evgeny!\n"
                                                 "➡️Выбирай с чего начнем:\n", reply_markup=keyboard)


# отлавливаем событие колбек на инлайн кнопке и получаем меню по сценариям
@dp.callback_query_handler(text="start_text")
async def start_text(call: types.CallbackQuery):
    await call.message.answer('текст', reply_markup=start1)

#Вот до этого места все работает.
# клавиатура импортирована и работает
#Сценарий1 это команда на кнопке для запуска FSM
    # Начало ввода почты
@dp.message_handler(commands='Сценарий1', state=None)
async def get_email(message: types.Message):
    await FSMState.waiting_email.set()
    await message.reply('Введите почту')  #это не появляется, следовательно FSM не запущена.

    # Ловим ответ и пишем в словарь
@dp.message_handler(content_types=['waiting_email'], state=FSMState.waiting_email)  # временно для понимания
async def get_email(massage: types.Message, state: FSMContext):
    async with state.proxy() as data:
            data['email'] = message.text
            await meassage.reply(str(data))
            # Бот выходит из машины состояний. и тут надо еще БД прицепить
            await state.finish()
keyboard = types.InlineKeyboardMarkup()
keyboard.add(types.InlineKeyboardButton(text="Записаться1",


1 Верная ли написаны хендлеры?
2 По какой причине не срабатывает?
  • Вопрос задан
  • 606 просмотров
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
Нет такого типа контента "waiting_email". Уберите его, если не нужен, ну или замените на "text".
Нельзя просто взять одно слово, заменить другим, и получить рабочий код
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы