Xabarlar bilan ishlash (1-dars)

Matnlarni formatlash

Telegram bot orqali foydalanuvchilarga jo’natilayotgan xabarlarni formatlab jo’natish imkoniyati mavjud bo’lib, textlarni ajralib turadigan va chiroyliroq qilib jo’natish imkonini beradi.

Ushbu formatlash bizga botimiz orqali foydalanuvchilarga bold, italic, underline, strikethrough, code, url va spoiler(ustiga bosilmagunigacha ko’rinmaydigan) ko’rinishidagi matnlarni jo’nata olamiz.

Formatlash uchun 3xil format mavjud: HTML, Markdown va MarkdownV2. Bulardan asosan foydalanadiganlar HTML va Markdown2 hisoblanadi. Shuning uchun biz siz bilan shu ikki usulda matnlarni formatlab jo’natishni ko’rib chiqamiz.

Quyidagi kodni birinchi bo’limda yozgan kodimizga /start buyurg’ini “ushlab” olish uchun yozilgan handler’dan kegin qo’shib olamiz:

E’tibor bergan bo’lsangiz biz answer() funksiyasiga faqatgina text argumentini emas,balki parse_mode argumentini ham qo’shdik,ushbu argument orqali biz Telegram’ga matnimizni qaysi formatda formatlash kerakligini ko’rsatamiz.

@dp.message_handler(commands=['format'])
async def formating(message: types.Message):
    # HTML
    await message.answer(
        text="<b>Black</b>, <i>italic</i>, <u>underline</u>, <s>strikethrough</s>, <a href='https://example.com'>link</a>, <tg-spoiler>spoiler</tg-spoiler>\n\nHTML",
        parse_mode='HTML',
    )
    # MarkdownV2
    await message.answer(
        text="*Black*, _italic_, __underline__, ~strikethrough~, [link](https://example.com), ||spoiler||\n\nMarkdownV2",
        parse_mode='MarkdownV2')
Python

Keling endi kodimizni ishga tushirib, botimizni sinab ko’ramiz:

To’liq kod: havola

Matnlarni formatlash bo’yicha to’liqroq quyidagi havola orqali tanishib chiqishingiz mumkin: havola.

Aiogramning Bot classida parse_mode argumenti bo’lib, ushbu argument orqali biz oson qaysi format turida formatlash kerakligini bera olamiz, masalan:

bot = Bot("BOT_TOKEN",parse_mode=types.ParseMode.HTML)
Python

Media fayllar

Telegram Bot orqali nafaqat matnlar bilan ishlash, shu bilan bir qatorda rasmlar, giflar, videolar, audiolar, stickerlar, geolokatsiyalar va hokazolar bilan ishlash mumkin. Barcha media fayllar o’zining file_id va file_unique_idsiga ega. file_id bitta mediafaylni ko’p martta tezkor yuborish uchun foydalanilishi mumkin.

Tezkor yuborish mumkinligining sababi ushbu fayl allaqachon Telegram serverlarida mavjudligidur. Botlarda media fayllarni yuborish uchun ushbu usuldan foydalanish tavsiya etiladi. Masalan, quyidagi kod foydalanuvchidan kelgan animatsiya’ni o’ziga bir zumda file_idsi orqali qaytaradi:

# Foydalanuvchidan kelayotgan sticker'ni "ushlab" olish uchun handler
@dp.message_handler(content_types=['sticker'])
async def return_anim(message: types.Message):
    # Foydalanuvchi jo'natgan stickerga javoban jo'natilgan stickerni qaytaradi
    await message.reply_sticker(message.sticker.file_id)
Python

Natija:

file_id har bir Telegram Bot uchun unikal bo’ladi, yani bitta bot orqali olingan file_id boshqa bot uchun ishlamaydi. file_unique_id esa biror bir media fayl uchun boshqa botlarda ham o’zgarmas identifikator hisoblanadi, file_unique_id orqali mediafayllarni jo’natib bo’lmaydi.

Aiogramda foydalanuvchidan kelgan media fayllar va fayllarni yuklash uchun download() funksiyasi mavjud,namuna uchun kod:

# Foydalanuvchidan kelgan faylni "ushlab" olish uchun handler
@dp.message_handler(content_types=['document'])
async def down_doc(message: types.Message):
    # Bot ishga tushirilgan direktoriyaga faylni yuklaydi
    await message.document.download()
    await message.reply("✅ Fayl muvaffaqiyatli yuklandi!")


# Foydalanuvchidan kelgan rasmni "ushlab" olish uchun handler
@dp.message_handler(content_types=["photo"])
async def down_photo(message: types.Message):
    # Bot ishga tushirilgan diroktoriyadagi images nomli papkaga rasmni yuklaydi.
    await message.photo[-1].download()
    await message.reply("✅ Rasm muvaffaqiyatli yuklandi!")
Python

E’tibor bergan bo’lsangiz biz rasmni yuklashda message.photo[-1] qildik. Buning sababi foydalanuvchi botga rasm yuborganida Telegram bizga bitta photo obyektida foydalanuvchi jo’natgan rasmnining har-xil sifatdagisini yuboradi, eng oxirgisi eng sifatlisi hisoblanadi, shuning uchun biz eng oxirgi elementni, yani eng sifatli rasmning file_idsini [-1] orqali olamiz va yuklaymiz.

Keyingi qism: Tugmalar bilan ishlash(2-dars).

Mavzuga oid maqolalar