Почему бот зависает при переходе на стейт?
Бот зависает при переходе на стейт до любого следующего действия, не могу понять в чём причина. Весь код большой, поэтому приведу, как мне кажется, проблемные участки.
На первом участке кода при нажатии кнопки начать поиск пользователя просят ввести город, если его нет в бд, то его перекидывает на стейт ввода города. Если пользователь ввел город ранее, то его перекидывает на следующий этап.
На втором участке хендлер получения города и записи его в бд и переход на следующий этап, что и в первом хендлере.
На третьем участке обозначен следующий этап куда пользователь в любом случае должен попасть, при переходе на этот этап бот залагивает, пока не нажать любую кнопку либо ввести любой текст. Как это можно исправить?
№1
@dp.message_handler()
async def start_2(message: types.Message, state: FSMContext):
if message.text == 'Начать поиск':
con = sqlite3.connect('bot_users.db')
cur = con.cursor()
cur.execute("SELECT city FROM bot_users WHERE chat_id=%d" % message.from_user.id)
city = cur.fetchall()[0][0]
cur.close()
con.close()
if not city:
await bot.send_message(message.from_user.id, "Введите ваш город")
await bs.waiting_for_city.set()
else:
await bs.waiting_for_search.set()
№2
@dp.message_handler(state=bs.waiting_for_city, content_types=types.ContentTypes.TEXT)
async def get_city(message: types.Message, state: FSMContext):
if message.text.lower() not in cities:
await bot.send_message(message.from_user.id, 'Вашего города нет в списке')
await bot.send_message(message.from_user.id, 'Нажмите кнопку "Начать поиск ещё раз"')
await state.finish()
else:
async with state.proxy() as data:
data['user_city'] = message.text.title()
city = data['user_city']
con = sqlite3.connect('bot_users.db')
cur = con.cursor()
cur.execute("update bot_users set city = '%s' where chat_id=%d" % (city, message.from_user.id))
con.commit()
cur.close()
con.close()
await state.finish()
await bs.waiting_for_search.set()
№3
@dp.message_handler(state=bs.waiting_for_search, content_types=types.ContentTypes.TEXT)
async def search(message: types.Message, state: FSMContext):
await bot.send_message(message.from_user.id, 'Вам будут показаны машины')
con = sqlite3.connect('bot_users.db')
cur = con.cursor()
cur.execute('SELECT city FROM bot_users WHERE chat_id=%d' % message.from_user.id)
city = cur.fetchall()[0][0]
print(city)
cur.execute("SELECT * FROM cars where city='%s'" % city)
all_cars = cur.fetchall()
cur.execute("SELECT balance from bot_users where chat_id=%d" % message.from_user.id)
user_bal = cur.fetchall()[0][0]
if not all_cars:
await message.reply('В данный момент нет доступных машин')
else:
for x in cars:
body = x[1] + ', ' + x[2] + ', ' + x[3] + '\n\n' + x[4] + '\n\n' + 'Цена: ' + str(x[6]) + 'рублей.'
await bot.send_photo(message.from_user.id, photo=x[5], caption=body)
cur.close()
con.close()