How to create a bot on Python with telegram-bot-api

онлайн тренажер по питону
Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Okay, here's the SEO-optimized translation of your text into English, keeping the H2-H4 structure:

How to Create a Telegram Bot with Python and telegram-bot-api: A Complete Guide

Introduction to Telegram Bots

In today's world, messengers have become an integral part of life, and bots are a convenient tool for automating tasks, communicating with users, and even conducting business. If you want to quickly and easily create your own bot for Telegram, Python and the python-telegram-bot library are the perfect choice.

Step 1: Obtaining an Access Token from BotFather

Before writing any code, you need to register your bot with Telegram. To do this:

  1. Open Telegram and find the user @BotFather.
  2. Enter the command /start and then /newbot.
  3. Specify a name and a unique username for your bot (e.g., MyFirstPythonBot).
  4. After registration, BotFather will provide you with an API token. Copy it – you'll need it in the code.

Step 2: Installing the Necessary Libraries

To interact with the Telegram API, we will use the python-telegram-bot library. Install it via pip:

pip install python-telegram-bot --upgrade

Step 3: Basic Bot Skeleton

Now, let's create a simple bot that responds to the /start command:

from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("Hello! I'm your first Python bot!")

if __name__ == '__main__':
    app = ApplicationBuilder().token("YOUR_TOKEN_HERE").build()
    app.add_handler(CommandHandler("start", start))
    app.run_polling()

Explanation:

  • ApplicationBuilder and CommandHandler are basic tools for handling commands.
  • The start function responds to the /start command and sends a text message to the user.
  • The run_polling() method starts the bot and begins checking for new messages.

Step 4: Handling User Messages

Let's add handling of regular text messages:

from telegram.ext import MessageHandler, filters

async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
    received_text = update.message.text
    await update.message.reply_text(f"You wrote: {received_text}")

if __name__ == '__main__':
    app = ApplicationBuilder().token("YOUR_TOKEN_HERE").build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
    app.run_polling()

Now the bot will respond to any text message by repeating your text.

Step 5: Adding Buttons and Interactive Menus

Bots become much more user-friendly when you add buttons:

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

async def menu(update: Update, context: ContextTypes.DEFAULT_TYPE):
    keyboard = [
        [InlineKeyboardButton("Button 1", callback_data='button1')],
        [InlineKeyboardButton("Button 2", callback_data='button2')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    await update.message.reply_text('Choose an option:', reply_markup=reply_markup)

async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()
    await query.edit_message_text(text=f"You pressed: {query.data}")

if __name__ == '__main__':
    from telegram.ext import CallbackQueryHandler
    app = ApplicationBuilder().token("YOUR_TOKEN_HERE").build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(CommandHandler("menu", menu))
    app.add_handler(CallbackQueryHandler(button_handler))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
    app.run_polling()

Now, if you send the /menu command, the bot will display buttons, and when pressed, it will send the corresponding message.

Step 6: Handling Errors in the Bot

A good practice is to add error handling so that the bot doesn't crash when exceptions occur:

async def error_handler(update: object, context: ContextTypes.DEFAULT_TYPE):
    print(f"An error occurred: {context.error}")

app.add_error_handler(error_handler)

Step 7: Deploying the Bot on a Server

If you want the bot to work around the clock, it needs to be deployed on a server. Here are a few hosting options:

  • Free solutions: Heroku, PythonAnywhere (for simple bots).
  • Paid solutions: AWS, DigitalOcean, VPS services.

You can also configure the bot to run as a service on the server using systemd or use Docker.

Frequently Asked Questions (FAQ)

  • Can I use the bot in a group? Yes! Add it to the group and configure the appropriate permissions.
  • What is the difference between polling and webhook?
    • Polling: The bot itself polls the Telegram server.
    • Webhook: The Telegram server sends data directly to your server (better for production).
  • How do I send photos and files through the bot?
await update.message.reply_photo(photo="https://example.com/image.jpg")
  • Where can I store the token securely? Use environment variables or .env files. Never commit the token to a repository!
  • Can I send out mass mailings through the bot? Yes, just store user IDs and send them messages in a loop.

Conclusion

Creating a Telegram bot with Python is a fun and useful experience. With the python-telegram-bot library, you can quickly develop interactive bots, integrate them with various services, and automate routine tasks. I hope this guide helps you create your first successful bot!

News