Learn Coding
56 subscribers
21 links
Download Telegram
πŸ“Œ What are Updates?

Every single thing that happens on Telegram is called an Update
A message sent β€” Update
A button clicked β€” Update
Someone joining a group β€” Update
A photo sent β€” Update

Your bot's entire job is to receive Updates and respond to them

An Update looks like this in raw JSON:
{
"update_id": 123456789,
"message": {
"message_id": 1,
"from": {
"id": 987654321,
"first_name": "Ahmed",
"username": "ahmed123"
},
"chat": {
"id": 987654321,
"type": "private"
},
"text": "/start"
}
}


This is what Telegram sends your bot when someone types /start
Your code reads this and decides what to do
Libraries like aiogram handle all this for you automatically
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ“Œ Polling vs Webhooks

There are two ways your bot can receive Updates

Polling:
➑️ Your bot asks Telegram every few seconds "any new messages?"
➑️ Easy to set up β€” works on your local computer
➑️ Slightly slower response time
➑️ Best for development and learning

Webhooks:
➑️ Telegram calls your server the instant something happens
➑️ Requires a public server with HTTPS
➑️ Faster and more efficient
➑️ Best for production deployed bots

We use polling for now β€” it is perfect for learning
We switch to webhooks when we deploy
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ“Œ Creating a Bot with BotFather

BotFather is the official Telegram bot for creating bots
Every bot starts here

Steps:
1. Open Telegram and search @BotFather
2. Send /newbot
3. Enter a name for your bot (example: My First Bot)
4. Enter a username β€” must end in "bot" (example: myfirstbot_bot)
5. BotFather gives you a token that looks like this:

1234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw


This token is your bot's password β€” never share it publicly
Anyone with this token controls your bot completely
If you accidentally leak it β€” go to BotFather and regenerate it immediately

Store it in a .env file β€” we will cover this properly next lecture
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ“Œ Testing the Raw API in Your Browser

Before using any library β€” test the raw API directly
This shows you what is really happening underneath

Open your browser and visit:
https://api.telegram.org/bot<YOUR_TOKEN>/getMe


Replace <YOUR_TOKEN> with your actual token
You should see your bot's info in JSON format

Now send your bot a message on Telegram and visit:
https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates


You will see the raw Update JSON β€” exactly what your code will receive
This is the foundation everything is built on
Understanding this makes every library make complete sense
Please open Telegram to view this post
VIEW IN TELEGRAM
✏️ Lecture 13 Homework

No code this time β€” just setup:

➑️ Create a bot using BotFather and save your token safely
➑️ Open your browser and test getMe β€” screenshot the JSON response
➑️ Send your bot a message then test getUpdates β€” screenshot the Update JSON
➑️ Install aiogram: open your terminal and run:

pip install aiogram


➑️ Install python-dotenv for safe token storage:

pip install python-dotenv


Screenshot everything and make sure aiogram installs without errors

⚠️ Next lecture drops tomorrow β€” Your First Bot
πŸ”₯ Your bot will actually respond to messages
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
πŸ“š π—Ÿπ—²π—°π˜π˜‚π—Ώπ—² 𝟭𝟰 β€” π—¬π—Όπ˜‚π—Ώ π—™π—Άπ—Ώπ˜€π˜ π—•π—Όπ˜

Last lecture you created a bot and tested the raw API
This lecture your bot actually comes alive
It will receive messages and respond to them

We are using aiogram v3 β€” the most professional bot library in Python
It is fully async, modern, and what production bots are built with

This lecture covers:
➑️ Project structure and .env setup
➑️ Setting up Bot and Dispatcher
➑️ Your first message handler
➑️ Running the bot with polling
➑️ Understanding async/await in bots
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ“Œ Project Setup

Create a folder for your bot project with this structure:

my_bot/
β”œβ”€β”€ bot.py
└── .env


Inside .env β€” store your token safely:
BOT_TOKEN=1234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw


Never put your token directly in your Python file
Never upload .env to GitHub
Create a .gitignore file and add .env to it

# .gitignore
.env


This is not optional β€” leaked tokens get your bot hijacked
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ“Œ Understanding async/await

Bots need to handle many users at the same time
While waiting for one user's response the bot should not freeze for everyone else
That is what async/await solves

Normal function:
def greet():
print("Hello") # runs and blocks until done


Async function:
async def greet():
print("Hello") # runs without blocking other tasks


await means "do this but let other things run while waiting":
async def handle(message):
await message.reply("Hello!") # sends reply without freezing the bot


In aiogram every handler must be async
Every Telegram API call must be awaited
You will get an error if you forget either
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ“Œ Your First Bot β€” Full Code

import asyncio
from aiogram import Bot, Dispatcher
from aiogram.types import Message
from aiogram.filters import Command
import os
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv("BOT_TOKEN")

bot = Bot(token=TOKEN)
dp = Dispatcher()

@dp.message(Command("start"))
async def start_handler(message: Message):
await message.answer(f"Hello {message.from_user.first_name}! I am alive!")

@dp.message(Command("help"))
async def help_handler(message: Message):
await message.answer("I am a bot. Send me a message and I will echo it back.")

@dp.message()
async def echo_handler(message: Message):
await message.answer(message.text)

async def main():
await dp.start_polling(bot)

if name == "main":
asyncio.run(main())


Run this with: python bot.py
Open Telegram, send your bot /start
It responds β€” your bot is alive
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ“Œ Breaking Down the Code

load_dotenv() β€” loads your .env file so os.getenv() can read it

Bot(token=TOKEN) β€” creates the bot object that talks to Telegram

Dispatcher() β€” the brain of your bot, routes messages to the right handler

@dp.message(Command("start")) β€” a decorator
It tells the Dispatcher: when someone sends /start, run this function

message.from_user.first_name β€” the sender's first name
This is the OOP we covered last section β€” message is an object with attributes

message.answer() β€” sends a reply to the same chat
message.reply() β€” sends a reply that quotes the original message

The echo handler at the bottom has no filter
It catches every message that did not match any other handler
Order matters β€” put specific handlers first, catch-all last
Please open Telegram to view this post
VIEW IN TELEGRAM
🚨 Video Reference

Watch this for a full visual walkthrough of setting up aiogram v3

➑️ aiogram 3 beginner series β€” full playlist
➑️ Official aiogram 3 docs

πŸ”– Watch: Aiogram Basics: Build Your First Telegram Bot (15:00) + Lesson 1 β€” First Handlers (23:39)
Please open Telegram to view this post
VIEW IN TELEGRAM
✏️ Lecture 14 Homework

Get the echo bot running then extend it:

➑️ Add a /about command that tells the user what your bot does
➑️ Add a /time command that sends the current time

from datetime import datetime

@dp.message(Command("time"))
async def time_handler(message: Message):
now = datetime.now().strftime("%H:%M:%S")
await message.answer(f"Current time: {now}")


➑️ Make the echo handler only respond to text messages:

from aiogram.filters import F

@dp.message(F.text)
async def echo_handler(message: Message):
await message.answer(message.text)


Test all commands, screenshot the responses from your actual bot

⚠️ Next lecture drops in 2 days β€” Commands & Handlers
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM