added connection between downloader and uploader services

This commit is contained in:
Ara0n 2022-01-15 01:29:05 +05:30
parent c7938d144f
commit d04045c67d
7 changed files with 293 additions and 65 deletions

31
Pipfile
View File

@ -6,23 +6,22 @@ verify_ssl = true
[dev-packages] [dev-packages]
[packages] [packages]
python-telegram-bot = "==13.10" python-telegram-bot = "*"
telegramclient = "*" telethon = "*"
cachetools = "==4.2.2" cachetools = "*"
certifi = "==2021.10.8" certifi = "*"
pyaes = "==1.6.1" pyaes = "*"
pyasn1 = "==0.4.8" pyasn1 = "*"
pytz = "==2021.3" pytz = "*"
pytz-deprecation-shim = "==0.1.0.post0" pytz-deprecation-shim = "*"
rsa = "==4.8" rsa = "*"
six = "==1.16.0" six = "*"
tornado = "==6.1" tornado = "*"
tzdata = "==2021.5" tzdata = "*"
tzlocal = "==4.1" tzlocal = "*"
APScheduler = "==3.6.3" apscheduler = "*"
ffmpeg = "*" ffmpeg = "*"
Telethon = "==1.24.0" backports-zoneinfo = "*"
"backports.zoneinfo" = "==0.2.1"
[requires] [requires]
python_version = "3.8" python_version = "3.8"

221
Pipfile.lock generated Normal file
View File

@ -0,0 +1,221 @@
{
"_meta": {
"hash": {
"sha256": "c6724c0871d73ed781badffe348bc912a279766980b47555596be9d6cc4907c0"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.8"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"apscheduler": {
"hashes": [
"sha256:3bb5229eed6fbbdafc13ce962712ae66e175aa214c69bed35a06bffcf0c5e244",
"sha256:e8b1ecdb4c7cb2818913f766d5898183c7cb8936680710a4d3a966e02262e526"
],
"index": "pypi",
"version": "==3.6.3"
},
"backports-zoneinfo": {
"hashes": [
"sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf",
"sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328",
"sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546",
"sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6",
"sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570",
"sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9",
"sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7",
"sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987",
"sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722",
"sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582",
"sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc",
"sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b",
"sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1",
"sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08",
"sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"
],
"index": "pypi",
"version": "==0.2.1"
},
"backports.zoneinfo": {
"hashes": [
"sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf",
"sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328",
"sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546",
"sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6",
"sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570",
"sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9",
"sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7",
"sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987",
"sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722",
"sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582",
"sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc",
"sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b",
"sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1",
"sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08",
"sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac",
"sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"
],
"markers": "python_version >= '3.6' and python_version < '3.9'",
"version": "==0.2.1"
},
"cachetools": {
"hashes": [
"sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001",
"sha256:61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"
],
"index": "pypi",
"version": "==4.2.2"
},
"certifi": {
"hashes": [
"sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872",
"sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"
],
"index": "pypi",
"version": "==2021.10.8"
},
"ffmpeg": {
"hashes": [
"sha256:6931692c890ff21d39938433c2189747815dca0c60ddc7f9bb97f199dba0b5b9"
],
"index": "pypi",
"version": "==1.4"
},
"pyaes": {
"hashes": [
"sha256:02c1b1405c38d3c370b085fb952dd8bea3fadcee6411ad99f312cc129c536d8f"
],
"index": "pypi",
"version": "==1.6.1"
},
"pyasn1": {
"hashes": [
"sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d",
"sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"
],
"index": "pypi",
"version": "==0.4.8"
},
"python-telegram-bot": {
"hashes": [
"sha256:833f39110f5d019b39a6c6fcbabd6ea1627eaaa0a26e618c0be099568672d791",
"sha256:d2c555431821f4ace0c1b7ce12af41999f01b793b275dee131f1034d08c01e3e"
],
"index": "pypi",
"version": "==13.10"
},
"pytz": {
"hashes": [
"sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c",
"sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"
],
"index": "pypi",
"version": "==2021.3"
},
"pytz-deprecation-shim": {
"hashes": [
"sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6",
"sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"
],
"index": "pypi",
"version": "==0.1.0.post0"
},
"rsa": {
"hashes": [
"sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17",
"sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb"
],
"index": "pypi",
"version": "==4.8"
},
"six": {
"hashes": [
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
],
"index": "pypi",
"version": "==1.16.0"
},
"telethon": {
"hashes": [
"sha256:04fdc5fa4ed3e886e6ecf4bad79205ab8880c6aefbd42c29c89c689a502aa816",
"sha256:818cb61281ed3f75ba4da9b68cb69486bed9474d2db4e0aa16e482053117452c"
],
"index": "pypi",
"version": "==1.24.0"
},
"tornado": {
"hashes": [
"sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb",
"sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c",
"sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288",
"sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95",
"sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558",
"sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe",
"sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791",
"sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d",
"sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326",
"sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b",
"sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4",
"sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c",
"sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910",
"sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5",
"sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c",
"sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0",
"sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675",
"sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd",
"sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f",
"sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c",
"sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea",
"sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6",
"sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05",
"sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd",
"sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575",
"sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a",
"sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37",
"sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795",
"sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f",
"sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32",
"sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c",
"sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01",
"sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4",
"sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2",
"sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921",
"sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085",
"sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df",
"sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102",
"sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5",
"sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68",
"sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5"
],
"index": "pypi",
"version": "==6.1"
},
"tzdata": {
"hashes": [
"sha256:3eee491e22ebfe1e5cfcc97a4137cd70f092ce59144d81f8924a844de05ba8f5",
"sha256:68dbe41afd01b867894bbdfd54fa03f468cfa4f0086bfb4adcd8de8f24f3ee21"
],
"index": "pypi",
"version": "==2021.5"
},
"tzlocal": {
"hashes": [
"sha256:0f28015ac68a5c067210400a9197fc5d36ba9bc3f8eaf1da3cbd59acdfed9e09",
"sha256:28ba8d9fcb6c9a782d6e0078b4f6627af1ea26aeaa32b4eab5324abc7df4149f"
],
"index": "pypi",
"version": "==4.1"
}
},
"develop": {}
}

