Telegram Bot Yardımı

urban

Gold Üye
Katılım
6 Ocak 2025
Mesajlar
125
Beğeniler
22
İletişim
Telegram botuma bir dosya yükleyeceğim bu dosyayı alabilmeleri için kanallara katılım şartı eklemek istiyorum bunu nasıl yapabilirim?

Yok mu yardımcı olabilecek bir babayiğit ?
 
Son düzenleme:
python örnek kod ;

Python:
async def check_channel_membership(update: Update, context: ContextTypes.DEFAULT_TYPE) -> bool:
    user_id = update.effective_user.id
   
    for channel in data_store.data['required_channels']:
        try:
            member = await context.bot.get_chat_member(chat_id=channel, user_id=user_id)
            if member.status not in ['member', 'administrator', 'creator']:
                channels_text = '\n'.join(data_store.data['required_channels'])
                await update.message.reply_text(
                    f"Dosya yükleyebilmek için lütfen aşağıdaki kanallara katılın:\n\n"
                    f"{channels_text}\n\n"
                    "Katıldıktan sonra tekrar deneyiniz."
                )
                return False
        except Exception as e:
            print(f"Error checking membership for {channel}: {e}")
            continue
   
    return True

kendi koduna da şunu ekleyeceksin ;

Python:
async def handle_document(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    user_data = data_store.get_user_data(user_id)
   
    if not user_data.get('upload_allowed', False):
        await update.message.reply_text(
            "BLABLABLABLABLABLA. "
            "Menüyü görmek için /start komutunu kullanabilirsiniz."
        )
        return

    # ÜYELİK KONTROLÜ YAPILAN ALAN BURASI
    if not await check_channel_membership(update, context):
        return

# KANAL EKLEME
Python:
async def add_required_channel(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_admin(update.message.from_user.username):
        await update.message.reply_text("Bu komutu kullanma yetkiniz yok.")
        return


    if not context.args:
        await update.message.reply_text("Kullanım: /add_channel @channel_username")
        return


    channel = context.args[0]
    if not channel.startswith('@'):
        channel = '@' + channel


    if channel not in data_store.data['required_channels']:
        data_store.data['required_channels'].append(channel)
        data_store.save_data()
        await update.message.reply_text(f"{channel} zorunlu kanallar listesine eklendi.")
    else:
        await update.message.reply_text(f"{channel} zaten zorunlu kanallar listesinde.")

# KANAL SİLME
Python:
async def remove_required_channel(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_admin(update.message.from_user.username):
        await update.message.reply_text("Bu komutu kullanma yetkiniz yok.")
        return


    if not context.args:
        await update.message.reply_text("Kullanım: /remove_channel @channel_username")
        return


    channel = context.args[0]
    if not channel.startswith('@'):
        channel = '@' + channel


    if channel in data_store.data['required_channels']:
        data_store.data['required_channels'].remove(channel)
        data_store.save_data()
        await update.message.reply_text(f"{channel} zorunlu kanallar listesinden kaldırıldı.")
    else:
        await update.message.reply_text(f"{channel} zorunlu kanallar listesinde bulunamadı.")

# KANAL LİSTESİ
Python:
async def list_required_channels(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_admin(update.message.from_user.username):
        await update.message.reply_text("Bu komutu kullanma yetkiniz yok.")
        return


    channels = data_store.data['required_channels']
    if channels:
        channels_text = '\n'.join(channels)
        await update.message.reply_text(f"Zorunlu kanallar:\n\n{channels_text}")
    else:
        await update.message.reply_text("Zorunlu kanal listesi boş.")

bu komutlar için main'e eklenecek handle'lar ;
Kod:
application.add_handler(CommandHandler("add_channel", add_required_channel))
application.add_handler(CommandHandler("remove_channel", remove_required_channel))
application.add_handler(CommandHandler("list_channels", list_required_channels))
 
python örnek kod ;

Python:
async def check_channel_membership(update: Update, context: ContextTypes.DEFAULT_TYPE) -> bool:
    user_id = update.effective_user.id
  
    for channel in data_store.data['required_channels']:
        try:
            member = await context.bot.get_chat_member(chat_id=channel, user_id=user_id)
            if member.status not in ['member', 'administrator', 'creator']:
                channels_text = '\n'.join(data_store.data['required_channels'])
                await update.message.reply_text(
                    f"Dosya yükleyebilmek için lütfen aşağıdaki kanallara katılın:\n\n"
                    f"{channels_text}\n\n"
                    "Katıldıktan sonra tekrar deneyiniz."
                )
                return False
        except Exception as e:
            print(f"Error checking membership for {channel}: {e}")
            continue
  
    return True

kendi koduna da şunu ekleyeceksin ;

Python:
async def handle_document(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    user_data = data_store.get_user_data(user_id)
  
    if not user_data.get('upload_allowed', False):
        await update.message.reply_text(
            "BLABLABLABLABLABLA. "
            "Menüyü görmek için /start komutunu kullanabilirsiniz."
        )
        return

    # ÜYELİK KONTROLÜ YAPILAN ALAN BURASI
    if not await check_channel_membership(update, context):
        return

# KANAL EKLEME
Python:
async def add_required_channel(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_admin(update.message.from_user.username):
        await update.message.reply_text("Bu komutu kullanma yetkiniz yok.")
        return


    if not context.args:
        await update.message.reply_text("Kullanım: /add_channel @channel_username")
        return


    channel = context.args[0]
    if not channel.startswith('@'):
        channel = '@' + channel


    if channel not in data_store.data['required_channels']:
        data_store.data['required_channels'].append(channel)
        data_store.save_data()
        await update.message.reply_text(f"{channel} zorunlu kanallar listesine eklendi.")
    else:
        await update.message.reply_text(f"{channel} zaten zorunlu kanallar listesinde.")

# KANAL SİLME
Python:
async def remove_required_channel(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_admin(update.message.from_user.username):
        await update.message.reply_text("Bu komutu kullanma yetkiniz yok.")
        return


    if not context.args:
        await update.message.reply_text("Kullanım: /remove_channel @channel_username")
        return


    channel = context.args[0]
    if not channel.startswith('@'):
        channel = '@' + channel


    if channel in data_store.data['required_channels']:
        data_store.data['required_channels'].remove(channel)
        data_store.save_data()
        await update.message.reply_text(f"{channel} zorunlu kanallar listesinden kaldırıldı.")
    else:
        await update.message.reply_text(f"{channel} zorunlu kanallar listesinde bulunamadı.")

# KANAL LİSTESİ
Python:
async def list_required_channels(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not is_admin(update.message.from_user.username):
        await update.message.reply_text("Bu komutu kullanma yetkiniz yok.")
        return


    channels = data_store.data['required_channels']
    if channels:
        channels_text = '\n'.join(channels)
        await update.message.reply_text(f"Zorunlu kanallar:\n\n{channels_text}")
    else:
        await update.message.reply_text("Zorunlu kanal listesi boş.")

bu komutlar için main'e eklenecek handle'lar ;
Kod:
application.add_handler(CommandHandler("add_channel", add_required_channel))
application.add_handler(CommandHandler("remove_channel", remove_required_channel))
application.add_handler(CommandHandler("list_channels", list_required_channels))
hocam çok teşekkür ederim ben chatgpt'ye yaptırdım ama sizin kodunuzu da deneyeceğim . Tekrardan çok teşekkür ederim.
 

  Şuanda konuyu görüntüleyen kullanıcılar


Üst Alt