Курси програмування для дітей безкоштовно

21. Як створити бота в телеграм на Python

Як створити бота в телеграм на Python | Python для дітей | ITisFuture

Колись думали про те, як створити бота в телеграм на Python? Чи хотілося вам мати свого маленького робота, який може допомагати з буденними справами або просто розважити жартом чи цікавим коментарем?

Уявіть, що ви можете створити власного помічника в Telegram — який відповідає на повідомлення, грає у вікторини чи навіть надсилає меми за командою! 🤖
Сьогодні ми навчимося саме цьому — створимо справжнього Telegram-бота мовою Python.
Ви побачите, як кілька рядків коду можуть оживити програму, що спілкується з людьми, реагує на команди й може бути такою креативною або серйозною, як ви захочете!

Практика. Як створити бота в телеграм на Python

1: Перш за все знайдіть у пошуку BotFather – головного бота телеграм. Переконайтеся, що біля його імені є блакитна галочка, яка означає, що він справжній, а не підробка

2: Натисніть Start на панелі внизу. Бот видасть список доступних команд.

Як створити бота в телеграм на Python  | Python для дітей | ITisFuture

3: Створити нового бота можна кількома способами : написавши /newbot або клікнувши на меню Open і далі Create a new Bot. У мене вже є кілька створених, які ви бачите на фото:

Як створити бота в телеграм на Python  | Python для дітей | ITisFuture

4: Введіть ім’я, опис і натисніть створити. Ім’я має закінчуватися на bot.

Як створити бота в телеграм на Python  | Python для дітей | ITisFuture
Як створити бота в телеграм на Python  | Python для дітей | ITisFuture

5: Натисніть на нового бота. У налаштуваннях бота ви побачите ключ (пізніше він нам знадобиться), також Edit Info, Commands, MiniApps. Почнемо з Edit Info: відкрийте це меню, додайте картинку для бота

Як створити бота в телеграм на Python  | Python для дітей | ITisFuture
Як створити бота в телеграм на Python  | Python для дітей | ITisFuture

Зайдіть у Commands і додайте дві команди start, help

Як створити бота в телеграм на Python  | Python для дітей | ITisFuture

Готуємо бота

6: Тепер створюємо код! У файл додайте токен та ім’я бота з налаштувань телеграма. Зверніть увагу, що ми прописуємо токен у коді лише для тренувальних програм!

from typing import Final  


TOKEN : Final[str] = 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd'
BOT_USERNAME : Final[str] = '@ITFutureInUABot'

🔹 Final у Python — це спеціальна анотація типів із модуля typing, яка вказує, що змінну (або метод, або клас) не можна перевизначати чи змінювати. Final каже іншим розробникам: ❗ “Ця змінна — постійна, її не можна змінювати або перевизначати.”

🤔💭 Подумайте:

❓ Які небезпеки можуть бути, якщо токен від телеграм бота буде в інтернеті чи публічному git-проєкті ?
❓Як думаєте, як зберігаються токени та паролі у реальних проєктах?

До речі, це дуже популярне питання на співбесідах для програмістів: якщо в програмі є паролі, де і як ви їх зберігатимете ?

7: Спробуймо знайти свого бота у пошуку. Всі боти починаються з собачки, далі ім’я бота (юзернейм). Натисніть Start. Поки що ця кнопка не робить нічого, але бот буде у списку чатів вашого телеграму.

Як створити бота в телеграм на Python  | Python для дітей | ITisFuture
Як створити бота в телеграм на Python  | Python для дітей | ITisFuture

8: Встановлюємо бібліотеку для телеграм бота. У меню зверху оберіть … (три крапки)/Terminal/New Terminal.

pip install python-telegram-bot

Перевірте що в кінці отримали фразу :

Successfully installed anyio-4.10.0 certifi-2025.8.3 h11-0.16.0 httpcore-1.0.9 httpx-0.28.1 idna-3.10 python-telegram-bot-22.3 sniffio-1.3.1 typing_extensions-4.15.0

