JavaRush /Курси /Модуль 4: FastAPI /Створення простого бота: відповідь на текстові повідомлен...

Створення простого бота: відповідь на текстові повідомлення

Модуль 4: FastAPI
Рівень 18 , Лекція 3
Відкрита

Почнемо з простого. Усі Telegram-боти дотримуються одного принципу: вони чекають на подію (у нашому випадку — повідомлення) і формують відповідь. Уяви, що це офіціант у ресторані, який приймає замовлення і приносить страви. У світі ботів події називаються "update", а шеф-кухарю допомага — python-telegram-bot.

Коли користувач відправляє повідомлення нашому боту, Telegram API передає інформацію у вигляді подій. Наше завдання — відстежувати ці події, обробляти їх і повертати відповідь.

Структура проєкту

Ось мінімальна структура нашого проєкту:


telegram_bot/
    ├── bot.py        # Основний код бота
    ├── requirements.txt # Залежності проєкту

Твій перший бот: привіт, світ!

Перш ніж писати код, переконайся, що у тебе встановлений python-telegram-bot. Якщо ні, виконай команду:

pip install python-telegram-bot

Крок 1: Підключимо бібліотеку і налаштуємо бота

Створи файл bot.py і додай такий код:


from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters

# Створюємо екземпляр додатка
TOKEN = "ВАШ_API_КЛЮЧ_БОТА"  # Не забудь вставити свій токен
app = ApplicationBuilder().token(TOKEN).build()

ApplicationBuilder — це серце твого бота. Тут ми підключаємо API-токен, через який Telegram ідентифікує бота.

Крок 2: Реалізуємо команду /start

Тепер додамо обробник для команди /start. Це перша команда, з якої зазвичай починається знайомство користувача з ботом.


async def start(update: Update, context):
    """Функція для обробки команди /start"""
    user = update.effective_user
    await update.message.reply_text(f"Привіт, {user.first_name}! Я твій новий бот. Чим можу допомогти?")
    
# Додаємо обробник команди /start
app.add_handler(CommandHandler("start", start))

Коли користувач напише /start, бот надішле привітальне повідомлення.

Крок 3: Відповіді на текстові повідомлення

Звичайні повідомлення (не команди!) ми будемо обробляти за допомогою обробника MessageHandler.


async def echo(update: Update, context):
    """Відповідь на будь-яке текстове повідомлення"""
    text = update.message.text
    await update.message.reply_text(f"Ти написав: {text}")
    
# Додаємо обробник повідомлень
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

У функції echo ми просто повертаємо текст, який ввів користувач. Це схоже на дзеркало: бот повторює кожне твоє слово. Пізніше зробимо цю функцію розумнішою.

Крок 4: Запуск бота

Залишилося лише запустити бота. Для цього додай у кінець файлу bot.py:


if __name__ == "__main__":
    print("Бот запущено... Натисни Ctrl+C, щоб зупинити.")
    app.run_polling()

Тепер можеш запустити скрипт:

python bot.py

Відкрий Telegram, знайди свого бота і напиши: /start.

Якщо бот відповість «Привіт, [твоє ім'я]! Я твій новий бот», вітаю — твій перший бот готовий! Спробуй написати щось інше, і він повторить твоє повідомлення.


Покращення функціоналу: команди /help і /about

Тепер додамо ще кілька команд: /help і /about.


async def help_command(update: Update, context):
    """Функція для обробки команди /help"""
    await update.message.reply_text("Я можу повторювати твої повідомлення або допомогти з чимось іншим. Спробуй!")

async def about_command(update: Update, context):
    """Функція для обробки команди /about"""
    await update.message.reply_text("Я бот, створений для навчання. Моє призначення — допомагати тобі!")
    
# Додаємо обробники
app.add_handler(CommandHandler("help", help_command))
app.add_handler(CommandHandler("about", about_command))

Тепер користувач зможе написати /help або /about, і бот відповість відповідними повідомленнями.


Типові помилки та їх виправлення

Як і в будь-якому проєкті, можна зіткнутися з проблемами. Розберемо кілька поширених помилок.

Помилка: Invalid token

Якщо замість запуску бота ти побачив повідомлення Invalid token, перевір, чи правильно скопійовано API токен. Переконайся, що в токені немає зайвих символів або пробілів.

Помилка: Бот не відповідає

Якщо бот не відповідає на команди, перевір:

  • Ти зареєстрував обробники для всіх команд?
  • Чи використовуєш правильні фільтри в MessageHandler?
  • Чи запущений твій бот через app.run_polling()?

Помилка: «Не можу повторити твоє повідомлення»

Якщо бот не може відповісти на текстові повідомлення, можливо, ти намагаєшся обробляти команди (наприклад, /start) в обробнику тексту. Переконайся, що у фільтрах ти виключаєш команди за допомогою ~filters.COMMAND.


Практичне застосування

Цей простий бот вже можна використовувати в невеликих проєктах. Наприклад:

  • Створити довідкового бота для видачі інформації за запитами.
  • Розробити чат-бота для тестування користувацьких інтерфейсів.
  • Використовувати бота для спілкування в реальному часі в групах.

Додаткове завдання: зробимо бота цікавішим

Спробуй додати в бота розпізнавання ключових слів. Наприклад:

  1. Якщо користувач пише "Привіт", бот відповідає "Привіт!".
  2. Якщо користувач питає "Як справи?", бот відповідає "Усе чудово, дякую, що питаєш!".

Для цього модифікуй функцію echo:


async def echo(update: Update, context):
    """Відповідь на текстові повідомлення з обробкою ключових слів"""
    text = update.message.text.lower()
    
    if "привіт" in text:
        await update.message.reply_text("Привіт!")
    elif "як справи" in text:
        await update.message.reply_text("Усе чудово, дякую, що питаєш!")
    else:
        await update.message.reply_text(f"Ти написав: {text}")

Тепер бот стане трохи розумнішим!


Твій Telegram-бот готовий. У наступній лекції ми навчимося підключати нашого бота до FastAPI через вебхуки, щоб обробляти повідомлення ефективніше. Поки протестуй свого нового бота і подумай, які ще «фішки» можна додати.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