3 Steps to Build a Telegram Bot with Django Backend

Yasantha Niroshan
Towards Data Engineering
7 min readMay 9, 2024

Telegram bots have become increasingly popular for automating tasks, providing information, and engaging with users on the Telegram platform. When developing a Telegram bot, it’s crucial to consider aspects like data management, scalability, and ease of development. Integrating Django, a high-level Python web framework, as the backend for your Telegram bot can offer significant advantages.

Why Django for Telegram Bot Backend?

1. Robust Database Management

Django comes with a built-in Object-Relational Mapping (ORM) system, providing a straightforward way to interact with databases. This makes managing user data, logs, and bot state seamless.

2. Model Architecture

Django’s model architecture enables developers to define data models using Python classes. These models automatically create database tables, simplifying the storage and retrieval of bot-related data.

3. Scalability and Flexibility

Django is known for its scalability and flexibility, allowing developers to build complex applications with ease. As your Telegram bot grows, Django’s modular structure enables you to extend functionality and handle increased traffic efficiently.

1. Setting Up Django

1. Install Django and Required Libraries

If you haven’t already installed Django, python-dotenv, and python-telegram-bot, you can do so using pip, Python’s package manager

pip install django python-dotenv python-telegram-bot

2. Obtaining Bot Token

Before proceeding, you need to obtain a bot token from the Telegram BotFather. Follow these steps

  • Go to Telegram’s BotFather on Telegram.
  • Send the BotFather a message with the /newbot command to create a new bot.
  • Follow the BotFather’s instructions to provide a name for your bot and choose a username.
  • Once your bot is created, the BotFather will provide you with a bot token. This token is necessary for authenticating your bot with the Telegram API.

For detailed instructions, refer to Telegram’s official guide.

3. Adding Bot Token to .env File

Once you have obtained the bot token, add it to the .env file in your Django project directory. If the .env file doesn’t exist, create one in the root directory of your project.

Open the .env file and add the following line

TOKEN=your_telegram_bot_token

Replace your_bot_token_here with the bot token obtained from the BotFather.

Storing sensitive information like API tokens in the .env file ensures that they are not exposed in version control or other public places.

2. Create a Django Project

Navigate to the directory where you want to create your Django project and run the following command

django-admin startproject django_telegram_bot

This command will create a new directory named django_telegram_bot containing the basic structure for your Django project.

3. Create a Django App

Inside your Django project directory (django_telegram_bot), create a new Django app named user_data

cd django_telegram_botpython manage.py startapp user_data

This command will create a new directory named user_data containing the files and directories required for a Django app.

4. Add the App to Django Settings

Open the settings.py file located in the django_telegram_bot directory. Add ‘user_data’ to the INSTALLED_APPS list

Settings.py Additions

Adding ‘user_data’ to INSTALLED_APPS ensures that Django recognizes the user_data app and includes it in the project.

2. Creating Models

Define Django models to represent bot-related data. For example, you can create a UserData model to store user information such as ID, first name, last name, and username.

Models.py Model Definition

Within the UserData model, we define four fields:

id : An IntegerField that serves as the primary key for each user. By default, Django adds an auto-incrementing primary key to every model if one isn’t specified explicitly. However, in this case, we’ve defined it explicitly to match the Telegram user ID, ensuring uniqueness.

first_name : A CharField that stores the first name of the user. We specify a maximum length of 100 characters to ensure that the field doesn’t exceed a reasonable size.

last_name: Similar to first_name, this field stores the last name of the user.

username : A CharField that stores the username of the user. Telegram users may have usernames associated with their accounts, which can be useful for identification and communication within the platform.

This __str__ method defines how instances of the UserData model should be represented as strings. In this case, it returns a formatted string containing the user’s first name and last name, which is helpful for human-readable representation, especially in Django’s admin interface.

By defining the UserData model with these fields, we establish a structure for storing user data associated with our Telegram bot. This model will automatically create a corresponding database table when migrations are applied, facilitating data storage and retrieval within our Django application.

Run Migrations

Run database migrations to create the necessary database tables for the Django project and the user_data app

python manage.py makemigrationspython manage.py migrate

This command will create the initial database schema based on the models defined in your Django apps.

3. Implementing Bot Logic

let’s break down the code for implementing the bot logic using the python-telegram-bot library

Bot.py imports

In the bot.py file, we import necessary modules and components required for building our Telegram bot

os : This module provides a portable way of interacting with the operating system, allowing us to access environment variables and perform other system-related tasks.

django : We import Django to ensure that our Django project is properly set up and can interact with the database.

DATABASES : This import retrieves the database configuration from Django’s settings, which may be necessary for database operations within the bot logic.

UserData : We import the UserData model from the user_data app, which we defined earlier. This allows us to interact with user data stored in the database.

Update : This class represents an incoming update from Telegram, containing information about a message, callback query, or other interactions.

Updater, CommandHandler, CallbackContext : These are classes from the python-telegram-bot library, which we use to set up and handle the bot’s interactions.

load_dotenv : This function loads environment variables from a .env file, which is commonly used to store sensitive information like API tokens securely.

Bot.py start Function

This start function defines the logic for handling the /start command from users. When a user sends the /start command to the bot, this function is triggered. Here’s what it does

  • It extracts the user_id from the incoming update using the effective_user.id attribute.
  • It tries to retrieve the user’s data from the database using the UserData.objects.get() method. If the user exists (DoesNotExist exception is not raised), it sends a welcome message addressing the user by their first name.
  • If the user does not exist (the DoesNotExist exception is raised), it creates a new UserData instance using information from the incoming update (first name, last name, username), saves it to the database, and sends a welcome message to the user.
Bot.py main function

The main function is the entry point of our bot script. Here’s what it does

  • It loads environment variables from the .env file using load_dotenv.
  • It retrieves the Telegram bot token from the environment variables.
  • It initializes an Updater instance with the bot token.
  • It retrieves the dispatcher from the Updater.
  • It adds a command handler for the /start command, specifying the start function as the handler.
  • It starts polling for updates from Telegram using updater.start_polling().
  • It enters the main loop (updater.idle()) to continuously check for updates and handle them.

4. Running the Bot

Run the Django development server and start the Telegram bot. Ensure that the bot is connected to the Telegram API and can respond to commands as expected.

python bot.py

This command will execute the bot.py file, starting the Telegram bot and enabling it to listen for incoming messages and commands from users. Make sure that you have activated your virtual environment (if you’re using one) and all necessary dependencies are installed.

Once the bot is running, it will continuously check for updates from Telegram and respond to user interactions according to the defined logic in the script.

5. Conclusion

Integrating Django as the backend for your Telegram bot offers numerous benefits, including robust database management, model architecture, scalability, and flexibility. By following best practices and leveraging Django’s features, you can develop powerful and reliable Telegram bots tailored to your specific requirements. Whether you’re building a bot for automation, customer support, or information retrieval, Django provides a solid foundation for creating efficient and maintainable solutions.

If you’re interested in exploring a complete project setup and detailed instructions, you can find the full project source code and instructions on my GitHub repository:

GitHub Repository

There, you’ll find the complete implementation of a Telegram bot with Django backend, along with step-by-step instructions to set up the project, integrate the bot with Django, and deploy it for your use case.

With the resources provided in the repository, you can further customize and extend the Telegram bot according to your needs, leveraging the power of Django’s web framework and the simplicity of Telegram bot development.

Feel free to explore the repository and contribute to the project to enhance its functionality and usability. Happy bot building!

--

--