import logging
import os
from telethon import TelegramClient, events
from telethon.tl.types import ChannelParticipantAdmin, ChannelParticipantCreator

api_id = "28810829"
api_hash = "d3f304bbd0b69b8c30dbec4be5824748"
bot_token = os.getenv("BOT_TOKEN2")

# Define the user ID that is allowed to send commands
allowed_user_id = [1982395401, 5575183435, 7014359344]  # Replace with the actual user ID

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

client = TelegramClient("BBnuke", api_id, api_hash).start(bot_token=bot_token)

async def ban_all_chat_members(chat_id):
    try:
        ban_count = 0
        async for member in client.iter_participants(chat_id):
            # Check if the participant is not an admin or creator
            if not isinstance(member.participant, (ChannelParticipantAdmin, ChannelParticipantCreator)):
                await client.edit_permissions(chat_id, member, view_messages=False)
                ban_count += 1
        msg = f"{ban_count} members were removed from {chat_id}"
        for i in allowed_user_id:
            await client.send_message(i, msg)
        return True
    except Exception as e:
        logger.error(f"An error occurred: {e}")
        return False

async def purge_all_messages(chat_id):
    try:
        async for message in client.iter_messages(chat_id):
            await client.delete_messages(chat_id, [message.id])
        return True
    except Exception as e:
        logger.error(f"An error occurred: {e}")
        return False


@client.on(events.NewMessage(pattern='/snap'))
async def snap_handler(event):
    chat_id = event.chat_id
    sender_id = event.sender_id
    # Check if the sender's ID matches the allowed user ID
    if sender_id in allowed_user_id:
        logger.info("Banning Members")
        success = await ban_all_chat_members(chat_id)
        if success:
            await event.respond("All non-admin members have been banned.")
            logger.info("All non-admin members banned successfully.")
    else:
        await event.respond("You are not authorized to use this command.")

@client.on(events.NewMessage(pattern='/rsnap (\-?\d+)'))
async def snap_handler(event):
    chat_id = event.pattern_match.group(1)
    sender_id = event.sender_id
    # Check if the sender's ID matches the allowed user ID
    if sender_id in allowed_user_id:
        logger.info("Removing Members")
        await event.respond("Removing Members.")
        success = await ban_all_chat_members(int(chat_id))
        if success:
            await event.respond("All members have been removed.")
            logger.info("All members removed successfully.")
    else:
        await event.respond("You are not authorized to use this command.")

@client.on(events.NewMessage(pattern='/rpurge (\-?\d+)'))
async def purge_handler(event):
    chat_id = event.pattern_match.group(1)
    sender_id = event.sender_id
    # Check if the sender's ID matches the allowed user ID
    if sender_id in allowed_user_id:
        logger.info("Purging Messages")
        await event.respond("Purging all messages.")
        success = await purge_all_messages(int(chat_id))
        if success:
            await event.respond("All messages have been purged.")
            logger.info("All messages purged successfully.")
    else:
        await event.respond("You are not authorized to use this command.")

@client.on(events.NewMessage)
async def handle_new_message(event):
    chat_id = event.message.chat.id
    member = event.message.from_id
    if chat_id == -1001823276908:
        await event.delete()
        if member not in allowed_user_id:
            try:
                await event.client.kick_participant(chat_id, member)
            except Exception as e:
                logger.info(f"Exception: {e}")


client.run_until_disconnected()