View File

@ -1,15 +1,18 @@
import logging import logging
import json import json
from operator import truediv
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
from telegram.update import Update from telegram.update import Update
from botUtils import showhelp,parse_search_query from botUtils import showhelp,parse_search_query,getalltsfiles
import subprocess
#enabling Logging #enabling Logging
logging.basicConfig(format='%(levelname)s - %(asctime)s - %(name)s - %(message)s', level=logging.INFO) logging.basicConfig(format='%(levelname)s - %(asctime)s - %(name)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
with open('config/botConfig.json', 'r') as config: with open('bot/config/botConfig.json', 'r') as config:
configdata = json.load(config) configdata = json.load(config)
API_TOKEN = configdata.get("bot_token") API_TOKEN = configdata.get("bot_token")
@ -23,7 +26,7 @@ def help(update,context):
text = showhelp() text = showhelp()
update.message.reply_text(text) update.message.reply_text(text)
def search(update, context): def search(update, context):
logger.info('Search function is called!') logger.info('Search function is called!')
@ -38,25 +41,19 @@ def get(update, context):
userdata = parse_search_query(userInput) userdata = parse_search_query(userInput)
update.message.reply_text(f"Checking Internal Db\nAnime: {userdata.get('series')}\nSeason: {userdata.get('season_id')}\nEpisode: {userdata.get('episode_id')}") update.message.reply_text(f"Checking Internal Db\nAnime: {userdata.get('series')}\nSeason: {userdata.get('season_id')}\nEpisode: {userdata.get('episode_id')}")
download_status = subprocess.check_call("python downloaderService/main.py "+'"'+userdata.get('series')+'"'+ ' ' + userdata.get('episode_id') , shell=True)
update.message.reply_text(f"{userdata.get('series')} - {userdata.get('episode_id')} Downloaded!")
filepath = getalltsfiles()
print("getalltsfiles: ",filepath)
update.message.reply_text(f"{userdata.get('series')} - {userdata.get('episode_id')} Uploading Started!")
upload_status = subprocess.check_call("python uploaderService/main.py " +'"'+filepath+'"'+ ' ' + str(chat_id) + ' ' + (userdata.get('series')+str(userdata.get('episode_id'))), shell=True)
print(upload_status)
else: else:
update.message.reply_text("Please refer to /help") update.message.reply_text("Please refer to /help")
def getall(update, context):
logger.info('download function is called!')
chat_id = update.message.chat_id
rawUserInput = update.message.text
userInput = rawUserInput[7:]
if userInput and not userInput == " ":
userdata = parse_search_query(userInput)
update.message.reply_text(f"Checking Internal Db\nAnime: {userdata.get('series')}\nSeason: {userdata.get('season_id')}")
else:
update.message.reply_text("Please refer to /help")
def error(update, context): def error(update, context):
"""Log Errors caused by Updates.""" """Log Errors caused by Updates."""
logger.warning('Update "%s" caused error "%s"', update, context.error) logger.warning('Update "%s" caused error "%s"', update, context.error)
@ -86,11 +83,8 @@ def debug_message(update, context):
def main(): def main():
updater = Updater(token=API_TOKEN, use_context=True) updater = Updater(token=API_TOKEN, use_context=True, request_kwargs={'read_timeout': 100, 'connect_timeout': 100})
# Get the dispatcher to register handlers # Get the dispatcher to register handlers
dp = updater.dispatcher dp = updater.dispatcher
@ -99,7 +93,6 @@ def main():
dp.add_handler(CommandHandler("help", help)) dp.add_handler(CommandHandler("help", help))
dp.add_handler(CommandHandler("search", search)) dp.add_handler(CommandHandler("search", search))
dp.add_handler(CommandHandler("get", get)) dp.add_handler(CommandHandler("get", get))
dp.add_handler(CommandHandler("getall", getall))
dp.add_handler(MessageHandler(Filters.text, debug_message)) dp.add_handler(MessageHandler(Filters.text, debug_message))

View File

@ -11,6 +11,7 @@ example - /getall Death Note, s1
example - /search Death Note example - /search Death Note
''' '''
import os
def showhelp(): def showhelp():
helpText = "Here are the following bot commands\n\n/get - will download the anime episode you wanted\nexample - /get Death note, s1, ep3\n\n/getadd - will provide all the episode of an anime in a given season\nexample - /getall Death Note, s1\n\n/search - will provide deatails about an anime\nexample - /search Death Note" helpText = "Here are the following bot commands\n\n/get - will download the anime episode you wanted\nexample - /get Death note, s1, ep3\n\n/getadd - will provide all the episode of an anime in a given season\nexample - /getall Death Note, s1\n\n/search - will provide deatails about an anime\nexample - /search Death Note"
@ -35,3 +36,16 @@ def parse_search_query(raw_input):
} }
return query_obj return query_obj
def getalltsfiles():
walk_dir = '.'
for root, _, files in os.walk(walk_dir):
for file in files:
if (file.split(".")[-1].lower() == 'mp4'):
mp4FilePath = os.path.join(root, os.path.splitext(file)[0] + ".mp4")
mp4FilePath = mp4FilePath.replace("\\","/")
return mp4FilePath
# python uploaderService/main.py ./Naruto/E04.mp4 5023977571 naruto4

