from pyrogram.enums import ChatType, ChatMemberStatus from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from DragMusic import app from DragMusic.misc import SUDOERS, db from DragMusic.utils.database import ( get_authuser_names, get_cmode, get_lang, get_upvote_count, is_active_chat, is_maintenance, is_nonadmin_chat, is_skipmode, ) from config import SUPPORT_CHAT, adminlist, confirmer from strings import get_string from ..formatters import int_to_alpha def AdminRightsCheck(mystic): async def wrapper(client, message): if await is_maintenance() is False: if message.from_user.id not in SUDOERS: return await message.reply_text( text=f"{app.mention} ɪs ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ, ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ғᴏʀ ᴋɴᴏᴡɪɴɢ ᴛʜᴇ ʀᴇᴀsᴏɴ.", disable_web_page_preview=True, ) try: await message.delete() except: pass try: language = await get_lang(message.chat.id) _ = get_string(language) except: _ = get_string("en") if message.sender_chat: upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ʜᴏᴡ ᴛᴏ ғɪx ?", callback_data="DragmousAdmin", ), ] ] ) return await message.reply_text(_["general_3"], reply_markup=upl) if message.command[0][0] == "c": chat_id = await get_cmode(message.chat.id) if chat_id is None: return await message.reply_text(_["setting_7"]) try: await app.get_chat(chat_id) except: return await message.reply_text(_["cplay_4"]) else: chat_id = message.chat.id if not await is_active_chat(chat_id): return await message.reply_text(_["general_5"]) is_non_admin = await is_nonadmin_chat(message.chat.id) if not is_non_admin: if message.from_user.id not in SUDOERS: admins = adminlist.get(message.chat.id) if not admins: return await message.reply_text(_["admin_13"]) else: if message.from_user.id not in admins: if await is_skipmode(message.chat.id): upvote = await get_upvote_count(chat_id) text = f"""ᴀᴅᴍɪɴ ʀɪɢʜᴛs ɴᴇᴇᴅᴇᴅ ʀᴇғʀᴇsʜ ᴀᴅᴍɪɴ ᴄᴀᴄʜᴇ ᴠɪᴀ : /reload » {upvote} ᴠᴏᴛᴇs ɴᴇᴇᴅᴇᴅ ғᴏʀ ᴘᴇʀғᴏʀᴍɪɴɢ ᴛʜɪs ᴀᴄᴛɪᴏɴ.""" command = message.command[0] if command[0] == "c": command = command[1:] if command == "speed": return await message.reply_text(_["admin_14"]) MODE = command.title() upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ᴠᴏᴛᴇ", callback_data=f"ADMIN UpVote|{chat_id}_{MODE}", ), ] ] ) if chat_id not in confirmer: confirmer[chat_id] = {} try: vidid = db[chat_id][0]["vidid"] file = db[chat_id][0]["file"] except: return await message.reply_text(_["admin_14"]) senn = await message.reply_text(text, reply_markup=upl) confirmer[chat_id][senn.id] = { "vidid": vidid, "file": file, } return else: return await message.reply_text(_["admin_14"]) return await mystic(client, message, _, chat_id) return wrapper def AdminActual(mystic): async def wrapper(client, message): try: language = await get_lang(message.chat.id) _ = get_string(language) except: _ = get_string("en") if message.from_user.id not in SUDOERS: try: member = await app.get_chat_member(message.chat.id, message.from_user.id) if member.status == ChatMemberStatus.OWNER: pass # Owner is always allowed elif member.status == ChatMemberStatus.ADMINISTRATOR and member.privileges.can_promote_members: pass # Admin with promote rights is allowed else: return await message.reply_text(_["admin_18"]) # "You don't have permission to promote users." except Exception: return await message.reply_text("You are not an admin in this chat.") return await mystic(client, message, _) return wrapper def ActualAdminCB(mystic): async def wrapper(client, CallbackQuery): if await is_maintenance() is False: if CallbackQuery.from_user.id not in SUDOERS: return await CallbackQuery.answer( f"{app.mention} ɪs ᴜɴᴅᴇʀ ᴍᴀɪɴᴛᴇɴᴀɴᴄᴇ, ᴠɪsɪᴛ sᴜᴘᴘᴏʀᴛ ᴄʜᴀᴛ ғᴏʀ ᴋɴᴏᴡɪɴɢ ᴛʜᴇ ʀᴇᴀsᴏɴ.", show_alert=True, ) try: language = await get_lang(CallbackQuery.message.chat.id) _ = get_string(language) except: _ = get_string("en") if CallbackQuery.message.chat.type == ChatType.PRIVATE: return await mystic(client, CallbackQuery, _) is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) if not is_non_admin: try: a = ( await app.get_chat_member( CallbackQuery.message.chat.id, CallbackQuery.from_user.id, ) ).privileges except: return await CallbackQuery.answer(_["general_4"], show_alert=True) if not a.can_manage_video_chats: if CallbackQuery.from_user.id not in SUDOERS: token = await int_to_alpha(CallbackQuery.from_user.id) _check = await get_authuser_names(CallbackQuery.from_user.id) if token not in _check: try: return await CallbackQuery.answer( _["general_4"], show_alert=True, ) except: return return await mystic(client, CallbackQuery, _) return wrapper