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 | Bot API (Telegram) | Akkaunt (TelegramAccount) |
|---|---|---|
| Qo'shimcha taklif havolasi | create_invite_link (name, expire_date, member_limit, creates_join_request) | create_invite_link (title, expire_date, usage_limit, request_needed) |
| Asosiy havola | export_invite_link — oldingisini bekor qiladi | invite_link |
| Havolani bekor qilish | revoke_invite_link | revoke_invite_link |
| Qo'shilish so'rovlari | chat_join_request update + approve_join_request / decline_join_request | join_requests + approve_join_request(..., approved=...) |
| Admin tayinlash va olish | promote_member, demote_member, set_admin_title | promote, demote |
| Cheklash (mute) | restrict_member | restrict, mute_member |
| Chiqarish va ban | ban_member, unban_member | kick, ban, unban |
| Barcha a'zolar uchun huquqlar | set_chat_permissions | set_default_permissions |
| Slow mode | Metod yo'q | set_slowmode |
| So'rovnoma | send_poll, stop_poll | send_poll |
| Rejalashtirilgan xabar | Yo'q | send_message(..., schedule=...), scheduled |
| A'zolar | get_chat_administrators, get_chat_member, get_chat_member_count | participants, admins, banned |
| Kanal statistikasi | Yo'q | stats |
Qo'shilish so'rovi bilan yopiq guruh: bot orqali sozlash
Botni admin qiling
Botga kamida «foydalanuvchilarni taklif qilish» (can_invite_users) huquqini bering — busiz bot so'rovlarni ko'rmaydi va tasdiqlay olmaydi.
So'rovli havola yarating
create_invite_link(..., creates_join_request=True). Bu rejimdamember_limitberib bo'lmaydi — ikkisidan birini tanlang. Muddat uchunexpire_date(unix vaqt) qo'shing.Update'larni qabul qiling
Bot
chat_join_requestupdate'ini oladi.allowed_updatesro'yxatini qo'lda cheklagan bo'lsangiz, unga chat_join_request'ni qo'shing.Arizani tekshiring
Update ichidagi
user_chat_idorqali bot so'rov ko'rib chiqilguncha 5 daqiqa davomida foydalanuvchiga yoza oladi — masalan, qisqa savol berish uchun. CRM yoki to'lov bazangiz bilan solishtiring.Qaror qabul qiling
approve_join_requestyokidecline_join_requestchaqiring. Keraksiz bo'lib qolgan havolanirevoke_invite_linkbilan bekor qiling.
Bot: muddatli havola va so'rovlarni tasdiqlash
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
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.
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.
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.
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.