import os
import asyncio
from pyrogram import Client, filters
from pyrogram.types import Message
from pyrogram import enums
from pyrogram.enums import ChatMemberStatus
from pyrogram.errors import FloodWait
from DragMusic import app
from time import time
import asyncio
from DragMusic.utils.extraction import extract_user
# Define a dictionary to track the last message timestamp for each user
user_last_message_time = {}
user_command_count = {}
# Define the threshold for command spamming (e.g., 20 commands within 60 seconds)
SPAM_THRESHOLD = 2
SPAM_WINDOW_SECONDS = 5
# ------------------------------------------------------------------------------- #
chatQueue = []
stopProcess = False
# ------------------------------------------------------------------------------- #
@app.on_message(filters.command(["zombies", "Deletedaccounts"]))
async def remove(client, message):
global stopProcess
try:
try:
sender = await app.get_chat_member(message.chat.id, message.from_user.id)
has_permissions = sender.privileges
except:
has_permissions = message.sender_chat
if has_permissions:
bot = await app.get_chat_member(message.chat.id, "self")
if bot.status == ChatMemberStatus.MEMBER:
await message.reply(
"➠ | ɪ ɴᴇᴇᴅ ᴀᴅᴍɪɴ ᴘᴇʀᴍɪssɪᴏɴs ᴛᴏ ʀᴇᴍᴏᴠᴇ ᴅᴇʟᴇᴛᴇᴅ ᴀᴄᴄᴏᴜɴᴛs."
)
else:
if len(chatQueue) > 30:
await message.reply(
"➠ | ɪ'ᴍ ᴀʟʀᴇᴀᴅʏ ᴡᴏʀᴋɪɴɢ ᴏɴ ᴍʏ ᴍᴀxɪᴍᴜᴍ ɴᴜᴍʙᴇʀ ᴏғ 30 ᴄʜᴀᴛs ᴀᴛ ᴛʜᴇ ᴍᴏᴍᴇɴᴛ. ᴘʟᴇᴀsᴇ ᴛʀʏ ᴀɢᴀɪɴ sʜᴏʀᴛʟʏ."
)
else:
if message.chat.id in chatQueue:
await message.reply(
"➠ | ᴛʜᴇʀᴇ's ᴀʟʀᴇᴀᴅʏ ᴀɴ ᴏɴɢɪɪɴɢ ᴘʀᴏᴄᴇss ɪɴ ᴛʜɪs ᴄʜᴀᴛ. ᴘʟᴇᴀsᴇ [ /stop ] ᴛᴏ sᴛᴀʀᴛ ᴀ ɴᴇᴡ ᴏɴᴇ."
)
else:
chatQueue.append(message.chat.id)
deletedList = []
async for member in app.get_chat_members(message.chat.id):
if member.user.is_deleted == True:
deletedList.append(member.user)
else:
pass
lenDeletedList = len(deletedList)
if lenDeletedList == 0:
await message.reply("⟳ | ɴᴏ ᴅᴇʟᴇᴛᴇᴅ ᴀᴄᴄᴏᴜɴᴛs ɪɴ ᴛʜɪs ᴄʜᴀᴛ.")
chatQueue.remove(message.chat.id)
else:
k = 0
processTime = lenDeletedList * 1
temp = await app.send_message(
message.chat.id,
f"🧭 | ᴛᴏᴛᴀʟ ᴏғ {lenDeletedList} ᴅᴇʟᴇᴛᴇᴅ ᴀᴄᴄᴏᴜɴᴛs ʜᴀs ʙᴇᴇɴ ᴅᴇᴛᴇᴄᴛᴇᴅ.\n🥀 | ᴇsᴛɪᴍᴀᴛᴇᴅ ᴛɪᴍᴇ: {processTime} sᴇᴄᴏɴᴅs ғʀᴏᴍ ɴᴏᴡ.",
)
if stopProcess:
stopProcess = False
while len(deletedList) > 0 and not stopProcess:
deletedAccount = deletedList.pop(0)
try:
await app.ban_chat_member(
message.chat.id, deletedAccount.id
)
except Exception:
pass
k += 1
await asyncio.sleep(10)
if k == lenDeletedList:
await message.reply(
f"✅ | sᴜᴄᴄᴇssғᴜʟʟʏ ʀᴇᴍᴏᴠᴇᴅ ᴀʟʟ ᴅᴇʟᴇᴛᴇᴅ ᴀᴄᴄɪᴜɴᴛs ғʀᴏᴍ ᴛʜɪs ᴄʜᴀᴛ."
)
await temp.delete()
else:
await message.reply(
f"✅ | sᴜᴄᴄᴇssғᴜʟʟʏ ʀᴇᴍᴏᴠᴇᴅ {k} ᴅᴇʟᴇᴛᴇᴅ ᴀᴄᴄᴏᴜɴᴛs ғʀᴏᴍ ᴛʜɪs ᴄʜᴀᴛ."
)
await temp.delete()
chatQueue.remove(message.chat.id)
else:
await message.reply(
"👮🏻 | sᴏʀʀʏ, ᴏɴʟʏ ᴀᴅᴍɪɴ ᴄᴀɴ ᴇxᴇᴄᴜᴛᴇ ᴛʜɪs ᴄᴏᴍᴍᴀɴᴅ."
)
except FloodWait as e:
await asyncio.sleep(e.value)
# ------------------------------------------------------------------------------- #
@app.on_message(filters.command(["admins", "staff"]))
async def admins(client, message):
try:
adminList = []
ownerList = []
async for admin in app.get_chat_members(
message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS
):
if admin.privileges.is_Dragmous == False:
if admin.user.is_bot == True:
pass
elif admin.status == ChatMemberStatus.OWNER:
ownerList.append(admin.user)
else:
adminList.append(admin.user)
else:
pass
lenAdminList = len(ownerList) + len(adminList)
text2 = f"**ɢʀᴏᴜᴘ sᴛᴀғғ - {message.chat.title}**\n\n"
try:
owner = ownerList[0]
if owner.username == None:
text2 += f"👑 ᴏᴡɴᴇʀ\n└ {owner.mention}\n\n👮🏻 ᴀᴅᴍɪɴs\n"
else:
text2 += f"👑 ᴏᴡɴᴇʀ\n└ @{owner.username}\n\n👮🏻 ᴀᴅᴍɪɴs\n"
except:
text2 += f"👑 ᴏᴡɴᴇʀ\n└ Hidden\n\n👮🏻 ᴀᴅᴍɪɴs\n"
if len(adminList) == 0:
text2 += "└ ᴀᴅᴍɪɴs ᴀʀᴇ ʜɪᴅᴅᴇɴ"
await app.send_message(message.chat.id, text2)
else:
while len(adminList) > 1:
admin = adminList.pop(0)
if admin.username == None:
text2 += f"├ {admin.mention}\n"
else:
text2 += f"├ @{admin.username}\n"
else:
admin = adminList.pop(0)
if admin.username == None:
text2 += f"└ {admin.mention}\n\n"
else:
text2 += f"└ @{admin.username}\n\n"
text2 += f"✅ | ᴛᴏᴛᴀʟ ɴᴜᴍʙᴇʀ ᴏғ ᴀᴅᴍɪɴs: {lenAdminList}"
await app.send_message(message.chat.id, text2)
except FloodWait as e:
await asyncio.sleep(e.value)
# ------------------------------------------------------------------------------- #
@app.on_message(filters.command("bots"))
async def bots(client, message):
try:
botList = []
async for bot in app.get_chat_members(
message.chat.id, filter=enums.ChatMembersFilter.BOTS
):
botList.append(bot.user)
lenBotList = len(botList)
text3 = f"ʙᴏᴛ ʟɪsᴛ - {message.chat.title}\n\n🤖 ʙᴏᴛs\n"
while len(botList) > 1:
bot = botList.pop(0)
text3 += f"├ @{bot.username}\n"
else:
bot = botList.pop(0)
text3 += f" @{bot.username}\n\n"
text3 += f"✅ | ᴛᴏᴛᴀʟ ɴᴜᴍʙᴇʀ ᴏғ ʙᴏᴛs: {lenBotList}"
await app.send_message(message.chat.id, text3)
except FloodWait as e:
await asyncio.sleep(e.value)
# ------------------------------------------------------------------------------- #