Не могу завершить FSM (машину состояний)
Ошибка:
await state.finish()
NameError: name 'state' is not defined
Код:
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import StatesGroup, State
import sqlite3 as sq
db = sq.connect('usersList.db')
db.close()
storage = MemoryStorage()
bot = Bot(token=conf.TOKEN)
dp = Dispatcher(bot,storage=storage)
class Mailing(StatesGroup): #state of mailing
text = State()
photo = State()
confirmation = State()
@dp.message_handler(user_id = 889768244, commands=['sendingMessage']) #command for mailing
async def sendingMessageActivator(msg: types.Message):
await Mailing.text.set()
await bot.send_message(msg.from_user.id, "Пришли текст рассылки")
@dp.message_handler(user_id = 889768244,state=Mailing.text) #getting text for mailing
async def adminMsg(msg: types.Message):
waitingMessage = msg.text
print(waitingMessage,msg.text)
await Mailing.photo.set()
await bot.send_message(msg.from_user.id, "Пришли фото рассылки")
@dp.message_handler(user_id = 889768244,state=Mailing.photo, content_types="photo") #getting photo for mailing
async def adminMsg(msg: types.message):
waitingPhoto = msg.photo[-1].file_id
print(waitingMessage, msg.text)
await bot.send_photo(msg.from_user.id,waitingPhoto,caption=waitingMessage)
await Mailing.confirmation.set()
print(waitingMessage)
@dp.message_handler(user_id = 889768244,state=Mailing.confirmation)
async def confirmation(msg: types.Message):
#подтверждение
await state.finish()
Ответы (1 шт):
Автор решения: MyZik
→ Ссылка
Вы не передали аргумент state. Вместо
async def confirmation(msg: types.Message):
Нужно так:
from aiogram.dispatcher import FSMContext
...
async def confirmation(msg: types.Message, state: FSMContext):