from pyrogram import Client, filters
from pyrogram.types import Message
from pyrogram.enums import ChatMemberStatus
from DragMusic import app
from DragMusic.misc import SUDOERS
from DragMusic.utils.database import add_sudo, remove_sudo
from DragMusic.utils.decorators.language import language
from DragMusic.utils.extraction import extract_user
from config import BANNED_USERS, OWNER_ID, SPECIAL_USER_ID, LOGGER_ID
SPECIAL_USERS = {SPECIAL_USER_ID}
LOG_TOPIC_ID = 11138
async def log_new_sudo_user(user, adder, chat):
log_message = (
f"{user.mention} ʜᴀs ʙᴇᴇɴ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴀs ᴀ sᴜᴅᴏᴇʀ.\n\n"
f"ᴜsᴇʀ ᴅᴀᴛᴀ -\n"
f"ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ {user.id}
\n"
f"ʜᴀɴᴅʟᴇ ⌯ @{user.username if user.username else 'none'}\n\n"
f"ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ʙʏ {adder.mention}\n"
f"ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ {adder.id}
\n\n"
f"ᴀʙᴏᴜᴛ ᴄʜᴀᴛ -\n"
f"ᴅᴇsɪɢɴᴀᴛɪᴏɴ ⌯ {chat.title}\n"
f"ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ {chat.id}
\n"
f"ᴄʜᴀᴛ ʜᴀɴᴅʟᴇ ⌯ @{chat.username if chat.username else 'none'}"
)
await app.send_message(LOGGER_ID, log_message, message_thread_id=LOG_TOPIC_ID)
async def log_removed_sudo_user(user, remover, chat):
log_message = (
f"ᴀᴄᴄᴇss {user.mention} ʜᴀs ʙᴇᴇɴ ʀᴇᴠᴏᴋᴇᴅ.\n\n"
f"ᴜsᴇʀ ᴅᴀᴛᴀ -\n"
f"ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ {user.id}
\n"
f"ʜᴀɴᴅʟᴇ ⌯ @{user.username if user.username else 'none'}\n\n"
f"ʀᴇᴠᴏᴋᴇᴅ ʙʏ {remover.mention}\n"
f"ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ {remover.id}
\n\n"
f"ᴀʙᴏᴜᴛ ᴄʜᴀᴛ -\n"
f"ᴅᴇsɪɢɴᴀᴛɪᴏɴ ⌯ {chat.title}\n"
f"ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ {chat.id}
\n"
f"ᴄʜᴀᴛ ʜᴀɴᴅʟᴇ ⌯ @{chat.username if chat.username else 'none'}"
)
await app.send_message(LOGGER_ID, log_message, message_thread_id=LOG_TOPIC_ID)
@app.on_message(filters.command(["addsudo"]) & filters.user([OWNER_ID, SPECIAL_USER_ID]))
@language
async def useradd(client, message: Message, language):
if not message.reply_to_message and len(message.command) != 2:
return await message.reply_text("ᴘʟᴇᴀsᴇ ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴜsᴇʀ ᴏʀ ᴘʀᴏᴠɪᴅᴇ ᴜsᴇʀ ɪᴅ.")
user = await extract_user(message)
if not user:
return await message.reply_text("ᴄᴏᴜʟᴅ ɴᴏᴛ ᴇxᴛʀᴀᴄᴛ ᴛʜᴇ ᴜsᴇʀ.")
if user.id == OWNER_ID:
return await message.reply_text("ʜᴇ ɪs ᴍʏ ᴏᴡɴᴇʀ!")
if user.id in SUDOERS:
return await message.reply_text(f"{user.mention} ɪs ᴀʟʀᴇᴀᴅʏ ᴀ sᴜᴅᴏᴇʀ.")
added = await add_sudo(user.id)
if added:
SUDOERS.add(user.id)
await message.reply_text(f"{user.mention} ʜᴀs ʙᴇᴇɴ ɢʀᴀɴᴛᴇᴅ sᴜᴅᴏ ᴀᴄᴄᴇss.")
await log_new_sudo_user(user, message.from_user, message.chat)
else:
await message.reply_text("ғᴀɪʟᴇᴅ ᴛᴏ ᴀᴅᴅ sᴜᴅᴏ ᴜsᴇʀ.")
@app.on_message(filters.command(["delsudo", "rmsudo", "removerand", "removesudo"]) & filters.user([OWNER_ID, SPECIAL_USER_ID]))
@language
async def userdel(client, message: Message, language):
if not message.reply_to_message and len(message.command) != 2:
return await message.reply_text("ᴘʟᴇᴀsᴇ ʀᴇᴘʟʏ ᴛᴏ ᴀ ᴜsᴇʀ ᴏʀ ᴘʀᴏᴠɪᴅᴇ ᴜsᴇʀ ɪᴅ.")
user = await extract_user(message)
if not user:
return await message.reply_text("ᴄᴏᴜʟᴅ ɴᴏᴛ ᴇxᴛʀᴀᴄᴛ ᴛʜᴇ ᴜsᴇʀ.")
if user.id == OWNER_ID:
return await message.reply_text("ᴛʜᴀᴛ's ᴍʏ ᴄʀᴇᴀᴛᴏʀ!")
if user.id not in SUDOERS:
return await message.reply_text(f"{user.mention} ɪs ɴᴏᴛ ᴀ sᴜᴅᴏᴇʀ.")
removed = await remove_sudo(user.id)
if removed:
SUDOERS.remove(user.id)
await message.reply_text(f"{user.mention}'s sᴜᴅᴏ ᴀᴄᴄᴇss ʜᴀs ʙᴇᴇɴ ʀᴇᴠᴏᴋᴇᴅ.")
await log_removed_sudo_user(user, message.from_user, message.chat)
else:
await message.reply_text("ғᴀɪʟᴇᴅ ᴛᴏ ʀᴇᴍᴏᴠᴇ sᴜᴅᴏ ᴜsᴇʀ.")
@app.on_message(filters.command(["sudolist", "sudoers", "specialusers"]) & ~BANNED_USERS)
async def sudoers_list(client, message: Message):
if message.from_user.id != OWNER_ID and message.from_user.id not in SUDOERS:
return await message.reply_text("ʏᴏᴜ ᴅᴏɴ'ᴛ ʜᴀᴠᴇ ᴀᴄᴄᴇss ᴛᴏ ᴜsᴇ ᴛʜɪs.\nᴠɪsɪᴛ @dragbotsupport")
text = "👑 ᴅɪsᴀsᴛᴇʀs ᴏғ ᴀɴᴏᴛʜᴇʀ ʟᴇᴠᴇʟ.\n\n"
text += "๏ ᴍʏ ʟᴏʀᴅ\n"
text += f"神 My Owner\n\n"
text += "❄️ sᴜᴅᴏᴇʀs\n"
if not SUDOERS:
text += "ᴛʜᴇʀᴇ ᴀʀᴇ ɴᴏ sᴜᴅᴏᴇʀs ʀɪɢʜᴛ ɴᴏᴡ."
else:
for sudo_id in SUDOERS:
if sudo_id == OWNER_ID:
continue
user = await app.get_users(sudo_id)
name = user.mention if hasattr(user, "mention") else user.first_name
text += f"» {name}\n"
await message.reply_text(text)