from pyrogram import Client, filters from pyrogram.types import Message, ChatMemberUpdated from pyrogram.enums import ChatMemberStatus from Devine import app from Devine.misc import SUDOERS from Devine.utils.database import add_sudo, remove_sudo from Devine.utils.decorators.language import language from Devine.utils.extraction import extract_user from Devine.utils.inline import close_markup from config import BANNED_USERS, OWNER_ID, SPECIAL_USER_ID from pyrogram import Client, filters from pyrogram.types import Message, ChatMemberUpdated from pyrogram.enums import ChatMemberStatus from Devine import app from Devine.misc import SUDOERS from Devine.utils.database import add_sudo, remove_sudo from Devine.utils.decorators.language import language from Devine.utils.extraction import extract_user from config import BANNED_USERS, OWNER_ID, SPECIAL_USER_ID, LOG_CHANNEL_ID # Define the special user ID SPECIAL_USER_ID = 6466741329 # Replace with the actual user ID SPECIAL_USERS = {SPECIAL_USER_ID} 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(LOG_CHANNEL_ID, log_message) 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"ᴀᴄᴄᴇss ʀᴇᴠᴏᴋᴇᴅ ʙʏ {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(LOG_CHANNEL_ID, log_message) @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ᴘᴏɴsᴇ ᴛᴏ ᴀ ᴍᴇssᴀɢᴇ ᴏʀ ᴛᴏ ɢɪᴠᴇ ʏᴏᴜ ᴛʜᴇ ɴᴇxᴛ sᴛᴇᴘ, ᴘʟᴇᴀsᴇ ᴘʀᴏᴠɪᴅᴇ ᴜsᴇʀ ɪᴅ ᴏʀ ʀᴇᴘʟʏ ᴀ ᴍᴇssᴀɢᴇ.") user = await extract_user(message) if not user: return await message.reply_text("ᴛʜᴇʀᴇ ᴡᴀs ᴀɴ ɪssᴜᴇ ᴇxᴛʀᴀᴄᴛɪɴɢ ᴛʜᴇ ᴜsᴇʀ's ɪɴғᴏʀᴍᴀᴛɪᴏɴ, ᴘʟᴇᴀ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 ᴀ sᴜᴅᴏ ᴜsᴇʀ.") added = await add_sudo(user.id) if added: SUDOERS.add(user.id) await message.reply_text(f"{user.mention} ʜᴀs ʙᴇᴇɴ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴀs ᴀ sᴜᴅᴏᴇʀ.") await log_new_sudo_user(user, message.from_user, message.chat) else: await message.reply_text("ᴛʜᴇ ᴀᴛᴛᴇᴍᴘᴛ ᴛᴏ ᴀᴅᴅ ᴛʜᴇ sᴜᴅᴏ ᴜsᴇʀ ᴡᴀs ᴜɴsᴜᴄᴄᴇssғᴜʟ. ᴘʟᴇᴀ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ᴘᴏɴsᴇ ᴛᴏ ᴀ ᴍᴇssᴀɢᴇ ᴏʀ ᴛᴏ ɢɪᴠᴇ ʏᴏᴜ ᴛʜᴇ ɴᴇxᴛ sᴛᴇᴘ, ᴘʟᴇᴀsᴇ ᴘʀᴏᴠɪᴅᴇ ᴜsᴇʀ ɪᴅ ᴏʀ ʀᴇᴘʟʏ ᴀ ᴍᴇssᴀɢᴇ.") user = await extract_user(message) if not user: return await message.reply_text("ᴛʜᴇʀᴇ ᴡᴀs ᴀɴ ɪssᴜᴇ ᴇxᴛʀᴀᴄᴛɪɴɢ ᴛʜᴇ ᴜsᴇʀ's ɪɴғᴏʀᴍᴀᴛɪᴏɴ, ᴘʟᴇᴀ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ᴇ sᴜᴅᴏ.") removed = await remove_sudo(user.id) if removed: SUDOERS.remove(user.id) await message.reply_text(f"sᴜᴅᴏ ᴀᴄᴄᴇss ғᴏʀ {user.mention} ʜᴀs ʙᴇᴇɴ ʀᴇᴠᴏᴋᴇᴅ.") await log_removed_sudo_user(user, message.from_user, message.chat) else: await message.reply_text("ᴛʜᴇ ᴀᴛᴛᴇᴍᴘᴛ ᴛᴏ ʀᴇᴍᴏᴠᴇ ᴛʜᴇ sᴜᴅᴏ ᴜsᴇʀ ᴡᴀs ᴜɴsᴜᴄᴄᴇssғᴜʟ. ᴘʟᴇᴀsᴇ ᴀᴛᴛᴇᴍᴘᴛ ᴀɢᴀɪɴ.") @app.on_message(filters.command(["sudolist", "sudoers", "specialusers"]) & ~BANNED_USERS) @language async def sudoers_list(client, message: Message, language): if message.from_user.id != OWNER_ID and message.from_user.id not in SUDOERS: return # Ignore message from non-owner, non-sudoers and non-special-id text = "👑 ᴅɪsᴀsᴛᴇʀs ᴏғ ᴀɴᴏᴛʜᴇʀ ʟᴇᴠᴇʟ.\n\n" text += "๏ ᴍʏ ʟᴏʀᴅ\n" user = await app.get_users(OWNER_ID) user = user.first_name if not hasattr(user, "mention") else user.mention text += f"神 {user}\n\n" text += "🔱 sᴘᴇᴄɪᴀʟ ᴅɪsᴀsᴛᴇʀs\n" user = await app.get_users(SPECIAL_USER_ID) user = user.first_name if not hasattr(user, "mention") else user.mention text += f"‣ {user}\n" text += "\n❄️ sᴜᴅᴏ ᴜsᴇʀs\n" count = 0 for user_id in SUDOERS: if user_id != OWNER_ID: try: user = await app.get_users(user_id) user = user.first_name if not hasattr(user, "mention") else user.mention count += 1 text += f"» {user}\n" except Exception as e: print(f"Error fetching user {user_id}: {e}") continue if count == 0: text += "‣ ɴᴏ ᴜsᴇʀs ᴀᴜᴛʜᴏʀɪsᴇᴅ ғᴏʀ ᴇʟᴇᴠᴀᴛᴇᴅ ᴀᴄᴄᴇss." await message.reply_text(text, reply_markup=close_markup(language))