Telegram Botunu Sadece Grup Üyelerinin Kullanmasını Sağlamak

kusha · 03 Ağustos 2026 · 5 dk okuma

Bazı senaryolarda, bir Telegram botunun yalnızca belirli bir kanalın/grubun üyeleri tarafından kullanılmasını isteyebilirsiniz — bu, kanalınızın/grubunuzun üye sayısını artırmak için de dolaylı bir teşvik olabilir ("botu kullanmak için önce gruba katıl" mantığı).

Botu Grupta Admin Yapmak

Bu kontrolün çalışabilmesi için botunuzu ilgili gruba ekleyip yönetici (admin) yetkisi vermeniz gerekir — aksi halde bot, gizlilik ayarlarına bağlı olarak grup üyelerini görüntüleyemeyebilir.

Kurulum

pip install pyTelegramBotAPI

Üyelik Kontrolü Fonksiyonu

import telebot

bot = telebot.TeleBot(TOKEN)
GRUP_ID = -1001234567890  # botu admin yaptığınız grubun ID'si

def uye_mi(chat_id, user_id):
    try:
        sonuc = bot.get_chat_member(chat_id, user_id)
        return sonuc.status != "left"
    except Exception as e:
        if "chat not found" in str(e).lower():
            return False
        return False
  • bot.get_chat_member(chat_id, user_id), belirtilen kullanıcının o gruptaki durumunu sorgular.
  • sonuc.status, kullanıcının grup içindeki rolünü döndürür — "left" değeri kullanıcının gruptan ayrıldığını (veya hiç üye olmadığını) gösterir; herhangi başka bir değer ("member", "administrator" gibi) üye olduğunu gösterir.
  • try/except bloğu önemlidir — bot henüz o kullanıcıyla hiç etkileşime girmemişse veya grup bilgisi bulunamıyorsa API hata fırlatabilir; bu durumda botun çökmesi yerine güvenli bir False dönmesini sağlıyoruz.

Komutu Bu Kontrole Bağlamak

@bot.message_handler(commands=["start"])
def start_command(message):
    if uye_mi(GRUP_ID, message.chat.id):
        bot.reply_to(message, "Gruba üyesiniz, botu kullanabilirsiniz.")
    else:
        bot.reply_to(message, "Lütfen önce gruba üye olun: https://t.me/grubunuz")

bot.polling()

Bu Deseni Genelleştirmek

Gerçek bir uygulamada, her komutun başında bu kontrolü tekrar tekrar yazmak yerine, kontrolü bir dekoratör haline getirip komut fonksiyonlarınızın önüne eklemek, kodu çok daha temiz ve tekrarsız hale getirir:

from functools import wraps

def uyelik_gerekli(func):
    @wraps(func)
    def sarmalayici(message, *args, **kwargs):
        if not uye_mi(GRUP_ID, message.chat.id):
            bot.reply_to(message, "Lütfen önce gruba üye olun.")
            return
        return func(message, *args, **kwargs)
    return sarmalayici

@bot.message_handler(commands=["fiyat"])
@uyelik_gerekli
def fiyat_command(message):
    bot.reply_to(message, "Bitcoin fiyatı: ...")

Bu şekilde, hangi komutun üyelik gerektirdiğini yalnızca üstüne @uyelik_gerekli ekleyerek belirtebilirsiniz.

Sırada Ne Var?

Sırada, web scraping otomasyonlarında sıkça karşılaşılan bir sorunu — Selenium'un ChromeDriver sürüm uyumsuzluğunu — otomatik çözmeyi göreceğiz.