From d3dcf1b7bd0e3a2980fa37ca34431af278a30505 Mon Sep 17 00:00:00 2001 From: levina <82658782+levina-lab@users.noreply.github.com> Date: Tue, 2 Nov 2021 15:07:40 +0700 Subject: [PATCH] improve `function` - added userbot auto join - must check if the bot was promoted as admin first before playing video --- program/music.py | 108 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 7 deletions(-) diff --git a/program/music.py b/program/music.py index f0afd6f..f4a87f7 100644 --- a/program/music.py +++ b/program/music.py @@ -2,15 +2,17 @@ # Commit Start Date 20/10/2021 # Finished On 28/10/2021 -import asyncio import re +import asyncio -from config import BOT_USERNAME, GROUP_SUPPORT, IMG_1, IMG_2, UPDATES_CHANNEL -from driver.filters import command, other_filters -from driver.queues import QUEUE, add_to_queue -from driver.veez import call_py from pyrogram import Client +from driver.veez import call_py +from program import BOT_ID, USERBOT_ID +from driver.queues import QUEUE, add_to_queue +from driver.filters import command, other_filters +from pyrogram.errors import UserAlreadyParticipant, UserNotParticipant from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message +from config import BOT_USERNAME, GROUP_SUPPORT, IMG_1, IMG_2, UPDATES_CHANNEL, ASSISTANT_NAME from pytgcalls import StreamType from pytgcalls.types.input_stream import AudioPiped from youtubesearchpython import VideosSearch @@ -64,7 +66,53 @@ async def play(_, m: Message): ] ] ) - + + chat_title = m.chat.title + a = await _.get_chat_member(m.chat.id, BOT_ID) + if a.status != "administrator": + await m.reply_text(f"💡 To use me, I need to be an **Administrator** with the following **permissions**:\n\n» ❌ __Delete messages__\n» ❌ __Ban users__\n» ❌ __Add users__\n» ❌ __Manage voice chat__\n\nData is **updated** automatically after you **promote me**") + return + if not a.can_manage_voice_chats: + await m.reply_text( + "missing required permission:" + + "\n\n» ❌ __Manage voice chat__") + return + if not a.can_delete_messages: + await m.reply_text( + "missing required permission:" + + "\n\n» ❌ __Delete messages__") + return + if not a.can_invite_users: + await m.reply_text( + "missing required permission:" + + "\n\n» ❌ __Add users__") + return + if not a.can_restrict_members: + await m.reply_text( + "missing required permission:" + + "\n\n» ❌ __Ban users__") + return + try: + b = await _.get_chat_member(m.chat.id, USERBOT_ID) + if b.status == "kicked": + await m.reply_text(f"@{ASSISTANT_NAME} **is banned in group** {chat_title}\n\n» **unban the userbot first if you want to use this bot.**") + return + except UserNotParticipant: + if m.chat.username: + try: + await call_py.join_chat(f"{m.chat.username}") + except Exception as e: + await m.reply_text(f"❌ **userbot failed to join**\n\n**reason**:{e}") + return + else: + try: + pope = await _.export_chat_invite_link(m.chat.id) + pepo = await _.revoke_chat_invite_link(m.chat.id, pope) + await call_py.join_chat(pepo.invite_link) + except UserAlreadyParticipant: + pass + except Exception as e: + return await m.reply_text(f"❌ **userbot failed to join**\n\n**reason**:{e}") replied = m.reply_to_message chat_id = m.chat.id if replied: @@ -215,7 +263,53 @@ async def stream(_, m: Message): ] ] ) - + + chat_title = m.chat.title + a = await _.get_chat_member(m.chat.id, BOT_ID) + if a.status != "administrator": + await m.reply_text(f"💡 To use me, I need to be an **Administrator** with the following **permissions**:\n\n» ❌ __Delete messages__\n» ❌ __Ban users__\n» ❌ __Add users__\n» ❌ __Manage voice chat__\n\nData is **updated** automatically after you **promote me**") + return + if not a.can_manage_voice_chats: + await m.reply_text( + "missing required permission:" + + "\n\n» ❌ __Manage voice chat__") + return + if not a.can_delete_messages: + await m.reply_text( + "missing required permission:" + + "\n\n» ❌ __Delete messages__") + return + if not a.can_invite_users: + await m.reply_text( + "missing required permission:" + + "\n\n» ❌ __Add users__") + return + if not a.can_restrict_members: + await m.reply_text( + "missing required permission:" + + "\n\n» ❌ __Ban users__") + return + try: + b = await _.get_chat_member(m.chat.id, USERBOT_ID) + if b.status == "kicked": + await m.reply_text(f"@{ASSISTANT_NAME} **is banned in group** {chat_title}\n\n» **unban the userbot first if you want to use this bot.**") + return + except UserNotParticipant: + if m.chat.username: + try: + await call_py.join_chat(f"{m.chat.username}") + except Exception as e: + await m.reply_text(f"❌ **userbot failed to join**\n\n**reason**:{e}") + return + else: + try: + pope = await _.export_chat_invite_link(m.chat.id) + pepo = await _.revoke_chat_invite_link(m.chat.id, pope) + await call_py.join_chat(pepo.invite_link) + except UserAlreadyParticipant: + pass + except Exception as e: + return await m.reply_text(f"❌ **userbot failed to join**\n\n**reason**:{e}") chat_id = m.chat.id if len(m.command) < 2: await m.reply("» give me a live-link/m3u8 url/youtube link to stream.")