ZaminDocs

Guruhlar va kanallardagi botlar

Botni guruhga yoki kanalga qo'shish mumkin: u buyruqlarga javob beradi, yangi a'zolarni kutib oladi, spamni o'chiradi, kanalga post joylaydi. Bot API o'sha-o'sha β€” faqat chat_id manfiy bo'ladi va bir nechta yangi metod hamda yangilanish qo'shiladi.

Botni guruhga qo'shish

  1. Bot egasi (siz) hech narsa qilmasa ham bo'ladi: botlarni guruhga qo'shish standart holatda yoqilgan. O'chirish uchun β€” @ZaminBot'da /setjoingroups (u kanallarga ham taalluqli). Holatni getMe'dagi can_join_groups ko'rsatadi.
  2. Guruh egasi yoki "A'zo qo'shish" huquqli admin guruh ma'lumotlaridagi Botlar bo'limida botni username bo'yicha qo'shadi.
  3. Bot my_chat_member (left β†’ member) va o'zi ham ichida bo'lgan new_chat_members xizmat xabarini oladi. Shu paytdan boshlab chat.id ma'lum β€” bot guruhga yoza oladi.
  4. Moderatsiya kerak bo'lsa, guruh egasi (yoki "Admin tayinlash" huquqli admin) botni admin qiladi va kerakli huquqlarni beradi (jadval). Bot my_chat_member (member β†’ administrator, huquqlar bilan) oladi.
  • Tarix yo'q. Bot qo'shilishidan oldingi xabarlarni hech qachon ko'rmaydi: ular botga shifrlanmagan va endi shifrlab bo'lmaydi. Bot chiqarilib, qayta qo'shilsa ham, oraliqdagi xabarlar unga ko'rinmaydi.
  • Kimlar qo'shilmaydi: @ZaminBot, bloklangan (suspended) botlar, /setjoingroups o'chirilgan botlar. Davra chatlariga bot qo'shib bo'lmaydi.
  • Chiqarish: guruh egasi yoki "Foydalanuvchilarni cheklash" huquqli admin (bot admin bo'lsa β€” faqat ega yoki uni admin qilgan odam). Bot my_chat_member (β†’ kicked) oladi. Bot o'zi ham chiqishi mumkin: leaveChat (β†’ left).
  • Limitlar: bitta guruhda ko'pi bilan 20 ta bot; bitta bot ko'pi bilan 200 ta guruh va kanalda (birgalikda).

Privacy mode: bot nimani ko'radi

Oddiy qilib aytganda: bot guruhda faqat o'ziga qaratilgan xabarlarni oladi. Aniqrog'i, privacy mode yoqilgan bo'lsa (standart holat), bot faqat quyidagilarni oladi:

  1. Buyruqlar β€” / bilan boshlanadigan xabar (yoki fayl izohi): /start, /help, shuningdek /help@SizningBot. /help@BoshqaBot sizga kelmaydi; oddiy /help esa guruhdagi har bir botga boradi.
  2. @eslatishlar β€” matnda @SizningBot alohida so'z sifatida bor (katta-kichik harf farqsiz).
  3. Botning o'z xabariga javoblar (reply).
  4. Hamma xabarlar β€” lekin faqat guruh egasi botni admin qilib, unga "Barcha xabarlarni o'qish" huquqini bergan bo'lsa (pastda).

Bundan tashqari bot doim oladi: server baribir biladigan xizmat voqealari (kim qo'shildi, chiqdi yoki chiqarildi, guruh nomi o'zgardi, botning o'zi qo'shildi, admin qilindi yoki chiqarildi) va o'z xabarlaridagi tugma bosilishlari.

Bot hech qachon ko'rmaydi: boshqa xabarlarni, iqtibos qilingan matnni, havola ko'rinishlarini (link preview), "kimdan forward qilingan"ni, boshqa botlarning xabarlarini, reaksiyalarni, qadashlarni, "o'qildi" belgilarini, telefon raqamlar, profil rasmlari, kontaktlar, onlayn holat va bot qo'shilishidan oldingi tarixni. Odamlar shaxsiy chatdagidek psevdonim id bilan ko'rinadi.

"Barcha xabarlarni o'qish"

Bot guruhdagi barcha xabarlarni faqat ikki shart birga bajarilganda oladi:

  • bot o'sha guruhning admini, va
  • guruh egasi unga "Barcha xabarlarni o'qish" huquqini o'zi, aniq bergan.

Boshqa yo'l yo'q: bot egasining @ZaminBot'dagi /setprivacy sozlamasi o'zi hech qachon "barcha xabarlar"ni yoqmaydi. Uning ta'siri:

  • Privacy holati bot guruhga qo'shilgan paytda shu guruh uchun "suratga olinadi" va keyin hech qachon o'zgarmaydi (admin qilish yoki huquqlarni o'zgartirish ham uni yangilamaydi). /setprivacy'ni keyin o'zgartirsangiz, faqat bot qayta qo'shilganda hisobga olinadi.
  • Privacy mode'i o'chiq holda qo'shilgan botni faqat guruh egasi admin qila oladi va faqat "Barcha xabarlarni o'qish" huquqini shu so'rovning o'zida yoqib: ilova ikkinchi marta tasdiq so'raydi, busiz server 409 BOT_PRIVACY_OFF qaytaradi.
  • Ilova guruhdagi har bir bot uchun suratga olingan holatni (GroupBot.privacyMode) va haqiqiy holatni (readsAllMessages) ko'rsatadi.

Boshqa adminlar bu huquqni bera olmaydi va privacy mode'i o'chiq botni admin qila olmaydi. Bot egasi guruh rozi bo'lmagan holda botni jimgina "hamma narsani o'quvchi"ga aylantira olmaydi.

Bunday guruhda har bir a'zoning ilovasi doimiy ogohlantirish ko'rsatadi: "πŸ€– @Bot bu guruhdagi barcha xabarlarni o'qiy oladi (ular Zamin serveridan uchidan-uchiga shifrlanmagan)". can_read_all_group_messages (my_chat_member, getChatMember, getChatAdministrators) va ilovadagi readsAllMessages haqiqiy holatni bildiradi: true β€” bot hozir barcha xabarlarni oladi.

Bu uchidan-uchiga shifrlash uchun nimani anglatadi

Ochiq aytamiz, chunki foydalanuvchilar sizning botingizga ishonadi:

  • Bot telefon emas β€” u sizning serveringizda ishlaydigan dastur va xabarlarni Bot API orqali oddiy JSON ko'rinishida oladi. Shuning uchun guruhdagi har bir bot shu guruh uchun o'z shifrlash kalitiga ega ("bot qurilmasi"), uning maxfiy qismi esa Zamin serverida saqlanadi (serverda shifrlangan holda).
  • A'zoning telefoni xabarni botga ham shifrlasa (buyruq, @eslatish, javob yoki "barcha xabarlar"), o'sha xabarni Zamin serveri ham, bot egasi ham o'qiy oladi. Bunday xabar uchidan-uchiga shifrlangan emas deb hisoblang.
  • Botga shifrlanmagan xabarlar a'zolarning telefonlari orasida uchidan-uchiga shifrlangan bo'lib qoladi β€” ularni na server, na bot o'qiy oladi.
  • Qaysi xabar botga borishini yuboruvchining telefoni hal qiladi. Server ham tekshiradi: botning nusxasini ochib, u haqiqatan buyruq / @eslatish / botga javob ekanini tekshiradi va mos kelmaganini botga bermaydi.
  • Fayl izohida buyruq bo'lsa, bot o'sha faylni ham oladi (fayl kaliti xabar ichida keladi).
  • Botning guruhdagi xabarlari ham a'zolar telefonlari uchun shifrlanadi, lekin ularni server yozgan β€” demak bot yuborgan matnni server biladi.
  • Kanallar uchidan-uchiga shifrlanmagan (postlar serverda, hozirgidek).

Bot nusxasida nima bor

A'zoning telefoni botga xabarning qisqartirilgan nusxasini shifrlaydi; server ham nusxani o'qishdan oldin xuddi shu maydonlarni olib tashlaydi:

  • Iqtibos yo'q. Javob qilingan xabarning matni va muallifi nusxada yo'q β€” faqat uning id'si. Shu sababli reply_to_message boshqa odamning xabari uchun mazmunsiz keladi (message_id, chat, date va server biladigan from); to'liq faqat botning o'z xabari.
  • Havola ko'rinishi (link preview) yo'q β€” faqat matnning o'zi.
  • "Kimdan forward qilingan" yo'q.
  • Kontaktlar hech qachon botga shifrlanmaydi (guruhda contact kelmaydi).

Siz β€” bot egasi β€” uchun xulosa: botga kelgan guruh xabarlarini kerakli ish tugagach saqlamang, log'larga to'liq yozmang, va "barcha xabarlarni o'qish"ni faqat haqiqatan kerak bo'lsa so'rang (masalan, flood'ga qarshi moderator). Kam ma'lumot saqlang.

Chat id'lari

Chatchat.typeid ko'rinishi
Shaxsiy chatprivatemusbat, foydalanuvchining psevdonim id'si (= from.id)
Guruhgroup-<10 raqam>, masalan -4012345678
Kanalchannel-100<10 raqam>, masalan -1004012345678
Kanal izohlarisupergroup-100…; kanalning getChat javobidagi linked_chat_id
  • Guruh va kanal id'lari tasodifiy, lekin doimiy β€” ularni bazangizda saqlang. Ichki hisob id'lari botga hech qachon berilmaydi.
  • Ochiq guruh yoki kanal uchun chat_id sifatida "@username" ham ishlaydi (bot unda a'zo bo'lsa).
  • Noma'lum id, bot a'zo bo'lmagan chat yoki botni boshlamagan odamning shaxsiy chati β€” hammasi uchun bir xil javob: 400 Bad Request: chat not found.
  • message_id: guruhda β€” guruhning umumiy xabar raqami (hamma a'zolar va botlar uchun bir xil, o'sib boradi, bot ko'rmagan xabarlar sabab oraliqlar bo'ladi). Kanal va izohlarda β€” bot birinchi marta ko'rganda beriladigan raqam.
  • Odamlarning from.id'si shaxsiy chatdagi bilan bir xil psevdonim raqam: bitta odam sizning botingizga guruhda ham, shaxsiy chatda ham bir xil id bilan ko'rinadi, boshqa botga esa boshqa id bilan.

Yangilanishlar

TurQachon keladi
messageGuruhda: privacy mode ruxsat bergan xabar (buyruq, @eslatish, botga javob yoki β€” "barcha xabarlar"da β€” har biri). Xizmat xabarlari ham message bo'lib keladi (pastda).
edited_messageA'zo xabarini tahrirladi va yangi matn ham privacy mode shartiga mos.
callback_queryA'zo botning guruhdagi xabaridagi inline tugmani bosdi.
my_chat_memberBotni guruh yoki kanalga qo'shishdi (left β†’ member / administrator), admin qilishdi yoki huquqlarini o'zgartirishdi, adminlikdan olishdi, chiqarishdi (β†’ kicked) yoki bot o'zi chiqdi (β†’ left).
message + new_chat_membersGuruhga odam(lar) yoki bot qo'shildi. Privacy mode'dan qat'i nazar, guruhdagi barcha botlarga.
message + left_chat_memberOdam (yoki boshqa bot) chiqdi yoki chiqarildi.
message + new_chat_titleGuruh nomi o'zgardi.
chat_memberGuruhda odam qo'shildi, chiqdi, chiqarildi yoki ban qilindi. Faqat admin-botlarga va faqat allowed_updates'da "chat_member" aniq ko'rsatilgan bo'lsa (Telegram qoidasi).
channel_postBot admin bo'lgan kanalda yangi post (botning o'z postlari kelmaydi).
edited_channel_postKanal posti tahrirlandi.
message (izohlar chatida)Kanal postiga yangi izoh: chat.type = "supergroup", message_thread_id = post raqami.

O'chirishlar, reaksiyalar va qadashlar haqida yangilanish kelmaydi. Webhook yoki getUpdates'da allowed_updates ishlatsangiz, yangi turlarni ro'yxatga qo'shishni unutmang β€” ro'yxat bot uchun saqlanadi.

Guruhdagi buyruq

Admin /warn buyrug'ini Vali'ning xabariga javob qilib yozdi. reply_to_message β€” boshqa odamning xabari, shuning uchun unda mazmun yo'q, faqat raqami va muallifi (botning nusxasida iqtibos yo'q, server esa odamlar xabarlarining matnini saqlamaydi β€” bot nusxasi):

JSON
{
  "update_id": 501,
  "message": {
    "message_id": 815,
    "from": {
      "id": 4810235517,
      "is_bot": false,
      "first_name": "Ali",
      "last_name": "Valiyev",
      "username": "ali",
      "language_code": "uz"
    },
    "chat": {
      "id": -4012345678,
      "type": "group",
      "title": "Dasturchilar"
    },
    "date": 1791106200,
    "text": "/warn@ObHavoBot",
    "reply_to_message": {
      "message_id": 812,
      "chat": {
        "id": -4012345678,
        "type": "group",
        "title": "Dasturchilar"
      },
      "date": 1791106160,
      "from": {
        "id": 5203318874,
        "is_bot": false,
        "first_name": "Vali",
        "username": "vali",
        "language_code": "uz"
      }
    }
  }
}

Yangi a'zo

JSON
{
  "update_id": 502,
  "message": {
    "message_id": 816,
    "chat": {
      "id": -4012345678,
      "type": "group",
      "title": "Dasturchilar"
    },
    "date": 1791106200,
    "from": {
      "id": 4810235517,
      "is_bot": false,
      "first_name": "Ali",
      "last_name": "Valiyev",
      "username": "ali",
      "language_code": "uz"
    },
    "new_chat_members": [
      {
        "id": 5203318874,
        "is_bot": false,
        "first_name": "Vali",
        "username": "vali",
        "language_code": "uz"
      }
    ]
  }
}

from β€” amalni bajargan odam. Bu xizmat xabarini deleteMessage bilan o'chirish mumkin (can_delete_messages kerak).

Bot admin qilindi

JSON
{
  "update_id": 503,
  "my_chat_member": {
    "chat": {
      "id": -4012345678,
      "type": "group",
      "title": "Dasturchilar"
    },
    "from": {
      "id": 4810235517,
      "is_bot": false,
      "first_name": "Ali",
      "last_name": "Valiyev",
      "username": "ali",
      "language_code": "uz"
    },
    "date": 1791106200,
    "old_chat_member": {
      "user": {
        "id": 1000001,
        "is_bot": true,
        "first_name": "Ob-havo",
        "username": "ObHavoBot",
        "can_join_groups": true,
        "can_read_all_group_messages": false,
        "supports_inline_queries": false
      },
      "status": "member"
    },
    "new_chat_member": {
      "user": {
        "id": 1000001,
        "is_bot": true,
        "first_name": "Ob-havo",
        "username": "ObHavoBot",
        "can_join_groups": true,
        "can_read_all_group_messages": false,
        "supports_inline_queries": false
      },
      "status": "administrator",
      "can_change_info": false,
      "can_delete_messages": true,
      "can_restrict_members": true,
      "can_invite_users": false,
      "can_pin_messages": true,
      "can_post_messages": false,
      "can_edit_messages": false,
      "can_promote_members": false,
      "can_manage_video_chats": false,
      "can_read_all_group_messages": false
    }
  }
}

chat_member

JSON
{
  "update_id": 504,
  "chat_member": {
    "chat": {
      "id": -4012345678,
      "type": "group",
      "title": "Dasturchilar"
    },
    "from": {
      "id": 1000001,
      "is_bot": true,
      "first_name": "Ob-havo",
      "username": "ObHavoBot",
      "can_join_groups": true,
      "can_read_all_group_messages": false,
      "supports_inline_queries": false
    },
    "date": 1791106200,
    "old_chat_member": {
      "user": {
        "id": 5203318874,
        "is_bot": false,
        "first_name": "Vali",
        "username": "vali",
        "language_code": "uz"
      },
      "status": "member"
    },
    "new_chat_member": {
      "user": {
        "id": 5203318874,
        "is_bot": false,
        "first_name": "Vali",
        "username": "vali",
        "language_code": "uz"
      },
      "status": "kicked"
    }
  }
}

chat_member faqat qo'shilish (left β†’ member), chiqish va chiqarish (member β†’ left) hamda ban'da (member β†’ kicked) keladi. Admin tayinlash, huquq o'zgarishi yoki jim qilishda kelmaydi.

Kanal posti va izoh

JSON
{
  "update_id": 505,
  "channel_post": {
    "message_id": 37,
    "sender_chat": {
      "id": -1004012345678,
      "type": "channel",
      "title": "Ob-havo yangiliklari",
      "username": "obhavo_news"
    },
    "chat": {
      "id": -1004012345678,
      "type": "channel",
      "title": "Ob-havo yangiliklari",
      "username": "obhavo_news"
    },
    "date": 1791106200,
    "text": "Ertaga Toshkentda +18°C, yomg'ir 🌧"
  }
}
JSON
{
  "update_id": 506,
  "message": {
    "message_id": 3,
    "from": {
      "id": 5203318874,
      "is_bot": false,
      "first_name": "Vali",
      "username": "vali",
      "language_code": "uz"
    },
    "chat": {
      "id": -1007012345678,
      "type": "supergroup",
      "title": "Ob-havo yangiliklari β€” comments"
    },
    "date": 1791106200,
    "text": "Rahmat!",
    "message_thread_id": 37,
    "reply_to_message": {
      "message_id": 37,
      "chat": {
        "id": -1004012345678,
        "type": "channel",
        "title": "Ob-havo yangiliklari",
        "username": "obhavo_news"
      },
      "date": 1791106200
    }
  }
}

Guruhda xabar yuborish

  • sendMessage, sendPhoto, sendDocument, sendVideo, sendAudio β€” chat_id manfiy. Javobdagi message.chat β€” guruh.
  • Faqat inline klaviatura (reply klaviatura β†’ 400 only inline keyboards are supported in groups). Tugmani istalgan a'zo bosishi mumkin; answerCallbackQuery javobi faqat bosgan odamga ko'rinadi.
  • Bot admin bo'lmasa, guruhning a'zolar uchun ruxsatlari unga ham amal qiladi ("faqat adminlar yozadi" guruhida bot yoza olmaydi).
  • editMessageText, editMessageReplyMarkup β€” faqat botning o'z xabarlari, 48 soat ichida. Guruhda editMessageText fayl xabarining izohini ham almashtiradi.
  • Bot xabari guruhning har bir a'zosining eng so'nggi faol 10 ta qurilmasi uchun shifrlanadi; boshqa botlar uni ko'rmaydi (botlar bir-birini ko'rmaydi). Kimdadir 10 tadan ko'p qurilma bo'lsa, eskiroq telefonlarida bot xabari qulflangan ko'rinadi (o'sha telefonda qayta kirish yoki eski qurilmadan chiqish kerak).