Останнє попередження:

[notice] A new release of pip is available: 24.0 -> 25.2
[notice] To update, run: python.exe -m pip install --upgrade pip

Свідчить про те, що версія пакетного менеджера pip застаріла і її можна оновити. Це повідомлення можна ігнорувати, але бажано, час від часу оновлювати. Для оновлення достатньо запустити команду, яка написана (для різних операційних систем вона може відрізнятись, в прикладі для Windows):

python.exe -m pip install --upgrade pip

Створюємо код для телеграм бота

9: Додамо бібліотеки телеграму. Спробуйте починати вводити код і використовувати підказки.

from typing import Final  
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, \
    filters, ContextTypes

# Constants
TOKEN : Final[str] = 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd'
BOT_USERNAME : Final[str] = '@ITFutureInUABot'

Запустіть програму. Переконайтеся, що вона нічого не видає. Якщо немає помилок – чудово! Ви впорались!

10: Створимо дві функції start, help:

"""Send a message when the command /start is issued."""
async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    user = update.effective_user
    await update.message.reply_html(f"Привіт!! {user.mention_html()}! Давай поспілкуємося?")

Аналогічно створіть help_command з іншим повідомленням.

Асинхронна функція (async def) може виконуватися “паралельно” з іншими подіями — важливо для ботів, щоб не зависати, коли кілька людей пишуть одночасно.
Вона спрацьовує, коли користувач у Telegram надсилає команду /start.
🔹 update — містить інформацію про те, що сталося (повідомлення, користувач, чат).
🔹 context — це “довідник” із додатковими можливостями, наприклад, відправлення повідомлень, збереження даних тощо.
🔹 update.effective_user — зручний спосіб дістати дані про того, хто написав боту (ім’я, ID тощо).
🔹 await означає, що бот “чекає”, поки повідомлення буде надіслане, перед тим як перейти далі.
🔹user.mention_html() автоматично створює HTML-посилання на користувача, щоб у повідомленні відображалося його ім’я як клікабельне.

11: Тепер створімо функцію, яка буде читати, що там відповів юзер і взаємодіяти з ним. Відповідь користувача переводимо до нижнього регістру, щоб провести перевірки:



def handle_response (text: str) -> str:
    processed: str = text.lower()
   
    if 'привіт' in processed:
        return 'Привітики!'
    
    return 'шо-шо ? Звучить красиво, але мозок не підтягнувся.'

Додай ще такі умови:

💻 Якщо ввели “python” – пишемо “Python is coooooooool!”
💻 Якщо ввели “як ти” – програма має випадково обрати одну з відповідей і повернути її (random.choice(answers)):

answers = [
"Як Windows без оновлень — тримаюсь, але трохи глючу.",
"Як котик у коробці — одночасно добре і загадково.",
"Наче Wi-Fi: іноді стабільно, іноді взагалі без зв’язку.",
"Живу, як Google Chrome: відкрито 100 вкладок, а батарея на нулі.",
"Як морозиво в спеку — намагаюся не розтанути.",
"Як вчитель інформатики — з усмішкою, але з внутрішнім багом.",
"Наче серіал: нові серії виходять щодня, але ніхто не знає сюжет.",
"Як у математиці — завжди можна скоротити проблему.",
"Я в нормі, просто норму ще шукаю."
]

Обробка приватного повідомлення і повідомлення у чату телеграму

12: Створюємо функцію handle_message, яка оброблятиме повідомлення.


async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    message_type: str = update.message.chat.type
    text: str = update.message.text # what the user actually said
    # Log
    print(f'User ({update.message.chat.id} in {message_type}): "{text}"')
    # Handle message type
    # if message posted in group - act only if bot name mentioned. Remove Bot name from message
    if message_type =='group': 
        if BOT_USERNAME in text:
             new_text: str = text.replace(BOT_USERNAME, '').strip()
             response: str = handle_response(new_text)
        else:# do nothing in group if bot name is not in message
            return
    else:# if it's a provate message, just proceed with logic
        response: str = handle_response(text)
        
    #Reply
    print(f'Bot {response}')
    await update.message.reply_text(response)
    

