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 interactions, delivering content, and building custom workflows. Building a Telegram bot natively ensures maximum control and performance. In this tutorial, we’ll walk through the fastest way to build a Telegram bot using Python and the python-telegram-bot library, along with advanced techniques for optimizing performance.


Prerequisites

Before diving in, ensure you have the following:

  1. Python 3.8+ installed on your system.
  2. A Telegram Bot Token obtained from BotFather.
  3. Basic knowledge of Python and asynchronous programming (async/await).

Step 1: Setting Up the Environment

Install the python-telegram-bot library, which provides a clean and efficient API wrapper for Telegram's Bot API:

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

Verify the installation:

python -c "import telegram; print(telegram.__version__)"
Enter fullscreen mode Exit fullscreen mode

Step 2: Creating a Minimal Bot

Let’s start by creating a basic bot that responds to the /start command.

from telegram import Update
from telegram.ext import Application, CommandHandler

# Replace 'YOUR_TOKEN' with your actual bot token
BOT_TOKEN = "YOUR_TOKEN"

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

# Initialize the bot application
application = Application.builder().token(BOT_TOKEN).build()

# Add the /start command handler
application.add_handler(CommandHandler("start", start))

# Start the bot
application.run_polling()
Enter fullscreen mode Exit fullscreen mode

Save this code in a file named bot.py. Run it using:

python bot.py
Enter fullscreen mode Exit fullscreen mode

Visit your bot on Telegram and send /start. You should receive a "Hello!" response.


Step 3: Optimizing with Asynchronous Programming

Telegram bots often handle multiple requests simultaneously. To ensure responsiveness, we use asynchronous programming (async/await).

Here’s an example of an asynchronous bot that echoes messages:

from telegram import Update
from telegram.ext import Application, MessageHandler, filters

BOT_TOKEN = "YOUR_TOKEN"

async def echo(update: Update, context):
    await update.message.reply_text(update.message.text)

application = Application.builder().token(BOT_TOKEN).build()

# Add a message handler for any text message
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

application.run_polling()
Enter fullscreen mode Exit fullscreen mode

Step 4: Adding Advanced Features

Let’s enhance our bot with advanced features like handling inline queries and callback queries.

Inline Queries

Inline queries allow users to interact with your bot directly from the chat input field.

from telegram import Update, InlineQueryResultArticle, InputTextMessageContent
from telegram.ext import Application, InlineQueryHandler

BOT_TOKEN = "YOUR_TOKEN"

async def inline_query(update: Update, context):
    query = update.inline_query.query
    results = [
        InlineQueryResultArticle(
            id="1",
            title="Echo",
            input_message_content=InputTextMessageContent(query),
        )
    ]
    await update.inline_query.answer(results)

application = Application.builder().token(BOT_TOKEN).build()
application.add_handler(InlineQueryHandler(inline_query))

application.run_polling()
Enter fullscreen mode Exit fullscreen mode

Callback Queries

Callback queries are used for handling button presses in inline keyboards.

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, CallbackQueryHandler

BOT_TOKEN = "YOUR_TOKEN"

async def start(update: Update, context):
    keyboard = [[InlineKeyboardButton("Press me!", callback_data="button_press")]]
    reply_markup = InlineKeyboardMarkup(keyboard)
    await update.message.reply_text("Choose an option:", reply_markup=reply_markup)

async def button(update: Update, context):
    query = update.callback_query
    await query.answer("You pressed the button!")
    await query.edit_message_text(text="Button pressed!")

application = Application.builder().token(BOT_TOKEN).build()
application.add_handler(CommandHandler("start", start))
application.add_handler(CallbackQueryHandler(button))

application.run_polling()
Enter fullscreen mode Exit fullscreen mode

Step 5: Deploying the Bot

For production, deploy your bot on a cloud platform like AWS, Heroku, or Google Cloud. Here’s a minimal setup using gunicorn and Flask:

  1. Install gunicorn and Flask:
pip install gunicorn Flask
Enter fullscreen mode Exit fullscreen mode
  1. Create a wsgi.py file:
from bot import application
from flask import Flask, request

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    update = Update.de_json(request.get_json(), application.bot)
    application.process_update(update)
    return 'OK'

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)
Enter fullscreen mode Exit fullscreen mode
  1. Run the server with gunicorn:
gunicorn --bind 0.0.0.0:5000 wsgi:app
Enter fullscreen mode Exit fullscreen mode
  1. Set the webhook URL in Telegram (replace YOUR_DOMAIN with your actual domain):
curl -F "url=https://YOUR_DOMAIN/webhook" https://api.telegram.org/botYOUR_TOKEN/setWebhook
Enter fullscreen mode Exit fullscreen mode

Conclusion

Building a Telegram bot natively with Python and the python-telegram-bot library is fast, efficient, and highly customizable. By leveraging asynchronous programming and advanced features like inline queries and callback queries, you can create sophisticated bots that cater to a wide range of use cases.

With these tools and techniques, you’re now equipped to build and deploy Telegram bots that perform at scale. 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)