import asyncio from pyrogram.enums import ChatMemberStatus from pyrogram.errors import ( ChatAdminRequired, InviteRequestSent, UserAlreadyParticipant, UserNotParticipant, ) from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from DragMusic import YouTube, app from DragMusic.misc import SUDOERS from DragMusic.utils.database import ( get_assistant, get_cmode, get_lang, get_playmode, get_playtype, is_active_chat, is_maintenance, ) from DragMusic.utils.inline import botplaylist_markup from config import PLAYLIST_IMG_URL, SUPPORT_CHAT, adminlist from strings import get_string links = {} def PlayWrapper(command): async def wrapper(client, message): language = await get_lang(message.chat.id) _ = get_string(language) if message.sender_chat: upl = InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="ʜᴏᴡ ᴛᴏ ғɪx ?", callback_data="DragmousAdmin", ), ] ] ) return await message.reply_text(_["general_3"], reply_markup=upl) 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 audio_telegram = ( (message.reply_to_message.audio or message.reply_to_message.voice) if message.reply_to_message else None ) video_telegram = ( (message.reply_to_message.video or message.reply_to_message.document) if message.reply_to_message else None ) url = await YouTube.url(message) if audio_telegram is None and video_telegram is None and url is None: if len(message.command) < 2: if "stream" in message.command: return await message.reply_text(_["str_1"]) buttons = botplaylist_markup(_) return await message.reply_photo( photo=PLAYLIST_IMG_URL, caption=_["play_18"], reply_markup=InlineKeyboardMarkup(buttons), ) 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: chat = await app.get_chat(chat_id) except: return await message.reply_text(_["cplay_4"]) channel = chat.title else: chat_id = message.chat.id channel = None playmode = await get_playmode(message.chat.id) playty = await get_playtype(message.chat.id) if playty != "Everyone": 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: return await message.reply_text(_["play_4"]) if message.command[0][0] == "v": video = True else: if "-v" in message.text: video = True else: video = True if message.command[0][1] == "v" else None if message.command[0][-1] == "e": if not await is_active_chat(chat_id): return await message.reply_text(_["play_16"]) fplay = True else: fplay = None if not await is_active_chat(chat_id): userbot = await get_assistant(chat_id) try: try: get = await app.get_chat_member(chat_id, userbot.id) except ChatAdminRequired: return await message.reply_text(_["call_1"]) if ( get.status == ChatMemberStatus.BANNED or get.status == ChatMemberStatus.RESTRICTED ): return await message.reply_text( _["call_2"].format( app.mention, userbot.id, userbot.name, userbot.username ) ) except UserNotParticipant: if chat_id in links: invitelink = links[chat_id] else: if message.chat.username: invitelink = message.chat.username try: await userbot.resolve_peer(invitelink) except: pass else: try: invitelink = await app.export_chat_invite_link(chat_id) except ChatAdminRequired: return await message.reply_text(_["call_1"]) except Exception as e: return await message.reply_text( _["call_3"].format(app.mention, type(e).__name__) ) if invitelink.startswith("https://t.me/+"): invitelink = invitelink.replace( "https://t.me/+", "https://t.me/joinchat/" ) myu = await message.reply_text(_["call_4"].format(app.mention)) try: await asyncio.sleep(1) await userbot.join_chat(invitelink) except InviteRequestSent: try: await app.approve_chat_join_request(chat_id, userbot.id) except Exception as e: return await message.reply_text( _["call_3"].format(app.mention, type(e).__name__) ) await asyncio.sleep(3) await myu.edit(_["call_5"].format(app.mention)) except UserAlreadyParticipant: pass except Exception as e: return await message.reply_text( _["call_3"].format(app.mention, type(e).__name__) ) links[chat_id] = invitelink try: await userbot.resolve_peer(chat_id) except: pass return await command( client, message, _, chat_id, video, channel, playmode, url, fplay, ) return wrapper