Asosiy mazmunga o'tish
Socialift
Qo'llanma

Telegram guruh va kanalini API orqali boshqarish

Telegram guruh va kanalni API orqali ikki yo'l bilan boshqarasiz. Bot API'da admin bot taklif havolalari yaratadi, qo'shilish so'rovlarini tasdiqlaydi, a'zolarni cheklaydi va ban qiladi. Foydalanuvchi akkaunti (MTProto) bunga qo'shimcha ravishda a'zolar ro'yxati, slow mode, Telegram o'zi yuboradigan rejalashtirilgan postlar va kanal statistikasini beradi. Har bir amal uchun tegishli admin huquqi kerak.

Yangilangan:

Qisqacha: nimani nima bilan qilish mumkin

Kundalik moderatsiya uchun admin bot yetarli: taklif havolasi, qo'shilish so'rovlari, cheklash, ban, admin tayinlash, standart huquqlar va so'rovnomalar Bot API'da bor. Bot API'da yo'q narsalar — a'zolarning to'liq ro'yxati, slow mode yoqish, xabarni rejalashtirish va kanal statistikasi — guruhda admin bo'lgan foydalanuvchi akkaunti orqali MTProto bilan bajariladi.

Vazifa bo'yicha metodlar: bot va akkaunt

Socialift SDK'dagi metod nomlari: chapda Telegram (Bot API), o'ngda TelegramAccount (MTProto).

Vazifa bo'yicha metodlar: bot va akkaunt — Platformalar bo'yicha imkoniyatlar jadvali
VazifaBot API (Telegram)Akkaunt (TelegramAccount)
Qo'shimcha taklif havolasicreate_invite_link (name, expire_date, member_limit, creates_join_request)create_invite_link (title, expire_date, usage_limit, request_needed)
Asosiy havolaexport_invite_link — oldingisini bekor qiladiinvite_link
Havolani bekor qilishrevoke_invite_linkrevoke_invite_link
Qo'shilish so'rovlarichat_join_request update + approve_join_request / decline_join_requestjoin_requests + approve_join_request(..., approved=...)
Admin tayinlash va olishpromote_member, demote_member, set_admin_titlepromote, demote
Cheklash (mute)restrict_memberrestrict, mute_member
Chiqarish va banban_member, unban_memberkick, ban, unban
Barcha a'zolar uchun huquqlarset_chat_permissionsset_default_permissions
Slow modeMetod yo'qset_slowmode
So'rovnomasend_poll, stop_pollsend_poll
Rejalashtirilgan xabarYo'qsend_message(..., schedule=...), scheduled
A'zolarget_chat_administrators, get_chat_member, get_chat_member_countparticipants, admins, banned
Kanal statistikasiYo'qstats

Qo'shilish so'rovi bilan yopiq guruh: bot orqali sozlash

  1. Botni admin qiling

    Botga kamida «foydalanuvchilarni taklif qilish» (can_invite_users) huquqini bering — busiz bot so'rovlarni ko'rmaydi va tasdiqlay olmaydi.

  2. So'rovli havola yarating

    create_invite_link(..., creates_join_request=True). Bu rejimda member_limit berib bo'lmaydi — ikkisidan birini tanlang. Muddat uchun expire_date (unix vaqt) qo'shing.

  3. Update'larni qabul qiling

    Bot chat_join_request update'ini oladi. allowed_updates ro'yxatini qo'lda cheklagan bo'lsangiz, unga chat_join_request'ni qo'shing.

  4. Arizani tekshiring

    Update ichidagi user_chat_id orqali bot so'rov ko'rib chiqilguncha 5 daqiqa davomida foydalanuvchiga yoza oladi — masalan, qisqa savol berish uchun. CRM yoki to'lov bazangiz bilan solishtiring.

  5. Qaror qabul qiling

    approve_join_request yoki decline_join_request chaqiring. Keraksiz bo'lib qolgan havolani revoke_invite_link bilan bekor qiling.

Bot: muddatli havola va so'rovlarni tasdiqlash

join_requests.py
import time
from socialift import Telegram

async def make_link(bot: Telegram, chat: str) -> str:
    link = await bot.create_invite_link(
        chat, name="Sentabr aksiyasi",
        expire_date=int(time.time()) + 7 * 86400,  # 7 kun
        creates_join_request=True,                  # member_limit bilan birga emas
    )
    return link["invite_link"]

async def on_update(bot: Telegram, update: dict) -> None:
    req = update.get("chat_join_request")
    if not req:
        return
    chat_id, user_id = req["chat"]["id"], req["from"]["id"]
    if await is_paid_customer(user_id):  # sizning tekshiruvingiz
        await bot.approve_join_request(chat_id, user_id)
    else:
        await bot.decline_join_request(chat_id, user_id)