View File

@ -1,5 +1,6 @@
import subprocess import subprocess
import os import os
import sys
def downloadVideo(search_query,search_query_range,search_quality): def downloadVideo(search_query,search_query_range,search_quality):
# animdl download "demon slayer" -r 1 # animdl download "demon slayer" -r 1
@ -22,9 +23,8 @@ def convert2mp4(infile, outfile):
# ffmpeg -i E01.ts -c:v copy -c:a copy -preset:v ultrafast -segment_list_flags +live video.mp4 # ffmpeg -i E01.ts -c:v copy -c:a copy -preset:v ultrafast -segment_list_flags +live video.mp4
subprocess.run(['ffmpeg','-i',infile,'-c:v','copy','-c:a','copy','-preset:v','ultrafast','-segment_list_flags','+live',outfile]) subprocess.run(['ffmpeg','-i',infile,'-c:v','copy','-c:a','copy','-preset:v','ultrafast','-segment_list_flags','+live',outfile])
def main(argv): def main(argv):
search_query = argv[1] search_query = argv[1]
search_query_range = argv[2] search_query_range = argv[2]
anime_quality = argv[3] if len(sys.argv) >= 4 else '720[subtitle]' anime_quality = argv[3] if len(sys.argv) >= 4 else '720[subtitle]'
@ -34,6 +34,6 @@ def main(argv):
convert2mp4(infile,outfile) convert2mp4(infile,outfile)
os.remove(infile) os.remove(infile)
if __name__ == '__main__':
import sys
main(sys.argv[0:]) main(sys.argv[0:])

View File

@ -1,17 +1,17 @@
python-telegram-bot=="13.10" python-telegram-bot
telegramclient=="*" telethon
cachetools=="4.2.2" cachetools
certifi=="2021.10.8" certifi
pyaes=="1.6.1" pyaes
pyasn1=="0.4.8" pyasn1
pytz=="2021.3" pytz
pytz-deprecation-shim=="0.1.0.post0" pytz-deprecation-shim
rsa=="4.8" rsa
six=="1.16.0" six
tornado=="6.1" tornado
tzdata=="2021.5" tzdata
tzlocal=="4.1" tzlocal
APScheduler=="3.6.3" APScheduler
ffmpeg = "*" ffmpeg
Telethon=="1.24.0" Telethon
"backports.zoneinfo"=="0.2.1" backports.zoneinfo

View File

@ -19,7 +19,7 @@ import asyncio
import json import json
with open('config/agentConfig.json', 'r') as config: with open('uploaderService/config/agentConfig.json', 'r') as config:
configdata = json.load(config) configdata = json.load(config)
entity = configdata.get('entity') #session name - it doesn't matter what entity = configdata.get('entity') #session name - it doesn't matter what
@ -30,9 +30,7 @@ phone = configdata.get('phone')
bot_name = configdata.get('bot_name') bot_name = configdata.get('bot_name')
# if not client.is_user_authorized():
# #client.send_code_request(phone) #at the first start - uncomment, after authorization to avoid FloodWait I advise you to comment
# client.sign_in(phone, input('Enter code: '))
def callback(current, total): def callback(current, total):
@ -48,6 +46,9 @@ object_id = an internal id used for mapping of file_id and filename stored in th
''' '''
async def uploadVideo(bot_name,file_path,chat_id,object_id): async def uploadVideo(bot_name,file_path,chat_id,object_id):
async with TelegramClient(entity, api_id, api_hash) as client: async with TelegramClient(entity, api_id, api_hash) as client:
if not await client.is_user_authorized():
#await client.send_code_request(phone) #at the first start - uncomment, after authorization to avoid FloodWait I advise you to comment
await client.sign_in(phone, input('Enter code: '))
await client.send_file( await client.send_file(
str(bot_name), str(bot_name),
file_path, file_path,