μ›”. 8μ›” 18th, 2025

Ever wanted to create your own digital assistant or automate mundane tasks right from your favorite messaging app? Imagine a bot that sends you daily news updates, reminds you of appointments, or even plays a fun game! Building a Telegram bot with Python is not only a fantastic way to dive into practical programming but also a surprisingly straightforward project for beginners. In this guide, we’ll walk you through every step, from setting up your development environment to deploying your very first interactive bot. Get ready to unleash your creativity and bring your ideas to life! ✨

What is a Telegram Bot and Why Build One? πŸ€”

A Telegram bot is an application that runs inside the Telegram messaging platform, interacting with users through chat. Think of it as a virtual user that can understand commands, send messages, photos, files, and even connect to external services. The possibilities are truly endless!

Why should you build one?

  • Automation: Automate repetitive tasks like sending reminders, fetching data, or posting updates. ⏰
  • Learning Experience: It’s an excellent hands-on project for learning Python, API interaction, and event-driven programming. 🐍
  • Fun & Creativity: Build a bot that tells jokes, plays trivia, or simply greets your friends in a unique way! πŸ˜‚
  • Utility: Create custom tools for your personal use or for a small community, like a weather bot for your neighborhood. 🌦️

Many popular bots provide news, weather, or even help manage groups. Now, it’s your turn to create something useful and fun!

Getting Started: Prerequisites & Setup πŸ› οΈ

Before we dive into coding, let’s ensure you have everything you need. Don’t worry, it’s pretty simple!

1. Python Installation

Make sure you have Python 3 installed on your computer. You can download it from the official Python website. To check your version, open your terminal or command prompt and type:

python --version

or

python3 --version

You should see something like Python 3.x.x. If not, install it!

2. Installing the python-telegram-bot Library

We’ll use a fantastic library called python-telegram-bot, which simplifies interaction with the Telegram Bot API. Install it using pip:

pip install python-telegram-bot --pre

The --pre flag ensures you get the latest stable version, as the library sometimes has pre-releases with important updates.

3. Getting Your Bot Token from BotFather πŸ€–πŸ”‘

Every Telegram bot needs a unique token to identify itself. You get this token from Telegram’s official bot, BotFather. Here’s how:

  1. Open your Telegram app and search for @BotFather. Make sure it’s the verified one (blue checkmark)! βœ…
  2. Start a chat with BotFather and send the command /newbot.
  3. BotFather will ask for a name for your bot (e.g., “My First Bot”). This is the display name.
  4. Next, it will ask for a username for your bot (e.g., “MyFirstPythonBot” or “MyFirstPython_bot”). This must end with ‘bot’ and be unique.
  5. Once you provide a valid username, BotFather will give you a message containing your bot’s API token. It looks something like 1234567890:ABCDEFGHIJKLMN_OPQRST_UVWXYZ. Keep this token safe and secret! 🀫 It’s like your bot’s password.

Your First “Hello World” Telegram Bot! πŸ‘‹

Now, let’s write some code! Create a new Python file (e.g., my_first_bot.py) and paste the following code:


import logging
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

# Enable logging
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO
)
logger = logging.getLogger(__name__)

# Define a command handler function
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Sends a message when the command /start is issued."""
    user = update.effective_user
    await update.message.reply_html(
        f"Hi {user.mention_html()}! I'm your first bot. Try sending me a message!",
        # You can add buttons here too!
        # reply_markup=ForceReply(selective=True),
    )

# Define a message handler function
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Echoes the user's message."""
    await update.message.reply_text(update.message.text)

