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”.
  • types va Message — Telegramdagi turli obyektlar (xabar, foydalanuvchi, rasm va hokazo) bilan ishlash uchun kerak.
  • Command — foydalanuvchi tomonidan yuborilgan komandalarni (/start, /help va 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 sizda translete.py degan fayl bo‘lmasa, nomi xato yozilgan bo‘lishi mumkin. To‘g‘risi odatda transliterate yoki translit bo‘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:

  • /start buyrug‘ini ushlab qoladi.
  • message.from_user.username yordamida 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 await bilan chaqiriladi.

if __name__ == "__main__":
    asyncio.run(main())

🚀 Bu joyda:

  • Fayl to‘g‘ridan-to‘g‘ri ishga tushirilsa (python main.py deb), bot main() 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())