Aiogram telegtam-bot
October 15

Aiogram 2

from aiogram import Bot, Dispatcher, types, F
from asyncio import run

dp = Dispatcher()

async def echo(message: types.Message, bot: Bot):
    await message.copy_to(chat_id=message.chat.id)

async def start():
    dp.message.register(echo)
    bot = Bot("6923568104:AAG5CQQmPU0_CG-Ym3dwdGNC5ZFjRcYB9cY")
    await dp.start_polling(*bots: bot, polling_timeout=1)

run(start()) 

AIOGRAM kutubxonasi yordamida yozilgan oddiy Telegram echo-boti
(ya’ni foydalanuvchi yuborgan xabarni o‘ziga qaytaradigan bot).


🧩 KOD IZOHLI HOLDA

from aiogram import Bot, Dispatcher, types, F
from asyncio import run
  • aiogram — Telegram bot yaratish uchun asinxron (async) Python kutubxonasi.
  • Bot — Telegram API bilan ishlash uchun obyekt (token orqali bog‘lanadi).
  • Dispatcher — xabarlarni qayta ishlovchi tizim.
  • types — Telegramdagi turli xabar turlari (message, photo, video va boshqalar) uchun tiplash.
  • runasyncio kutubxonasidan, asinxron funksiyani ishga tushirish uchun kerak.

dp = Dispatcher()
  • Bu yerda Dispatcher obyektini yaratdik.
  • U botga kelgan barcha xabarlarni ushlab, kerakli handler (funksiya)ga yuboradi.

async def echo(message: types.Message, bot: Bot):
    await message.copy_to(chat_id=message.chat.id)
  • echo — handler (ya’ni xabarni qayta ishlovchi funksiya).
  • message.copy_to() — foydalanuvchi yuborgan xabarni o‘sha chatga qayta yuboradi.
    Natijada bot siz yozgan xabarni sizga qaytaradi.
  • async — bu funksiya asinxron ishlashini bildiradi.

async def start():
    dp.message.register(echo)
    bot = Bot("6923568104:AAG5CQQmPU0_CG-Ym3dwdGNC5ZFjRcYB9cY")
    await dp.start_polling(*bots: bot, polling_timeout=1)
  • start() — botni ishga tushirish uchun asosiy funksiya.
  • dp.message.register(echo)echo funksiyasini har bir yangi xabar uchun handler sifatida ro‘yxatdan o‘tkazadi.
  • bot = Bot("...") — sizning bot tokeningiz bilan Bot obyektini yaratadi (tokenni @BotFather dan olasiz).
  • dp.start_polling() — Telegram serveridan yangi xabarlarni doimiy ravishda olishni boshlaydi.
    polling_timeout=1 — har bir so‘rov orasidagi kutish vaqti (sekundda).
    ⚠️ Ammo bu yerda xato bor*bots: bot noto‘g‘ri yozilgan, to‘g‘risi shunday bo‘lishi kerak: await dp.start_polling(bot, polling_timeout=1)

run(start())
  • Bu asyncio.run() yordamida asinxron start() funksiyasini ishga tushiradi.
  • Natijada bot onlayn bo‘ladi va foydalanuvchi yuborgan xabarlarni qaytarishni boshlaydi.

⚙️ JARAYON QISQACHA

  1. Bot Telegram serveriga ulanadi (Bot token orqali).
  2. Dispatcher yangi xabarlarni kuzatadi.
  3. Har safar foydalanuvchi xabar yuborganda → echo() funksiyasi ishga tushadi.
  4. Xabar nusxasi (copy) qayta yuboriladi → “echo” effekti hosil bo‘ladi.
  5. Bot polling rejimida doimiy ishlaydi (to’xtamaguncha).

2-Amaliyot

Bot foydalanuvchi yuborgan xabarni:

  • agar lotincha bo‘lsa — kirillchaga o‘girsin;
  • agar kirillcha bo‘lsa — lotinchaga o‘girsin.


Lotin ↔ Кирилл avtomatik tarjima qiluvchi Telegram bot

from aiogram import Bot, Dispatcher, types
from asyncio import run
from transliterate import to_cyrillic, to_latin  # transliteratsiya uchun kutubxona

# 🔑 Bot tokeningiz
BOT_TOKEN = "6923568104:AAG5CQQmPU0_CG-Ym3dwdGNC5ZFjRcYB9cY"

# 🧠 Bot va Dispatcher obyektlari
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()

# 🔄 Har bir kelgan xabarni avtomatik tarjima qiladi
@dp.message()
async def convert_text(message: types.Message):
    text = message.text

    # Agar matnda faqat lotin harflar bo‘lsa → kirillga o‘giradi
    if text.isascii():
        response = to_cyrillic(text)
    else:
        # Aks holda → lotinga o‘giradi
        response = to_latin(text)

    # Natijani qaytarish
    await message.answer(response)

