October 20
Aiogram 3 ( lotin-kiril )
🧠 Umumiy maqsad.
Bu dastur Aiogram 3.x kutubxonasida yozilgan Telegram-bot bo‘lib, foydalanuvchi yuborgan matnni avtomatik tarzda lotindan kirilga yoki kirildan lotinga o‘giradi.
🧩 KODNI IZOHLI TAHLILI
# lotin kiril
➡️ Faqat fayl nomi yoki sarlavha sifatida yozilgan. Ma’lumot uchun.
from aiogram import Bot, Dispatcher, types from aiogram.filters import Command from aiogram.types import Message import asyncio from translete import to_cyrillic, to_latin # agar bu funksiyalar sizda mavjud bo‘lsa
🧱 Bu joyda:
- aiogram — Telegram botlarini asinxron (ya’ni bir vaqtning o‘zida bir nechta foydalanuvchi bilan ishlay oladigan) shaklda yozish uchun kutubxona.
Bot— botning o‘zini yaratish uchun ishlatiladi (TOKEN orqali).Dispatcher— barcha xabarlar (message) va komandalarni boshqaruvchi “markaz”.typesvaMessage— Telegramdagi turli obyektlar (xabar, foydalanuvchi, rasm va hokazo) bilan ishlash uchun kerak.Command— foydalanuvchi tomonidan yuborilgan komandalarni (/start,/helpva hokazo) ushlaydi.asyncio— Pythonning asinxronlikni boshqaruvchi moduli (Aiogram asinxron ishlaydi).from translete import to_cyrillic, to_latin— bu joyda siz o‘zingiz yozgan yoki import qilgan transliteratsiya funksiyalarini chaqiryapsiz.
❗ Agar sizdatranslete.pydegan fayl bo‘lmasa, nomi xato yozilgan bo‘lishi mumkin. To‘g‘risi odatdatransliterateyokitranslitbo‘ladi.
TOKEN = "7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc"
➡️ Bu sizning bot tokeningiz, ya’ni @BotFather dan olingan maxsus kalit.
⚠️ Muhim: Tokenni ochiq kodda joylashtirmaslik tavsiya etiladi (uni .env faylga yashiring yoki o‘zgartirib qo‘ying).
bot = Bot(token=TOKEN) dp = Dispatcher()
bot— Telegram bot obyektini yaratadi.dp(dispatcher) — botga keladigan barcha xabarlarni qabul qiladi va ularni kerakli funksiyalarga yuboradi.
@dp.message(Command("start"))
async def send_welcome(message: Message):
username = message.from_user.username
text = f"Assalom alaykum, {username}! Kirill-Lotin-Kirill botiga xush kelibsiz!\n"
text += "Matningizni yuboring."
await message.answer(text)
🔍 Bu funksiya:
/startbuyrug‘ini ushlab qoladi.message.from_user.usernameyordamida foydalanuvchining Telegram nomini oladi.- Foydalanuvchiga salomlashuv va ko‘rsatma yuboradi (
await message.answer(text)).
📩 Natija:
Agar foydalanuvchi botga /start yozsa, unga quyidagi javob ketadi:
Assalom alaykum, username! Kirill-Lotin-Kirill botiga xush kelibsiz! Matningizni yuboring.
@dp.message()
async def translit(message: Message):
msg = message.text
javob = to_cyrillic(msg) if msg.isascii() else to_latin(msg)
await message.answer(javob)
🧠 Bu funksiya:
- Barcha oddiy matnli xabarlarni qabul qiladi (ya’ni komandalar emas).
msg = message.text— foydalanuvchining yozgan matnini oladi.msg.isascii()— matnda faqat lotincha belgilar borligini tekshiradi.- Agar ha (
True) bo‘lsa — demak matn lotinda, shuning uchun to_cyrillic() ishlaydi. - Aks holda — matn kirilda, shuning uchun to_latin() ishlaydi.
await message.answer(javob)— o‘girib berilgan matnni foydalanuvchiga yuboradi.
📩 Natija:
Foydalanuvchi “Salom” yozsa → “Салом”
Foydalanuvchi “Салом” yozsa → “Salom”
async def main():
await dp.start_polling(bot)
⚙️ Bu funksiya:
- Botni ishga tushiradi.
start_polling()— Telegram serveridan doimiy ravishda xabarlarni olib turadi.- Asinxron funksiya bo‘lgani uchun
awaitbilan chaqiriladi.
if __name__ == "__main__":
asyncio.run(main())
🚀 Bu joyda:
- Fayl to‘g‘ridan-to‘g‘ri ishga tushirilsa (
python main.pydeb), botmain()funksiyasini bajaradi. asyncio.run()yordamida asinxron sikl ishga tushadi.
# lotin kiril
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import Message
import asyncio
from translete import to_cyrillic, to_latin # agar bu funksiyalar sizda mavjud bo‘lsa
TOKEN = "7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc" # <-- Tokeningizni shu yerga yozing
bot = Bot(token=TOKEN)
dp = Dispatcher()
@dp.message(Command("start"))
async def send_welcome(message: Message):
username = message.from_user.username
text = f"Assalom alaykum, {username}! Kirill-Lotin-Kirill botiga xush kelibsiz!\n"
text += "Matningizni yuboring."
await message.answer(text)
@dp.message()
async def translit(message: Message):
msg = message.text
javob = to_cyrillic(msg) if msg.isascii() else to_latin(msg)
await message.answer(javob)
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())