Xabar va media yuborish¶
Yuboradigan hamma narsangiz Bot obyekti orqali ketadi. Handler ichida u
ctx.bot'da turadi; Bot'ni to'g'ridan ushlab, istalgan joydan ham chaqirsa
bo'ladi. Aksar yuborish metodlari Message qaytaradi, shuning uchun uning
message_id'sini saqlab, keyin tahrirlash yoki o'chirish mumkin.
Matn¶
send_message asosiy ish quroli. Faqat chat_id va text majburiy, qolgani
standart qiymatli keyword argumentlar.
_ = ctx.bot.send_message(chat_id, "oddiy matn")
_ = ctx.bot.send_message(chat_id, "*qalin* _kursiv_", "Markdown")
_ = ctx.bot.send_message(
chat_id,
"hujjatga qarang",
parse_mode="HTML",
reply_markup=kb.as_markup(),
reply_to_message_id=msg.message_id(),
disable_notification=True,
)
Handler ichida ikkita qisqartma chat_id'ni yozishdan qutqaradi:
_ = ctx.answer("shu chatga boradi")
_ = ctx.reply("kelgan xabarni iqtibos qiladi")
Telegram matnli xabarni 4096 belgida cheklaydi. Uzun chiqish qursangiz, uni o'zingiz bo'lib yuboring; framework siz uchun bo'lib bermaydi.
Parse rejimlari va qochirish¶
Parse rejimi Telegram'ga matningizdagi belgilanishni qanday o'qishni aytadi.
mojogram satrni o'zgartirmay uzatadi, shuning uchun qochirish (escaping) sizning
zimmangizda. format yordamchilari aynan shu uchun.
from mojogram import escape_html, escape_markdown
# ishonchsiz, < yoki * bo'lishi mumkin
var name = msg.from_user().first_name()
_ = ctx.answer("Salom <b>" + escape_html(name) + "</b>", "HTML")
_ = ctx.answer("Salom *" + escape_markdown(name) + "*", "MarkdownV2")
escape_html &, <, > ni qoplaydi. escape_markdown MarkdownV2 band deb
biladigan har bir belgini backslash bilan qochiradi. Buni tashlab ketsangiz,
ismida _ yoki [ bo'lgan foydalanuvchi butun xabarni Telegram 400 bilan rad
etishiga sabab bo'ladi.
Rasm, video, audio, hujjat¶
Faylni yuborishning ikki yo'li: Telegram allaqachon biladigan havola orqali
(oldingi xabardan file_id, yoki ochiq URL), yoki diskdan baytlarni yuklab.
Havola orqali, yuklashsiz:
_ = ctx.bot.send_photo(chat_id, "https://example.com/cat.jpg", caption="mushuk")
# saqlagan id'ingizni qayta ishlatish
_ = ctx.bot.send_video(chat_id, file_id)
_ = ctx.bot.send_document(chat_id, file_id, caption="hisobot.pdf")
_ = ctx.bot.send_audio(chat_id, file_id)
_ = ctx.bot.send_voice(chat_id, file_id)
_ = ctx.bot.send_sticker(chat_id, sticker_file_id)
Diskdan, haqiqiy multipart yuklash (yo'l siz uchun shell-escape qilinadi):
_ = ctx.bot.send_photo_file(chat_id, "/tmp/chart.png", caption="bugun")
_ = ctx.bot.send_document_file(chat_id, "/tmp/report.pdf")
_ = ctx.bot.send_video_file(chat_id, "/tmp/clip.mp4", caption="demo")
*_file variantlari yuklashni curl'ning multipart imkoniyati orqali bajaradi va
JSON chaqiruvlari bilan bir xil retry yo'lidan foydalanadi, shuning uchun
yuklash o'rtasidagi vaqtinchalik 5xx to'g'ridan sizga otilmasdan qayta uriniladi.
Albomlar¶
send_media_group bir nechta elementni bitta albom qilib joylaydi. Media
massivini JSON satr sifatida berasiz; uni Params/put_raw bilan quring yoki
o'zingiz yozing:
var media = String(
'[{"type":"photo","media":"' + url1 + '","caption":"bir"},'
'{"type":"photo","media":"' + url2 + '"}]'
)
_ = ctx.bot.send_media_group(chat_id, media)
Joylashuv, zar, chat harakati¶
_ = ctx.bot.send_location(chat_id, 41.311, 69.240) # Toshkent
# zar, dart, basketbol, ...
_ = ctx.bot.send_dice(chat_id, "🎯")
# "yozyapti..." ko'rsatkichi
_ = ctx.bot.send_chat_action(chat_id, "typing")
send_chat_action'ni har qanday sekin javobdan oldin chaqirish foydali (model
javobi, hali yaratayotgan faylingiz). U "yozyapti" yoki "rasm yuklayapti" deb
ko'rsatadi, shunda chat muzlab qolgandek ko'rinmaydi.
Yo'naltirish va nusxalash¶
# "kimdan yo'naltirilgan" sarlavhasini saqlaydi
_ = ctx.bot.forward_message(chat_id, from_chat_id, message_id)
# toza nusxa, sarlavhasiz
_ = ctx.bot.copy_message(chat_id, from_chat_id, message_id)
Tahrirlash va o'chirish¶
Qaytgan Message'ni ushlab tursangiz, uni joyida o'zgartirsangiz bo'ladi. Jonli
yangilanadigan xabar yoki tugma bosilganda o'zini qayta yozadigan menyu shunday
quriladi.
var sent = ctx.answer("ishlayapman...")
# ... ishni bajaramiz ...
_ = ctx.bot.edit_message_text(chat_id, sent.message_id(), "tayyor")
_ = ctx.bot.edit_message_caption(chat_id, sent.message_id(), "yangi izoh")
_ = ctx.bot.edit_message_reply_markup(
chat_id, sent.message_id(), kb.as_markup()
)
_ = ctx.bot.edit_message_media(chat_id, sent.message_id(), media_json)
_ = ctx.bot.delete_message(chat_id, sent.message_id())
Foydalanuvchi yuborganini yuklab olish¶
Foydalanuvchi yuklagan faylni olish uchun uning file_id'sidan lokal yo'lga
o'ting:
_ = ctx.bot.download_file(photo_file_id, "/tmp/incoming.jpg")
download_file ikki bosqichni siz uchun bajaradi (getFile'ni chaqiradi, keyin
qaytgan yo'ldan yuklab oladi). Faqat metama'lumot kerak bo'lsa, get_file xom
JSON qaytaradi.
O'ralmagan har narsa¶
Taxminan 60 metodda typed o'ramlar bor. Qolgan Bot API (120 dan ortiq metod)
call orqali yetib boriladi, u Params builderini oladi:
from mojogram import Params
var p = Params()
p.put_int("chat_id", chat_id)
p.put_str("emoji", "🎲")
_ = ctx.bot.call("sendDice", p)
Params'da put_str, put_int, put_bool bor, hamda allaqachon JSON bo'lgan
qiymat (massiv yoki nested obyekt) uchun put_raw. Typed metodlarning to'liq
ro'yxatini API ma'lumotnomadan ko'ring.