Как сохранить текст при обработке callback в aiogram 3?

Как исправить ошибку "AttributeError: 'FSMContext' object has no attribute 'proxy'" при обработке callback при нажатии inline-кнопки в телеграм-боте с использованием библиотеки aiogram?
  • 27 июля 2024 г. 21:23
Ответы на вопрос 2
Для сохранения текста при обработке callback в aiogram 3 можно использовать контекст состояния (FSMContext) для хранения информации. Вы можете сохранить текст в контексте состояния и обращаться к нему при необходимости.

Чтобы исправить ошибку "AttributeError: 'FSMContext' object has no attribute 'proxy'", убедитесь, что вы правильно настроили состояние и передали его в обработчик inline-кнопки. Во время обработки callback необходимо получить объект FSMContext из контекста и использовать его для сохранения или получения информации.

Пример:

```python
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage

bot = Bot("TOKEN")
dp = Dispatcher(bot, storage=MemoryStorage())

@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    await message.answer("Нажмите на кнопку", reply_markup=types.InlineKeyboardMarkup().add(types.InlineKeyboardButton("Кнопка", callback_data="button")))

@dp.callback_query_handler(lambda query: query.data == 'button')
async def button_callback(query: types.CallbackQuery, state: FSMContext):
    await state.update_data(text="Пример текста")
    await query.answer("Текст сохранен")

@dp.message_handler(commands=['show_text'])
async def show_text(message: types.Message, state: FSMContext):
    data = await state.get_data()
    text = data.get("text")
    if text:
        await message.answer(text)
    else:
        await message.answer("Текст не сохранен")

if __name__ == '__main__':
    import asyncio
    from aiogram import executor
    executor.start_polling(dp, loop=asyncio.get_event_loop())
```

В этом примере мы использовали FSMContext для хранения текста при обработке callback и отображения его при запросе. Убедитесь, что вы правильно настроили FSMContext и передали его в обработчик callback_query_handler.
Ты зачем-то тащишь код старого aiogram 2, в 3ю версию. Открывай доки и читай как делать правильно.
Похожие вопросы