Базовый принцип обработки текста
Любой текст, отправленный пользователем боту (кроме команд), можно обработать с помощью:
- Функции-обработчика с параметрами
update
и context
.
- Фильтра
filters.TEXT
, чтобы ловить только текстовые сообщения.
from telegram.ext import MessageHandler, filters
async def handle_text(update: Update, context: CallbackContext):
"""Функция для обработки обычных текстовых сообщений"""
user_text = update.message.text # Получаем текст
await update.message.reply_text(f"Вы написали: {user_text}")
# Регистрация обработчика
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_text))
Компонент |
Описание |
update: Update |
Содержит информацию о сообщении (текст, отправитель, чат и т.д.). |
update.message.text |
Текст, который отправил пользователь. |
filters.TEXT |
Фильтр, который пропускает только текстовые сообщения. |
~filters.COMMAND |
Исключает сообщения, начинающиеся с / (чтобы не конфликтовать с командами). |
Алгоритм обработки текста
-
Получить текст сообщения
user_text = update.message.text
-
Привести к нижнему регистру (для удобства)
user_text = user_text.lower()
-
Анализ содержания
Проверяем ключевые слова или фразы:
if "привет" in user_text:
await update.message.reply_text("Привет! 😊")
elif "пока" in user_text:
await update.message.reply_text("До свидания! 👋")
else:
await update.message.reply_text("Не понимаю ваш запрос.")
-
Разделение сложных запросов
Если нужно обрабатывать комбинации (например, "фильм жанр фантастика"):
parts = user_text.split() # Разбиваем текст по пробелам
if len(parts) >= 3 and parts[0] == "фильм" and parts[1] == "жанр":
genre = parts[2]
# Поиск фильма по жанру...