DEV Community

Apollo
Apollo

Posted on

The fastest way to build a Telegram Bot natively

The Fastest Way to Build a Telegram Bot Natively

Telegram bots are powerful tools for automating tasks, interacting with users, and integrating with other services. Building a Telegram bot natively ensures optimal performance and full control over functionality. This tutorial will guide you through the fastest way to build a Telegram bot using Python and the python-telegram-bot library. We'll cover essential concepts, code examples, and deployment tips.


Prerequisites

Before starting, ensure you have the following:

  1. Python 3.8+ installed.
  2. A Telegram account.
  3. A Telegram bot token from BotFather.

Install the required library:

pip install python-telegram-bot
Enter fullscreen mode Exit fullscreen mode

Step 1: Initialize the Bot

Start by creating a new Python file and importing the necessary modules:

from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext
Enter fullscreen mode Exit fullscreen mode

Initialize the bot with your token:

TOKEN = "YOUR_BOT_TOKEN"

def start(update: Update, context: CallbackContext) -> None:
    update.message.reply_text("Hello! I'm your Telegram bot.")

def main() -> None:
    updater = Updater(TOKEN)
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))
    updater.start_polling()
    updater.idle()

if __name__ == "__main__":
    main()
Enter fullscreen mode Exit fullscreen mode

This code creates a bot that responds to the /start command with a greeting message. Run the script and test it in Telegram.


Step 2: Handle Commands and Messages

Telegram bots can handle commands (e.g., /start, /help) and arbitrary messages. Let's add a /help command and handle text messages:

def help_command(update: Update, context: CallbackContext) -> None:
    update.message.reply_text("Available commands:\n/start - Start the bot\n/help - Get help")

def echo_message(update: Update, context: CallbackContext) -> None:
    user_message = update.message.text
    update.message.reply_text(f"You said: {user_message}")

def main() -> None:
    updater = Updater(TOKEN)
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(CommandHandler("help", help_command))
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo_message))

    updater.start_polling()
    updater.idle()
Enter fullscreen mode Exit fullscreen mode

Now, your bot can respond to /help and echo back any text message sent by the user.


Step 3: Add Advanced Features

3.1 Inline Keyboard

Add an inline keyboard for interactive responses:

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

def button_handler(update: Update, context: CallbackContext) -> None:
    query = update.callback_query
    query.answer()

    if query.data == "option1":
        query.edit_message_text("You selected Option 1!")
    elif query.data == "option2":
        query.edit_message_text("You selected Option 2!")

def start(update: Update, context: CallbackContext) -> None:
    keyboard = [
        [InlineKeyboardButton("Option 1", callback_data="option1")],
        [InlineKeyboardButton("Option 2", callback_data="option2")],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.message.reply_text("Choose an option:", reply_markup=reply_markup)

def main() -> None:
    updater = Updater(TOKEN)
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(CallbackQueryHandler(button_handler))

    updater.start_polling()
    updater.idle()
Enter fullscreen mode Exit fullscreen mode

3.2 File Handling

Handle file uploads and downloads:

def handle_document(update: Update, context: CallbackContext) -> None:
    file = update.message.document.get_file()
    file.download("downloaded_file.txt")
    update.message.reply_text("File downloaded successfully!")

def main() -> None:
    updater = Updater(TOKEN)
    dispatcher = updater.dispatcher

    dispatcher.add_handler(MessageHandler(Filters.document, handle_document))

    updater.start_polling()
    updater.idle()
Enter fullscreen mode Exit fullscreen mode

Step 4: Deploy the Bot

For production, deploy your bot on a server or cloud platform. Use a process manager like systemd or supervisord to keep it running. Here's a basic systemd service file:

[Unit]
Description=Telegram Bot Service
After=network.target

[Service]
ExecStart=/usr/bin/python3 /path/to/your_bot_script.py
Restart=always
User=your_user

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode

Save the file as /etc/systemd/system/telegram-bot.service and enable it:

sudo systemctl daemon-reload
sudo systemctl start telegram-bot
sudo systemctl enable telegram-bot
Enter fullscreen mode Exit fullscreen mode

Step 5: Optimize Performance

  1. Use Webhooks: For higher performance, switch from polling to webhooks. Telegram will send updates directly to your server.
from telegram import Update
from telegram.ext import Updater, CommandHandler, CallbackContext

def start(update: Update, context: CallbackContext) -> None:
    update.message.reply_text("Hello! I'm your Telegram bot.")

def main() -> None:
    TOKEN = "YOUR_BOT_TOKEN"
    PORT = 8443
    URL = "https://yourdomain.com"

    updater = Updater(TOKEN)
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))

    updater.start_webhook(listen="0.0.0.0", port=PORT, url_path=TOKEN)
    updater.bot.set_webhook(f"{URL}/{TOKEN}")
    updater.idle()

if __name__ == "__main__":
    main()
Enter fullscreen mode Exit fullscreen mode
  1. Async Programming: Use asyncio for asynchronous operations to handle multiple requests efficiently.
import asyncio
from telegram import Update
from telegram.ext import Updater, CommandHandler, CallbackContext

async def start(update: Update, context: CallbackContext) -> None:
    await update.message.reply_text("Hello! I'm your Telegram bot.")

def main() -> None:
    TOKEN = "YOUR_BOT_TOKEN"
    updater = Updater(TOKEN)
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", lambda u, c: asyncio.run(start(u, c))))
    updater.start_polling()
    updater.idle()

if __name__ == "__main__":
    main()
Enter fullscreen mode Exit fullscreen mode

Conclusion

Building a Telegram bot natively is straightforward with Python and the python-telegram-bot library. This tutorial covered the basics of command handling, message processing, advanced features like inline keyboards and file handling, and deployment tips. By following these steps, you can create a robust, high-performance Telegram bot tailored to your needs. Happy coding!


🚀 Stop Writing Boilerplate Prompts

If you want to skip the setup and code 10x faster with complete AI architecture patterns, grab my Senior React Developer AI Cookbook ($19). It includes Server Action prompt libraries, UI component generation loops, and hydration debugging strategies.

Browse all 10+ developer products at the Apollo AI Store | Or snipe Solana tokens free via @ApolloSniper_Bot.

Top comments (0)