Havola nomi 0–32 belgi. member_limit (1–99999) — havola orqali kirib, bir vaqtda guruhda bo'la oladigan a'zolar soni.

export_invite_link asosiy havolani qayta yaratadi va oldingisini bekor qiladi — reklamada ishlatilayotgan havola to'satdan o'lib qolmasligi uchun kampaniyalarga create_invite_link bilan alohida havola bering. Bot boshqa adminlar yaratgan havolalar bilan ishlay olmaydi.

Bot: cheklash, ban va moderator tayinlash

moderation.py
import time

async def moderate(bot, chat_id: int, spammer_id: int, moderator_id: int) -> None:
    # 1 soatga yozishni taqiqlash (faqat supergroup'da)
    await bot.restrict_member(chat_id, spammer_id, {"can_send_messages": False},
                              until_date=int(time.time()) + 3600)

    # Butunlay ban: until_date berilmasa — abadiy
    await bot.ban_member(chat_id, spammer_id)

    # Moderator: bot faqat o'zida bor huquqlarni bera oladi
    await bot.promote_member(chat_id, moderator_id, can_delete_messages=True,
                             can_restrict_members=True, can_pin_messages=True)
    await bot.set_admin_title(chat_id, moderator_id, "Moderator")

until_date hozirgi vaqtdan 30 soniyadan kam yoki 366 kundan ko'p bo'lsa, Telegram cheklov yoki ban'ni abadiy deb hisoblaydi.

