DEV Community

Apollo
Apollo

Posted on

The fastest way to build a Telegram Bot natively

The Fastest Way to Build a Telegram Bot Natively

Building a Telegram bot natively is a powerful way to automate tasks, interact with users, and integrate Telegram's messaging capabilities into your applications. In this tutorial, we'll walk through the process of building a Telegram bot using Python and the python-telegram-bot library. This method ensures speed, efficiency, and scalability without relying on external frameworks.

Prerequisites

Before diving in, ensure you have the following:

  1. Python 3.8+ installed.
  2. A Telegram account to create a bot using BotFather.
  3. The python-telegram-bot library installed (pip install python-telegram-bot).

Step 1: Create Your Bot with BotFather

  1. Open Telegram and search for BotFather.
  2. Start a chat with BotFather and use the /newbot command.
  3. Follow the prompts to name your bot and get its unique API token.

Save the token securely; you’ll need it to authenticate your bot.


Step 2: Set Up the Project Structure

Create a project directory and set up the following structure:

telegram-bot/
│
├── bot.py       # Main bot logic
├── config.py    # Configuration (e.g., API token)
└── requirements.txt
Enter fullscreen mode Exit fullscreen mode

Add python-telegram-bot to requirements.txt:

python-telegram-bot==20.3
Enter fullscreen mode Exit fullscreen mode

Install the dependencies:

pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

Step 3: Write the Bot Code

In config.py, store your bot token securely:

# config.py
BOT_TOKEN = 'your-bot-token-here'
Enter fullscreen mode Exit fullscreen mode

Now, let’s build the core functionality in bot.py:

Basic Echo Bot Example

# bot.py
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
import config

async def start(update: Update, context):
    await update.message.reply_text('Hello! I’m your bot. Send me anything!')


async def echo(update: Update, context):
    await update.message.reply_text(f'You said: {update.message.text}')


def main() -> None:
    app = Application.builder().token(config.BOT_TOKEN).build()

    # Command handlers
    app.add_handler(CommandHandler('start', start))

    # Message handlers
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

    # Start the bot
    app.run_polling()


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

Step 4: Run the Bot

Run your bot using:

python bot.py
Enter fullscreen mode Exit fullscreen mode

Your bot is now live! Test it by sending /start or any message to your bot.


Step 5: Add Advanced Features

Let’s enhance the bot with advanced features, such as handling commands, sending images, and managing state.

Command Handling

Add a /help command:

async def help(update: Update, context):
    await update.message.reply_text('Commands:\n/start - Start the bot\n/help - Show this message')
Enter fullscreen mode Exit fullscreen mode

Update main():

app.add_handler(CommandHandler('help', help))
Enter fullscreen mode Exit fullscreen mode

Sending Photos

Add functionality to send a photo:

async def send_photo(update: Update, context):
    photo_url = 'https://picsum.photos/200/300'
    await update.message.reply_photo(photo=photo_url)
Enter fullscreen mode Exit fullscreen mode

Update main():

app.add_handler(CommandHandler('photo', send_photo))
Enter fullscreen mode Exit fullscreen mode

Conversation Management

Use the ConversationHandler to create interactive workflows:

from telegram.ext import ConversationHandler

# States
ASK_NAME, ASK_AGE = range(2)

async def start_conversation(update: Update, context):
    await update.message.reply_text('What’s your name?')
    return ASK_NAME

async def ask_age(update: Update, context):
    user_name = update.message.text
    context.user_data['name'] = user_name
    await update.message.reply_text(f'Hi {user_name}! How old are you?')
    return ASK_AGE

async def end_conversation(update: Update, context):
    user_age = update.message.text
    user_name = context.user_data['name']
    await update.message.reply_text(f'{user_name}, you’re {user_age} years old. Nice to meet you!')
    return ConversationHandler.END

def main() -> None:
    app = Application.builder().token(config.BOT_TOKEN).build()

    # Conversation handler
    conv_handler = ConversationHandler(
        entry_points=[CommandHandler('conversation', start_conversation)],
        states={
            ASK_NAME: [MessageHandler(filters.TEXT, ask_age)],
            ASK_AGE: [MessageHandler(filters.TEXT, end_conversation)]
        },
        fallbacks=[]
    )

    app.add_handler(conv_handler)
    app.run_polling()
Enter fullscreen mode Exit fullscreen mode

Step 6: Deploy the Bot

For a production-ready bot, deploy it to a cloud service:

  1. Google Cloud Run: Containerize your bot using Docker and deploy.
  2. Heroku: Use the Heroku CLI to push your code.
  3. AWS Lambda: Use serverless functions for cost efficiency.

Conclusion

Building a Telegram bot natively with Python is fast, efficient, and scalable. By leveraging the python-telegram-bot library, you can create bots with rich functionality in just a few lines of code. From basic echo bots to advanced conversational workflows, the possibilities are endless.

Experiment with the examples provided, and explore the official documentation to unlock even more features. Happy bot-building!


🚀 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)