Fix issue #424(/ytdl not working in group) (#425)

* Fix issue #424(/ytdl not working in group)

* Improve bot usage in groups

* typo fix
This commit is contained in:
Sanuja Seneviratne 2024-09-10 19:54:43 +05:30 committed by GitHub
parent 2f4ebdd7b8
commit 1a60460a32
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 107 additions and 66 deletions

View file

@ -214,12 +214,12 @@ def ytdl_download_entrance(client: Client, bot_msg: types.Message, url: str, mod
bot_msg.edit_text(f"Download failed!❌\n\n`{traceback.format_exc()[-2000:]}`", disable_web_page_preview=True)
def direct_download_entrance(client: Client, bot_msg: typing.Union[types.Message, typing.Coroutine], url: str, custom_filename):
def direct_download_entrance(client: Client, bot_msg: typing.Union[types.Message, typing.Coroutine], url: str, new_name):
if ENABLE_CELERY:
direct_normal_download(client, bot_msg, url, custom_filename)
direct_normal_download(client, bot_msg, url, new_name)
# direct_download_task.delay(bot_msg.chat.id, bot_msg.id, url)
else:
direct_normal_download(client, bot_msg, url, custom_filename)
direct_normal_download(client, bot_msg, url, new_name)
def leech_download_entrance(client: Client, bot_msg: typing.Union[types.Message, typing.Coroutine], url: str):
@ -269,7 +269,7 @@ def audio_entrance(client: Client, bot_msg: types.Message):
normal_audio(client, bot_msg)
def direct_normal_download(client: Client, bot_msg: typing.Union[types.Message, typing.Coroutine], url: str, custom_filename):
def direct_normal_download(client: Client, bot_msg: typing.Union[types.Message, typing.Coroutine], url: str, new_name):
chat_id = bot_msg.chat.id
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
@ -284,8 +284,8 @@ def direct_normal_download(client: Client, bot_msg: typing.Union[types.Message,
bot_msg.edit_text(f"Download failed!❌\n\n```{e}```", disable_web_page_preview=True)
return
if custom_filename:
filename = custom_filename
if new_name:
filename = new_name
else:
filename = extract_filename(req)

View file

@ -266,5 +266,22 @@ def extract_filename(response):
return filename
def extract_url_and_name(message_text):
# Regular expression to match the URL
url_pattern = r'(https?://[^\s]+)'
# Regular expression to match the new name after '-n'
name_pattern = r'-n\s+([^\s]+)'
# Find the URL in the message_text
url_match = re.search(url_pattern, message_text)
url = url_match.group(0) if url_match else None
# Find the new name in the message_text
name_match = re.search(name_pattern, message_text)
new_name = name_match.group(1) if name_match else None
return url, new_name
if __name__ == "__main__":
auto_restart()

View file

@ -61,7 +61,13 @@ from tasks import (
ytdl_download_entrance,
spdl_download_entrance,
)
from utils import auto_restart, clean_tempfile, customize_logger, get_revision
from utils import (
auto_restart,
clean_tempfile,
customize_logger,
get_revision,
extract_url_and_name
)
logging.info("Authorized users are %s", AUTHORIZED_USER)
customize_logger(["pyrogram.client", "pyrogram.session.session", "pyrogram.connection.connection"])
@ -219,7 +225,7 @@ def ping_handler(client: Client, message: types.Message):
client.edit_message_text(chat_id=reply.chat.id, message_id=reply.id, text="Ping Calculation Complete.")
time.sleep(1)
client.delete_messages(chat_id=reply.chat.id, message_ids=reply.id)
thread = threading.Thread(target=send_message_and_measure_ping)
thread.start()
@ -269,63 +275,6 @@ def clear_history(client: Client, message: types.Message):
message.reply_text("History cleared.", quote=True)
@app.on_message(filters.command(["spdl"]))
def spdl_handler(client: Client, message: types.Message):
redis = Redis()
chat_id = message.from_user.id
client.send_chat_action(chat_id, enums.ChatAction.TYPING)
url = re.sub(r"/spdl\s*", "", message.text)
logging.info("spdl start %s", url)
if not re.findall(r"^https?://", url.lower()):
redis.update_metrics("bad_request")
message.reply_text("Something wrong 🤔.\nCheck your URL and send me again.", quote=True)
return
bot_msg = message.reply_text("Request received.", quote=True)
redis.update_metrics("spdl_request")
spdl_download_entrance(client, bot_msg, url)
@app.on_message(filters.command(["direct"]))
def direct_handler(client: Client, message: types.Message):
redis = Redis()
chat_id = message.from_user.id
client.send_chat_action(chat_id, enums.ChatAction.TYPING)
url = re.sub(r"/direct\s*", "", message.text)
logging.info("direct start %s", url)
if not re.findall(r"^https?://", url.lower()):
redis.update_metrics("bad_request")
message.reply_text("Send me a DIRECT LINK.", quote=True)
return
url_parts = url.split(" -n ", maxsplit=1)
url = url_parts[0].strip() # Assuming space after -n
custom_filename = url_parts[1].strip() if len(url_parts) > 1 else None
bot_msg = message.reply_text("Request received.", quote=True)
redis.update_metrics("direct_request")
direct_download_entrance(client, bot_msg, url, custom_filename)
@app.on_message(filters.command(["leech"]))
def leech_handler(client: Client, message: types.Message):
if not ENABLE_ARIA2:
message.reply_text("Aria2 Not Enabled.", quote=True)
return
redis = Redis()
chat_id = message.from_user.id
client.send_chat_action(chat_id, enums.ChatAction.TYPING)
url = re.sub(r"/leech\s*", "", message.text)
logging.info("leech using aria2 start %s", url)
if not re.findall(r"^https?://", url.lower()):
redis.update_metrics("bad_request")
message.reply_text("Send me a correct LINK.", quote=True)
return
bot_msg = message.reply_text("Request received.", quote=True)
redis.update_metrics("leech_request")
leech_download_entrance(client, bot_msg, url)
@app.on_message(filters.command(["settings"]))
def settings_handler(client: Client, message: types.Message):
chat_id = message.chat.id
@ -509,6 +458,81 @@ def search_ytb(kw: str):
return text
@app.on_message(filters.command(["spdl"]))
def spdl_handler(client: Client, message: types.Message):
redis = Redis()
chat_id = message.from_user.id
client.send_chat_action(chat_id, enums.ChatAction.TYPING)
message_text = message.text
url, new_name = extract_url_and_name(message_text)
logging.info("spdl start %s", url)
if url is None or not re.findall(r"^https?://", url.lower()):
redis.update_metrics("bad_request")
message.reply_text("Something wrong 🤔.\nCheck your URL and send me again.", quote=True)
return
bot_msg = message.reply_text("Request received.", quote=True)
redis.update_metrics("spdl_request")
spdl_download_entrance(client, bot_msg, url)
@app.on_message(filters.command(["direct"]))
def direct_handler(client: Client, message: types.Message):
redis = Redis()
chat_id = message.from_user.id
client.send_chat_action(chat_id, enums.ChatAction.TYPING)
message_text = message.text
url, new_name = extract_url_and_name(message_text)
logging.info("direct start %s", url)
if url is None or not re.findall(r"^https?://", url.lower()):
redis.update_metrics("bad_request")
message.reply_text("Send me a DIRECT LINK.", quote=True)
return
bot_msg = message.reply_text("Request received.", quote=True)
redis.update_metrics("direct_request")
direct_download_entrance(client, bot_msg, url, new_name)
@app.on_message(filters.command(["leech"]))
def leech_handler(client: Client, message: types.Message):
if not ENABLE_ARIA2:
message.reply_text("Aria2 Not Enabled.", quote=True)
return
redis = Redis()
chat_id = message.from_user.id
client.send_chat_action(chat_id, enums.ChatAction.TYPING)
message_text = message.text
url, new_name = extract_url_and_name(message_text)
logging.info("leech using aria2 start %s", url)
if url is None or not re.findall(r"^https?://", url.lower()):
redis.update_metrics("bad_request")
message.reply_text("Send me a correct LINK.", quote=True)
return
bot_msg = message.reply_text("Request received.", quote=True)
redis.update_metrics("leech_request")
leech_download_entrance(client, bot_msg, url)
@app.on_message(filters.command(["ytdl"]))
def ytdl_handler(client: Client, message: types.Message):
redis = Redis()
chat_id = message.from_user.id
client.send_chat_action(chat_id, enums.ChatAction.TYPING)
message_text = message.text
url, new_name = extract_url_and_name(message_text)
logging.info("ytdl start %s", url)
if url is None or not re.findall(r"^https?://", url.lower()):
redis.update_metrics("bad_request")
message.reply_text("Something wrong 🤔.\nCheck your URL and send me again.", quote=True)
return
bot_msg = message.reply_text("Request received.", quote=True)
redis.update_metrics("ytdl_request")
ytdl_download_entrance(client, bot_msg, url)
@app.on_message(filters.incoming & (filters.text | filters.document))
@private_use
def download_handler(client: Client, message: types.Message):
@ -524,7 +548,7 @@ def download_handler(client: Client, message: types.Message):
contents = open(tf.name, "r").read() # don't know why
urls = contents.split()
else:
urls = [re.sub(r"/ytdl\s*", "", message.text)]
urls = [message.text]
logging.info("start %s", urls)
for url in urls: