Add ability to login to mega account for premium accounts
Signed-off-by: lzzy12 <jhashivam2020@gmail.com>
This commit is contained in:
parent
df655a356c
commit
8bd01276be
|
|
@ -61,6 +61,8 @@ Fill up rest of the fields. Meaning of each fields are discussed below:
|
||||||
- **API_HASH** : This is to authenticate to your telegram account for downloading Telegram files. You can get this from https://my.telegram.org
|
- **API_HASH** : This is to authenticate to your telegram account for downloading Telegram files. You can get this from https://my.telegram.org
|
||||||
- **USER_SESSION_STRING** : Session string generated by running:
|
- **USER_SESSION_STRING** : Session string generated by running:
|
||||||
- **MEGA_API_KEY**: Mega.nz api key to mirror mega.nz links. Get it from [Mega SDK Page](https://mega.nz/sdk)
|
- **MEGA_API_KEY**: Mega.nz api key to mirror mega.nz links. Get it from [Mega SDK Page](https://mega.nz/sdk)
|
||||||
|
- **MEGA_EMAIL_ID**: You email id you used to sign up on mega.nz for using premium accounts (Leave th)
|
||||||
|
- **
|
||||||
```
|
```
|
||||||
python3 generate_string_session.py
|
python3 generate_string_session.py
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -83,8 +83,17 @@ except KeyError as e:
|
||||||
try:
|
try:
|
||||||
MEGA_API_KEY = getConfig('MEGA_API_KEY')
|
MEGA_API_KEY = getConfig('MEGA_API_KEY')
|
||||||
except KeyError:
|
except KeyError:
|
||||||
logging.warning('MEGA Api key not provided!')
|
logging.warning('MEGA API KEY not provided!')
|
||||||
MEGA_API_KEY = None
|
|
||||||
|
try:
|
||||||
|
MEGA_EMAIL_ID = getConfig('MEGA_EMAIL_ID')
|
||||||
|
MEGA_PASSWORD = getConfig('MEGA_PASSWORD')
|
||||||
|
if len(MEGA_EMAIL_ID) == 0 or len(MEGA_PASSWORD) == 0:
|
||||||
|
raise KeyError
|
||||||
|
except KeyError:
|
||||||
|
logging.warning('MEGA Credentials not provided!')
|
||||||
|
MEGA_EMAIL_ID = None
|
||||||
|
MEGA_PASSWORD = None
|
||||||
try:
|
try:
|
||||||
INDEX_URL = getConfig('INDEX_URL')
|
INDEX_URL = getConfig('INDEX_URL')
|
||||||
if len(INDEX_URL) == 0:
|
if len(INDEX_URL) == 0:
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
from bot import LOGGER, MEGA_API_KEY, download_dict_lock, download_dict
|
from bot import LOGGER, MEGA_API_KEY, download_dict_lock, download_dict, MEGA_EMAIL_ID, MEGA_PASSWORD
|
||||||
import threading
|
import threading
|
||||||
from mega import (MegaApi, MegaListener, MegaRequest, MegaTransfer, MegaError)
|
from mega import (MegaApi, MegaListener, MegaRequest, MegaTransfer, MegaError)
|
||||||
from bot.helper.telegram_helper.message_utils import update_all_messages
|
from bot.helper.telegram_helper.message_utils import update_all_messages
|
||||||
import os
|
import os
|
||||||
from bot.helper.mirror_utils.status_utils.mega_download_status import MegaDownloadStatus
|
from bot.helper.mirror_utils.status_utils.mega_download_status import MegaDownloadStatus
|
||||||
|
|
||||||
|
|
||||||
|
class MegaDownloaderException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MegaAppListener(MegaListener):
|
class MegaAppListener(MegaListener):
|
||||||
|
|
||||||
def __init__(self, continue_event: threading.Event, listener):
|
def __init__(self, continue_event: threading.Event, listener):
|
||||||
|
|
@ -31,7 +36,7 @@ class MegaAppListener(MegaListener):
|
||||||
"""Returns name of the download"""
|
"""Returns name of the download"""
|
||||||
return self.__name
|
return self.__name
|
||||||
|
|
||||||
def setValues(self,name,size,gid):
|
def setValues(self, name, size, gid):
|
||||||
self.__name = name
|
self.__name = name
|
||||||
self.__size = size
|
self.__size = size
|
||||||
self.gid = gid
|
self.gid = gid
|
||||||
|
|
@ -74,11 +79,11 @@ class MegaAppListener(MegaListener):
|
||||||
|
|
||||||
def onTransferUpdate(self, api: MegaApi, transfer: MegaTransfer):
|
def onTransferUpdate(self, api: MegaApi, transfer: MegaTransfer):
|
||||||
if self.is_cancelled:
|
if self.is_cancelled:
|
||||||
api.cancelTransfer(transfer,None)
|
api.cancelTransfer(transfer, None)
|
||||||
self.__speed = transfer.getSpeed()
|
self.__speed = transfer.getSpeed()
|
||||||
self.__bytes_transferred = transfer.getTransferredBytes()
|
self.__bytes_transferred = transfer.getTransferredBytes()
|
||||||
|
|
||||||
def onTransferFinish(self, api: MegaApi, transfer : MegaTransfer, error):
|
def onTransferFinish(self, api: MegaApi, transfer: MegaTransfer, error):
|
||||||
try:
|
try:
|
||||||
LOGGER.info(f'Transfer finished ({transfer}); Result: {transfer.getFileName()}')
|
LOGGER.info(f'Transfer finished ({transfer}); Result: {transfer.getFileName()}')
|
||||||
if str(error) != "No error" and self.is_cancelled:
|
if str(error) != "No error" and self.is_cancelled:
|
||||||
|
|
@ -98,7 +103,8 @@ class MegaAppListener(MegaListener):
|
||||||
def cancel_download(self):
|
def cancel_download(self):
|
||||||
self.is_cancelled = True
|
self.is_cancelled = True
|
||||||
|
|
||||||
class AsyncExecutor(object):
|
|
||||||
|
class AsyncExecutor:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.continue_event = threading.Event()
|
self.continue_event = threading.Event()
|
||||||
|
|
@ -108,16 +114,21 @@ class AsyncExecutor(object):
|
||||||
function(*args)
|
function(*args)
|
||||||
self.continue_event.wait()
|
self.continue_event.wait()
|
||||||
|
|
||||||
|
|
||||||
class MegaDownloadHelper:
|
class MegaDownloadHelper:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def add_download(self, mega_link: str, path: str, listener):
|
def add_download(self, mega_link: str, path: str, listener):
|
||||||
|
if MEGA_API_KEY is None:
|
||||||
|
raise MegaDownloaderException('Mega API KEY not provided! Cannot mirror mega links')
|
||||||
executor = AsyncExecutor()
|
executor = AsyncExecutor()
|
||||||
api = MegaApi(MEGA_API_KEY, None, None, 'telegram-mirror-bot')
|
api = MegaApi(MEGA_API_KEY, None, None, 'telegram-mirror-bot')
|
||||||
mega_listener = MegaAppListener(executor.continue_event, listener)
|
mega_listener = MegaAppListener(executor.continue_event, listener)
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
api.addListener(mega_listener)
|
api.addListener(mega_listener)
|
||||||
|
if MEGA_EMAIL_ID is not None and MEGA_PASSWORD is not None:
|
||||||
|
executor.do(api.login, (MEGA_EMAIL_ID, MEGA_PASSWORD))
|
||||||
executor.do(api.getPublicNode, (mega_link,))
|
executor.do(api.getPublicNode, (mega_link,))
|
||||||
node = mega_listener.node
|
node = mega_listener.node
|
||||||
if node is None:
|
if node is None:
|
||||||
|
|
@ -125,8 +136,8 @@ class MegaDownloadHelper:
|
||||||
node = mega_listener.node
|
node = mega_listener.node
|
||||||
if mega_listener.error is not None:
|
if mega_listener.error is not None:
|
||||||
return listener.onDownloadError(str(mega_listener.error))
|
return listener.onDownloadError(str(mega_listener.error))
|
||||||
mega_listener.setValues(node.getName(),api.getSize(node),mega_link.split("!",1)[-1].split("!",1)[0])
|
mega_listener.setValues(node.getName(), api.getSize(node), mega_link.split("!", 1)[-1].split("!", 1)[0])
|
||||||
with download_dict_lock:
|
with download_dict_lock:
|
||||||
download_dict[listener.uid] = MegaDownloadStatus(mega_listener,listener)
|
download_dict[listener.uid] = MegaDownloadStatus(mega_listener, listener)
|
||||||
threading.Thread(target=executor.do,args=(api.startDownload,(node,path))).start()
|
threading.Thread(target=executor.do, args=(api.startDownload, (node, path))).start()
|
||||||
update_all_messages()
|
update_all_messages()
|
||||||
|
|
|
||||||
|
|
@ -15,3 +15,5 @@ TELEGRAM_API =
|
||||||
TELEGRAM_HASH = ""
|
TELEGRAM_HASH = ""
|
||||||
USE_SERVICE_ACCOUNTS = ""
|
USE_SERVICE_ACCOUNTS = ""
|
||||||
MEGA_API_KEY = ""
|
MEGA_API_KEY = ""
|
||||||
|
MEGA_EMAIL_ID = ""
|
||||||
|
MEGA_PASSWORD = ""
|
||||||
Loading…
Reference in New Issue