Skip to content

Commit

Permalink
download from file
Browse files Browse the repository at this point in the history
  • Loading branch information
BennyThink committed Jun 11, 2023
1 parent 8db05d6 commit ba85246
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 47 deletions.
6 changes: 3 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ APScheduler==3.10.1
beautifultable==1.1.0
ffmpeg-python==0.2.0
PyMySQL==1.0.3
celery==5.2.7
celery==5.3.0
filetype==1.2.0
flower==1.2.0
psutil==5.9.5
influxdb==5.3.1
beautifulsoup4==4.12.2
fakeredis==2.13.0
fakeredis==2.14.1
supervisor==4.2.5
tgbot-ping==1.0.7
redis==4.5.4
Expand All @@ -22,4 +22,4 @@ ffpb==0.4.1
youtube-search-python==1.6.6
token-bucket==0.3.0
coloredlogs==15.0.1
sentry-sdk==1.24.0
sentry-sdk==1.25.0
96 changes: 52 additions & 44 deletions ytdlbot/ytdl_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import os
import random
import re
import tempfile
import time
import traceback
import typing
Expand Down Expand Up @@ -364,62 +365,69 @@ def link_checker(url: str) -> str:
return "Live stream links are disabled. Please download it after the stream ends."


@app.on_message(filters.incoming & filters.text)
@app.on_message(filters.incoming & (filters.text | filters.document))
@private_use
def download_handler(client: Client, message: types.Message):
payment = Payment()
chat_id = message.from_user.id
client.send_chat_action(chat_id, "typing")
redis.user_count(chat_id)
if message.document:
with tempfile.NamedTemporaryFile(mode="r+") as tf:
logging.info("Downloading file to %s", tf.name)
message.download(tf.name)
contents = open(tf.name, "r").read() # don't know why
urls = contents.split()
else:
urls = [re.sub(r"/ytdl\s*", "", message.text)]
logging.info("start %s", urls)

for url in urls:
# check url
if not re.findall(r"^https?://", url.lower()):
redis.update_metrics("bad_request")
text = search(url)
message.reply_text(text, quote=True)
return

url = re.sub(r"/ytdl\s*", "", message.text)
logging.info("start %s", url)
if text := link_checker(url):
message.reply_text(text, quote=True)
redis.update_metrics("reject_link_checker")
return

# check url
if not re.findall(r"^https?://", url.lower()):
redis.update_metrics("bad_request")
text = search(url)
message.reply_text(text, quote=True)
return
# old user is not limited by token
if ENABLE_VIP and not payment.check_old_user(chat_id):
free, pay, reset = payment.get_token(chat_id)
if free + pay <= 0:
message.reply_text(
f"You don't have enough token. Please wait until {reset} or /buy more token.", quote=True
)
redis.update_metrics("reject_token")
return
else:
payment.use_token(chat_id)

if text := link_checker(url):
message.reply_text(text, quote=True)
redis.update_metrics("reject_link_checker")
return
redis.update_metrics("video_request")

# old user is not limited by token
if ENABLE_VIP and not payment.check_old_user(chat_id):
free, pay, reset = payment.get_token(chat_id)
if free + pay <= 0:
message.reply_text(
f"You don't have enough token. Please wait until {reset} or /buy more token.", quote=True
text = BotText.get_receive_link_text()
try:
# raise pyrogram.errors.exceptions.FloodWait(10)
bot_msg: typing.Union[types.Message, typing.Coroutine] = message.reply_text(text, quote=True)
except pyrogram.errors.Flood as e:
f = BytesIO()
f.write(str(e).encode())
f.write(b"Your job will be done soon. Just wait! Don't rush.")
f.name = "Please don't flood me.txt"
bot_msg = message.reply_document(
f, caption=f"Flood wait! Please wait {e.x} seconds...." f"Your job will start automatically", quote=True
)
redis.update_metrics("reject_token")
return
else:
payment.use_token(chat_id)

redis.update_metrics("video_request")

text = BotText.get_receive_link_text()
try:
# raise pyrogram.errors.exceptions.FloodWait(10)
bot_msg: typing.Union[types.Message, typing.Coroutine] = message.reply_text(text, quote=True)
except pyrogram.errors.Flood as e:
f = BytesIO()
f.write(str(e).encode())
f.write(b"Your job will be done soon. Just wait! Don't rush.")
f.name = "Please don't flood me.txt"
bot_msg = message.reply_document(
f, caption=f"Flood wait! Please wait {e.x} seconds...." f"Your job will start automatically", quote=True
)
f.close()
client.send_message(OWNER, f"Flood wait! 🙁 {e.x} seconds....")
time.sleep(e.x)
f.close()
client.send_message(OWNER, f"Flood wait! 🙁 {e.x} seconds....")
time.sleep(e.x)

client.send_chat_action(chat_id, "upload_video")
bot_msg.chat = message.chat
ytdl_download_entrance(client, bot_msg, url)
client.send_chat_action(chat_id, "upload_video")
bot_msg.chat = message.chat
ytdl_download_entrance(client, bot_msg, url)


@app.on_callback_query(filters.regex(r"document|video|audio"))
Expand Down

0 comments on commit ba85246

Please sign in to comment.