# Define an error handler function
async def error_handler(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Log the error and send a telegram message to notify the developer."""
    logger.warning('Update "%s" caused error "%s"', update, context.error)
    # In a real bot, you might send this to yourself via Telegram as well!

def main() -> None:
    """Start the bot."""
    # Replace 'YOUR_BOT_TOKEN' with your actual bot token from BotFather
    application = Application.builder().token("YOUR_BOT_TOKEN").build()

    # Register command handlers
    application.add_handler(CommandHandler("start", start))

    # Register message handlers (for non-command messages)
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

    # Register error handler
    application.add_error_handler(error_handler)

    # Start the Bot
    application.run_polling(allowed_updates=Update.ALL_TYPES)

if __name__ == '__main__':
    main()

Understanding the Code:

  • import logging: Used for logging messages, which is super helpful for debugging. πŸ›
  • Application.builder().token("YOUR_BOT_TOKEN").build(): This is where you initialize your bot using the token you got from BotFather. Remember to replace "YOUR_BOT_TOKEN"!
  • async def start(update, context): This is an asynchronous function that gets called when a user sends the /start command to your bot. It sends a greeting message back. πŸ‘‹
  • async def echo(update, context): This function simply takes whatever text message the user sends (that isn’t a command) and sends it back to them. It “echoes” their message. πŸ—£οΈ
  • CommandHandler("start", start): This tells your bot to call the start function when it receives the /start command.
  • MessageHandler(filters.TEXT & ~filters.COMMAND, echo): This tells your bot to call the echo function for any incoming text message that is not a command.
  • application.run_polling(): This starts your bot and makes it continuously check for new messages from Telegram. πŸ”„

Running Your Bot! πŸš€

Save the file and run it from your terminal:

python my_first_bot.py

or

python3 my_first_bot.py

Now, go to your Telegram app, find your bot by its username (the one ending in ‘bot’ that you gave to BotFather), and start a chat! Try sending /start and then type any message. Your bot should respond! πŸŽ‰

Adding More Features to Your Bot ✨

The “Hello World” bot is a great start, but let’s make it more interesting!

1. Custom Commands

You can add more commands easily. For example, a /help command:


# Add this function to your script
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Sends a help message."""
    await update.message.reply_text("I'm your friendly bot! You can use /start to greet me, or just send me a message and I'll echo it back.")

# Add this handler to your main() function before application.run_polling()
# application.add_handler(CommandHandler("help", help_command))

Remember to uncomment the application.add_handler(...) line! After adding, restart your bot and try /help.

2. Responding to Specific Keywords

What if you want your bot to react when someone says “hello” or “how are you”?


# Add this function
async def greet_response(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    text = update.message.text.lower()
    if "hello" in text or "hi" in text:
        await update.message.reply_text("Hello there! How can I help you?")
    elif "how are you" in text:
        await update.message.reply_text("I'm doing great, thanks for asking! 😊")
    else:
        # If it's not a specific keyword, let the echo function handle it
        await echo(update, context)

# Modify your MessageHandler in main() to use this new function
# application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, greet_response))

Here, we’re building a more intelligent MessageHandler that checks for specific keywords before potentially falling back to the echo behavior. Make sure to only have one MessageHandler for general text messages, and update it accordingly.

Best Practices & Tips for Your Bot πŸ’‘

  • Keep Your Token Secure: Never share your bot token publicly (e.g., on GitHub). Use environment variables for sensitive data. πŸ”’
  • Error Handling: Implement robust error handling. Our example has a basic one, but for production, you’d want more detailed logging or notifications.
  • Asynchronous Operations: The python-telegram-bot library is built on asyncio. Embrace async and await for non-blocking operations, especially if your bot needs to fetch data from the internet or perform long-running tasks. ⚑
  • Deployment: For a bot that runs 24/7, you’ll need to deploy it to a server. Popular choices include Heroku, AWS EC2, DigitalOcean, or PythonAnywhere. These platforms allow your bot to run continuously without your computer being on. ☁️
  • User Experience: Design your bot with the user in mind. Provide clear instructions, helpful error messages, and intuitive commands. Use Telegram’s formatting options (bold, italics, code) for better readability. ✨
  • Community & Resources: The python-telegram-bot library has excellent documentation and an active community. Don’t hesitate to check their GitHub page or Telegram groups for help! 🀝

Common Pitfalls & Troubleshooting πŸ›

Even seasoned developers encounter issues. Here are some common problems and how to fix them:

  • Bot Not Responding:
    • Is your Python script running? Check your terminal.
    • Did you replace "YOUR_BOT_TOKEN" with your actual token? Double-check it!
    • Is your internet connection stable?
    • Did you find your bot by its correct username in Telegram?
  • ModuleNotFoundError:
    • Did you run pip install python-telegram-bot --pre? Make sure it installed successfully.
    • Are you running your script with the same Python environment where you installed the library?
  • Botfather Issues:
    • Ensure your bot username ends with ‘bot’.
    • You can always use /token or /mybots commands with BotFather to retrieve your token or manage existing bots.
  • Asynchronous Errors (RuntimeWarning: coroutine 'xyz' was never awaited):
    • This means you called an async function but forgot to put await before it. Always use await when calling functions defined with async def within other async functions.

Conclusion: Your Bot Journey Begins! πŸŽ‰

Congratulations! You’ve just built your very first Telegram bot using Python. This project is a fantastic stepping stone, not just for bot development but for understanding how applications interact with APIs and handle user input.

From here, the sky’s the limit! You can expand your bot to fetch real-time weather data, integrate with other APIs (like a joke API or a currency converter), manage group chats, or even build a simple game. Keep experimenting, keep coding, and keep learning. Share your creations with friends and family, and see what amazing things you can build!

What will your bot do next? Share your ideas in the comments below! πŸ‘‡

λ‹΅κΈ€ 남기기

이메일 μ£Όμ†ŒλŠ” κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ ν•„λ“œλŠ” *둜 ν‘œμ‹œλ©λ‹ˆλ‹€