13: Створіть функцію error схожим чином з такими ж параметрами. Вона має лише виводити на екран рядок ‘Update {update} caused error {context.error}’

14: Пишемо основну функцію.

  
def main():
    print('Starting up bot...')
    app = Application.builder().token(TOKEN).build()
    
    #Commands
    app.add_handler(CommandHandler('start',start_command))
    app.add_handler(CommandHandler('help',help_command))
    
    #Messages
    app.add_handler(MessageHandler(filters.TEXT, handle_message))
    
    #Errors
    app.add_error_handler(error)
    
    print('Polling...')
    app.run_polling(poll_interval=5) # check for new messages every 5 seconds
    
if __name__ == '__main__':
    main()

Тестуємо нашого бота

15: Запустіть програму. В консолі ви побачите повідомлення про запуск

15: Перейдіть в телеграм. Видаліть чат зі своїм ботом (права кнопка і Видалити). Бо старий бот ще не в курсі наших змін.

16: Додайте бот наново. Подивіться, чи приходить повідомлення з вітаннями. Зайдіть в меню і перевірте, як працюють start та help.

17: Чудово! Тепер поспілкуємося з ним!

18: Якщо хочете, щоб бот працював і в чатах, треба вимкнути налаштування приватності:

Зайдіть в @BotFather → My Bots → оберіть свого бота.

⚙️ → Bot Settings → Group Privacy → Turn off.

Далі створіть чат і додайте бота. Спочатку запустить /start. Потім можете пробувати надсилати повідомлення. Пам’ятайте, що наш бот вихований і відповідає тільки на повідомлення, в яких його питають :

@ITFutureInUABot привіт

В деяких версіях телеграму бота ще треба додати як адміна в чат, щоб він запрацював.

Відповіді на питання

❓ Які небезпеки можуть бути, якщо токен від телеграм бота буде в інтернеті чи публічному git-проєкті ?

Маючи токен хтось може перепрограмувати вашого бота. І замість милих чи веселих повідомлень отримаєте злющого бота, який здатний, наприклад вкрасти особисті дані користувача і навіть його акаунт

❓Як думаєте, як зберігаються токени та паролі у реальних проєктах?

У реальних проєктах токени, паролі, ключі доступу до API чи баз даних ніколи не зберігаються прямо в коді (тобто не пишуться в рядках на кшталт TOKEN = “123abcXYZ”). Натомість використовують безпечні способи зберігання секретів:

🗝️ 1. Сервіси для секретів (Secret Managers). У хмарних системах (AWS, Google Cloud, Azure) є спеціальні сервіси для цього:

AWS Secrets Manager
Google Secret Manager
Azure Key Vault
Також можна зберігати у GitHub Secrets, GitLab Variables і підставляти під час деплою

Вони зберігають паролі зашифрованими, контролюють, хто може їх бачити, і дозволяють змінювати ключі без перезапуску застосунку.
Бот або програма може отримувати секрети безпечно через API-запит під час запуску.

🗝️2. Змінні середовища (Environment Variables)

На сервері створюється файл  .env з паролем. Програма на сервері читає пароль з файлу. До файлу мають доступ тільки програма і адмін.

🗝️3. Локальні менеджери (для розробки)

Можна також використовувати:
Keyring (бібліотека Python, що зберігає паролі у системному сховищі);
1Password, Bitwarden чи KeePass — для ручного зберігання токенів команди.

Уроки програмування для дітей. Домашня робота

Домашня робота

Після оновлення коду бота треба: зупинити (команда Ctrl+C в консолі перериває програму), запустити наново, видалити та додати чат з ботом, щоб працювати з новими командами.

