Как закончить получать сообщения от юзера в aiogram?
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Command
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
import re
import pygsheets
from states import Form
path='***'
gc = pygsheets.authorize(service_account_file=path)
sh = gc.open('pythontest')
wks = sh[0]
bot = Bot(token='###')
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
data = []
@dp.message_handler(Command('start'))
async def start(message: types.Message):
data.clear()
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
button_1 = types.KeyboardButton(text="Запустить")
keyboard.add(button_1)
await message.answer("Добро пожаловать на онлайн \n Я виртуальный помощник ### от ### \n Жми «запустить» и мы начнем", reply_markup=keyboard)
await Form.name.set()
@dp.message_handler(lambda message: message.text == "Запустить", state=Form.name)
async def process_name(message: types.Message, state: FSMContext):
await message.answer("Как я могу к тебе обращаться?")
await Form.age.set()
@dp.message_handler(state=Form.age)
async def process_age(message: types.Message, state: FSMContext):
await state.update_data(name=message.text)
data.append(message.text)
await message.answer(f"Отлично, {message.text} подскажи пожалуйста, сколько тебе лет?")
await Form.F.set()
@dp.message_handler(state=Form.F)
async def process_F(message: types.Message, state: FSMContext):
data.append(message.text)
await message.answer(f"Выбери свой тип Ф___ и напиши ответ цифрой (от 1-6)")
await Form.Forma.set()
@dp.message_handler(state=Form.Forma)
async def process_Forma(message: types.Message, state: FSMContext):
data.append(message.text)
await message.answer(f"Превосходно! Давай перейдем к твоей ____ выбери свою форму___(от 1-12))")
await Form.Position.set()
@dp.message_handler(state=Form.Position)
async def process_surname(message: types.Message, state: FSMContext):
data.append(message.text)
await message.answer(f"Выбери расположение……..\n(Фото с выбором 1 или 2)")
await Form.OPGinhale.set()
@dp.message_handler(state=Form.OPGinhale)
async def process_OPGinhale(message: types.Message, state: FSMContext):
data.append(message.text)
await message.answer("Супер! До консультации и подарочной скидки 20% на остался последний шаг")
await message.answer("Сделай замеры ОПГ вдох")
await Form.OPGouthale.set()
@dp.message_handler(state=Form.OPGouthale)
async def process_OPGouthale(message: types.Message, state: FSMContext):
data.append(message.text)
await message.answer("Сделай замеры ОПГ выдох")
await Form.OG.set()
@dp.message_handler(state=Form.OG)
async def process_OG(message: types.Message, state: FSMContext):
await message.answer("Сделай замеры ОГ")
data.append(message.text)
await Form.end.set()
@dp.message_handler(state=Form.end)
async def process_end(message: types.Message, state: FSMContext):
await message.answer("Спасибо за ответы!")
data.append(message.text)
data.append(message.from_user.id)
data.append(message.from_user.full_name)
wks.append_table(data,start='A2', end=None,
dimension='ROWS', overwrite=False)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
В последнем хэндлере заканчивается работа бота но юзер все равно может присылать сообщения и данные заново записываются в таблицу. Как это исправить?
Источник: Stack Overflow на русском