Asosiy mazmunga o'tish
Socialift
Hujjatlar bo'limlari
SDK reference

TelegramAccount: Telegram akkauntini Python'da MTProto orqali boshqarish

TelegramAccount — Telegram'ning MTProto protokoli orqali oddiy foydalanuvchi akkaunti nomidan ishlaydigan asinxron Python klienti (Telethon ustida). U Bot API qila olmaydigan ishlarni bajaradi: chat tarixini o'qish, guruh a'zolari ro'yxatini olish, guruh va kanallarga o'zi qo'shilish, kanal yaratish, story joylash va xabarni rejalashtirish. Login bir marta qilinadi — telefon, kod va kerak bo'lsa 2FA parol, keyin sessiya satri ishlatiladi.

from socialift import TelegramAccount90 ta metodsocialift 1.3.0 bo'yichaYangilangan:

TelegramAccount'ni qanday sozlash va akkauntga kirish kerak?

Avval api_id va api_hash oling: my.telegram.org saytiga Telegram raqamingiz bilan kiring, API development tools bo'limida formani to'ldiring. Telegram qoidasiga ko'ra hozircha bitta telefon raqamiga bitta api_id biriktiriladi. Kalitlarni kodga yozmang — TELEGRAM_API_ID va TELEGRAM_API_HASH muhit o'zgaruvchilarida saqlang.

O'rnatish: pip install "socialift[telegram]" — Telethon qo'shimcha bog'liqlik sifatida o'rnatiladi (Python 3.11+). Litsenziya kaliti SOCIALIFT_LICENSE_KEY muhit o'zgaruvchisidan yoki license_key= argumentidan olinadi va connect() paytida tekshiriladi. async with TelegramAccount(...) as tg: ulanishni ochadi va blokdan chiqishda yopadi.

Login uch qadamdan iborat: send_code() → sign_in() → akkauntda ikki bosqichli parol bo'lsa sign_in_password(). Natijadagi session satrini saqlang — keyingi safar TelegramAccount.from_env() uni TELEGRAM_SESSION dan o'qiydi va kod so'ralmaydi. Veb-ilovada qadamlar turli so'rovlarda bo'lsa, send_code() qaytargan oraliq session ni ham keyingi qadamga uzating: phone_code_hash faqat o'sha sessiya ichida yaroqli.

Sessiya satri parolga teng: ichida avtorizatsiya kaliti bor va u akkauntga to'liq kirish beradi. Uni bazada shifrlab saqlang, log'ga yozmang, brauzerga yubormang. Sizib chiqsa log_out() chaqiring yoki boshqa qurilmadan seansni tugating. Kodsiz sinash uchun kabinetdagi Ulanishlar bo'limida akkauntni ulab, Playground'da metodlarni chaqirish mumkin.

python
import asyncio
import os

from socialift import TelegramAccount

PHONE = "+998901234567"


async def login() -> str:
    # Bir marta: telefon -> kod -> (kerak bo'lsa) 2FA parol
    async with TelegramAccount(
        api_id=os.environ["TELEGRAM_API_ID"],
        api_hash=os.environ["TELEGRAM_API_HASH"],
    ) as tg:
        sent = await tg.send_code(PHONE)
        code = input("Telegram'dan kelgan kod: ")
        result = await tg.sign_in(PHONE, code, phone_code_hash=sent["phone_code_hash"])
        if result["two_factor_required"]:
            result = await tg.sign_in_password(input("2FA parol: "))
        return result["session"]  # shifrlab saqlang -> TELEGRAM_SESSION


async def main() -> None:
    # Keyingi safar: TELEGRAM_API_ID, TELEGRAM_API_HASH, TELEGRAM_SESSION
    async with TelegramAccount.from_env() as tg:
        me = await tg.me()
        await tg.send_message("me", f"Salom, {me.first_name}!")


asyncio.run(main())  # birinchi marta: print(asyncio.run(login()))

Ulanish va login

Klient yaratish, telefon → kod → 2FA login, sessiya satri va faol seanslar.

closeconnectdisconnectexport_sessionfrom_envis_authorizedlog_outreset_sessionsend_codesessionssign_insign_in_password

close

async

disconnect() ning taxallusi — SDK'ning boshqa klientlaridagi close() bilan bir xil nom bo'lishi uchun.

await tg.close() -> None

connect

async

MTProto ulanishini ochadi va litsenziyani tekshiradi, lekin akkaunt avtorizatsiyasini tekshirmaydi — login oqimi ulanishni avtorizatsiyadan oldin talab qiladi. async with TelegramAccount(...) uni avtomatik chaqiradi.

await tg.connect() -> TelegramAccount
  • Ko'p metodlar ulanishni o'zi ochadi, lekin raw, export_session, join, create_channel, stats, contacts, resolve kabi ba'zilari ochiq ulanishni kutadi — async with ishlating yoki avval connect() chaqiring.
  • Ulangan klientda qayta chaqirish xavfsiz: hech narsa qilmaydi.

Ulanishni yopadi; async with blokidan chiqishda avtomatik chaqiriladi. Seans Telegram'da tugatilmaydi — saqlangan sessiya satri keyin ham ishlaydi.

await tg.disconnect() -> None
  • Seansni Telegram tomonida ham bekor qilish kerak bo'lsa — log_out().

Joriy sessiyani StringSession satri sifatida qaytaradi — keyingi safar TelegramAccount(session=...) bilan kodsiz ulanish uchun. Sinxron metod, lekin ochiq ulanishni talab qiladi.

tg.export_session() -> str
  • Satr ichida data-markaz manzili va avtorizatsiya kaliti bor — u akkauntga to'liq kirish beradi. Bazada shifrlab saqlang, log'ga chiqarmang.
  • Satr sizib chiqsa: log_out() yoki boshqa seansdan reset_session().

from_env

classmethod

Klientni muhit o'zgaruvchilaridan yaratadi: TELEGRAM_API_ID, TELEGRAM_API_HASH va ixtiyoriy TELEGRAM_SESSION. Qo'shimcha argumentlar (license_key, proxy, device_model ...) konstruktorga uzatiladi.

TelegramAccount.from_env(**kwargs) -> TelegramAccount
  • TELEGRAM_SESSION bo'sh bo'lsa klient sessiyasiz yaratiladi — avval login oqimi (send_code → sign_in) kerak.
  • TELEGRAM_API_ID yo'q yoki musbat butun son bo'lmasa, TELEGRAM_API_HASH bo'sh bo'lsa — ConfigurationError.

Joriy sessiya akkauntga kirganmi — True yoki False. Saqlangan sessiya hali ishlayotganini tekshirish uchun qulay.

await tg.is_authorized() -> bool
  • Seans boshqa qurilmadan tugatilgan bo'lsa, qolgan metodlar AuthError beradi — akkauntni qayta ulash kerak.
Misol — python
ok = await tg.is_authorized()

log_out

async