Разом з кодом додайте скріни(фото роботи бота з Телеграму) в домашку.
Підказка: На клавіатурі є кнопка Prt Sc (Print Screen), яка робить фото екрані й складає фотки у C:\Users\{user}\Pictures\Screenshots.

0: Розберіться і зрозумійте код
1: Додайте у бот свій варіант повідомлення і реакції бота на нього

2: Якщо людина пише повідомлення зі словом ‘факт’ або ‘цікавинка’ або ‘цікаво’, то програма має видати випадковий факт зі списку випадкових фактів (замість фактів можете створити випадкові жарти або меми, тоді й слова для виклику будуть іншими)

3: Створіть нову команду, яка виводитиме випадкову фотку якоїсь тваринки (наприклад cat_command. Підказки:
🤖 у BotFather для вашого бота треба буде додати команду як робили для решти команд
🤖Додайте нову команду у main
🤖Додайте метод cat_command. В середині він має мати список cat_photos з трьох або більше фоток котів. Команда, яка повертає фото:

меми про  ІТ та програмування для дітей
await update.message.reply_photo(random.choice(cat_photos), caption="😺 Мяу! Лови котика!")
Уроки програмування для дітей ускладнені завдання level up

Level Up!
Як створити бота в телеграм на Python

1: Створіть квіз з 4-х запитань, який стартує по команді quiz. Допоможе цей код:


# --- Список запитань ---
QUIZ_QUESTIONS = [
    {
        "question": "Яка мова програмування названа на честь гумориста?",
        "options": ["Python", "Java", "C++", "Ruby"],
        "correct": 0
    },
]

# --- Функція для старту вікторини ---
async def quiz_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    context.user_data["quiz_index"] = 0
    await send_question(update, context)

# --- Функція для надсилання питання ---
async def send_question(update_or_query, context: ContextTypes.DEFAULT_TYPE):
    index = context.user_data.get("quiz_index", 0)
    question_data = QUIZ_QUESTIONS[index]

    buttons = []
    for i, option in enumerate(question_data["options"]):
        buttons.append([InlineKeyboardButton(option, callback_data=str(i))])

    keyboard = InlineKeyboardMarkup(buttons)

    # якщо це перше питання через /quiz
    if hasattr(update_or_query, "message"):
        await update_or_query.message.reply_text(question_data["question"], reply_markup=keyboard)
    else:  # якщо після вибору відповіді
        await update_or_query.edit_message_text(question_data["question"], reply_markup=keyboard)

# --- Обробник натискання кнопок ---
async def button_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    query = update.callback_query
    await query.answer()

    index = context.user_data.get("quiz_index", 0)
    question_data = QUIZ_QUESTIONS[index]
    chosen = int(query.data)

    if chosen == question_data["correct"]:
        await query.edit_message_text("✅ Правильно!")
    else:
        await query.edit_message_text(f"❌ Ні! Правильна відповідь: {question_data['options'][question_data['correct']]}")

    # наступне питання, якщо є
    context.user_data["quiz_index"] = index + 1
    if context.user_data["quiz_index"] < len(QUIZ_QUESTIONS):
        await send_question(query, context)
    else:
        await query.message.reply_text("Кінець вікторини! Молодець ")

У головну функцію варто додати app.add_handler(CallbackQueryHandler(button_callback)) і ще один рядок.

2: Додайте до бота один з варіантів логіки на ваш вибір:
✅Переведення валют
✅Математичний тренажер: бот дає завдання, людина надсилає відповідь. Бот пише, чи правильна.
✅Гра з ботом “Камінь-ножиці-папір”
Ваша ідея

меми про  ІТ та програмування для дітей

Не зупиняйтесь у вивченні Python! До зустрічі на наступних уроках!
Більше про ботів можна знайти у офіційній документації: https://core.telegram.org/bots

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *