Привет! В aiogram вы можете реализовать обработку текстовых сообщений после нажатия на кнопку, используя состояния и пользовательские состояния (FSM). Перед тем как пользователь сможет отправить текст, он должен активировать соответствующее состояние нажатием на кнопку.
Вот пример, который демонстрирует, как это сделать:
1. Убедитесь, что у вас установлены необходимые библиотеки:
```bash
pip install aiogram
```
2. Создайте файл, например `bot.py`, и добавьте следующий код:
```python
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher import filters
from aiogram.dispatcher import State, StatesGroup
from aiogram.utils import executor
API_TOKEN = 'YOUR_API_TOKEN'
# Создаем бот и диспетчер
bot = Bot(token=API_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
# Определяем состояния
class Form(StatesGroup):
waiting_for_text = State()
# Команда /start
@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):
await message.answer("Нажмите кнопку для отправки текста.", reply_markup=main_keyboard())
# Основная клавиатура с кнопкой
def main_keyboard():
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
button = types.KeyboardButton("Отправить текст")
keyboard.add(button)
return keyboard
# Обработка нажатия кнопки "Отправить текст"
@dp.message_handler(filters.Text(equals="Отправить текст"))
async def process_button(message: types.Message):
await Form.waiting_for_text.set() # Устанавливаем состояние
await message.answer("Теперь введите текст.")
# Обработка текстового сообщения после нажатия кнопки
@dp.message_handler(state=Form.waiting_for_text)
async def process_text(message: types.Message, state: FSMContext):
await state.finish() # Завершаем состояние
await message.answer(f"Вы ввели текст: {message.text}")
# Запуск бота
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
```
### Пояснения:
- Мы создаем класс `Form`, который содержит состояние `waiting_for_text`. Это состояние позволит нам управлять тем, когда бот ожидает текст от пользователя.
- Когда пользователь отправляет команду `/start`, на экране появляется кнопка "Отправить текст".
- После нажатия на кнопку бот активирует состояние `waiting_for_text` и ожидает введенного пользователем текста.
- Бот обработает текстовое сообщение только если оно пришло в состоянии `waiting_for_text`. После получения текста состояние завершается.
### Запуск
Не забудьте заменить `YOUR_API_TOKEN` на ваш токен Telegram-бота. Запустите скрипт, и ваш бот будет обрабатывать текстовые сообщения только после нажатия кнопки.