Seansni Telegram'da tugatadi (auth.logOut) va ulanishni yopadi. Shundan keyin saqlangan sessiya satri ishlamaydi — qayta ulash uchun telefon va kod yana kerak.

await tg.log_out() -> bool
  • Faqat ulanishni yopish kerak bo'lsa (sessiya saqlanib qolsin) — disconnect().
Misol — python
await tg.log_out()

Boshqa qurilmadagi seansni sessions() dagi hash bo'yicha tugatadi (account.resetAuthorization).

await tg.reset_session(session_id: int) -> Any
  • Joriy seans kirganiga 24 soat bo'lmagan bo'lsa, Telegram boshqa seanslarni tugatishga ruxsat bermaydi (FRESH_RESET_AUTHORISATION_FORBIDDEN).
Misol — python
await tg.reset_session(session_hash)

Login 1-qadami: telefon raqamiga tasdiqlash kodini so'raydi va phone_code_hash hamda oraliq session satrini qaytaradi. Raqam xalqaro formatda beriladi; bo'shliq va chiziqlar avtomatik olib tashlanadi.

await tg.send_code(phone: str) -> dict
  • Kod SMS emas, shu akkaunt ochiq turgan Telegram ilovasiga kelishi mumkin — qayerga yuborilgani javobdagi type maydonida.
  • phone_code_hash faqat o'sha sessiya ichida yaroqli: qadamlar turli so'rovlarda bo'lsa, keyingi qadamni TelegramAccount(..., session=sent["session"]) bilan davom ettiring.
  • Sessiya allaqachon avtorizatsiyalangan bo'lsa kod yuborilmaydi va already_authorized: True qaytadi.
Misol — python
sent = await tg.send_code("+998901234567")

Akkauntdagi barcha faol seanslar (qurilmalar) ro'yxati — account.getAuthorizations. Har bir yozuvda qurilma, ilova, faollik vaqti va hash bor.

await tg.sessions() -> Any
  • hash — seansni reset_session() bilan tugatish uchun identifikator.
Misol — python
sessions = await tg.sessions()

sign_in

async

Login 2-qadami: kelgan kod va phone_code_hash bilan kiradi. Muvaffaqiyatda authorized: True, doimiy session satri va user (id, username, phone, ism) qaytadi.

await tg.sign_in(
    phone: str,
    code: str,
    *,
    phone_code_hash: Optional[str] = None,
) -> dict
  • Akkauntda ikki bosqichli parol bo'lsa istisno emas, two_factor_required: True qaytadi — keyin sign_in_password() chaqiring.
  • Noto'g'ri yoki muddati o'tgan kod, yaroqsiz raqam yoki api_id/api_hash — tushunarli matnli AuthError.
Misol — python
result = await tg.sign_in("+998901234567", code="12345", phone_code_hash=sent["phone_code_hash"])

Login 3-qadami: ikki bosqichli (2FA) parol bilan kirishni yakunlaydi va sign_in() bilan bir xil shakldagi natija qaytaradi.

await tg.sign_in_password(password: str) -> dict
  • Parol serverga ochiq holda yuborilmaydi: Telegram SRP protokolidan foydalanadi, isbotni Telethon lokal hisoblaydi.
  • Noto'g'ri parol — AuthError. Parolni log'ga yozmang va saqlamang.
Misol — python
result = await tg.sign_in_password("mening-parolim")

Profil va akkaunt

Joriy akkaunt, ism va bio, username, profil rasmlari.

delete_profile_photosmeprofile_photosset_profile_photoset_usernameupdate_profile

Profil rasmlarini o'chiradi; photos berilmasa akkauntning barcha profil rasmlari o'chiriladi.

await tg.delete_profile_photos(photos: Optional[Sequence[Any]] = None) -> Any
  • Bittasini o'chirish uchun profile_photos() dan kerakli obyektni ro'yxat qilib bering — argumentsiz chaqiruv hammasini o'chiradi.

me

async

Joriy akkaunt (User): id, ism, username, telefon. Sessiya kimga tegishli ekanini aniqlash uchun.

await tg.me() -> Any
Misol — python
me = await tg.me()

Foydalanuvchi, guruh yoki kanalning profil rasmlari ro'yxati; standart holda o'zingizniki, 20 tagacha.

await tg.profile_photos(entity: Union[int, str, Any] = 'me', *, limit: int = 20) -> list

Yangi profil rasmini yuklaydi va o'rnatadi; fayl yo'li, baytlar yoki fayl obyekti qabul qilinadi.

await tg.set_profile_photo(file: Any) -> Any

Akkauntning ommaviy @username ini o'rnatadi; bo'sh satr uni olib tashlaydi.

await tg.set_username(username: str) -> Any
  • Username 5–32 belgi: lotin harflari, raqamlar va pastki chiziq.
  • Band bo'lsa Telegram USERNAME_OCCUPIED, noto'g'ri formatda USERNAME_INVALID qaytaradi — SDK'da ApiError.

Ism, familiya va bio (about) ni o'zgartiradi; berilmagan maydonlar o'zgarmaydi (account.updateProfile).

await tg.update_profile(
    *,
    first_name: Optional[str] = None,
    last_name: Optional[str] = None,
    about: Optional[str] = None,
) -> Any
  • Bio uzunligi cheklangan, Premium va oddiy akkauntlar uchun alohida (about_length_limit_* konfiguratsiyada).

Suhbatlar va xabarlar

Chatlar ro'yxati, tarix, yuborish, tahrirlash, o'chirish, uzatish, qadash, reaksiya, so'rovnoma va rejalashtirilgan xabarlar.

actionarchivedelete_dialogdelete_messagesdialogsedit_messageforward_messagesmark_readmessagemessagesmutepin_dialogpin_messagereactscheduledsend_messagesend_pollunmuteunpin_message

action

async

Suhbatda "yozmoqda...", "rasm yubormoqda..." kabi holatni ko'rsatadi. Qiymatlar: typing, cancel, photo, video, record-video, audio, record-audio, document, location, contact, game.

await tg.action(entity: Union[int, str, Any], action: str = 'typing') -> Any
  • Holat 6 soniya amal qiladi; uzoqroq ko'rsatish uchun takrorlang yoki async with tg.client.action(entity, "typing"): ishlating.
Misol — python
await tg.action("@durov", "typing")

archive

async

Suhbatni arxivga soladi (archived=True) yoki arxivdan qaytaradi (archived=False).

await tg.archive(entity: Union[int, str, Any], *, archived: bool = True) -> Any

Suhbatni ro'yxatdan olib tashlaydi: kanal va supergroup'dan chiqadi, oddiy guruhdan chiqib tarixni tozalaydi, shaxsiy chatda tarixni o'chiradi.

await tg.delete_dialog(entity: Union[int, str, Any], *, revoke: bool = False) -> Any
  • revoke=True — shaxsiy chat tarixi suhbatdoshda ham o'chadi; kanal va supergroup'ga ta'sir qilmaydi.

Xabarlarni ID bo'yicha o'chiradi. revoke=True (standart) — hamma uchun; False — shaxsiy chat va oddiy guruhda faqat o'zingizda.

