Everything you have learned so far is procedural programming
Code that runs step by step, top to bottom
OOP is a different way of thinking about code
Instead of writing functions that do things
You create objects that have their own data and their own functions
Every major library you will use — aiogram, pyrogram, telethon — is built with OOP
You need to understand it to read and write real code
This lecture covers:
Please open Telegram to view this post
VIEW IN TELEGRAM
A class is a blueprint
An object is something built from that blueprint
Think of a class as the design for a car
An object is the actual car built from that design
You can build many cars from one design — each a separate object
class Dog:
pass # empty class for now
dog1 = Dog() # create an object from the class
dog2 = Dog() # another object — completely separate
print(type(dog1)) # <class 'main.Dog'>
dog1 and dog2 are both Dogs but they are separate objects
Changes to one do not affect the other
Please open Telegram to view this post
VIEW IN TELEGRAM
init runs automatically when you create an object
It is where you set the initial data for the object
self refers to the object itself
class User:
def init(self, name, age):
self.name = name
self.age = age
user1 = User("Ahmed", 22)
user2 = User("Sara", 19)
print(user1.name) # Ahmed
print(user2.age) # 19
self.name and self.age are attributes — data that belongs to each object
user1 has its own name and age, user2 has its own
They do not share data
Please open Telegram to view this post
VIEW IN TELEGRAM
Methods are functions that belong to a class
They always take self as the first parameter
class User:
def init(self, name, age):
self.name = name
self.age = age
self.is_banned = False
def greet(self):
print(f"Hello I am {self.name} and I am {self.age} years old")
def ban(self):
self.is_banned = True
print(f"{self.name} has been banned")
def status(self):
if self.is_banned:
print(f"{self.name}: Banned")
else:
print(f"{self.name}: Active")
user1 = User("Ahmed", 22)
user1.greet()
user1.ban()
user1.status()
Output:
Hello I am Ahmed and I am 22 years old
Ahmed has been banned
Ahmed: Banned
Please open Telegram to view this post
VIEW IN TELEGRAM
A class can inherit from another class
It gets all the parent's attributes and methods for free
Then you add or override what you need
class User:
def init(self, name):
self.name = name
def greet(self):
print(f"Hello I am {self.name}")
class Admin(User): # Admin inherits from User
def init(self, name):
super().init(name) # call parent init
self.permissions = ["ban", "mute", "delete"]
def show_permissions(self):
print(f"{self.name} can: {', '.join(self.permissions)}")
admin = Admin("Ahmed")
admin.greet() # inherited from User
admin.show_permissions() # Admin's own method
super() calls the parent class
You will see this everywhere in aiogram and pyrogram code
Please open Telegram to view this post
VIEW IN TELEGRAM
When you write a Telegram bot you will see things like this:
from aiogram import Bot, Dispatcher
from aiogram.types import Message
bot = Bot(token="YOUR_TOKEN") # creating an object from the Bot class
dp = Dispatcher() # creating an object from the Dispatcher class
@dp.message()
async def handle(message: Message): # Message is a class
print(message.text) # attribute
print(message.from_user.first_name) # nested object attribute
await message.reply("Hello!") # calling a method on the object
Bot, Dispatcher, Message — all classes
bot, dp, message — all objects
message.text, message.from_user — attributes
message.reply() — a method
Now when you see this in the next lecture it will make complete sense
Please open Telegram to view this post
VIEW IN TELEGRAM
Watch this after reading through all the posts
Python Full Course 2024 — freeCodeCamp
Covers OOP, classes, attributes, methods, inheritance, operator overloading, and class methods
Please open Telegram to view this post
VIEW IN TELEGRAM
Build a simple user management system using OOP:
class User:
def init(self, name, age):
self.name = name
self.age = age
self.is_banned = False
self.messages = []
def send_message(self, text):
if self.is_banned:
print(f"{self.name} is banned and cannot send messages")
return
self.messages.append(text)
print(f"{self.name}: {text}")
def ban(self):
self.is_banned = True
print(f"{self.name} has been banned")
def unban(self):
self.is_banned = False
print(f"{self.name} has been unbanned")
def show_history(self):
print(f"
{self.name} message history:")
for msg in self.messages:
print(f" - {msg}")
user1 = User("Ahmed", 22)
user2 = User("Sara", 19)
user1.send_message("Hello everyone!")
user2.send_message("Hey!")
user1.ban()
user1.send_message("Can you hear me?")
user1.unban()
user1.send_message("I am back!")
user1.show_history()
Run it and screenshot the output
Bonus — create an Admin class that inherits from User and has a ban() method that can ban other users
Please open Telegram to view this post
VIEW IN TELEGRAM
You have been learning for 12 lectures straight
Variables, strings, loops, functions, files, OOP — all of it
Now it is time to actually use it
No new lecture for 1 week
Instead — build something
Anything
From scratch, using only what you have learned so far
Ideas if you are stuck:
But honestly — build whatever YOU want to build
The idea does not matter, the act of building does
Rules:
When you are done:
I will look at every single one
New lecture drops in 7 days
See what you can build
Please open Telegram to view this post
VIEW IN TELEGRAM
If nobody submits anything from the break post — I am stopping this channel
I put in the effort, you put in the work
That is the deal
Build something, screenshot it, drop it in the comments
Simple as that
Please open Telegram to view this post
VIEW IN TELEGRAM
Python basics are done
Now we get to the actual reason you are here
Telegram Bots
But before writing a single line of bot code
You need to understand what is actually happening under the hood
Skipping this is why most beginners get confused later
This lecture covers:
Please open Telegram to view this post
VIEW IN TELEGRAM
A Telegram bot is a special account that is controlled by code instead of a human
When someone sends your bot a message — your code receives it and decides what to do
Bots can:
Bots cannot:
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram has two completely different APIs
Most beginners do not know this and get confused
Bot API:
MTProto:
We start with Bot API using aiogram
Then move to MTProto with Pyrogram and Telethon
Both are covered in this course
Please open Telegram to view this post
VIEW IN TELEGRAM
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
There are two ways your bot can receive Updates
Polling:
Webhooks:
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
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
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