Qanday qilaman?¶
Amalda kerak bo'ladigan narsalarga qisqa javoblar. Har biri to'liq handler tanasi;
uni Tez boshlashdagi handle funksiyasiga joylashtiring.
Bu yerdagi har bir misol paketga qarshi kompilyatsiya qilingan, shuning uchun
yozilganidek ishlaydi.
Buyruqqa javob berish¶
if ctx.is_message() and Command("start").check(ctx.message()):
_ = ctx.answer("Xush kelibsiz!")
Command("start") /start, /start@botingiz va /start argument'ga mos keladi.
Bir nechta buyruq uchun Commands(["help", "about"]) ishlating.
Foydalanuvchi terganini echo qilish¶
if ctx.is_message():
_ = ctx.answer(ctx.message().text())
Rasm yoki fayl yuborish¶
_ = ctx.bot.send_photo(chat_id, "https://example.com/cat.jpg", caption="mushuk")
# diskdan yuklash
_ = ctx.bot.send_photo_file(chat_id, "/tmp/chart.png")
_ = ctx.bot.send_document_file(chat_id, "/tmp/report.pdf")
URL yoki file_id orqali bir zumda; *_file variantlari baytlarni yuklaydi.
To'liq to'plamni Yuborishdan ko'ring.
Tugma ko'rsatish va bosilishiga javob berish¶
if ctx.is_message() and Command("menu").check(ctx.message()):
var kb = InlineKeyboard()
kb.button("Ha", "ans:yes")
kb.button("Yo'q", "ans:no")
_ = ctx.answer("Birini tanlang", "", kb.as_markup())
elif ctx.is_callback():
var cb = ctx.callback()
# tugma aylanishini to'xtatadi
ctx.ack()
_ = ctx.answer("Siz tanladingiz: " + cb.data())
Savol berib, javobni kutish¶
Har-chat holat mashinasi aynan shu uchun. Holat o'rnating, keyingi xabarda chat qaysi holatda ekanini tekshiring:
if ctx.is_message() and Command("name").check(ctx.message()):
ctx.state.set_state("awaiting_name")
_ = ctx.answer("Ismingiz nima?")
elif ctx.is_message() and ctx.state.get_state() == "awaiting_name":
var name = ctx.message().text()
ctx.state.set_data("name", name)
# tugadi, holatni tashlaymiz
ctx.state.clear()
_ = ctx.answer("Tanishganimdan xursandman, " + name)
Holat va uning ma'lumoti har-chat, shuning uchun bot bilan gaplashayotgan ikki foydalanuvchi bir-biriga xalaqit bermaydi. Ko'p bosqichli forma uchun yana holatlar zanjirlang.
Buyruqni faqat ayrim foydalanuvchilarga ochish¶
Filtrlar ma'lumot; "bu admin'mi" tekshiruvi shunchaki if:
# sizning Telegram user id
comptime ADMIN_ID = 12345678
if ctx.is_message() and Command("shutdown").check(ctx.message()):
if ctx.message().from_user().id() == ADMIN_ID:
_ = ctx.answer("o'chirilmoqda")
else:
_ = ctx.answer("ruxsat yo'q")
Menyuni bitta xabarda saqlash¶
Har bosishda yangi xabar yuborish o'rniga, tugma turgan xabarni tahrirlang:
if ctx.is_callback():
var cb = ctx.callback()
ctx.ack()
var m = cb.message()
_ = ctx.bot.edit_message_text(
m.chat_id(), m.message_id(), "Tanladingiz: " + cb.data()
)
Sekin javobdan oldin "yozyapti..." ko'rsatish¶
_ = ctx.bot.send_chat_action(chat_id, "typing")
# ... sekin ishni bajaramiz (model chaqiruvi, fayl qurish) ...
_ = ctx.answer(result)
Bir xil xabarni ko'p chatga yuborish¶
Telegram'ning flood limitiga urilmaslik uchun tezlikni ushlang:
from mojogram import RateLimiter
var limiter = RateLimiter(rate=25.0, burst=25.0)
for uid in subscriber_ids:
# juda tez ketsak, kutadi
limiter.acquire()
_ = bot.send_message(uid, "E'lon")
Telegram Stars to'lovini olish¶
# 500 Stars
var prices = String('[{"label":"Pro tarif","amount":500}]')
_ = ctx.bot.send_invoice(chat_id, "Pro", "Bir oy", "sub_pro", "XTR", prices)
# keyin Telegram so'raganda checkout'ni tasdiqlang:
_ = ctx.bot.answer_pre_checkout_query(query_id, True)
Qolgan jarayonni So'rovnoma, to'lov va admindan ko'ring.
Matnni xavfsiz formatlash¶
Foydalanuvchi matni Markdown yoki HTML'ni buzadigan belgilar bo'lishi mumkin, shuning uchun uni qochiring:
from mojogram import escape_html
var name = ctx.message().from_user().first_name()
_ = ctx.answer("Salom <b>" + escape_html(name) + "</b>", "HTML")
O'ralmagan metodni chaqirish¶
Taxminan 60 metodda typed o'ramlar bor. Qolgan 120 dan ortig'i uchun parametr qurib, nomi bo'yicha chaqiring:
from mojogram import Params
var p = Params()
p.put_int("chat_id", chat_id)
p.put_int("message_id", message_id)
_ = ctx.bot.call("unpinAllChatMessages", p)
Ishlab chiqarishda yurgizish¶
Bir nechta foydalanuvchi uchun polling yetarli (Tez boshlashdagi sikl). Haqiqiy trafik uchun nginx orqasidagi webhook'ga o'ting; Joylashtirishni ko'ring.