Admin amallari va huquqlar

Har bir amal bajarilganda botning huquqi qayta tekshiriladi. Guruh egasi va adminlariga admin amallari hech qachon qo'llanmaydi. user_id β€” bot ko'rgan psevdonim id.

AmalMetodKerakli huquq (ChatMember maydoni)
Boshqalarning xabarini o'chirish (xizmat xabarlari ham)deleteMessagecan_delete_messages; xabar ≀48 soat; ega/adminniki emas
Ban (chetlatish)banChatMembercan_restrict_members
Banni olishunbanChatMembercan_restrict_members
Jim qilish / cheklovni olishrestrictChatMembercan_restrict_members
Qadash / olib tashlashpinChatMessage, unpinChatMessagecan_pin_messages β€” doim admin huquqi (a'zolarga qadashga ruxsat bor guruhda ham)
Nom / tavsifsetChatTitle, setChatDescriptioncan_change_info
Hamma xabarlarni o'qishβ€”can_read_all_group_messages (faqat guruh egasi beradi)
O'z xabarini yuborish, tahrirlash, o'chirishsend*, edit*, deleteMessageHuquq kerak emas (a'zolar ruxsati amal qiladi)
Ma'lumotgetChat, getChatAdministrators, getChatMember, getChatMemberCountHuquq kerak emas (guruh a'zosi bo'lish yetarli)
ChiqishleaveChatβ€”

"A'zo qo'shish" huquqi botga berilishi mumkin, lekin unga mos metod yo'q. "Admin tayinlash" va "Qo'ng'iroqlarni boshqarish" botlarga berilmaydi (botlarda can_promote_members va can_manage_video_chats doim false; odam-adminlarda β€” haqiqiy qiymati). Huquq yetmasa: 400 Bad Request: not enough rights to …; egasi yoki adminga qo'llansa: can't remove chat owner / user is an administrator of the chat.

Limitlar

Har bir limit bir xil javob beradi: 429 Too Many Requests: retry after N va parameters.retry_after. Rad etilgan so'rov hech narsa qilmagan (xabar yuborilmagan, olgan tokenlari qaytarilgan) β€” retry_after soniyadan keyin uni qayta yuboring.

LimitQiymatOshsa
Bitta guruh yoki kanalga xabar (bot bo'yicha)20 / daqiqa (portlash 20)429 + retry_after. Guruhda yuborish, tahrirlash va qadash, kanalda post joylash hisoblanadi.
Bot xabarlari (barcha chatlar)30 / soniya429
Bot API so'rovlari50 / soniya (portlash 100)429
Shifrlash byudjeti (guruhda yuborish, tahrirlash, qadash)1 000 qurilma / soniya bot bo'yicha (portlash 3 000); 1 500 / soniya bot egasi bo'yicha, uning barcha botlari birga (portlash 4 000); 5 000 / soniya umumiy (portlash 10 000)429 + retry_after. Narx β€” qurilmalar soni: har bir odamning ≀10 ta qurilmasi + botning o'zi (50 kishi Γ— 2 telefon = 101).
Odam boshiga qurilmalarEng so'nggi faol 10 taEskiroq telefonlarda bot xabari qulflangan ko'rinadi
Bir vaqtdagi fayl uzatishlar3 ta bot bo'yicha, 16 ta umumiy β€” yuklab olish va yuklash alohida sanaladi429, retry_after: 1. Shaxsiy chatlar ham kiradi; guruh yoki kanalga file_id bilan qayta yuborish β€” yuklash.
Bitta guruhdagi botlar20 taBotni qo'shib bo'lmaydi
Bitta bot a'zo bo'lgan guruh va kanallar200 ta (birgalikda)Botni yana qo'shib bo'lmaydi
Guruhdagi shifrlangan faylni yuklab olish50 MB400 file is too big

Ko'p a'zo birdan qo'shilsa, har biriga alohida salom yozmang: bir nechta ismni bitta xabarga birlashtiring yoki salomni o'tkazib yuboring.

Guruhdagi fayllar

  • Qabul qilish. Bot faylni faqat xabar unga shifrlangan bo'lsa oladi (masalan, izohida buyruq bor rasm yoki "barcha xabarlar" rejimi): xabarda photo, document, video, audio, voice yoki video_note bo'ladi. Fayl kaliti faqat shu bot uchun saqlanadi va faqat faylni yuklagan a'zoning xabaridan olinadi (bot birinchi olgan kalitini saqlab qoladi: keyin boshqa birov uni almashtira olmaydi).
  • Yuklab olish. getFile va /file/bot<TOKEN>/… β€” shaxsiy chatdagidek. Server faylni bo'lakma-bo'lak ochib, oqim (stream) bilan beradi: chegara 50 MB, Content-Type doim application/octet-stream (turini mime_type yoki fayl nomidan aniqlang).
  • Yuborish. Multipart yoki file_id β€” shaxsiy chatdagi cheklovlar bilan (rasm ≀20 MB, boshqalar ≀50 MB, rasm qayta kodlanadi va EXIF olib tashlanadi). Server faylni tekshiradi, so'ng uchidan-uchiga shifrlab saqlaydi.
  • Guruhda olingan file_id'ni boshqa guruh yoki kanalga qayta yuborish mumkin, lekin shaxsiy chatga β€” yo'q (wrong file identifier). Guruh yoki kanalga file_id bilan qayta yuborishda server faylni qayta kodlaydi, shuning uchun u fayl uzatish limitiga yuklash sifatida kiradi.
  • Chiqarilgan bot o'sha guruh fayllariga kirishni yo'qotadi: kalitlari o'chiriladi, yuklab olishda a'zolik tekshiriladi: getFile β€” invalid file_id, yuklab olish β€” 404 file not found, qayta yuborish β€” wrong file identifier.
  • Bir vaqtda bot bo'yicha 3 ta yuklab olish va 3 ta yuklash (umumiy 16 tadan); oshsa β€” 429, retry_after: 1.

Kanallar

Kanalga botni egasi yoki "Admin tayinlash" huquqli admin qo'shadi. Kanalda bot doim admin; huquqlari: post joylash, boshqalarning postlarini tahrirlash, o'chirish, qadash, ma'lumotni o'zgartirish. Rasmiy kanallarga bot qo'shib bo'lmaydi. Kanallar uchidan-uchiga shifrlanmagan.

AmalMetodHuquq
Post joylashsendMessage, sendPhoto, sendDocument, sendVideo, sendAudiocan_post_messages; matn ≀4096, izoh ≀1024
Postni tahrirlasheditMessageTextO'z postlari β€” doim; boshqalarniki β€” can_edit_messages
Postni o'chirishdeleteMessageO'z postlari β€” doim; boshqalarniki β€” can_delete_messages
Izohni o'chirishdeleteMessage (izohlar chati id'si bilan)can_delete_messages
Qadash / olib tashlashpinChatMessage, unpinChatMessagecan_pin_messages
Nom / tavsifsetChatTitle, setChatDescriptioncan_change_info
Ma'lumotgetChat, getChatAdministrators, getChatMember, getChatMemberCountβ€”
  • Kontent filtri va shartlar. Bot postlari va tahrirlari odamlarning postlari kabi kontent filtridan o'tadi: rad etilsa β€” 400 Bad Request: <sabab>. Yangi post uchun bot egasi Zamin foydalanish shartlarini qabul qilgan bo'lishi kerak, aks holda 403 Forbidden: the bot's owner must accept Zamin's terms of use first.
  • Postlarda tugma yo'q. reply_markup bilan yuborish yoki editMessageReplyMarkup β†’ 400 Bad Request: channel posts can't have buttons.
  • Bot izoh yoza olmaydi. Izohlar chatiga yuborish β†’ 400 Bad Request: method is not available for this chat. Izohlarni o'qiy oladi va (huquq bilan) o'chira oladi.
  • Post oddiy kanal posti bo'lib chiqadi: obunachilar bildirishnoma oladi, javobda from yo'q, sender_chat β€” kanal.
  • Bot faqat admin bo'lib turgan vaqtda yangi postlar va izohlarni ko'radi.
  • getChatMember kanalda (va izohlar chatida) faqat botning o'zi, kanal egasi va adminlar uchun ishlaydi; boshqa har kim uchun β€” 400 Bad Request: user not found (Zamin botga kanal obunachilarini oshkor qilmaydi).
  • leaveChat izohlar chati id'si bilan β€” 400; kanaldan chiqish uchun kanal id'sini bering.
channel_post.py
import os
import requests

TOKEN = os.environ["ZAMIN_BOT_TOKEN"]
API = f"https://api.zamin.app/bot{TOKEN}"
CHANNEL = "@obhavo_news"  # ochiq kanal username'i yoki manfiy id (-100...)

post = requests.post(
    f"{API}/sendMessage",
    json={"chat_id": CHANNEL, "text": "Ertaga Toshkentda +18°C, yomg'ir 🌧"},
    timeout=15,
).json()
if not post["ok"]:
    raise SystemExit(post["description"])  # masalan: not enough rights to send messages to the chat
message_id = post["result"]["message_id"]

# Tahrirlash va qadash
requests.post(f"{API}/editMessageText", json={"chat_id": CHANNEL, "message_id": message_id, "text": "Ertaga Toshkentda +17°C, yomg'ir 🌧"}, timeout=15)
requests.post(f"{API}/pinChatMessage", json={"chat_id": CHANNEL, "message_id": message_id}, timeout=15)

Darslik: moderator bot

Rose uslubidagi to'liq moderator bot β€” yangi a'zolarni kutib olish, xizmat xabarlarini o'chirish, /warn (3 ta β€” ban), /mute 10m, /ban, /unban, flood'ga qarshi himoya va /rules: Moderator bot darsligi.

Telegram'dan farqlar

  • Guruhlar uchidan-uchiga shifrlangan; botga kelgan xabarlarni server va bot egasi o'qiy oladi (yuqorida).
  • "Barcha xabarlarni o'qish" uchun bot admin bo'lishi va guruh egasi bu huquqni aniq berishi kerak; /setprivacy o'zi buni yoqmaydi va faqat bot qo'shilgan paytda "suratga olinadi".
  • Boshqa odamlar xabariga reply_to_message mazmunsiz keladi; to'liq faqat botning o'z xabari. Havola ko'rinishi, forward manbasi va kontaktlar botga bormaydi.
  • Qadash uchun bot doim admin can_pin_messages huquqiga muhtoj.
  • Bot izoh yoza olmaydi, kanal postlarida tugma yo'q.
  • banChatMember doim muddatsiz; restrictChatMember'da faqat can_send_messages; unpinChatMessage doim joriy qadalgan xabarni oladi; getChatMember kanalda faqat bot, ega va adminlar uchun.
  • chat_member faqat qo'shilish, chiqish, chiqarish va ban'da.
  • /setjoingroups kanallarga ham taalluqli.
  • Guruhda reply klaviatura yo'q; inline rejim, forum mavzulari, ovozli chatlar va taklif havolasi metodlari yo'q.