diff --git a/sessionManager.py b/sessionManager.py index 98a531d..5d8a53e 100644 --- a/sessionManager.py +++ b/sessionManager.py @@ -5,8 +5,10 @@ TELEGRAM_DAEMON_SESSION_PATH = getenv("TELEGRAM_DAEMON_SESSION_PATH") sessionName = "DownloadDaemon" stringSessionFilename = f"{sessionName}.session" + def _getStringSessionIfExists(): - sessionPath = path.join(TELEGRAM_DAEMON_SESSION_PATH, stringSessionFilename) + sessionPath = path.join(TELEGRAM_DAEMON_SESSION_PATH, + stringSessionFilename) if path.isfile(sessionPath): with open(sessionPath, 'r') as file: session = file.read() @@ -14,15 +16,18 @@ def _getStringSessionIfExists(): return session return None + def getSession(): if TELEGRAM_DAEMON_SESSION_PATH == None: return sessionName - + return StringSession(_getStringSessionIfExists()) + def saveSession(session): if TELEGRAM_DAEMON_SESSION_PATH != None: - sessionPath = path.join(TELEGRAM_DAEMON_SESSION_PATH, stringSessionFilename) + sessionPath = path.join(TELEGRAM_DAEMON_SESSION_PATH, + stringSessionFilename) with open(sessionPath, 'w') as file: file.write(StringSession.save(session)) print(f"Session saved in {sessionPath}") diff --git a/telegram-download-daemon.py b/telegram-download-daemon.py index 61e8c0b..23039cd 100644 --- a/telegram-download-daemon.py +++ b/telegram-download-daemon.py @@ -11,7 +11,8 @@ from telethon import TelegramClient, events from telethon.tl.types import PeerChannel import logging -logging.basicConfig(format='[%(levelname) 5s/%(asctime)s]%(name)s:%(message)s',level=logging.WARNING) +logging.basicConfig(format='[%(levelname) 5s/%(asctime)s]%(name)s:%(message)s', + level=logging.WARNING) import argparse import asyncio @@ -22,11 +23,38 @@ TELEGRAM_DAEMON_CHANNEL = getenv("TELEGRAM_DAEMON_CHANNEL") TELEGRAM_DAEMON_SESSION_PATH = getenv("TELEGRAM_DAEMON_SESSION_PATH") -parser = argparse.ArgumentParser(description="Script to download files from Telegram Channel.") -parser.add_argument("--api-id", required=TELEGRAM_DAEMON_API_ID == None, type=int, default=TELEGRAM_DAEMON_API_ID, help='api_id from https://core.telegram.org/api/obtaining_api_id (default is TELEGRAM_DAEMON_API_ID env var)') -parser.add_argument("--api-hash", required=TELEGRAM_DAEMON_API_HASH == None, type=str, default=TELEGRAM_DAEMON_API_HASH, help='api_hash from https://core.telegram.org/api/obtaining_api_id (default is TELEGRAM_DAEMON_API_HASH env var)') -parser.add_argument("--dest", type=str, default=getenv("TELEGRAM_DAEMON_DEST", "/telegram-downloads"), help='Destenation path for downloading files (default is /telegram-downloads).') -parser.add_argument("--channel", required=TELEGRAM_DAEMON_CHANNEL == None, type=int, default=TELEGRAM_DAEMON_CHANNEL, help='Channel id to download from it (default is TELEGRAM_DAEMON_CHANNEL env var') +parser = argparse.ArgumentParser( + description="Script to download files from Telegram Channel.") +parser.add_argument( + "--api-id", + required=TELEGRAM_DAEMON_API_ID == None, + type=int, + default=TELEGRAM_DAEMON_API_ID, + help= + 'api_id from https://core.telegram.org/api/obtaining_api_id (default is TELEGRAM_DAEMON_API_ID env var)' +) +parser.add_argument( + "--api-hash", + required=TELEGRAM_DAEMON_API_HASH == None, + type=str, + default=TELEGRAM_DAEMON_API_HASH, + help= + 'api_hash from https://core.telegram.org/api/obtaining_api_id (default is TELEGRAM_DAEMON_API_HASH env var)' +) +parser.add_argument( + "--dest", + type=str, + default=getenv("TELEGRAM_DAEMON_DEST", "/telegram-downloads"), + help= + 'Destenation path for downloading files (default is /telegram-downloads).') +parser.add_argument( + "--channel", + required=TELEGRAM_DAEMON_CHANNEL == None, + type=int, + default=TELEGRAM_DAEMON_CHANNEL, + help= + 'Channel id to download from it (default is TELEGRAM_DAEMON_CHANNEL env var' +) args = parser.parse_args() api_id = args.api_id @@ -36,18 +64,21 @@ downloadFolder = args.dest # Edit these lines: proxy = None -# End of interesting parameters + +# End of interesting parameters async def sendHelloMessage(client, peerChannel): entity = await client.get_entity(peerChannel) await client.send_message(entity, "Hi! Ready for you files!") + async def log_respond(event, respond): print(respond) await event.respond(respond) -with TelegramClient(getSession(), api_id, api_hash, proxy=proxy).start() as client: +with TelegramClient(getSession(), api_id, api_hash, + proxy=proxy).start() as client: saveSession(client.session) @@ -58,18 +89,21 @@ with TelegramClient(getSession(), api_id, api_hash, proxy=proxy).start() as clie if event.to_id != peerChannel: return - + print(event) - + if event.media: - filename=event.media.document.attributes[0].file_name - await log_respond(event, f"Downloading file {filename} ({event.media.document.size} bytes)") + filename = event.media.document.attributes[0].file_name + await log_respond( + event, + f"Downloading file {filename} ({event.media.document.size} bytes)" + ) await client.download_media(event.message, downloadFolder) await log_respond(event, f"{filename} ready") - + async def start(): await sendHelloMessage(client, peerChannel) await client.run_until_disconnected() - + client.loop.run_until_complete(start())