@NukiEngine

Делаю телеграм бота на aiogram не работает машина состояний (FSM)?

import aiogram
import logging
import sqlite3

from aiogram import Dispatcher, Bot, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import FSMContext
from aiogram.types import ReplyKeyboardMarkup, InlineKeyboardButton

#Статусы пользователей
default_status = 'Обычный'
admin_status = 'Администратор'
banned_status = 'Заблокирован'

storage = MemoryStorage()

class SendNewPhoto(StatesGroup):
    HootPhoto= State()
    ZadPhoto= State()
    RegPhoto = State()

#LANGUAGES
ru = 'Русский'


owner = 1745529081
bot = Bot(token='6053236780:AAFl0FAlyw-dH4Z0s0S006BRVrKZPIjmkoY')
dp = Dispatcher(bot, storage=storage)

logging.basicConfig(level=logging.INFO)

user_Rkb = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
user_Rkb.add(InlineKeyboardButton(text='Русский'))




redy_ru = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
redy_ru.add(InlineKeyboardButton(text='Готов'))


no_ru_kb = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
no_ru_kb.add(InlineKeyboardButton(text='Нет'))

@dp.message_handler(content_types=['start'])
async def start_cmd(message: types.Message):
    await message.answer('welcome\nChoice language:', reply_markup=user_Rkb)

@dp.message_handler(content_types=['text'], text = 'Русский')
async def ru_choice(message: types.Message):
    user = message.from_user
    await message.answer(f'Спасибо за выбор русского языка общения\nВаш ID: {user.id}\n\nОтветьте на несколько уточняющих вопросов.')
    await message.answer('Когда вы будете готовы, нажмите кнопку "Готово"',reply_markup=redy_ru)

@dp.message_handler(content_types=['text'], text= 'Готов')
async def aredy_ru(message: types.Message):
    await message.answer('Вопрос?', reply_markup=no_ru_kb)


@dp.message_handler(content_types=['text'], text = 'Нет')
async def no_cmd(message: types.Message, state: FSMContext):
    await message.answer('В таком случае введите команду - /send_docs и отправьте фото')

@dp.message_handler(commands=[''send_photo''], content_types=types.ContentTypes.PHOTO)
async def send_ds_cmd(message: types.Message, state: FSMContext):
    await SendNewPhoto.HoodPhoto.set()
    await message.answer('Отправьте фото футболки: ')

@dp.message_handler(state=SendNewPhoto.HoodPhoto)
async def passprocc(message: types.Message, state: FSMContext):
    user = message.from_user
    await state.update_data(new_photo=message.photo[-1].file_id)
    await message.answer('Отлично! Теперь отправьте фото обратной стороны ')
    await SendNewPhoto.next()

if __name__ == '__main__':
    executor.start_polling(dp)


Ошибки никакой нет но и состояния бот не меняет
  • Вопрос задан
  • 612 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nickie000
Во-первых: в теле каждой функции def нужно указывать, какое состояние ты активируешь;
во-вторых: в параметрах диспетчера нужно указать, какое состояние его активирует.
А если проще, то посмотри пример из документации aiogram
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы