Задать вопрос
@captainJacksp23

Зацикливается работа декоратора callback_query_handler, какое решение?

У меня есть декоратор callback_query_handler, который вызывается по inline кнопки. Таких кнопок у меня несколько. Когда я вызываю один из них - программа работает стабильно, но когда я пытаюсь вызвать другую, то выполняется не весь декоратор, после продолжается ранее нажатый. Решается эта проблема только ручным перезапуском программы

from aiogram import Bot, Dispatcher, executor, types
from config import TOKEN
import keyboard as kb
import requests
from bs4 import BeautifulSoup

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
   await message.answer('выберите предмет',reply_markup=kb.selless_btn)


@dp.callback_query_handler(lambda c: c.data == 'russian_9')
async def process_callback_button1(callback_query: types.CallbackQuery):
   await bot.answer_callback_query(callback_query.id)
   await bot.send_message(callback_query.from_user.id, 'Введите упражнение: ')
   @dp.message_handler(content_types=['text'])
   async def russian(message):
      number = message.text
      url = 'https://gdz.ru/class-9/russkii_yazik/ribchenkova-9/'+number+'-nom/'
      response = requests.get(url)
      response.raise_for_status()
      soup = BeautifulSoup(response.text, 'lxml')
      umage_list = []
      umg = soup.find('figure')
      umage = umg.find_all('img')
      for i in umage:
         umge = 'https:' + i.get('src')
         umage_list.append(umge)
      await message.answer(umage_list[0])
      await message.answer(umage_list[1])
      return umage_list

@dp.callback_query_handler(lambda c: c.data == 'geometry_9')
async def process_callback_button2(callback_query: types.CallbackQuery):
   await bot.answer_callback_query(callback_query.id)
   await bot.send_message(callback_query.from_user.id, 'Введите номер: ')
   @dp.message_handler(content_types=['text'])
   async def geometry(message):
      number = message.text
      url = 'https://gdz.ru/class-9/geometria/merzlyak-polonskij/'+number+'-nom/'
      response = requests.get(url)
      response.raise_for_status()
      soup = BeautifulSoup(response.text, 'lxml')
      umage_list = []
      umg = soup.find('figure')
      umage = umg.find_all('img')
      for i in umage:
         umge = 'https:' + i.get('src')
         umage_list.append(umge)
      await message.answer(umage_list[0])
      await message.answer(umage_list[1])
      return umage_list
  • Вопрос задан
  • 244 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@twistfire92
Python backend developer
Вам надо использовать FSM, машину состояний. Материала с примерами достаточно. А от вложенных хендлеров надо избавляться
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
InternetMaster
@InternetMaster
Интернет
Зачем ты внутри callback_query_handler делаешь handler сообщения?
Используй bot.register_next_step_handler после "Введите номер: "
await bot.send_message(callback_query.from_user.id, 'Введите номер: ')
await bot.register_next_step_handler(message, <НАЗВАНИЕ def>)


Уже в этом def помести всю ту блевотину которая ниже async def geometry(message):

UPD. Прилагаю офф. документацию
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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