Telegram Botu Kullanıcılarına Toplu Mesaj Göndermek (Broadcast)

kusha · 03 Ağustos 2026 · 6 dk okuma

Bir Telegram botunun kullanıcılarına toplu duyuru göndermek istediğinizde, önce kimlerin botu kullandığını bilmeniz gerekir. Bu derste, botla etkileşime giren her kullanıcının kimliğini bir veritabanında toplamayı ve bir duyuru kanalına attığınız mesajı otomatik olarak tüm bu kullanıcılara iletmeyi göreceğiz.

Kullanıcı Bilgisini Yakalamak

def kullanici_id_kaydet(user_id, ad, soyad, kullanici_adi):
    baglanti = sqlite3.connect("kullanicilar.db")
    cursor = baglanti.cursor()
    cursor.execute(
        "CREATE TABLE IF NOT EXISTS kullanicilar "
        "(user_id INTEGER, ad TEXT, soyad TEXT, kullanici_adi TEXT)"
    )
    cursor.execute(
        "INSERT INTO kullanicilar VALUES (?, ?, ?, ?)",
        (user_id, ad, soyad, kullanici_adi),
    )
    baglanti.commit()
    baglanti.close()

@bot.message_handler(commands=["start"])
def start_command(message):
    kullanici = message.from_user
    kullanici_id_kaydet(kullanici.id, kullanici.first_name, kullanici.last_name, kullanici.username)
    bot.reply_to(message, "Botumuza hoş geldiniz!")

Her kullanıcı botunuza /start komutuyla ilk kez ulaştığında, kimliği otomatik olarak veritabanına eklenir — bu, ekstra bir işlem gerektirmeden, kullanıcılar botunuzu kullandıkça kendiliğinden büyüyen bir liste oluşturur.

Tüm Kullanıcı ID'lerini Çekmek

def tum_kullanici_idlerini_getir():
    baglanti = sqlite3.connect("kullanicilar.db")
    cursor = baglanti.cursor()
    cursor.execute("SELECT user_id FROM kullanicilar")
    idler = [satir[0] for satir in cursor.fetchall()]
    baglanti.close()
    return idler

Bir Kanaldan Gelen Mesajı Yakalayıp Yaymak (Broadcast)

Botunuzu bir duyuru kanalına ekleyip, o kanala attığınız her mesajın otomatik olarak tüm kullanıcılara iletilmesini sağlayabilirsiniz:

DUYURU_KANAL_ADI = "kusha_duyuru_kanali"

@bot.channel_post_handler(content_types=["text"])
def kanaldan_yayin_yap(message):
    if message.chat.username != DUYURU_KANAL_ADI:
        return  # sadece belirlediğiniz kanaldan gelen mesajları işle

    for user_id in tum_kullanici_idlerini_getir():
        try:
            bot.forward_message(user_id, message.chat.id, message.message_id)
        except Exception:
            continue  # kullanıcı botu engellemiş olabilir, sıradaki kullanıcıya geç
  • @bot.channel_post_handler, mesaj işleyicisinden (message_handler) farklı olarak, özel olarak kanal gönderilerini yakalar.
  • if message.chat.username != DUYURU_KANAL_ADI: return, botun yanlışlıkla farklı bir kanala eklenip oradaki mesajları da yaymasını önler — sadece belirlediğiniz duyuru kanalından gelen mesajları işler.
  • try/except ile sarmalamak kritiktir: bazı kullanıcılar zaman içinde botu engellemiş olabilir; bu durumda mesaj gönderme işlemi hata fırlatır — bu hatayı yakalayıp bir sonraki kullanıcıya geçmezseniz, tek bir engellenmiş kullanıcı yüzünden tüm yayın süreci durur.

Bu Verinin Hassasiyeti

Kullanıcı ID'leri ve isimleri kişisel veri sayılır — bu bilgileri yalnızca botunuzun işlevi için gerektiği kadar saklayın ve üçüncü taraflarla paylaşmayın.

Sırada Ne Var?

Sırada, bir otomasyon aracının "insan gibi" davranmasını sağlamak için rastgele koordinatlara tıklatma tekniğini göreceğiz.