unban_member standart holatda only_if_banned=True bilan chaqiriladi: aks holda Telegram guruhda turgan a'zoni ham chiqarib yuboradi. Admin'likdan olish uchun demote_member (Bot API'da barcha huquqlarni False qilish bilan bir xil).

Akkaunt: slow mode, so'rovnoma va rejalashtirilgan post

Bu amallar uchun akkaunt guruh yoki kanalda tegishli huquqli admin bo'lishi kerak.

account_admin.py
from datetime import datetime, timedelta, timezone
from socialift import TelegramAccount

async def weekly_setup() -> None:
    async with TelegramAccount.from_env() as tg:
        await tg.set_slowmode("@mening_guruhim", 30)  # 0 — o'chirish
        await tg.send_poll("@mening_guruhim", "Vebinar qaysi kuni bo'lsin?",
                           ["Seshanba", "Payshanba"])

        when = datetime.now(timezone.utc) + timedelta(hours=18)
        await tg.send_message("@mening_kanalim", "Ertalabki dayjest", schedule=when)
        queue = await tg.scheduled("@mening_kanalim")

Rejalashtirilgan xabar Telegram serveridagi navbatga tushadi va belgilangan vaqtda Telegram tomonidan yuboriladi — ilovangiz o'sha paytda ishlab turishi shart emas. Har bir chatning o'z navbati bor.

Slow mode faqat supergroup'larda ishlaydi va Telegram faqat belgilangan oraliqlarni qabul qiladi; noto'g'ri qiymatga SECONDS_INVALID qaytaradi. Chatni boshqarish huquqi bor adminlarga slow mode ta'sir qilmaydi. SDK'dagi promote() standart holatda ko'p huquq beradi (add_admins bundan mustasno) — keraksizlarini False qiling.

A'zolar ro'yxati: nima mumkin, nima mumkin emas

Bot API guruh a'zolarining to'liq ro'yxatini bermaydi. Bot faqat adminlar ro'yxatini (get_chat_administrators), bitta foydalanuvchi holatini (get_chat_member, ishonchli natija uchun bot admin bo'lishi kerak) va a'zolar sonini oladi. A'zolar kirib-chiqishini kuzatish uchun bot admin bo'lishi va allowed_updates ga chat_member'ni aniq qo'shishi kerak — standart holatda bu update kelmaydi.

Akkaunt orqali participants() ro'yxatni qaytaradi, lekin cheklovlar bor: kanal obunachilarini faqat adminlar ko'radi, supergroup adminlari a'zolar ro'yxatini yashirishi mumkin, juda katta guruhlarda esa to'liq ro'yxat kafolatlanmaydi. aggressive=True ko'proq yig'adi, lekin so'rovlar ko'payib FLOOD_WAIT xavfi oshadi.

Hajm bo'yicha ma'lumot uchun: supergroup 200 000 gacha a'zoni qo'llab-quvvatlaydi, eski oddiy guruhlar esa ko'pi bilan 200 a'zo. Kanal obunachilari soni cheklanmagan.

Kanal statistikasi

Telegram batafsil statistikani faqat ma'lum hajmdan katta kanal adminlariga beradi. Aniq chegara server sozlamasi — raqamni kodga yozmang, can_view_stats bayrog'ini tekshiring.

channel_stats.py
async def channel_report(tg, channel: str) -> dict | None:
    full = await tg.chat_full(channel)
    if not full.full_chat.can_view_stats:
        return None  # kanal hali kichik yoki huquq yetarli emas
    stats = await tg.stats(channel)
    return {
        "followers": stats.followers.current,
        "views_per_post": stats.views_per_post.current,
    }

Javobda obunachilar dinamikasi, post boshiga ko'rishlar, ulashishlar va reaksiyalar hamda bildirishnomasi yoqilgan obunachilar ulushi kabi ko'rsatkichlar bor.

Etika va Telegram anti-spam qoidalari

Guruh va kanal API'si auditoriya bilan ishlash uchun, spam uchun emas. Qoidabuzarlik akkauntni abadiy yo'qotishga olib kelishi mumkin.

  • Notanish odamlarni guruhga ommaviy qo'shmang. Foydalanuvchi maxfiylik sozlamasida taqiqlagan bo'lsa Telegram USER_PRIVACY_RESTRICTED qaytaradi — taklif havolasini faqat so'raganlarga yuboring.
  • Sotib olingan yoki boshqa guruhlardan yig'ilgan a'zolar ro'yxatiga xabar yubormang va ularni taklif qilmang.
  • Obunachilar yoki ko'rishlarni soxtalashtirmang: Telegram bunday foydalanish uchun abadiy ban beradi.
  • Akkaunt egasi bilmagan va rozi bo'lmagan amalni avtomatlashtirmang — bu API Terms of Service'ga zid.
  • Limitlarga rioya qiling: bot guruhga daqiqasiga 20 tadan ko'p xabar yubora olmaydi, akkauntda FLOOD_WAIT ko'rsatgan vaqtni kuting.
  • Ochiq qo'shilish o'rniga so'rovli havoladan foydalaning — bu spam botlarni ham, tasodifiy odamlarni ham filtrlaydi.

← Blogga qaytish

Ko'p so'raladigan savollar

Bot orqali guruhning barcha a'zolarini olish mumkinmi?

Yo'q. Bot API faqat adminlar ro'yxati, bitta a'zo holati va a'zolar sonini beradi. To'liq ro'yxat uchun guruhda admin bo'lgan akkaunt va MTProto kerak, u yerda ham kanal obunachilari faqat adminlarga ko'rinadi.

Taklif havolasiga ham a'zo limiti, ham qo'shilish so'rovi qo'ysa bo'ladimi?

Bot API'da — yo'q: creates_join_request=True bo'lsa member_limit berib bo'lmaydi. Soni cheklangan ochiq havola yoki so'rovli havoladan birini tanlang; muddat (expire_date) esa ikkalasiga ham qo'shiladi.

Bot slow mode'ni yoqa oladimi?

Bot API'da slow mode'ni o'rnatadigan metod yo'q — bot faqat chat ma'lumotidagi joriy qiymatni o'qiy oladi. Slow mode'ni admin akkaunt orqali MTProto bilan yoqasiz: SDK'da set_slowmode("@guruh", 30), o'chirish uchun 0.

exportChatInviteLink nega eski havolani o'chirib yubordi?

Bu metod botning asosiy havolasini qayta yaratadi va oldingisini bekor qiladi. Bir nechta faol havola kerak bo'lsa, create_invite_link ishlating: u qo'shimcha havola yaratadi va mavjudlariga tegmaydi.

Kanal statistikasi nega kelmayapti?

Telegram statistikani faqat ma'lum hajmdan katta kanallar adminlariga beradi, chegara esa server tomonida belgilanadi. chat_full() javobidagi can_view_stats bayrog'ini tekshiring va akkaunt kanal admini ekaniga ishonch hosil qiling.

Bot kanalga post joylay oladimi?

Ha, agar bot kanal admini bo'lsa va post yozish huquqi bo'lsa. Chat ID sifatida kanalning @username'ini berish mumkin. Postni belgilangan vaqtga rejalashtirish esa Bot API'da yo'q — buning uchun akkauntdagi send_message(..., schedule=...) kerak.

Manbalar

  1. Telegram Bot API
  2. Telegram: Invite links and join requests
  3. Telegram: Channels, supergroups and basic groups
  4. Telegram: Scheduled messages
  5. Telegram: Channel statistics
  6. Telegram: Creating your Telegram Application

Bog'liq sahifalar