await tg.delete_messages(
    entity: Union[int, str, Any],
    message_ids: Iterable[int],
    *,
    revoke: bool = True,
) -> Any
  • Supergroup va kanalda xabar har doim hamma uchun o'chadi; boshqalarning xabarini o'chirish uchun delete_messages admin huquqi kerak.
  • Xizmat xabarlarini o'chirib bo'lmaydi (MESSAGE_DELETE_FORBIDDEN → PermissionError).
  • O'chirish vaqti ham cheklanishi mumkin (revoke_time_limit, revoke_pm_time_limit).
Misol — python
await tg.delete_messages("me", [101, 102], revoke=True)

dialogs

async

Suhbatlar ro'yxati — shaxsiy chatlar, guruhlar va kanallar, oxirgi faollik bo'yicha. Standart 50 ta; archived=True — faqat arxiv, folder — papka ID.

await tg.dialogs(
    *,
    limit: int = 50,
    archived: Optional[bool] = None,
    folder: Optional[int] = None,
) -> list
  • limit=None hammasini oladi, lekin katta akkauntda bu ko'p so'rov va flood xavfi — kerakli qismini oling.
  • Arxiv papkasining ID'si 1, qolgan chatlar 0 da.
Misol — python
dialogs = await tg.dialogs(limit=50)

Yuborilgan xabarning matni, media yoki tugmalarini tahrirlaydi. Odatda faqat o'z xabaringiz; kanal postlari — edit_messages admin huquqi bilan.

await tg.edit_message(
    entity: Union[int, str, Any],
    message_id: int,
    text: Optional[str] = None,
    *,
    file: Optional[Any] = None,
    parse_mode: Optional[str] = 'md',
    link_preview: bool = True,
    buttons: Optional[Any] = None,
) -> Any
  • Tahrirlash vaqti cheklangan: juda eski xabarda MESSAGE_EDIT_TIME_EXPIRED (chegara — konfiguratsiyadagi edit_time_limit).
  • Matn o'zgarmagan bo'lsa Telegram MESSAGE_NOT_MODIFIED qaytaradi.
Misol — python
await tg.edit_message("me", message_id, "Tahrirlangan matn")