# 🚀 Botni ishga tushirish
async def main():
    print("Bot ishga tushdi ✅")
    await dp.start_polling(bot)

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

🧩 Qanday ishlaydi:

  1. Foydalanuvchi botga yozadi (salom yoki салом).
  2. Kod matndagi belgilarni tekshiradi:
    • agar ASCII (ya’ni lotin) bo‘lsa — to_cyrillic() ishlaydi;
    • aks holda — to_latin() ishlaydi.
  3. Bot avtomatik tarjima qilib, javob yuboradi.

⚙️ Kerakli kutubxona

Bu kod ishlashi uchun avval quyidagi kutubxonani o‘rnating:

pip install transliterate

Kodning izohi:

  • agar lotincha bo‘lsa → кириллчaга,
  • agar кириллча bo‘lsa → lotinchaga
    o‘girish uchun yozilgan.


from aiogram import Bot, Dispatcher, types
from asyncio import run
from transliterate import to_cyrillic, to_latin  # transliteratsiya uchun kutubxona

🔹 aiogram — Telegram bot yaratish uchun asinxron Python kutubxonasi.
🔹 Bot — Telegram bilan aloqa qiladi (token orqali).
🔹 Dispatcher — xabarlarni boshqaradi, ularni kerakli funksiyaga yuboradi.
🔹 types — Telegramdagi obyektlar (xabar, chat, foydalanuvchi va h.k.).
🔹 runasyncio modulidan, asinxron dasturlarni ishga tushiradi.
🔹 to_cyrillic, to_latintransliterate kutubxonasidagi funksiyalar,
ular matnni lotindan kirillga yoki kirilldan lotinga o‘giradi.


BOT_TOKEN = "6923568104:AAG5CQQmPU0_CG-Ym3dwdGNC5ZFjRcYB9cY"

🔹 Bu — botning tokeni (siz uni @BotFather dan olasiz).
U Telegram bilan bog‘lanish uchun kalit vazifasini bajaradi.


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

🔹 bot obyekt — Telegram API bilan aloqa qiladi.
🔹 dp (Dispatcher) — botga kelgan har bir xabarni kuzatadi
va mos funksiya (handler)ni ishga tushiradi.


@dp.message()
async def convert_text(message: types.Message):
    text = message.text

🔹 Bu — handler (ya’ni xabarni qabul qiluvchi funksiya).
@dp.message() dekoratori orqali convert_text() funksiyasi
har safar foydalanuvchi yangi xabar yuborganda avtomatik ishga tushadi.
🔹 message.text — foydalanuvchi yuborgan matn.


if text.isascii():
    response = to_cyrillic(text)
else:
    response = to_latin(text)

🔹 .isascii() — agar matndagi belgilar lotincha bo‘lsa, True qaytaradi.
Shunda bot lotindan kirillga o‘giradi.
🔹 Aks holda (False) — demak, matn kirillchada.
Bu holda bot kirilldan lotinga o‘giradi.

Masalan:

  • foydalanuvchi: salom
    isascii() = True → response = "салом"
  • foydalanuvchi: салом
    isascii() = False → response = "salom"

await message.answer(response)

🔹 Bot o‘girgan matnni foydalanuvchiga javob sifatida yuboradi.


async def main():
    print("Bot ishga tushdi ✅")
    await dp.start_polling(bot)

🔹 main() — botni ishga tushirish uchun asinxron funksiya.
🔹 dp.start_polling(bot) — bot polling rejimida ishlaydi, ya’ni
Telegram serveridan yangi xabarlar kelganini doim kuzatib turadi.
Har bir yangi xabar kelganda — convert_text() funksiyasi ishlaydi.
🔹 print() — konsolda bot ishga tushganini ko‘rsatadi.


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

🔹 Bu Python’ning standart yozuvi:
agar fayl to‘g‘ridan-to‘g‘ri ishga tushirilsa → main() funksiyasini chaqiradi.
🔹 run(main()) — asinxron funksiya ishga tushadi.


⚙️ Jarayon qanday ishlaydi:

  1. Bot Telegram bilan ulanadi (token orqali).
  2. Foydalanuvchi xabar yuboradi (salom yoki салом).
  3. Bot matnning yozuv turini aniqlaydi (isascii()).
  4. Matnni lotin ↔ кирилл shaklida o‘giradi.
  5. Natijani foydalanuvchiga yuboradi.
  6. Bot doimiy ravishda yangi xabarlarni kuzatadi (polling).