Почнемо з простого. Усі 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.
Практичне застосування
Цей простий бот вже можна використовувати в невеликих проєктах. Наприклад:
- Створити довідкового бота для видачі інформації за запитами.
- Розробити чат-бота для тестування користувацьких інтерфейсів.
- Використовувати бота для спілкування в реальному часі в групах.
Додаткове завдання: зробимо бота цікавішим
Спробуй додати в бота розпізнавання ключових слів. Наприклад:
- Якщо користувач пише "Привіт", бот відповідає "Привіт!".
- Якщо користувач питає "Як справи?", бот відповідає "Усе чудово, дякую, що питаєш!".
Для цього модифікуй функцію 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 через вебхуки, щоб обробляти повідомлення ефективніше. Поки протестуй свого нового бота і подумай, які ще «фішки» можна додати.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