Xabarlarni from_entity dan to_entity ga uzatadi (argumentlar tartibi: qayerga, ID'lar, qayerdan). drop_author=True — asl muallif ko'rsatilmaydi, schedule — rejalashtirish.

await tg.forward_messages(
    to_entity: Union[int, str, Any],
    message_ids: Iterable[int],
    from_entity: Union[int, str, Any],
    *,
    silent: bool = False,
    drop_author: bool = False,
    schedule: Optional[datetime.datetime] = None,
) -> Any
  • Uzatish taqiqlangan (himoyalangan) chatdan uzatib bo'lmaydi — CHAT_FORWARDS_RESTRICTED.
  • Bir chaqiruvda uzatiladigan xabarlar soni cheklangan (forwarded_count_max).
Misol — python
await tg.forward_messages("me", [42], "@kanal", drop_author=True)

Suhbatni o'qilgan deb belgilaydi; message berilsa — o'sha xabargacha.

await tg.mark_read(
    entity: Union[int, str, Any],
    *,
    message: Optional[Any] = None,
) -> Any
Misol — python
await tg.mark_read("@guruh")

message

async

Bitta xabarni ID bo'yicha oladi; topilmasa istisno emas, None qaytaradi.

await tg.message(entity: Union[int, str, Any], message_id: int) -> Any
Misol — python
msg = await tg.message("@kanal", 42)
Misol — python
msg = await tg.message("@kanal", 42)
data = await tg.download(msg)

Suhbat tarixini o'qiydi — Bot API'da bunday metod yo'q. Yangidan eskiga qarab; search, from_user, filter, min_id/max_id bilan saralanadi, ids bilan aniq xabarlar olinadi.

await tg.messages(
    entity: Union[int, str, Any],
    *,
    limit: int = 50,
    offset_id: int = 0,
    min_id: int = 0,
    max_id: int = 0,
    search: Optional[str] = None,
    from_user: Union[int, str, Any, NoneType] = None,
    reverse: bool = False,
    ids: Union[int, Sequence[int], NoneType] = None,
    filter: Optional[Any] = None,
) -> list
  • Sahifalash: keyingi sahifa uchun offset_id ga oldingi sahifadagi eng kichik message.id ni bering; reverse=True — eskidan yangiga.
  • ids berilsa ro'yxat uzunligi saqlanadi — topilmagan xabar o'rnida None.
Misol — python
history = await tg.messages("@durov", limit=50)

mute

async

Suhbat bildirishnomalarini o'chiradi. until — unix vaqt (soniyada); berilmasa amalda abadiy.

await tg.mute(
    entity: Union[int, str, Any],
    *,
    until: Union[int, datetime.datetime, NoneType] = None,
) -> Any
  • until=0 ham abadiy o'chirish sifatida talqin qilinadi — qayta yoqish uchun unmute().

Suhbatni chatlar ro'yxati tepasiga qadaydi yoki pinned=False bilan qadashni olib tashlaydi.

await tg.pin_dialog(entity: Union[int, str, Any], *, pinned: bool = True) -> Any
  • Qadalgan suhbatlar soni cheklangan (Premium bo'lmagan akkaunt uchun dialogs_pinned_limit_default).

Xabarni suhbatda qadaydi; standart holda bildirishnomasiz (notify=False). pm_oneside=True — shaxsiy chatda faqat o'zingizda qadaladi.

await tg.pin_message(
    entity: Union[int, str, Any],
    message_id: int,
    *,
    notify: bool = False,
    pm_oneside: bool = False,
) -> Any
  • Guruh va kanalda qadash huquqi kerak — aks holda CHAT_ADMIN_REQUIRED yoki PIN_RESTRICTED.
Misol — python
await tg.pin_message("me", 42, notify=False)

react

async

Xabarga emoji reaksiya qo'yadi; emoji=None reaksiyani olib tashlaydi, big=True katta animatsiya ko'rsatadi.

await tg.react(
    entity: Union[int, str, Any],
    message_id: int,
    emoji: Optional[str] = None,
    *,
    big: bool = False,
) -> Any
  • Adminlar chatda ruxsat etilgan reaksiyalarni cheklashi mumkin (chat_full() dagi available_reactions); ruxsatsiz emoji — REACTION_INVALID.
Misol — python
await tg.react("@guruh", 42, "👍")

Suhbatdagi rejalashtirilgan, hali yuborilmagan xabarlar — send_message(..., schedule=...) yoki send_file(..., schedule=...) bilan qo'yilganlar.

await tg.scheduled(entity: Union[int, str, Any]) -> Any
Misol — python
scheduled = await tg.scheduled("me")

Shaxsiy chat, guruh yoki kanalga xabar yuboradi; entity — @username, raqamli ID, t.me/... havola yoki "me" (Saqlangan xabarlar). Javob, fayl, tugmalar, jim yuborish va kanal postiga izoh (comment_to) qo'llanadi.

await tg.send_message(
    entity: Union[int, str, Any],
    message: str = '',
    *,
    reply_to: Optional[int] = None,
    parse_mode: Optional[str] = 'md',
    link_preview: bool = True,
    file: Optional[Any] = None,
    silent: bool = False,
    schedule: Optional[datetime.datetime] = None,
    buttons: Optional[Any] = None,
    formatting_entities: Optional[list] = None,
    comment_to: Optional[int] = None,
) -> Any
  • schedule=datetime — xabar Telegram serverida rejalashtiriladi va vaqti kelganda Telegram o'zi yuboradi; ilovangiz ishlab turishi shart emas.
  • Standart parse_mode="md": foydalanuvchi matnidagi **, __, ~~ yoki [matn](url) formatlashga aylanadi. Xom matn uchun parse_mode=None.
  • So'ralmagan ommaviy xabarlar spam hisoblanadi: Telegram API'dan spam uchun foydalangan akkaunt butunlay bloklanadi.
Misol — python
await tg.send_message("@mening_guruhim", "Salom!", silent=True)

So'rovnoma yoki viktorina (quiz=True) yuboradi: options — javob variantlari, multiple — bir nechta tanlov, public — kim ovoz bergani ko'rinadi.

await tg.send_poll(
    entity: Union[int, str, Any],
    question: str,
    options: Sequence[str],
    *,
    multiple: bool = False,
    quiz: bool = False,
    correct: Optional[int] = None,
    public: bool = False,
) -> Any
  • Viktorinada correct (to'g'ri javob indeksi, 0 dan) majburiy — bermasangiz SDK so'rovni yubormasdan ConfigurationError beradi.
Misol — python
await tg.send_poll("@guruh", "Qaysi kun?", ["Dushanba", "Juma"], multiple=False)

unmute

async

Suhbat bildirishnomalarini qayta yoqadi.

await tg.unmute(entity: Union[int, str, Any]) -> Any

Qadalgan xabarni ochadi; message_id berilmasa suhbatdagi barcha qadalgan xabarlar ochiladi.

await tg.unpin_message(
    entity: Union[int, str, Any],
    message_id: Optional[int] = None,
) -> Any
Misol — python
await tg.unpin_message("me", 42)

Media va fayllar

Rasm, video, hujjat va albom yuborish, media yuklab olish va oldindan yuklash.

downloadsend_albumsend_fileupload

Xabardagi media faylni yuklab oladi: standart holda bytes qaytaradi; file ga yo'l bersangiz diskka yozadi va yo'lni qaytaradi.

await tg.download(message: Any, *, file: Any = <class 'bytes'>) -> Any
Misol — python
msg = await tg.message("@kanal", 42)
data = await tg.download(msg)

Bir nechta faylni bitta albom (media group) sifatida yuboradi; caption va send_file() ning boshqa parametrlari qo'llanadi.

await tg.send_album(
    entity: Union[int, str, Any],
    files: Sequence[Any],
    *,
    caption: Optional[str] = None,
    **kwargs: Any,
) -> Any
  • Telegram bitta albomga 10 tagacha media qabul qiladi; ko'proq fayl berilsa Telethon ularni 10 tadan bir nechta albomga bo'ladi.

Rasm, video, hujjat, ovozli xabar yoki dumaloq video yuboradi; file — yo'l, baytlar, fayl obyekti, URL yoki upload() natijasi. caption, reply_to, silent, schedule qo'llanadi.

await tg.send_file(
    entity: Union[int, str, Any],
    file: Any,
    *,
    caption: Optional[str] = None,
    force_document: bool = False,
    voice_note: bool = False,
    video_note: bool = False,
    silent: bool = False,
    reply_to: Optional[int] = None,
    thumb: Optional[Any] = None,
    attributes: Optional[list] = None,
    schedule: Optional[datetime.datetime] = None,
    parse_mode: Optional[str] = 'md',
) -> Any
  • Faylni asl ko'rinishida (hujjat sifatida) yetkazish uchun force_document=True.
  • voice_note=True — ovozli xabar, video_note=True — dumaloq video sifatida yuboriladi.
Misol — python
await tg.send_file("me", "photo.jpg", caption="Rasm")

upload

async

Faylni oldindan Telegram serveriga yuklaydi va natijani qaytaradi; uni keyin send_file() ga berish mumkin (filename — ko'rinadigan fayl nomi).

await tg.upload(file: Any, *, filename: Optional[str] = None) -> Any
  • Yuklangan qismlar serverda vaqtincha — bir necha daqiqadan bir necha soatgacha saqlanadi, shuning uchun natijani tez ishlating.

Story'lar

Story joylash, o'qish, tahrirlash va o'chirish. Foydalanuvchi nomidan joylash uchun Telegram Premium kerak.

can_send_storydelete_storyedit_storysend_storystoriesstory_targets

Story joylash mumkinmi — joylashdan oldingi tekshiruv (stories.canSendStory). Muvaffaqiyatda bo'sh story «slot»lari soni (count) qaytadi; Telegram hujjati aynan shu chaqiruvni story yuborishdan oldin talab qiladi.

await tg.can_send_story(entity: Union[int, str, Any] = 'me') -> Any
  • entity="me" — o'z nomingizdan; kanal yoki supergroup bersangiz — o'sha kanal nomidan.
  • Xatolar SDK tilida: PREMIUM_ACCOUNT_REQUIRED — foydalanuvchida Premium yo'q; CHAT_ADMIN_REQUIRED — kanalda post_stories huquqi yo'q (PermissionError); BOOSTS_REQUIRED — kanalga yetarli «boost» berilmagan; STORIES_TOO_MUCH — faol story'lar chegarasi.
  • Haftalik va oylik chegara (STORY_SEND_FLOOD_WEEKLY / STORY_SEND_FLOOD_MONTHLY) RateLimitError bo'lib keladi, kutish soniyalari retry_after da.
  • Bu kafolat emas: tekshiruv bilan send_story() orasida holat o'zgarsa (masalan boshqa qurilmadan story joylansa), o'sha xatolar joylash paytida qaytadi.
Misol — python
check = await tg.can_send_story("me")

Bitta story'ni yoki ro'yxatdagi bir nechtasini o'chiradi (stories.deleteStories) va haqiqatan o'chirilgan ID'lar ro'yxatini qaytaradi.

await tg.delete_story(
    entity: Union[int, str, Any],
    story_id: Union[int, Iterable[int]],
) -> Any
  • Faol, profilga qadalgan va arxivdagi story — hammasi o'chadi; qaytarib bo'lmaydi.
  • Mavjud bo'lmagan ID xato emas — u shunchaki javobdagi ro'yxatga kirmaydi.
Misol — python
await tg.delete_story("me", [42, 43])

Joylangan story'ni tahrirlaydi (stories.editStory): faqat siz bergan maydonlar yuboriladi, qolgani o'zgarmaydi. Masalan caption ni almashtirish yoki maxfiylikni toraytirish uchun.

await tg.edit_story(
    entity: Union[int, str, Any],
    story_id: int,
    *,
    file: Optional[Any] = None,
    caption: Optional[str] = None,
    privacy: Union[str, Sequence[Any], NoneType] = None,
    allow: Optional[Sequence[Union[int, str, Any]]] = None,
    deny: Optional[Sequence[Union[int, str, Any]]] = None,
    photo: Optional[bool] = None,
    thumb: Optional[Any] = None,
    parse_mode: Optional[str] = None,
    entities: Optional[list] = None,
    media_areas: Optional[list] = None,
) -> Any
  • privacy bu yerda standart None (send_story dan farqli — u yerda maxfiylik majburiy va "everyone"): tegmasangiz story'ning joriy maxfiyligi saqlanadi.
  • Hech qanday maydon berilmasa ConfigurationError — bo'sh tahrir Telegram uchun ma'nosiz so'rov.
  • file berilsa media butunlay qayta yuklanadi (o'sha 30 MB chegarasi bilan): Telegram hujjatiga ko'ra fayl atributlari mediaga «kavsharlangan», ularni boshqacha yo'l bilan o'zgartirib bo'lmaydi.
Misol — python
await tg.edit_story("me", 42, caption="Tahrirlangan matn")

Story joylaydi (stories.sendStory): entity — kim nomidan ("me" yoki kanal/supergroup), file — vertikal rasm yoki video. Javob — Updates, ichida yangi story id si (updateStoryID).

await tg.send_story(
    entity: Union[int, str, Any],
    file: Any,
    *,
    caption: Optional[str] = None,
    period: Union[int, datetime.timedelta, NoneType] = None,
    privacy: Union[str, Sequence[Any], NoneType] = 'everyone',
    allow: Optional[Sequence[Union[int, str, Any]]] = None,
    deny: Optional[Sequence[Union[int, str, Any]]] = None,
    pinned: bool = False,
    noforwards: bool = False,
    photo: Optional[bool] = None,
    thumb: Optional[Any] = None,
    parse_mode: Optional[str] = None,
    entities: Optional[list] = None,
    media_areas: Optional[list] = None,
    albums: Optional[Sequence[int]] = None,
) -> Any
  • Telegram talabi: foydalanuvchi nomidan joylash uchun akkauntda **Telegram Premium** bo'lishi kerak (aks holda PREMIUM_ACCOUNT_REQUIRED); kanal nomidan — post_stories huquqli admin bo'lish va kanalga yetarli «boost» berilgan bo'lishi kerak. Shuning uchun avval can_send_story(entity) ni chaqiring — xato fayl yuklangandan keyin emas, oldin ko'rinadi.
  • file — yo'l, baytlar, fayl obyekti yoki tayyor InputFile; ko'pi bilan 30 MB va bu chegara mahalliy tekshiriladi. Tur kengaytma bo'yicha aniqlanadi (.jpg/.png — rasm, qolgani — video), majburlash uchun photo=True/False.
  • period — story necha soniyadan keyin arxivga tushadi va faqat to'rt qiymat qabul qilinadi: 21600 (6 soat), 43200 (12 soat), 86400 (24 soat), 172800 (48 soat); timedelta ham bo'ladi. Premium'siz akkauntda faqat 86400 ishlaydi, qolganlarini Telegram rad etadi. Berilmasa maydon yuborilmaydi va Telegram 24 soat qo'yadi.
  • privacy: "everyone" (standart), "contacts", "close_friends" (ro'yxat Telegram ilovasida boshqariladi) yoki "selected" — oxirgisida allow majburiy. deny istisnolar ro'yxati va qoidalar oxiriga qo'shiladi («kontaktlar, lekin falonchi emas»).
  • pinned=True — muddat tugagach story profilda qoladi; noforwards=True — uzatish va saqlashni taqiqlaydi.
  • caption uzunligi chegarasi Telegram config'idan keladi va hujjatda raqam bilan berilmagan, shuning uchun SDK uni tekshirmaydi. parse_mode berilmasa matn toza holda ketadi: story'da formatlash akkaunt config'iga bog'liq, hamma akkauntda ishlamaydi.
  • Nisbat va davomiylikni Telegram hujjatda raqam bilan bermaydi — SDK ularni tekshirmaydi, vertikal bo'lmagan media ilovalarda noto'g'ri qirqiladi.
Misol — python
await tg.send_story("me", "story.mp4", caption="Salom!", period=86400,
                    privacy="contacts", pinned=False)

stories

async

Peer'ning hozir faol story'larini qaytaradi (stories.getPeerStories): stories.PeerStories ichida StoryItem lar. ids=[...] berilsa aynan o'sha story'lar so'raladi (stories.getStoriesByID).

await tg.stories(
    entity: Union[int, str, Any] = 'me',
    *,
    ids: Union[int, Iterable[int], NoneType] = None,
) -> Any
  • Ba'zi elementlar StoryItemSkipped bo'lib kelishi mumkin — Telegram joyni tejab to'liq ma'lumotni yubormaydi; o'shalarni stories(entity, ids=[...]) bilan alohida so'rang.
  • Muddati tugagan story'lar bu yerda yo'q: ular arxivda (stories.getStoriesArchive) yoki profilga qadalganlar orasida (stories.getPinnedStories) — ular uchun raw() ishlatiladi.
Misol — python
items = await tg.stories("me")

Qaysi kanal va supergroup nomidan story joylash mumkinligini qaytaradi (stories.getChatsToSend). Kabinet yoki ilovada «kim nomidan joylaymiz?» ro'yxatini ko'rsatish uchun.

await tg.story_targets() -> Any
  • Ro'yxatda bo'lish hali «joylasa bo'ladi» degani emas: boost va chegaralar can_send_story(entity) da tekshiriladi, shuning uchun uni baribir chaqiring.
Misol — python
targets = await tg.story_targets()

Kontaktlar va foydalanuvchilar

Kontaktlar, bloklash, foydalanuvchi profili va username yoki ID bo'yicha obyekt topish.

add_contactblockblockedcommon_chatscontactsdelete_contactentityresolveunblockuser_full

Telefon raqami bo'yicha kontakt qo'shadi (contacts.importContacts). Raqam Telegram'da bo'lsa, foydalanuvchi javobdagi imported va users ichida qaytadi.

await tg.add_contact(phone: str, first_name: str, *, last_name: str = '') -> Any
  • Raqam topilmasa ham istisno chiqmaydi — imported bo'sh bo'ladi, shuning uchun natijani tekshiring.
  • retry_contacts — tizim cheklovi sabab hozir import qilinmagan kontaktlar; ularni keyinroq qayta qo'shish kerak.
Misol — python
await tg.add_contact("+998901234567", "Ali", last_name="Valiyev")

block

async

Foydalanuvchini bloklaydi (contacts.block); qaytarish uchun unblock().

await tg.block(user: Union[int, str, Any]) -> Any
Misol — python
await tg.block("@spam_bot")
await tg.unblock("@spam_bot")

blocked

async

Bloklangan foydalanuvchilar ro'yxati, standart holda 100 tagacha.

await tg.blocked(*, limit: int = 100) -> Any
Misol — python
blocked = await tg.blocked(limit=100)

Siz va ko'rsatilgan foydalanuvchi birga a'zo bo'lgan guruh va kanallar, standart 100 tagacha.

await tg.common_chats(user: Union[int, str, Any], *, limit: int = 100) -> Any
Misol — python
chats = await tg.common_chats("@foydalanuvchi")

Akkauntning kontaktlar ro'yxati (contacts.getContacts): kontakt yozuvlari va ularning users obyektlari.

await tg.contacts() -> Any
Misol — python
contacts = await tg.contacts()

Foydalanuvchini kontaktlar ro'yxatidan o'chiradi.

await tg.delete_contact(user: Union[int, str, Any]) -> Any
Misol — python
await tg.delete_contact("@foydalanuvchi")

entity

async

@username, raqamli ID, t.me/... havola yoki telefon raqamini Telegram obyektiga (User, Chat, Channel) aylantiradi. Boshqa metodlar ham ichkarida shuni ishlatadi.

await tg.entity(entity: Union[int, str, Any]) -> Any
  • Raqamli ID faqat sessiya xotirasidagi obyektlar uchun ishlaydi (masalan, dialogs() yoki participants() dan keyin) — sessiya satri bu keshni saqlamaydi. Topilmasa NotFoundError.

resolve

async

@username ni to'g'ridan-to'g'ri Telegram'dan so'raydi (contacts.resolveUsername); @ bilan ham, usiz ham ishlaydi. Javobda peer, users va chats.

await tg.resolve(username: str) -> Any
  • Keshga qaraydigan entity() dan farqli, har chaqiruv serverga so'rov — takroriy qidiruvlarda entity() afzal.

unblock

async

Foydalanuvchini blokdan chiqaradi.

await tg.unblock(user: Union[int, str, Any]) -> Any
Misol — python
await tg.block("@spam_bot")
await tg.unblock("@spam_bot")

Foydalanuvchi haqida to'liq ma'lumot (users.getFullUser): bio, umumiy guruhlar soni va boshqa profil maydonlari.

await tg.user_full(user: Union[int, str, Any]) -> Any
Misol — python
user = await tg.user_full("@durov")

Guruhlar va kanallar

Yaratish, qo'shilish, chiqish, o'chirish, nom, tavsif, rasm, sekin rejim va standart ruxsatlar.

chat_fullcreate_channelcreate_groupdelete_chatjoinleaveset_aboutset_default_permissionsset_photoset_slowmodeset_title

Guruh yoki kanal haqida to'liq ma'lumot: tavsif, a'zolar soni, taklif havolasi, bog'langan muhokama guruhi, kutilayotgan so'rovlar. Supergroup/kanal uchun channels.getFullChannel, oddiy guruh uchun messages.getFullChat.

await tg.chat_full(entity: Union[int, str, Any]) -> Any
  • Foydali bayroqlar full_chat ichida: can_view_stats — statistika ochiqmi, can_view_participants — a'zolar ro'yxatini ko'ra olasizmi, slowmode_seconds — joriy sekin rejim.
Misol — python
info = await tg.chat_full("@kanal")

Kanal (broadcast=True, standart) yoki supergroup (broadcast=False) yaratadi; about — tavsif.

await tg.create_channel(title: str, *, about: str = '', broadcast: bool = True) -> Any
  • Yangi kanal ommaviy username'siz, ya'ni yopiq holda yaratiladi.
Misol — python
channel = await tg.create_channel("Yangiliklar", about="Kompaniya yangiliklari")

Guruh yaratadi: megagroup=True (standart) — supergroup, megagroup=False — users bilan oddiy guruh.

await tg.create_group(
    title: str,
    users: Sequence[Union[int, str, Any]],
    *,
    megagroup: bool = True,
    about: str = '',
) -> Any
  • megagroup=True bo'lsa users guruhga qo'shilmaydi — a'zolarni keyin invite() bilan qo'shing. Oddiy guruhda about qo'llanmaydi.
  • Oddiy guruh 200 a'zogacha, supergroup 200 000 gacha sig'adi.
Misol — python
group = await tg.create_group("Playground guruhi", ["@do'stim"], megagroup=True)

Guruh yoki kanalni hamma uchun butunlay o'chiradi — a'zolar va tarix qaytarilmaydi. Yaratuvchi huquqi kerak, aks holda PermissionError.

await tg.delete_chat(entity: Union[int, str, Any]) -> Any
  • 1000 dan ortiq a'zoli kanal yoki supergroup'ni API orqali o'chirib bo'lmaydi — CHANNEL_TOO_LARGE.
Misol — python
await tg.delete_chat("@mening_kanalim")

join

async

Guruh yoki kanalga qo'shiladi: ommaviy @username ham, t.me/+... yoki t.me/joinchat/... taklif havolasi ham qabul qilinadi — kerakli TL so'rovini SDK o'zi tanlaydi.

await tg.join(entity: Union[str, int, Any]) -> Any
  • Havola admin tasdig'ini talab qilsa Telegram INVITE_REQUEST_SENT qaytaradi — bu so'rov yuborildi degani (SDK'da ApiError).
  • Akkaunt a'zo bo'lishi mumkin bo'lgan kanal va supergroup'lar soni cheklangan — oshsa CHANNELS_TOO_MUCH.
Misol — python
await tg.join("@kanal")

leave

async

Guruh yoki kanaldan chiqadi; oddiy guruhda chat tarixi ham sizda tozalanadi.

await tg.leave(entity: Union[int, str, Any]) -> Any
Misol — python
await tg.leave("@kanal")

Guruh yoki kanal tavsifini (about) o'zgartiradi.

await tg.set_about(entity: Union[int, str, Any], about: str) -> Any
  • Tavsif uzunligi cheklangan — oshsa CHAT_ABOUT_TOO_LONG, matn o'zgarmagan bo'lsa CHAT_ABOUT_NOT_MODIFIED.

Guruhning barcha a'zolari uchun standart ruxsatlarni o'rnatadi (masalan, hammaga yozishni yopish: send_messages=False). restrict() dagi kabi False — taqiqlash.

await tg.set_default_permissions(entity: Union[int, str, Any], **rights: bool) -> Any
  • view_messages bu yerda ishlatilmaydi — u faqat alohida a'zoni taqiqlash uchun.
  • Telethon bu amalni faqat supergroup va kanal uchun bajaradi; oddiy guruhda SDK NotFoundError beradi.

Guruh yoki kanal rasmini fayldan (yo'l, baytlar yoki fayl obyekti) yuklab o'rnatadi.

await tg.set_photo(entity: Union[int, str, Any], file: Any) -> Any
Misol — python
await tg.set_photo("@guruh", "logo.png")

Supergroup'da sekin rejimni yoqadi: har bir a'zo seconds soniyada bitta xabar yubora oladi; 0 — o'chirish.

await tg.set_slowmode(entity: Union[int, str, Any], seconds: int = 0) -> Any
  • Faqat supergroup uchun. Telegram qabul qilmaydigan davomiylik berilsa — SECONDS_INVALID.
Misol — python
await tg.set_title("@guruh", "Yangi nom")
await tg.set_slowmode("@guruh", 30)

Guruh yoki kanal nomini o'zgartiradi; change_info huquqi kerak.

await tg.set_title(entity: Union[int, str, Any], title: str) -> Any
Misol — python
await tg.set_title("@guruh", "Yangi nom")
await tg.set_slowmode("@guruh", 30)

A'zolar va moderatsiya

A'zolar ro'yxati, taklif qilish, chiqarish, taqiqlash, cheklash va adminlik.

adminsbanbanneddemoteinvitekickmute_memberparticipantspermissionspromoterestrictunban

admins

async

Faqat adminlar ro'yxati, limit cheklovisiz; har bir foydalanuvchining participant maydonida roli va huquqlari.

await tg.admins(entity: Union[int, str, Any]) -> list
Misol — python
admins = await tg.admins("@guruh")

ban

async

A'zoni chiqarib, qaytib kirishini taqiqlaydi. until (datetime) — muddatli taqiq; berilmasa abadiy.

await tg.ban(
    entity: Union[int, str, Any],
    user: Union[int, str, Any],
    *,
    until: Optional[datetime.datetime] = None,
) -> Any
  • 366 kundan uzun yoki 30 soniyadan qisqa muddat Telegram tomonidan abadiy deb hisoblanadi.
  • Supergroup va kanalda ishlaydi (ban_users huquqi kerak); oddiy guruhda — kick().
Misol — python
await tg.ban("@guruh", "@foydalanuvchi")

banned

async

Chatdan chiqarib yuborilgan (taqiqlangan) a'zolar, standart holda 100 tagacha.

await tg.banned(entity: Union[int, str, Any]) -> list
  • Faqat cheklangan (restricted) a'zolar kerak bo'lsa: participants(entity, filter=tg.tl().types.ChannelParticipantsBanned(q="")).
Misol — python
banned = await tg.banned("@guruh")

demote

async

Adminlik huquqlarini olib, foydalanuvchini oddiy a'zoga qaytaradi.

await tg.demote(entity: Union[int, str, Any], user: Union[int, str, Any]) -> Any
Misol — python
await tg.demote("@guruh", "@foydalanuvchi")

invite

async

Foydalanuvchilarni guruh yoki kanalga qo'shadi: supergroup va kanalda bitta so'rov bilan, oddiy guruhda bittalab.

await tg.invite(
    entity: Union[int, str, Any],
    users: Sequence[Union[int, str, Any]],
) -> Any
  • Maxfiylik sozlamasi ruxsat bermasa USER_PRIVACY_RESTRICTED (PermissionError) — bunday odamga taklif havolasini yuboring.
  • Supergroup/kanal javobidagi missing_invitees — qo'shilmay qolgan foydalanuvchilar.
  • Notanish odamlarni ommaviy qo'shish spam hisoblanadi: Telegram API'dan spam uchun foydalangan akkaunt butunlay bloklanadi.
Misol — python
await tg.invite("@guruh", ["@foydalanuvchi"])

kick

async

A'zoni chatdan chiqaradi, lekin taqiqlamaydi — u havola orqali qaytib kira oladi. Butunlay taqiqlash uchun ban().

await tg.kick(entity: Union[int, str, Any], user: Union[int, str, Any]) -> Any
  • Supergroup va kanalda Telethon buni "taqiqlash + darhol taqiqni olish" orqali bajaradi.
Misol — python
await tg.kick("@guruh", "@foydalanuvchi")

A'zoga xabar yozishni taqiqlaydi — restrict(send_messages=False) ning qisqartmasi; until bilan muddatli.

await tg.mute_member(
    entity: Union[int, str, Any],
    user: Union[int, str, Any],
    *,
    until: Optional[datetime.datetime] = None,
) -> Any

Guruh yoki kanal a'zolari ro'yxati — Bot API'da bunday metod yo'q. search — ism yoki username bo'yicha, filter — adminlar, botlar, taqiqlanganlar va h.k., limit=None — hammasi.

await tg.participants(
    entity: Union[int, str, Any],
    *,
    limit: Optional[int] = 100,
    search: Optional[str] = None,
    aggressive: bool = False,
    filter: Optional[Any] = None,
) -> list
  • Kanal obunachilari uchun admin huquqi kerak (CHAT_ADMIN_REQUIRED → PermissionError); supergroup'da ro'yxat yashirilgan bo'lishi mumkin — chat_full() dagi can_view_participants ni tekshiring.
  • aggressive parametri Telethon'ning joriy versiyalarida hech narsa qilmaydi — orqaga moslik uchun qoldirilgan.
  • Olingan ro'yxatga so'ralmagan xabar yuborish yoki odamlarni boshqa chatlarga ommaviy qo'shish spam hisoblanadi va akkaunt bloklanishiga olib keladi.
Misol — python
members = await tg.participants("@guruh", limit=200)

Bitta a'zoning chatdagi holati va huquqlari: egami, adminmi, cheklanganmi, qaysi amallarga ruxsati bor (Telethon ParticipantPermissions).

await tg.permissions(entity: Union[int, str, Any], user: Union[int, str, Any]) -> Any
Misol — python
rights = await tg.permissions("@guruh", "@foydalanuvchi")

promote

async

A'zoni admin qiladi; har bir huquq alohida bayroq (delete_messages, ban_users, pin_messages ...), title — admin unvoni. add_admins standart holda False, ya'ni yangi admin boshqalarni admin qila olmaydi.

await tg.promote(
    entity: Union[int, str, Any],
    user: Union[int, str, Any],
    *,
    title: Optional[str] = None,
    change_info: bool = True,
    post_messages: bool = True,
    edit_messages: bool = True,
    delete_messages: bool = True,
    ban_users: bool = True,
    invite_users: bool = True,
    pin_messages: bool = True,
    add_admins: bool = False,
    manage_call: bool = True,
    anonymous: bool = False,
) -> Any
  • Oddiy guruhda alohida huquqlar yo'q — foydalanuvchi shunchaki admin bo'ladi.
  • anonymous=True — admin a'zolar ro'yxatida ko'rinmaydi va o'z akkaunti nomidan yozolmaydi.
Misol — python
await tg.promote("@guruh", "@foydalanuvchi", title="Moderator", ban_users=True)

A'zoning alohida huquqlarini cheklaydi: xabar, media, stiker, GIF, havola, so'rovnoma va h.k. Diqqat: False — taqiqlash, True — ruxsat; until — muddat.

await tg.restrict(
    entity: Union[int, str, Any],
    user: Union[int, str, Any],
    *,
    until: Optional[datetime.datetime] = None,
    send_messages: bool = True,
    send_media: bool = True,
    send_stickers: bool = True,
    send_gifs: bool = True,
    send_games: bool = True,
    send_inline: bool = True,
    embed_links: bool = True,
    send_polls: bool = True,
    change_info: bool = True,
    invite_users: bool = True,
    pin_messages: bool = True,
    embed_link_previews: bool = True,
) -> Any
  • Faqat supergroup'da: oddiy guruh a'zolariga alohida cheklov qo'yib bo'lmaydi (SDK NotFoundError beradi).
  • Berilmagan parametr True hisoblanadi — har chaqiruv huquqlarning to'liq to'plamini qayta yozadi, avvalgi cheklovlar saqlanmaydi.
Misol — python
await tg.restrict("@guruh", "@foydalanuvchi", send_messages=False)

unban

async

Taqiq va cheklovlarni olib tashlaydi. Foydalanuvchi avtomatik qaytmaydi — o'zi qo'shilishi yoki qayta taklif qilinishi kerak.

await tg.unban(entity: Union[int, str, Any], user: Union[int, str, Any]) -> Any
Misol — python
await tg.unban("@guruh", "@foydalanuvchi")

Taklif havolalari va so'rovlar

Taklif havolalarini yaratish va bekor qilish, qo'shilish so'rovlarini ko'rish va tasdiqlash.

approve_join_requestcreate_invite_linkinvite_linkjoin_requestsrevoke_invite_link

Qo'shilish so'rovini tasdiqlaydi (approved=True) yoki rad etadi (approved=False).

await tg.approve_join_request(
    entity: Union[int, str, Any],
    user: Union[int, str, Any],
    *,
    approved: bool = True,
) -> Any
Misol — python
await tg.approve_join_request("@guruh", 123456789, approved=True)

Admin tasdig'ini kutayotgan qo'shilish so'rovlari (messages.getChatInviteImporters), standart 50 tagacha; javobda importers va users.

await tg.join_requests(entity: Union[int, str, Any], *, limit: int = 50) -> Any
Misol — python
requests = await tg.join_requests("@guruh")

Past daraja: TL so'rovlar

SDK o'ramagan istalgan MTProto metodini Telethon orqali chaqirish.

rawtl

raw

async

Telethon'ning istalgan TL so'rovini (functions.*Request) yuboradi va xatolarni SDK ierarxiyasiga (RateLimitError, AuthError, PermissionError, NotFoundError) o'giradi. SDK o'ramagan imkoniyatlar uchun.

await tg.raw(request: Any) -> Any
  • So'rov maydonlariga @username yoki ID berish mumkin — Telethon ularni kerakli Input* turiga o'zi aylantiradi.
  • Parametr nomlari aynan TL sxemasidagidek. tg.client(...) dan farqi: xatolar Telethon shaklida emas, SDK shaklida keladi.
Misol — python
from telethon import functions

config = await tg.raw(functions.help.GetConfigRequest())

tl

staticmethod

telethon.tl modulini qaytaradi: tg.tl().functions — so'rovlar, tg.tl().types — turlar (filtrlar, huquqlar). raw() va filter= parametrlari bilan birga ishlatiladi.

TelegramAccount.tl()
  • Statik metod — ulanishsiz ham chaqiriladi, lekin telethon o'rnatilgan bo'lishi kerak.

Ko'p so'raladigan savollar

Telegram bot va TelegramAccount (userbot) farqi nima?

Bot BotFather token'i bilan Bot API orqali ishlaydi: foydalanuvchiga birinchi bo'lib yoza olmaydi, Bot API'da chat tarixini yoki guruhning to'liq a'zolar ro'yxatini olish metodi yo'q. TelegramAccount MTProto orqali oddiy akkaunt nomidan ishlaydi, shuning uchun tarix, a'zolar, guruhga qo'shilish va kanal yaratish mumkin. Ko'p foydalanuvchiga xizmat qiladigan avtomatlashtirish uchun bot, o'z akkauntingiz va guruhlaringizni boshqarish uchun TelegramAccount mos.

Telegram api_id va api_hash qanday olinadi?

my.telegram.org ga Telegram raqamingiz bilan kiring va API development tools bo'limida ilova formasini to'ldiring — api_id (son) va api_hash (satr) beriladi. Hozircha bitta telefon raqamiga bitta api_id biriktiriladi. SDK'da ular TelegramAccount.from_env() orqali TELEGRAM_API_ID va TELEGRAM_API_HASH dan o'qiladi.

Telethon session string'ni qanday xavfsiz saqlash kerak?

sign_in() yoki export_session() qaytargan satrda avtorizatsiya kaliti bor: kimda bo'lsa, akkauntga kod va parolsiz kiradi. Uni bazada shifrlab saqlang, log va xato xabarlariga chiqarmang. Sizib chiqsa log_out() chaqiring yoki boshqa seansdan reset_session() bilan uni tugating.

FLOOD_WAIT xatosi chiqsa nima qilish kerak?

FLOOD_WAIT_X — Telegram X soniya kutishni talab qilyapti degani. Telethon 60 soniyagacha bo'lgan kutishni o'zi bajaradi (chaqiruv shunchaki sekinlashadi); uzunroq kutishni SDK RateLimitError sifatida retry_after bilan beradi va qaror sizda qoladi. Telegram API'dan flood, spam yoki soxta obunachi va ko'rishlar uchun foydalangan akkauntlar butunlay bloklanadi.

Telegram'ga Python orqali story joylash mumkinmi?

Ha, lekin faqat akkaunt nomidan: send_story() MTProto'dagi stories.sendStory ni chaqiradi, Bot API'da esa story joylash imkoniyati umuman yo'q. Telegram qoidasi: foydalanuvchi nomidan joylash uchun akkauntda Premium bo'lishi kerak, kanal nomidan — post_stories huquqi va kanalga yetarlicha «boost». Davomiylik 6, 12, 24 yoki 48 soat (Premium'siz faqat 24), media vertikal va 30 MB gacha. Joylashdan oldin can_send_story() bilan tekshiring.

Python'da Telegram guruhining barcha a'zolarini qanday olish mumkin?

await tg.participants("@guruh", limit=None) Telethon User obyektlari ro'yxatini qaytaradi; search va filter bilan toraytirish mumkin. Kanal obunachilari ro'yxati uchun admin huquqi kerak (aks holda PermissionError), supergroup'da esa adminlar a'zolar ro'yxatini yashirgan bo'lishi mumkin. Oldindan chat_full() natijasidagi can_view_participants ni tekshiring.

Manbalar

  1. Telegram: Obtaining api_id
  2. Telegram: User authorization
  3. Telegram: Error handling (FLOOD_WAIT)
  4. Telegram: Admin, banned and default rights
  5. Telegram: Channel statistics
  6. Telegram: Stories
  7. Telegram Bot API

Bog'liq sahifalar