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/exceptbloğ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 birFalsedö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.