Telegram bot klienti (Bot API): metodlar ma'lumotnomasi
Telegram — Socialift Python SDK'ning Bot API klienti. U BotFather bergan token bilan asinxron ishlaydi: xabar va media yuboradi, webhook yoki long polling orqali yangilanishlarni oladi, guruh va kanallarni boshqaradi. Quyida 76 metodning har biri qaysi Bot API metodini chaqirishi, qachon kerakligi va Telegram qo'ygan cheklovlar yozilgan. Alohida o'ralmagan metodlar uchun call() bor.
from socialift import Telegram76 ta metodsocialift 1.3.0 bo'yichaYangilangan:
Telegram bot klientini qanday sozlash kerak?
Token @BotFather'da olinadi: /newbot buyrug'i bot nomi va username'ni so'raydi, so'ng 123456:AA... ko'rinishidagi token beradi. Token bilan istalgan odam botni boshqara oladi — uni kodda saqlamang. Sizib chiqsa, BotFather'da /token buyrug'i bilan yangisini yarating.
Klientni Telegram(token=...) yoki Telegram.from_env() bilan yarating: ikkinchisi tokenni TELEGRAM_BOT_TOKEN muhit o'zgaruvchisidan, litsenziya kalitini esa SOCIALIFT_LICENSE_KEY dan o'qiydi. Har bir metod token= argumentini ham qabul qiladi, ya'ni bitta klient bilan bir nechta botni boshqarish mumkin. async with bloki tugaganda HTTP sessiya yopiladi.
Yangilanishlarni olishning ikki yo'li bor va ular bir vaqtda ishlamaydi. Webhook (set_webhook) — Telegram har bir hodisani sizning HTTPS manzilingizga POST qiladi; server uchun qulay, secret_token bilan himoyalanadi. Long polling (get_updates yoki poll()) — ochiq manzil kerak emas, skript va lokal ishlab chiqish uchun mos. Telegram yetkazilmagan yangilanishlarni 24 soatgacha saqlaydi.
import asyncio
from socialift import Telegram
async def main():
# TELEGRAM_BOT_TOKEN va SOCIALIFT_LICENSE_KEY muhitdan o'qiladi
async with Telegram.from_env() as bot:
me = await bot.get_me()
print("Bot:", me["username"])
# Webhook o'rnatilmagan bo'lsa — long polling
async for update in bot.poll(allowed_updates=["message"]):
message = update.get("message")
if message and "text" in message:
await bot.reply(
message["chat"]["id"], message["message_id"], "Qabul qilindi"
)
asyncio.run(main())Bot va sozlash
Token tekshiruvi, buyruqlar menyusi va botni boshqa Bot API serveriga ko'chirish.
close_botdelete_my_commandsfrom_envget_meget_my_commandslog_outset_my_commands
close_bot
asyncBot API'ning close metodini chaqiradi: botni bir lokal Bot API serveridan boshqasiga ko'chirishdan oldin joriy nusxani yopadi. Nomi close_bot, chunki SDK klientlarida close() HTTP sessiyani yopadi.
await bot.close_bot(*, token: Optional[str] = None) -> bool- Avval webhook'ni o'chiring — aks holda server qayta ishga tushganda bot yana ishga tushishi mumkin.
- Bot ishga tushgandan keyingi dastlabki 10 daqiqada Telegram 429 xatosini qaytaradi.
delete_my_commands
asyncBerilgan scope va til uchun buyruqlar ro'yxatini o'chiradi (deleteMyCommands). Shundan keyin foydalanuvchilar yuqoriroq darajadagi ro'yxatni (masalan, standart scope'ni) ko'radi.
await bot.delete_my_commands(
*,
scope: Optional[dict] = None,
language_code: Optional[str] = None,
token: Optional[str] = None,
) -> boolfrom_env
classmethodTokenni TELEGRAM_BOT_TOKEN muhit o'zgaruvchisidan o'qib klient yaratadi; qolgan argumentlar (timeout, retry, license_key, session) konstruktorga uzatiladi. Token kodga tushmasligi uchun shu yo'l tavsiya etiladi.
Telegram.from_env(**kwargs) -> Telegram- O'zgaruvchi bo'sh bo'lsa ham klient yaratiladi —
ConfigurationErrorbirinchi so'rovda ko'tariladi (agar o'sha chaqiruvgatoken=berilmagan bo'lsa).
get_me
asyncBot profilini (getMe) dict ko'rinishida qaytaradi: id, username, can_join_groups, can_read_all_group_messages va boshqalar. Token ishlayotganini tekshirishning eng oddiy yo'li.
await bot.get_me(*, token: Optional[str] = None) -> dictcan_read_all_group_messages—truebo'lsa privacy mode o'chirilgan.- HTTP 401 yoki "Unauthorized" javobini SDK
AuthErrorga aylantiradi.
me = await bot.get_me()get_my_commands
asyncBerilgan scope va language_code uchun o'rnatilgan buyruqlarni qaytaradi (getMyCommands). Bo'sh ro'yxat — bu kombinatsiya uchun buyruq o'rnatilmagan.
await bot.get_my_commands(
*,
scope: Optional[dict] = None,
language_code: Optional[str] = None,
token: Optional[str] = None,
) -> listlog_out
asyncBotni Telegram'ning bulutli Bot API serveridan chiqaradi (logOut). Faqat botni o'zingizning (lokal) Bot API serveringizga ko'chirishdan oldin kerak.
await bot.log_out(*, token: Optional[str] = None) -> bool- Chaqiruvdan keyin bot 10 daqiqa davomida bulutli serverga qayta kira olmaydi.
- SDK so'rovlarni faqat
https://api.telegram.orgga yuboradi, ya'ni lokal serverga o'tgach bu klient u bilan ishlamaydi. - Kabinet Playground'idagi universal chaqiruvda
logOutvaclosebloklangan.
set_my_commands
asyncBot menyusida ko'rinadigan buyruqlar ro'yxatini o'rnatadi (setMyCommands), kerak bo'lsa scope (masalan, faqat guruh adminlari) va language_code bo'yicha alohida. Format: [{"command": "start", "description": "..."}].
await bot.set_my_commands(
commands: list,
*,
scope: Optional[dict] = None,
language_code: Optional[str] = None,
token: Optional[str] = None,
) -> bool- Ko'pi bilan 100 ta buyruq; buyruq 1–32 belgi (kichik lotin harflari, raqam,
_), tavsif 1–256 belgi. - Telegram foydalanuvchiga eng aniq mos ro'yxatni ko'rsatadi: avval chat + til, oxirida standart scope.
Yangilanishlar va webhook
Long polling, webhook o'rnatish va kelgan so'rov Telegram'dan ekanini tekshirish.
delete_webhookget_updatesget_webhook_infopollset_webhookverify_webhook
delete_webhook
asyncWebhook'ni o'chiradi (deleteWebhook), shundan keyin get_updates yoki poll bilan ishlash mumkin. drop_pending_updates=True hali yetkazilmagan yangilanishlarni tashlab yuboradi.
await bot.delete_webhook(
*,
drop_pending_updates: Optional[bool] = None,
token: Optional[str] = None,
) -> boolawait bot.delete_webhook()get_updates
asyncYangi yangilanishlarni long polling bilan oladi (getUpdates) va Update dict'lari ro'yxatini qaytaradi. Qayta ishlangan hodisalarni tasdiqlash uchun keyingi so'rovda offset = oxirgi update_id + 1 bering.
await bot.get_updates(
*,
offset: Optional[int] = None,
limit: Optional[int] = None,
timeout: int = 30,
allowed_updates: Optional[list[str]] = None,
token: Optional[str] = None,
) -> list- Webhook o'rnatilgan bo'lsa ishlamaydi; Telegram yetkazilmagan yangilanishlarni ko'pi bilan 24 soat saqlaydi.
- SDK
timeoutni klient timeout'idan 10 soniya kam qilib cheklaydi (standart 30 s klient → 20 s kutish); uzoqroq kutish uchunTelegram(token=..., timeout=90). limit— 1–100 (standart 100).
updates = await bot.get_updates(limit=50, timeout=0)get_webhook_info
asyncWebhook holatini qaytaradi (getWebhookInfo): url, pending_update_count, last_error_date, last_error_message, max_connections, allowed_updates. Hodisalar kelmay qolsa birinchi shu yerga qarang.
await bot.get_webhook_info(*, token: Optional[str] = None) -> dict- Bot
getUpdatesishlatayotgan bo'lsaurlbo'sh satr bo'ladi.
info = await bot.get_webhook_info()SDK yordamchisi: getUpdates ustidagi cheksiz async for oqimi, offset avtomatik suriladi. Ochiq HTTPS manzili bo'lmagan skript va worker'lar uchun.
bot.poll(
*,
allowed_updates: Optional[list[str]] = None,
timeout: int = 30,
token: Optional[str] = None,
) -> AsyncIterator[dict]RateLimitErrordaretry_after(yoki 5 s) kutadi; boshqa API xatolaridasocialift.telegramlogger'iga ogohlantirish yozib, 5 s dan keyin qayta urinadi — noto'g'ri token yoki o'rnatilgan webhook siklni to'xtatmaydi, shuning uchun avvalget_me()vaget_webhook_info()ni tekshiring.offsetfaqat xotirada saqlanadi: qayta ishga tushirilganda oxirgi tasdiqlanmagan paket yana kelishi mumkin —update_idbo'yicha dublikatni filtrlang.
set_webhook
asyncTelegram'ga yangilanishlarni url manzilingizga HTTPS POST so'rovlari bilan yuborishni buyuradi (setWebhook). Har doim secret_token bering — kelgan so'rovni verify_webhook bilan tekshirasiz.
await bot.set_webhook(
url: str,
*,
secret_token: Optional[str] = None,
allowed_updates: Optional[list[str]] = None,
drop_pending_updates: Optional[bool] = None,
max_connections: Optional[int] = None,
certificate: Union[bytes, socialift.telegram.InputFile, NoneType] = None,
token: Optional[str] = None,
ip_address: Optional[str] = None,
**extra: Any,
) -> bool- Portlar: 443, 80, 88, 8443.
secret_token— 1–256 belgi, faqatA-Z,a-z,0-9,_va-. - Webhook o'rnatilgan paytda
get_updatesvapollyangilanish olmaydi. - Standart holatda
chat_member,message_reactionvamessage_reaction_countkelmaydi — ularniallowed_updatesda aniq so'rang; parametr berilmasa oldingi sozlama saqlanadi.
await bot.set_webhook("https://siz.uz/tg", secret_token="...", allowed_updates=["message"])verify_webhook
staticmethodKelgan webhook so'rovidagi X-Telegram-Bot-Api-Secret-Token sarlavhasi set_webhook da berilgan secret_token ga tengligini tekshiradi va True/False qaytaradi. Sinxron statik metod, tarmoqqa murojaat qilmaydi.
Telegram.verify_webhook(headers, secret_token: str) -> bool- Bot API webhook tanasiga imzo qo'ymaydi (Meta'dagi X-Hub-Signature-256 kabi) — tekshiruv faqat shu sarlavha orqali, shuning uchun
secret_tokensiz manzilni bilgan har kim soxta hodisa yubora oladi. - Taqqoslash doimiy vaqtda; bo'sh
secret_tokendoimFalseberadi. Xuddi shu funksiya:socialift.webhooks.verify_telegram_request. - Framework'ning registrga sezgir bo'lmagan headers obyektini bering; oddiy dict'da faqat aynan
X-Telegram-Bot-Api-Secret-Tokenva to'liq kichik harfli yozuv topiladi.
Xabar yuborish
Matn, javob, forward va nusxa, joylashuv, so'rovnoma, reaksiya va chat holati.
copy_messagecopy_messagesforward_messageforward_messagesreplysend_chat_actionsend_contactsend_dicesend_locationsend_messagesend_pollsend_venueset_reactionstop_poll
copy_message
asyncXabarni asl manbaga havolasiz nusxalaydi (copyMessage) va to'liq Message emas, faqat yangi message_id (MessageId) qaytaradi. caption media izohini almashtiradi; berilmasa asl izoh qoladi.
await bot.copy_message(
chat_id: Union[int, str],
from_chat_id: Union[int, str],
message_id: int,
*,
caption: Optional[str] = None,
token: Optional[str] = None,
**extra: Any,
) -> dict- Servis, pullik media, giveaway, giveaway g'oliblari va invoice xabarlarini nusxalab bo'lmaydi.
- Viktorina (quiz) faqat bot to'g'ri javoblarni (
correct_option_ids) bilsa nusxalanadi.
copy_messages
async1–100 ta xabarni asl manbaga havolasiz nusxalaydi (copyMessages), albom guruhlanishi saqlanadi. MessageId ro'yxatini qaytaradi.
await bot.copy_messages(
chat_id: Union[int, str],
from_chat_id: Union[int, str],
message_ids: Iterable[int],
*,
token: Optional[str] = None,
**extra: Any,
) -> list- ID'lar qat'iy o'sish tartibida; topilmagan yoki nusxalab bo'lmaydigan xabarlar tashlab ketiladi.
forward_message
asyncBitta xabarni "Forwarded from" belgisi bilan boshqa chatga uzatadi (forwardMessage) va yangi Message'ni qaytaradi. Manba ko'rinmasligi kerak bo'lsa copy_message ishlating.
await bot.forward_message(
chat_id: Union[int, str],
from_chat_id: Union[int, str],
message_id: int,
*,
message_thread_id: Optional[int] = None,
disable_notification: Optional[bool] = None,
protect_content: Optional[bool] = None,
token: Optional[str] = None,
**extra: Any,
) -> dict- Servis xabarlar va himoyalangan (protected) kontentli xabarlarni forward qilib bo'lmaydi.
- Bu o'ramda
**extrayo'q — yangi parametrlar uchuncall("forwardMessage", ...).
forward_messages
asyncBir so'rovda 1–100 ta xabarni uzatadi (forwardMessages) va MessageId obyektlari ro'yxatini (faqat ID) qaytaradi. Albom guruhlanishi saqlanadi.
await bot.forward_messages(
chat_id: Union[int, str],
from_chat_id: Union[int, str],
message_ids: Iterable[int],
*,
token: Optional[str] = None,
**extra: Any,
) -> list- ID'lar qat'iy o'sish tartibida bo'lishi shart.
- Topilmagan yoki forward qilib bo'lmaydigan xabarlar xato bermay tashlab ketiladi.
reply
asyncSDK qisqartmasi: reply_parameters={"message_id": message_id} bilan send_message — yangi xabar ko'rsatilgan xabarga javob sifatida chiqadi. send_message ning boshqa argumentlari o'zgarishsiz uzatiladi.
await bot.reply(
chat_id: Union[int, str],
message_id: int,
text: str,
**kwargs: Any,
) -> dictreply_parametersni o'zingiz bermang — u allaqachon o'rnatilgan, takroriy argument Python'daTypeErrorberadi.
send_chat_action
asyncBot javob tayyorlayotganda chatda "yozmoqda…", "rasm yubormoqda…" kabi holatni ko'rsatadi (sendChatAction). Standart amal — typing.
await bot.send_chat_action(
chat_id: Union[int, str],
action: str = 'typing',
*,
message_thread_id: Optional[int] = None,
token: Optional[str] = None,
**extra: Any,
) -> bool- Holat 5 soniya yoki undan kam turadi va botdan xabar kelganda o'chadi — uzoq jarayonda takrorlang.
- Amallar:
typing,upload_photo,record_video,upload_video,record_voice,upload_voice,upload_document,choose_sticker,find_location,record_video_note,upload_video_note.
send_contact
asyncTelefon kontakti kartasini yuboradi (sendContact): phone_number, first_name, ixtiyoriy last_name. Yuborilgan Message'ni qaytaradi.
await bot.send_contact(
chat_id: Union[int, str],
phone_number: str,
first_name: str,
*,
last_name: Optional[str] = None,
token: Optional[str] = None,
**extra: Any,
) -> dictsend_dice
asyncTasodifiy qiymatli animatsion emoji yuboradi (sendDice): zar, dart, basketbol, futbol, bouling yoki slot-mashina. Natija qaytgan Message'dagi dice.value da.
await bot.send_dice(
chat_id: Union[int, str],
*,
emoji: Optional[str] = None,
token: Optional[str] = None,
**extra: Any,
) -> dict- Qiymatlar: 🎲 🎯 🎳 uchun 1–6, 🏀 ⚽ uchun 1–5, 🎰 uchun 1–64; standart emoji — 🎲.
send_location
asyncXaritadagi nuqtani yuboradi (sendLocation). live_period berilsa — jonli joylashuv bo'ladi va uni yangilab turish mumkin.
await bot.send_location(
chat_id: Union[int, str],
latitude: float,
longitude: float,
*,
live_period: Optional[int] = None,
token: Optional[str] = None,
**extra: Any,
) -> dictlive_period— 60–86400 soniya yoki cheksiz tahrirlanadigan jonli joylashuv uchun0x7FFFFFFF.- Jonli joylashuvni yangilash:
call("editMessageLiveLocation", ...).
send_message
asyncFoydalanuvchi, guruh yoki kanalga matnli xabar yuboradi (sendMessage) va yuborilgan Message dict'ini qaytaradi. chat_id — raqamli ID yoki ommaviy kanal/supergroup'ning @username'i.
await bot.send_message(
chat_id: Union[int, str],
text: str,
*,
parse_mode: Optional[str] = None,
entities: Optional[list] = None,
link_preview_options: Optional[dict] = None,
disable_notification: Optional[bool] = None,
protect_content: Optional[bool] = None,
message_thread_id: Optional[int] = None,
reply_parameters: Optional[dict] = None,
reply_markup: Optional[dict] = None,
business_connection_id: Optional[str] = None,
message_effect_id: Optional[str] = None,
token: Optional[str] = None,
**extra: Any,
) -> dict- Matn — entity'lar ajratilgandan keyin 1–4096 belgi;
parse_mode:HTML,MarkdownV2yoki eskiMarkdown. - Guruh supergroup'ga aylanganda ID o'zgaradi: eski ID bilan so'rov
ApiErrorberadi, yangi IDexc.payload["parameters"]["migrate_to_chat_id"]da. message_thread_id— forum mavzusi; imzoda yo'q parametrlar (masalan,allow_paid_broadcast)**extraorqali beriladi.
await bot.send_message("@mening_kanalim", "Salom!", parse_mode="HTML")send_poll
asyncSo'rovnoma yuboradi (sendPoll) — oddiy yoki type="quiz" bilan viktorina. poll obyekti bor Message'ni qaytaradi.
await bot.send_poll(
chat_id: Union[int, str],
question: str,
options: list,
*,
is_anonymous: Optional[bool] = None,
allows_multiple_answers: Optional[bool] = None,
type: Optional[str] = None,
correct_option_id: Optional[int] = None,
token: Optional[str] = None,
correct_option_ids: Optional[Sequence[int]] = None,
**extra: Any,
) -> dict- Savol — 1–300 belgi;
options— 1–12 ta, rasmiy formatiInputPollOption:[{"text": "Ha"}, {"text": "Yo'q"}]. - Bot API 9.6 dan viktorina
correct_option_ido'rnigacorrect_option_ids(ro'yxat) oladi — uni**extraorqali bering:correct_option_ids=[0]. - So'rovnomalar standart holatda anonim (
is_anonymous—true).
send_venue
asyncJoy (venue) yuboradi (sendVenue) — nomi (title) va manzili (address) bo'lgan xarita nuqtasi. Yuborilgan Message'ni qaytaradi.
await bot.send_venue(
chat_id: Union[int, str],
latitude: float,
longitude: float,
title: str,
address: str,
*,
token: Optional[str] = None,
**extra: Any,
) -> dictset_reaction
asyncXabarga bot reaksiyasini qo'yadi (setMessageReaction), masalan reaction=[{"type": "emoji", "emoji": "👍"}]; is_big=True katta animatsiya bilan.
await bot.set_reaction(
chat_id: Union[int, str],
message_id: int,
*,
reaction: Optional[list] = None,
is_big: Optional[bool] = None,
token: Optional[str] = None,
) -> bool- Bot (premium bo'lmagan foydalanuvchi sifatida) bitta xabarga ko'pi bilan bitta reaksiya qo'ya oladi va pullik reaksiyalardan foydalana olmaydi.
- Custom emoji reaksiyasi faqat xabarda allaqachon bo'lsa yoki chat adminlari ruxsat bergan bo'lsa ishlaydi.
stop_poll
asyncBot yuborgan so'rovnomani yopadi (stopPoll) va natijalari bilan yakuniy Poll obyektini qaytaradi.
await bot.stop_poll(
chat_id: Union[int, str],
message_id: int,
*,
reply_markup: Optional[dict] = None,
token: Optional[str] = None,
**extra: Any,
) -> dictMedia va fayllar
Rasm, video, hujjat, audio, stiker va albom yuborish, fayllarni yuklab olish.
downloadget_fileget_user_profile_photossend_animationsend_audiosend_documentsend_media_groupsend_photosend_stickersend_videosend_video_notesend_voice
download
asyncSDK yordamchisi: getFile ni chaqirib, faylni yuklab oladi va tarkibini bytes sifatida qaytaradi. Foydalanuvchi botga yuborgan rasm yoki hujjatni saqlash uchun qulay.
await bot.download(file_id: str, *, token: Optional[str] = None) -> bytes- Bulutli Bot API'ning 20 MB limiti amal qiladi; fayl to'liq xotiraga o'qiladi.
- HTTP xatosida
ApiErrorko'tariladi,urldagi token<token>bilan yashirilgan.
get_file
asyncFayl metama'lumotini qaytaradi (getFile), jumladan yuklab olish uchun kerak bo'lgan file_path. Baytlarni bir qadamda olish uchun download() qulayroq.
await bot.get_file(file_id: str, *, token: Optional[str] = None) -> dict- Yuklab olish havolasi kamida 1 soat amal qiladi; muddati o'tsa
getFileni qayta chaqiring. - Bulutli Bot API orqali bot 20 MB gacha faylni yuklab oladi.
- Asl fayl nomi va MIME turi saqlanmasligi mumkin — ularni kelgan xabardan o'zingiz saqlang.
Foydalanuvchining profil rasmlarini qaytaradi (getUserProfilePhotos): total_count va photos (har rasm bir necha o'lchamda). Sahifalash uchun offset va limit (1–100, standart 100).
await bot.get_user_profile_photos(
user_id: int,
*,
offset: Optional[int] = None,
limit: Optional[int] = None,
token: Optional[str] = None,
) -> dictsend_animation
asyncGIF yoki ovozsiz H.264/MPEG-4 AVC videoni animatsiya sifatida yuboradi (sendAnimation). Yuklanganda 50 MB gacha.
await bot.send_animation(
chat_id: Union[int, str],
animation: Union[str, bytes, socialift.telegram.InputFile],
*,
token: Optional[str] = None,
**extra: Any,
) -> dictsend_audio
asyncMusiqa faylini yuboradi (sendAudio) — Telegram uni pleyerda ko'rsatadi. Format: .MP3 yoki .M4A, yuklanganda 50 MB gacha; ovozli xabar uchun send_voice.
await bot.send_audio(
chat_id: Union[int, str],
audio: Union[str, bytes, socialift.telegram.InputFile],
*,
caption: Optional[str] = None,
token: Optional[str] = None,
**extra: Any,
) -> dictsend_document
asyncIstalgan faylni hujjat sifatida yuboradi (sendDocument) va document obyekti bor Message'ni qaytaradi. Yuklanganda 50 MB gacha.
await bot.send_document(
chat_id: Union[int, str],
document: Union[str, bytes, socialift.telegram.InputFile],
*,
caption: Optional[str] = None,
token: Optional[str] = None,
**extra: Any,
) -> dict- Havola orqali faqat
.PDFva.ZIPfayllar ishlashi kafolatlangan. - Xom
bytesberilsa SDK fayl nomi sifatida parametr nomini (document) qo'yadi; to'g'ri nom uchunInputFile(content=..., filename="hisobot.pdf")ishlating.
with open("hisobot.pdf", "rb") as f:
await bot.send_document("@kanal", f.read(), caption="Hisobot")send_media_group
async2–10 ta rasm, video, hujjat yoki audiodan albom yuboradi (sendMediaGroup) va Message'lar ro'yxatini qaytaradi. Baytlarni yuklash uchun elementda "media": "attach://nom" yozing va nom=InputFile(...) ni qo'shimcha argument qilib bering.
await bot.send_media_group(
chat_id: Union[int, str],
media: list,
*,
token: Optional[str] = None,
**extra: Any,
) -> list- Hujjat va audio faqat o'z turidagi elementlar bilan guruhlanadi.
- Element —
InputMedia*dict, masalan{"type": "photo", "media": "<file_id yoki URL>", "caption": "..."}.
send_photo
asyncRasm yuboradi (sendPhoto): file_id, HTTP(S) havola, bytes yoki InputFile — fayl berilsa SDK o'zi multipart yuklashga o'tadi. has_spoiler=True rasmni spoiler ostida yashiradi.
await bot.send_photo(
chat_id: Union[int, str],
photo: Union[str, bytes, socialift.telegram.InputFile],
*,
caption: Optional[str] = None,
parse_mode: Optional[str] = None,
has_spoiler: Optional[bool] = None,
reply_markup: Optional[dict] = None,
token: Optional[str] = None,
**extra: Any,
) -> dict- Yuklanganda 10 MB gacha, havola orqali 5 MB gacha; eni + bo'yi ≤ 10000, tomonlar nisbati ≤ 20.
- Izoh (caption) — 0–1024 belgi.
- Javobdagi
file_idbilan xuddi shu faylni qayta yuklamasdan yuborish mumkin (u faqat shu bot uchun amal qiladi).
send_sticker
asyncStiker yuboradi (sendSticker): statik .WEBP, animatsion .TGS yoki video .WEBM. Yuborilgan Message'ni qaytaradi.
await bot.send_sticker(
chat_id: Union[int, str],
sticker: Union[str, bytes, socialift.telegram.InputFile],
*,
token: Optional[str] = None,
**extra: Any,
) -> dict- Havola orqali faqat .WEBP stikerlarni yuborish mumkin.
send_video
asyncMPEG4 video yuboradi (sendVideo); boshqa formatlarni hujjat sifatida yuborish mumkin. duration, width, height, supports_streaming va thumbnail ixtiyoriy.
await bot.send_video(
chat_id: Union[int, str],
video: Union[str, bytes, socialift.telegram.InputFile],
*,
caption: Optional[str] = None,
duration: Optional[int] = None,
width: Optional[int] = None,
height: Optional[int] = None,
supports_streaming: Optional[bool] = None,
thumbnail: Union[str, bytes, socialift.telegram.InputFile, NoneType] = None,
token: Optional[str] = None,
**extra: Any,
) -> dict- Yuklanganda 50 MB gacha, havola orqali 20 MB gacha.
thumbnail— JPEG, 200 kB dan kichik, ko'pi bilan 320×320; faqat video fayl sifatida yuklanganda hisobga olinadi.
send_video_note
asyncDumaloq video xabar yuboradi (sendVideoNote) — kvadrat MPEG4 video, 1 daqiqagacha.
await bot.send_video_note(
chat_id: Union[int, str],
video_note: Union[str, bytes, socialift.telegram.InputFile],
*,
token: Optional[str] = None,
**extra: Any,
) -> dict- Havola orqali yuborib bo'lmaydi —
file_idyoki yuklanadigan fayl (bytes/InputFile) bering.
send_voice
asyncIjro etiladigan ovozli xabar yuboradi (sendVoice). Bot API OPUS kodekli .OGG, .MP3 yoki .M4A qabul qiladi; boshqa formatlar audio yoki hujjat bo'lib yuborilishi mumkin.
await bot.send_voice(
chat_id: Union[int, str],
voice: Union[str, bytes, socialift.telegram.InputFile],
*,
token: Optional[str] = None,
**extra: Any,
) -> dict- Yuklanganda 50 MB gacha; havola orqali fayl
audio/oggva ko'pi bilan 1 MB bo'lishi kerak (1–20 MB lik fayl hujjat bo'lib boradi).
Tahrirlash, o'chirish va qadash
Yuborilgan xabar matni, izohi, mediasi va tugmalarini o'zgartirish, o'chirish, qadash.
delete_messagedelete_messagesedit_message_captionedit_message_mediaedit_message_reply_markupedit_message_textpin_messageunpin_all_messagesunpin_message
delete_message
asyncBitta xabarni, jumladan servis xabarni o'chiradi (deleteMessage). Muvaffaqiyatda True qaytaradi.
await bot.delete_message(
chat_id: Union[int, str],
message_id: int,
*,
token: Optional[str] = None,
) -> bool- Faqat 48 soatdan kam vaqt oldin yuborilgan xabarni o'chirish mumkin.
- Shaxsiy chatda bot o'z xabarini ham, kelgan xabarni ham o'chira oladi; guruhda boshqalarning xabarini faqat admin sifatida, supergroup va kanalda esa
can_delete_messageshuquqi bilan. - Supergroup, kanal yoki forum mavzusi yaratilgani haqidagi servis xabarlar o'chirilmaydi.
delete_messages
asyncBir so'rovda 1–100 ta xabarni o'chiradi (deleteMessages); cheklovlar delete_message bilan bir xil. True qaytaradi.
await bot.delete_messages(
chat_id: Union[int, str],
message_ids: Iterable[int],
*,
token: Optional[str] = None,
) -> bool- Topilmagan xabarlar tashlab ketiladi.
await bot.delete_messages("@kanal", [41, 42])edit_message_caption
asyncMedia xabarning izohini (caption) o'zgartiradi (editMessageCaption). Xabarni ko'rsatish usuli edit_message_text bilan bir xil.
await bot.edit_message_caption(
*,
caption: Optional[str] = None,
chat_id: Union[int, str, NoneType] = None,
message_id: Optional[int] = None,
inline_message_id: Optional[str] = None,
parse_mode: Optional[str] = None,
reply_markup: Optional[dict] = None,
token: Optional[str] = None,
**extra: Any,
) -> Any- Izoh — 0–1024 belgi; Message yoki inline xabar uchun
Trueqaytaradi.
edit_message_media
asyncXabardagi mediani (animatsiya, audio, hujjat, rasm, video) almashtiradi yoki matnli xabarni media xabarga aylantiradi (editMessageMedia). media — InputMedia dict, masalan {"type": "photo", "media": "<file_id yoki URL>"}.
await bot.edit_message_media(
media: dict,
*,
chat_id: Union[int, str, NoneType] = None,
message_id: Optional[int] = None,
inline_message_id: Optional[str] = None,
reply_markup: Optional[dict] = None,
token: Optional[str] = None,
**extra: Any,
) -> Any- Albomda audio faqat audioga, hujjat faqat hujjatga, rasm/video esa rasm yoki videoga almashtiriladi.
- Bu o'ram qo'shimcha argument olmaydi, shuning uchun yangi faylni
attach://bilan yuklash:call("editMessageMedia", ..., media={"type": "photo", "media": "attach://p"}, p=InputFile(...)). - Inline xabarda yangi fayl yuklab bo'lmaydi —
file_idyoki URL ishlating.
Xabar matniga tegmasdan faqat inline klaviaturasini (reply_markup) almashtiradi (editMessageReplyMarkup) — masalan, callback'dan keyin tugmalarni yangilash uchun.
await bot.edit_message_reply_markup(
*,
reply_markup: Optional[dict] = None,
chat_id: Union[int, str, NoneType] = None,
message_id: Optional[int] = None,
inline_message_id: Optional[str] = None,
token: Optional[str] = None,
**extra: Any,
) -> Any- Message yoki inline xabar uchun
Trueqaytaradi.
edit_message_text
asyncXabar matnini tahrirlaydi (editMessageText). Xabar chat_id + message_id yoki inline rejimda yuborilgan bo'lsa inline_message_id bilan ko'rsatiladi.
await bot.edit_message_text(
text: str,
*,
chat_id: Union[int, str, NoneType] = None,
message_id: Optional[int] = None,
inline_message_id: Optional[str] = None,
parse_mode: Optional[str] = None,
reply_markup: Optional[dict] = None,
token: Optional[str] = None,
**extra: Any,
) -> Any- Tahrirlangan Message'ni, inline xabar uchun esa
Trueqaytaradi. - Bot yubormagan va inline klaviaturasi yo'q business xabarlarni faqat 48 soat ichida tahrirlash mumkin.
await bot.edit_message_text("Yangi matn", chat_id="@kanal", message_id=42)pin_message
asyncXabarni chatda qadaydi (pinChatMessage); disable_notification=True — a'zolarga bildirishnomasiz.
await bot.pin_message(
chat_id: Union[int, str],
message_id: int,
*,
disable_notification: Optional[bool] = None,
token: Optional[str] = None,
**extra: Any,
) -> bool- Guruhda bot
can_pin_messages, kanaldacan_edit_messageshuquqli admin bo'lishi kerak; shaxsiy chatda huquq kerak emas.
await bot.pin_message("@kanal", 42, disable_notification=True)unpin_all_messages
asyncChatdagi barcha qadalgan xabarlarni olib tashlaydi (unpinAllChatMessages).
await bot.unpin_all_messages(
chat_id: Union[int, str],
*,
token: Optional[str] = None,
) -> bool- Guruhda
can_pin_messages, kanaldacan_edit_messageshuquqi kerak; shaxsiy chatda — kerak emas.
unpin_message
asyncXabarni qadalganlar ro'yxatidan olib tashlaydi (unpinChatMessage). message_id berilmasa — yuborilgan sanasi bo'yicha eng oxirgi qadalgan xabar.
await bot.unpin_message(
chat_id: Union[int, str],
*,
message_id: Optional[int] = None,
token: Optional[str] = None,
**extra: Any,
) -> bool- Huquqlar
pin_messagedagidek: guruhdacan_pin_messages, kanaldacan_edit_messages.
await bot.unpin_message("@kanal", message_id=42)Chat, moderatsiya va adminlar
Chat ma'lumoti va sozlamalari, ban, cheklash, admin huquqlari.
ban_memberdelete_chat_photodemote_memberget_chatget_chat_administratorsget_chat_memberget_chat_member_countleave_chatpromote_memberrestrict_memberset_admin_titleset_chat_descriptionset_chat_permissionsset_chat_photoset_chat_titleunban_member
ban_member
asyncFoydalanuvchini ban qiladi (banChatMember): supergroup va kanalda ban olinmaguncha u taklif havolasi orqali ham qaytolmaydi. revoke_messages=True uning guruhdagi xabarlarini o'chiradi (supergroup va kanalda doim shunday).
await bot.ban_member(
chat_id: Union[int, str],
user_id: int,
*,
until_date: Optional[int] = None,
revoke_messages: Optional[bool] = None,
token: Optional[str] = None,
) -> booluntil_date— unix vaqt; hozirdan 30 soniyadan kam yoki 366 kundan ko'p bo'lsa ban abadiy (faqat supergroup va kanal uchun).- Shunchaki chiqarib yuborish (qaytishi mumkin) uchun:
ban_member, so'ngunban_member. - Bot tegishli huquqli admin bo'lishi kerak.
await bot.ban_member("@guruh", 123456789)
await bot.unban_member("@guruh", 123456789)delete_chat_photo
asyncChat rasmini o'chiradi (deleteChatPhoto). Shaxsiy chatlarda ishlamaydi; bot tegishli huquqli admin bo'lishi kerak.
await bot.delete_chat_photo(
chat_id: Union[int, str],
*,
token: Optional[str] = None,
) -> booldemote_member
asyncSDK yordamchisi: barcha admin huquqlarini False qilib promoteChatMember ni chaqiradi va foydalanuvchini adminlikdan tushiradi.
await bot.demote_member(
chat_id: Union[int, str],
user_id: int,
*,
token: Optional[str] = None,
) -> bool- Bot
can_promote_membershuquqiga ega bo'lishi kerak va faqat o'zi (bevosita yoki bilvosita) tayinlagan adminlarni tushira oladi.
get_chat
asyncChat haqida dolzarb to'liq ma'lumotni qaytaradi (getChat, ChatFullInfo): turi, nomi, tavsifi, qadalgan xabar, ruxsatlar va boshqalar. @username dan raqamli id ni bilishning ham qulay yo'li.
await bot.get_chat(chat_id: Union[int, str], *, token: Optional[str] = None) -> dictchat = await bot.get_chat("@kanal")Chat adminlari ro'yxatini ChatMember dict'lari sifatida qaytaradi (getChatAdministrators): holati, huquqlari, custom_title.
await bot.get_chat_administrators(
chat_id: Union[int, str],
*,
token: Optional[str] = None,
return_bots: Optional[bool] = None,
**extra: Any,
) -> list- Boshqa botlar standart holatda ro'yxatga kirmaydi; ularni olish uchun
call("getChatAdministrators", chat_id=..., return_bots=True)— bu o'ram qo'shimcha argument olmaydi. - Bot API barcha a'zolar ro'yxatini beradigan metodga ega emas; buning uchun akkaunt klienti
TelegramAccount.participants.
admins = await bot.get_chat_administrators("@guruh")get_chat_member
asyncBitta a'zoning holatini qaytaradi (getChatMember): creator, administrator, member, restricted, left yoki kicked, huquqlari bilan. Ko'pincha kanalga obuna bo'lganini tekshirish uchun ishlatiladi.
await bot.get_chat_member(
chat_id: Union[int, str],
user_id: int,
*,
token: Optional[str] = None,
) -> dict- Boshqa foydalanuvchilar uchun faqat bot shu chatda admin bo'lsa ishlashi kafolatlangan.
member = await bot.get_chat_member("@guruh", 123456789)Chatdagi a'zolar sonini butun son sifatida qaytaradi (getChatMemberCount).
await bot.get_chat_member_count(
chat_id: Union[int, str],
*,
token: Optional[str] = None,
) -> intleave_chat
asyncBotni guruh, supergroup yoki kanaldan chiqaradi (leaveChat).
await bot.leave_chat(chat_id: Union[int, str], *, token: Optional[str] = None) -> boolpromote_member
asyncFoydalanuvchini admin qiladi yoki huquqlarini o'zgartiradi (promoteChatMember); huquqlar keyword argument sifatida: can_delete_messages=True, can_restrict_members=True va h.k.
await bot.promote_member(
chat_id: Union[int, str],
user_id: int,
*,
token: Optional[str] = None,
**rights: Any,
) -> bool- Supergroup va kanalda ishlaydi; bot tegishli huquqli admin bo'lishi va faqat o'zida bor huquqlarni berishi mumkin (
can_promote_members). - Barcha huquqlarga
Falseberish — adminlikdan tushirish; bunidemote_memberqiladi.
restrict_member
asyncSupergroup a'zosini permissions dict'i bilan cheklaydi (restrictChatMember) — masalan, {"can_send_messages": False} bilan ovozini o'chirish. Cheklovni olib tashlash uchun barcha ruxsatlarga True bering.
await bot.restrict_member(
chat_id: Union[int, str],
user_id: int,
permissions: dict,
*,
until_date: Optional[int] = None,
use_independent_chat_permissions: Optional[bool] = None,
token: Optional[str] = None,
) -> booluntil_date: hozirdan 30 soniyadan kam yoki 366 kundan ko'p bo'lsa cheklov abadiy.- Bot tegishli huquqli admin bo'lishi kerak.
set_admin_title
asyncBot tayinlagan supergroup adminiga maxsus unvon (custom title) o'rnatadi (setChatAdministratorCustomTitle).
await bot.set_admin_title(
chat_id: Union[int, str],
user_id: int,
custom_title: str,
*,
token: Optional[str] = None,
) -> bool- 0–16 belgi, emoji mumkin emas.
set_chat_description
asyncGuruh, supergroup yoki kanal tavsifini o'zgartiradi (setChatDescription), 0–255 belgi.
await bot.set_chat_description(
chat_id: Union[int, str],
description: str,
*,
token: Optional[str] = None,
) -> bool- Bot tegishli huquqli admin bo'lishi kerak.
await bot.set_chat_title("@kanal", "Yangi nom")
await bot.set_chat_description("@kanal", "Tavsif")set_chat_permissions
asyncGuruh yoki supergroup'ning barcha oddiy a'zolari uchun standart ruxsatlarni o'rnatadi (setChatPermissions), masalan {"can_send_messages": False} — chat faqat o'qish uchun.
await bot.set_chat_permissions(
chat_id: Union[int, str],
permissions: dict,
*,
use_independent_chat_permissions: Optional[bool] = None,
token: Optional[str] = None,
) -> bool- Bot
can_restrict_membershuquqli admin bo'lishi kerak. use_independent_chat_permissions=Truebo'lmasa,can_send_other_messagesvacan_add_web_page_previewsmedia ruxsatlarini,can_send_pollsesacan_send_messagesni ham yoqadi.
set_chat_photo
asyncChatga yangi rasm o'rnatadi (setChatPhoto). Faqat yuklanadigan fayl (bytes yoki InputFile) qabul qilinadi — file_id yoki URL emas.
await bot.set_chat_photo(
chat_id: Union[int, str],
photo: Union[bytes, socialift.telegram.InputFile],
*,
token: Optional[str] = None,
) -> bool- Shaxsiy chatlarda ishlamaydi; bot tegishli huquqli admin bo'lishi kerak.
set_chat_title
asyncChat nomini o'zgartiradi (setChatTitle), 1–128 belgi. Shaxsiy chatlarda ishlamaydi.
await bot.set_chat_title(
chat_id: Union[int, str],
title: str,
*,
token: Optional[str] = None,
) -> bool- Bot tegishli huquqli admin bo'lishi kerak.
await bot.set_chat_title("@kanal", "Yangi nom")
await bot.set_chat_description("@kanal", "Tavsif")unban_member
asyncSupergroup yoki kanalda ban'ni olib tashlaydi (unbanChatMember); foydalanuvchi avtomatik qaytmaydi, lekin havola orqali qo'shila oladi.
await bot.unban_member(
chat_id: Union[int, str],
user_id: int,
*,
only_if_banned: bool = True,
token: Optional[str] = None,
) -> bool- SDK'da
only_if_banned=Truestandart (Bot API'da — false): ban'da bo'lmagan hozirgi a'zo adashib chiqarib yuborilmaydi. only_if_banned=Falseda Telegram a'zo hali chatda bo'lsa uni chiqaradi — natijada u chatda emas, lekin qo'shila oladi.
await bot.ban_member("@guruh", 123456789)
await bot.unban_member("@guruh", 123456789)Taklif havolalari va qo'shilish so'rovlari
Asosiy va qo'shimcha havolalar, ularni bekor qilish, so'rovlarni tasdiqlash.
approve_join_requestcreate_invite_linkdecline_join_requestedit_invite_linkexport_invite_linkrevoke_invite_link
approve_join_request
asyncQo'shilish so'rovini tasdiqlaydi (approveChatJoinRequest) — masalan, creates_join_request=True havolasidan kelgan chat_join_request yangilanishiga javoban.
await bot.approve_join_request(
chat_id: Union[int, str],
user_id: int,
*,
token: Optional[str] = None,
) -> bool- Bot
can_invite_usershuquqli admin bo'lishi kerak; shu huquqsizchat_join_requestyangilanishlari ham kelmaydi.
create_invite_link
asyncQo'shimcha taklif havolasini yaratadi (createChatInviteLink) — name, expire_date, member_limit yoki creates_join_request bilan — va ChatInviteLink dict qaytaradi. Masalan, har reklama kampaniyasi uchun alohida havola.
await bot.create_invite_link(
chat_id: Union[int, str],
*,
name: Optional[str] = None,
expire_date: Optional[int] = None,
member_limit: Optional[int] = None,
creates_join_request: Optional[bool] = None,
token: Optional[str] = None,
) -> dictname— 0–32 belgi,member_limit— 1–99999;creates_join_request=Truebilanmember_limitberilmaydi.- Bot tegishli huquqli admin bo'lishi kerak.
link = await bot.create_invite_link("@guruh", name="Reklama", member_limit=100)decline_join_request
asyncQo'shilish so'rovini rad etadi (declineChatJoinRequest).
await bot.decline_join_request(
chat_id: Union[int, str],
user_id: int,
*,
token: Optional[str] = None,
) -> bool- Bot
can_invite_usershuquqli admin bo'lishi kerak.
edit_invite_link
asyncBot yaratgan asosiy bo'lmagan havolani tahrirlaydi (editChatInviteLink): name, expire_date, member_limit, creates_join_request keyword argument sifatida. Yangilangan ChatInviteLink'ni qaytaradi.
await bot.edit_invite_link(
chat_id: Union[int, str],
invite_link: str,
*,
token: Optional[str] = None,
**extra: Any,
) -> dictexport_invite_link
asyncYangi asosiy taklif havolasini yaratadi va satr sifatida qaytaradi (exportChatInviteLink). Avval yaratilgan asosiy havola bekor qilinadi.
await bot.export_invite_link(
chat_id: Union[int, str],
*,
token: Optional[str] = None,
) -> str- Bot boshqa adminlar yaratgan havolalardan foydalana olmaydi. Mavjud havolalarni buzmaydigan qo'shimcha havola uchun
create_invite_link. - Bot tegishli huquqli admin bo'lishi kerak.
revoke_invite_link
asyncBot yaratgan taklif havolasini bekor qiladi va uni qaytaradi (revokeChatInviteLink). Asosiy havola bekor qilinsa, Telegram avtomatik yangisini yaratadi.
await bot.revoke_invite_link(
chat_id: Union[int, str],
invite_link: str,
*,
token: Optional[str] = None,
) -> dictForum mavzulari (topics)
Forum supergroup'da yoki bot bilan shaxsiy chatda mavzu yaratish va boshqarish.
create_forum_topicdelete_forum_topicedit_forum_topic
create_forum_topic
asyncForum supergroup'da yoki foydalanuvchi bilan shaxsiy chatda mavzu yaratadi (createForumTopic) va message_thread_id bor ForumTopic dict qaytaradi. icon_color va icon_custom_emoji_id — **extra orqali.
await bot.create_forum_topic(
chat_id: Union[int, str],
name: str,
*,
token: Optional[str] = None,
**extra: Any,
) -> dict- Nom — 1–128 belgi.
- Supergroup'da bot
can_manage_topicshuquqli admin bo'lishi kerak. - Mavzuga yozish:
send_message(..., message_thread_id=...).
delete_forum_topic
asyncForum mavzusini undagi barcha xabarlar bilan birga o'chiradi (deleteForumTopic).
await bot.delete_forum_topic(
chat_id: Union[int, str],
message_thread_id: int,
*,
token: Optional[str] = None,
) -> bool- Supergroup'da bot
can_delete_messageshuquqli admin bo'lishi kerak.
edit_forum_topic
asyncMavzu nomini (name) yoki ikonkasini (icon_custom_emoji_id) o'zgartiradi (editForumTopic); berilmagan maydonlar o'zgarmaydi.
await bot.edit_forum_topic(
chat_id: Union[int, str],
message_thread_id: int,
*,
token: Optional[str] = None,
**extra: Any,
) -> bool- Supergroup'da
can_manage_topicshuquqi kerak, agar mavzuni botning o'zi yaratmagan bo'lsa.
Inline rejim va callback'lar
Inline tugma bosilishiga va inline so'rovlarga javob berish.
answer_callback_queryanswer_inline_query
Inline tugma bosilishiga javob beradi (answerCallbackQuery): ixtiyoriy qisqa bildirishnoma (text) yoki oyna (show_alert=True). Har bir callback_query uchun, matnsiz bo'lsa ham, chaqiring.
await bot.answer_callback_query(
callback_query_id: str,
*,
text: Optional[str] = None,
show_alert: Optional[bool] = None,
url: Optional[str] = None,
cache_time: Optional[int] = None,
token: Optional[str] = None,
) -> bool- Javob berilmaguncha Telegram ilovalari tugmada yuklanish indikatorini ko'rsatib turadi.
text— 0–200 belgi;cache_time(soniya) standart 0.
answer_inline_query
asyncInline so'rovga (istalgan chatda @bot_nomi so'rov yozilganda) natijalarni yuboradi (answerInlineQuery). results — InlineQueryResult dict'lari ro'yxati; cache_time, is_personal, next_offset — **extra orqali.
await bot.answer_inline_query(
inline_query_id: str,
results: list,
*,
token: Optional[str] = None,
**extra: Any,
) -> bool- Bir so'rovga ko'pi bilan 50 ta natija; serverdagi
cache_timestandart 300 soniya. - Inline rejim @BotFather'da
/setinlinebilan yoqiladi.
Past darajali chaqiruv
Bot API'ning istalgan metodini nomi bo'yicha chaqirish.
call
asyncBot API'ning istalgan metodini nomi bo'yicha chaqiradi va result ni qaytaradi — alohida o'rami yo'q metodlar uchun, masalan await bot.call("getChatMenuButton", chat_id=...). None qiymatli argumentlar tashlanadi, bytes/InputFile bo'lsa so'rov avtomatik multipart bo'ladi.
await bot.call(method: str, *, token: Optional[str] = None, **params: Any) -> Any- Xatolar: 401 →
AuthError, 403 →PermissionError, 404 yoki tavsifda "not found" →NotFoundError, 429 →RateLimitError; qolganlariApiError, xom javobexc.payloadda. ApiError.urlda token<token>bilan almashtiriladi.- O'ralmagan metodlar atribut sifatida ham ishlaydi:
bot.get_chat_menu_button(chat_id=1)→getChatMenuButton(faqat keyword argumentlar).
commands = await bot.call("getMyCommands")Barcha klientlarda umumiy metodlar
Har bir HTTP klient (Telegram, Facebook, Instagram, LinkedIn, TikTok, Ads) shu past darajadagi metodlarga ega: SDK'da hali o'rab olinmagan endpoint'ni chaqirish yoki sahifalab o'qish uchun. async with bloki tugaganda ulanish o'zi yopiladi.
request
asyncIstalgan HTTP so'rovni yuboradi va JSON javobni qaytaradi — SDK'da hali alohida metodi yo'q endpoint uchun. Token va imzo parametrlarini (access_token, Meta uchun appsecret_proof — socialift.crypto.appsecret_proof) o'zingiz params yoki headers ga qo'shasiz.
await bot.request(
method: str,
url: str,
*,
params: Optional[Mapping[str, Any]] = None,
data: Optional[Any] = None,
json: Optional[Any] = None,
headers: Optional[Mapping[str, str]] = None,
) -> AnyparamsdagiNoneqiymatlar yuborilmaydi.- Limit (
RateLimitError) va vaqtinchalik server xatolarida (HTTP 429, 500, 502, 503, 504)RetryPolicybo'yicha qayta uriniladi;Retry-Aftersarlavhasi bo'lsa, shuncha kutiladi. Tarmoq uzilishiTransportErrorbo'lib chiqadi.
get
asyncrequest("GET", ...) ning qisqa shakli.
await bot.get(url: str, **kw) -> Anypost
asyncrequest("POST", ...) ning qisqa shakli.
await bot.post(url: str, **kw) -> Anydelete
asyncrequest("DELETE", ...) ning qisqa shakli.
await bot.delete(url: str, **kw) -> Anypaginate
asyncMeta'ning kursorli sahifalashi (paging.next) bo'yicha yurib, barcha data elementlarini bitta ro'yxatga yig'ib qaytaradi.
await bot.paginate(
url: str,
*,
params: Optional[Mapping[str, Any]] = None,
max_items: int = 500,
page_size: int = 100,
) -> list[dict]max_items(standart 500) — himoya chegarasi: yirik akkauntda ro'yxat o'n minglab yozuv bo'lishi mumkin.page_size— bitta so'rovdagilimit.
close
asyncSDK o'zi yaratgan HTTP sessiyasini yopadi (tashqaridan berilgan sessiyaga tegmaydi). async with Client(...) ishlatilsa, o'zi chaqiriladi.
await bot.close() -> NoneKo'p so'raladigan savollar
Telegram bot tokenini qayerdan olaman?
@BotFather'ga /newbot buyrug'ini yuboring: u bot nomi va username'ni so'raydi va token beradi. Token bilan istalgan odam botingizni boshqara oladi, shuning uchun uni TELEGRAM_BOT_TOKEN muhit o'zgaruvchisida saqlang. Token sizib chiqsa, BotFather'da /token buyrug'i bilan yangisini oling.
Webhook yoki getUpdates — qaysi birini tanlash kerak?
Ochiq HTTPS manzilli server bo'lsa — webhook: set_webhook(url, secret_token=...), qo'llab-quvvatlanadigan portlar 443, 80, 88 va 8443. Skript yoki lokal ishlab chiqishda — poll() (long polling). Ikkalasi birga ishlamaydi: webhook o'rnatilgan paytda getUpdates yangilanish bermaydi, polling'ga qaytish uchun delete_webhook() chaqiring.
Bot guruhdagi xabarlarni nega ko'rmaydi?
Standart holatda botlarda privacy mode yoqilgan: guruhda bot faqat o'ziga atalgan buyruqlarni, o'ziga javoblarni va servis xabarlarni oladi. Guruhda admin bo'lgan bot barcha xabarlarni ko'radi. Privacy mode'ni BotFather'da o'chirish mumkin, lekin kuchga kirishi uchun botni guruhga qayta qo'shish kerak; joriy holatni get_me() javobidagi can_read_all_group_messages ko'rsatadi.
Bot API orqali guruh a'zolari ro'yxatini olsa bo'ladimi?
Yo'q. Bot API faqat adminlar ro'yxatini (get_chat_administrators), bitta a'zoning holatini (get_chat_member) va a'zolar sonini (get_chat_member_count) beradi. To'liq ro'yxat yoki xabarlar tarixi kerak bo'lsa, MTProto asosidagi TelegramAccount klientidan foydalaning — u bot emas, foydalanuvchi akkaunti nomidan ishlaydi.
Telegram bot sekundiga nechta xabar yubora oladi?
Telegram Bot FAQ bo'yicha: bitta chatga sekundiga bittadan ko'p yubormaslik kerak, guruhga — daqiqasiga 20 tadan ko'p emas, ommaviy tarqatishda — sekundiga taxminan 30 ta. Limitdan oshsa Telegram 429 qaytaradi; SDK qayta urinib ko'radi, baribir o'tmasa RateLimitError ko'taradi. BotFather'da paid broadcast yoqilgan botlar (shartlari bor) sekundiga 1000 tagacha yubora oladi.