parent
3f60e1975a
commit
3bdbc73ea9
|
|
@ -163,13 +163,10 @@ Fill up rest of the fields. Meaning of each field is discussed below:
|
|||
- `TAR_UNZIP_LIMIT`: To limit the size of mirroring as Tar or unzipmirror. Available units are (gb or GB, tb or TB), Examples: `100 gb, 100 GB, 10 tb, 10 TB`
|
||||
- `VIEW_LINK`: View Link button to open file Index Link in browser instead of direct download link, you can figure out if it's compatible with your Index code or not, open any video from you Index and check if its URL ends with `?a=view`, if yes make it `True` it will work (Compatible with https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index Code)
|
||||
- `UPTOBOX_TOKEN`: Uptobox token to mirror uptobox links. Get it from [Uptobox Premium Account](https://uptobox.com/my_account).
|
||||
- `HEROKU_EMAIL`: E-Mail of the Heroku account in which the above app will be deployed (**NOTE**: Only needed if you are deploying on Heroku with Github Workflow).
|
||||
- `HEROKU_API_KEY`: (Only if you deploying on Heroku) Your Heroku API key, get it from https://dashboard.heroku.com/account.
|
||||
- `HEROKU_APP_NAME`: (Only if you deploying on Heroku) Your Heroku app name.
|
||||
- `IGNORE_PENDING_REQUESTS`: If you want the bot to ignore pending requests after it restarts, set this to `True`.
|
||||
- `STATUS_LIMIT`: Limit the no. of tasks shown in status message with button. (**NOTE**: Recommended limit is `4` tasks at max).
|
||||
- `IS_VPS`: (Only for VPS) Don't set this to `True` even if you are using VPS, unless facing error with web server. Also go to start.sh and replace `$PORT` by `80` or any port you want to use.
|
||||
- `SERVER_PORT`: (Only if IS_VPS is `True`) Base URL Port
|
||||
- `SERVER_PORT`: Only For VPS even if `IS_VPS` is `False` --> Base URL Port
|
||||
- `BASE_URL_OF_BOT`: (Required for Heroku to avoid sleep/idling) Valid BASE URL of app where the bot is deployed. IP/Domain of your bot like `http://myip` or if you have chosen other port then `80` then `http://myip:port`, for Heroku fill `https://yourappname.herokuapp.com` (**NOTE**: Do not put slash at the end), still got idling? You can use http://cron-job.org to ping your Heroku app.
|
||||
- `SHORTENER_API`: Fill your Shortener API key if you are using Shortener.
|
||||
- `SHORTENER`: if you want to use Shortener in G-Drive and index link, fill Shortener URL here. Examples:
|
||||
|
|
|
|||
11
alive.py
11
alive.py
|
|
@ -7,12 +7,13 @@ import requests
|
|||
import os
|
||||
|
||||
BASE_URL = os.environ.get('BASE_URL_OF_BOT', None)
|
||||
if len(BASE_URL) == 0:
|
||||
try:
|
||||
if len(BASE_URL) == 0:
|
||||
BASE_URL = None
|
||||
except:
|
||||
BASE_URL = None
|
||||
|
||||
IS_VPS = os.environ.get('IS_VPS', 'False')
|
||||
IS_VPS = IS_VPS.lower() == 'true'
|
||||
if not IS_VPS and BASE_URL is not None:
|
||||
PORT = os.environ.get('PORT', None)
|
||||
if PORT is not None and BASE_URL is not None:
|
||||
while True:
|
||||
time.sleep(600)
|
||||
status = requests.get(BASE_URL).status_code
|
||||
|
|
|
|||
|
|
@ -46,12 +46,13 @@ if CONFIG_FILE_URL is not None:
|
|||
|
||||
load_dotenv('config.env')
|
||||
|
||||
PORT = os.environ.get('PORT', 'SERVER_PORT')
|
||||
web = subprocess.Popen([f"gunicorn wserver:start_server --bind 0.0.0.0:{PORT} --worker-class aiohttp.GunicornWebWorker"], shell=True)
|
||||
alive = subprocess.Popen(["python3", "alive.py"])
|
||||
|
||||
subprocess.run(["mkdir", "-p", "qBittorrent/config"])
|
||||
subprocess.run(["cp", "qBittorrent.conf", "qBittorrent/config/qBittorrent.conf"])
|
||||
subprocess.run(["qbittorrent-nox", "-d", "--profile=."])
|
||||
|
||||
time.sleep(0.5)
|
||||
Interval = []
|
||||
DRIVES_NAMES = []
|
||||
DRIVES_IDS = []
|
||||
|
|
@ -156,7 +157,6 @@ try:
|
|||
if len(DB_URI) == 0:
|
||||
raise KeyError
|
||||
except KeyError:
|
||||
logging.warning('Database not provided!')
|
||||
DB_URI = None
|
||||
if DB_URI is not None:
|
||||
try:
|
||||
|
|
@ -180,7 +180,7 @@ if DB_URI is not None:
|
|||
conn.close()
|
||||
|
||||
LOGGER.info("Generating USER_SESSION_STRING")
|
||||
app = Client(':memory:', api_id=int(TELEGRAM_API), api_hash=TELEGRAM_HASH, bot_token=BOT_TOKEN)
|
||||
app = Client('Slam', api_id=int(TELEGRAM_API), api_hash=TELEGRAM_HASH, bot_token=BOT_TOKEN)
|
||||
|
||||
# Generate Telegraph Token
|
||||
sname = ''.join(random.SystemRandom().choices(string.ascii_letters, k=8))
|
||||
|
|
@ -211,15 +211,6 @@ except KeyError:
|
|||
logging.warning('MEGA Credentials not provided!')
|
||||
MEGA_EMAIL_ID = None
|
||||
MEGA_PASSWORD = None
|
||||
try:
|
||||
HEROKU_API_KEY = getConfig('HEROKU_API_KEY')
|
||||
HEROKU_APP_NAME = getConfig('HEROKU_APP_NAME')
|
||||
if len(HEROKU_API_KEY) == 0 or len(HEROKU_APP_NAME) == 0:
|
||||
HEROKU_API_KEY = None
|
||||
HEROKU_APP_NAME = None
|
||||
except KeyError:
|
||||
HEROKU_API_KEY = None
|
||||
HEROKU_APP_NAME = None
|
||||
try:
|
||||
UPTOBOX_TOKEN = getConfig('UPTOBOX_TOKEN')
|
||||
except KeyError:
|
||||
|
|
@ -338,14 +329,6 @@ try:
|
|||
IS_VPS = IS_VPS.lower() == 'true'
|
||||
except KeyError:
|
||||
IS_VPS = False
|
||||
try:
|
||||
SERVER_PORT = getConfig('SERVER_PORT')
|
||||
if len(SERVER_PORT) == 0:
|
||||
SERVER_PORT = None
|
||||
except KeyError:
|
||||
if IS_VPS:
|
||||
logging.warning('SERVER_PORT not provided!')
|
||||
SERVER_PORT = None
|
||||
try:
|
||||
TOKEN_PICKLE_URL = getConfig('TOKEN_PICKLE_URL')
|
||||
if len(TOKEN_PICKLE_URL) == 0:
|
||||
|
|
|
|||
|
|
@ -4,20 +4,19 @@ import os
|
|||
import asyncio
|
||||
|
||||
from pyrogram import idle
|
||||
from bot import app, alive
|
||||
from sys import executable
|
||||
|
||||
from telegram import ParseMode
|
||||
from telegram.ext import CommandHandler
|
||||
from wserver import start_server_async
|
||||
from bot import bot, dispatcher, updater, botStartTime, IGNORE_PENDING_REQUESTS, IS_VPS, SERVER_PORT
|
||||
from bot import bot, app, dispatcher, updater, botStartTime, IGNORE_PENDING_REQUESTS, IS_VPS, PORT, alive, web
|
||||
from bot.helper.ext_utils import fs_utils
|
||||
from bot.helper.telegram_helper.bot_commands import BotCommands
|
||||
from bot.helper.telegram_helper.message_utils import *
|
||||
from .helper.ext_utils.bot_utils import get_readable_file_size, get_readable_time
|
||||
from .helper.telegram_helper.filters import CustomFilters
|
||||
from bot.helper.telegram_helper import button_build
|
||||
from .modules import authorize, list, cancel_mirror, mirror_status, mirror, clone, watch, shell, eval, torrent_search, delete, speedtest, count, reboot
|
||||
from .modules import authorize, list, cancel_mirror, mirror_status, mirror, clone, watch, shell, eval, torrent_search, delete, speedtest, count
|
||||
|
||||
|
||||
def stats(update, context):
|
||||
|
|
@ -71,6 +70,7 @@ def restart(update, context):
|
|||
f.write(f"{restart_message.chat.id}\n{restart_message.message_id}\n")
|
||||
fs_utils.clean_all()
|
||||
alive.terminate()
|
||||
web.terminate()
|
||||
os.execl(executable, executable, "-m", "bot")
|
||||
|
||||
|
||||
|
|
@ -207,7 +207,7 @@ def main():
|
|||
fs_utils.start_cleanup()
|
||||
|
||||
if IS_VPS:
|
||||
asyncio.get_event_loop().run_until_complete(start_server_async(SERVER_PORT))
|
||||
asyncio.get_event_loop().run_until_complete(start_server_async(PORT))
|
||||
|
||||
# Check if the bot is restarting
|
||||
if os.path.isfile(".restartmsg"):
|
||||
|
|
|
|||
|
|
@ -1,25 +0,0 @@
|
|||
import heroku3
|
||||
|
||||
from functools import wraps
|
||||
from bot import HEROKU_API_KEY, HEROKU_APP_NAME
|
||||
|
||||
|
||||
heroku_client = heroku3.from_key(HEROKU_API_KEY) if HEROKU_API_KEY else None
|
||||
|
||||
def check_heroku(func):
|
||||
@wraps(func)
|
||||
async def heroku_cli(client, message):
|
||||
heroku_app = None
|
||||
if not heroku_client:
|
||||
await message.reply_text("`Please Add HEROKU_API_KEY Key For This To Function To Work!`", parse_mode="markdown")
|
||||
elif not HEROKU_APP_NAME:
|
||||
await message.reply_text("`Please Add HEROKU_APP_NAME For This To Function To Work!`", parse_mode="markdown")
|
||||
if HEROKU_APP_NAME and heroku_client:
|
||||
try:
|
||||
heroku_app = heroku_client.app(HEROKU_APP_NAME)
|
||||
except:
|
||||
await message.reply_text(message, "`Heroku Api Key And App Name Doesn't Match!`", parse_mode="markdown")
|
||||
if heroku_app:
|
||||
await func(client, message, heroku_app)
|
||||
|
||||
return heroku_cli
|
||||
|
|
@ -22,7 +22,9 @@ class AriaDownloadHelper:
|
|||
if STOP_DUPLICATE and dl is not None:
|
||||
LOGGER.info('Checking File/Folder if already in Drive...')
|
||||
sname = aria2.get_download(gid).name
|
||||
if dl.getListener().isTar:
|
||||
if dl.getListener().isTar and dl.getListener().isZip:
|
||||
sname = sname + ".zip"
|
||||
elif dl.getListener().isTar:
|
||||
sname = sname + ".tar"
|
||||
if dl.getListener().extract:
|
||||
smsg = None
|
||||
|
|
|
|||
|
|
@ -170,7 +170,9 @@ class MegaDownloadHelper:
|
|||
if STOP_DUPLICATE:
|
||||
LOGGER.info('Checking File/Folder if already in Drive')
|
||||
mname = node.getName()
|
||||
if listener.isTar:
|
||||
if listener.isTar and listener.isZip:
|
||||
mname = mname + ".zip"
|
||||
elif listener.isTar:
|
||||
mname = mname + ".tar"
|
||||
if listener.extract:
|
||||
smsg = None
|
||||
|
|
|
|||
|
|
@ -101,13 +101,8 @@ class TelegramDownloadHelper(DownloadHelper):
|
|||
if download:
|
||||
if STOP_DUPLICATE:
|
||||
LOGGER.info('Checking File/Folder if already in Drive...')
|
||||
if self.__listener.isTar:
|
||||
name = name + ".tar"
|
||||
if self.__listener.extract:
|
||||
smsg = None
|
||||
else:
|
||||
gd = GoogleDriveHelper()
|
||||
smsg, button = gd.drive_list(name, True)
|
||||
gd = GoogleDriveHelper()
|
||||
smsg, button = gd.drive_list(name, True)
|
||||
if smsg:
|
||||
sendMarkup("File/Folder is already available in Drive.\nHere are the search results:", self.__listener.bot, self.__listener.update, button)
|
||||
return
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
# Implement By https://github.com/jusidama18
|
||||
# Based on this https://github.com/DevsExpo/FridayUserbot/blob/master/plugins/heroku_helpers.py
|
||||
|
||||
from pyrogram import filters
|
||||
from bot import app, OWNER_ID, bot
|
||||
from bot.helper import check_heroku
|
||||
|
||||
@app.on_message(filters.command(['reboot', f'reboot@{bot.username}']) & filters.user(OWNER_ID))
|
||||
@check_heroku
|
||||
async def gib_restart(client, message, hap):
|
||||
msg_ = await message.reply_text("**[HEROKU] - Restarting**")
|
||||
hap.restart()
|
||||
|
||||
@app.on_message(filters.command(['shutdown', f'shutdown@{bot.username}']) & filters.user(OWNER_ID))
|
||||
@check_heroku
|
||||
async def shutdown(client, message, app_):
|
||||
msg_ = await message.reply_text("**[HEROKU] - Shutdown**\n\n**NOTE: You need to turn on manual from Heroku to use this bot again.**")
|
||||
app_.process_formation()["worker"].scale(0)
|
||||
|
|
@ -30,7 +30,7 @@ SHORTENER = ""
|
|||
SHORTENER_API = ""
|
||||
# qBittorrent
|
||||
IS_VPS = "" # Don't set this to True even if VPS, unless facing error with web server
|
||||
SERVER_PORT = "80" # Only if IS_VPS is True
|
||||
SERVER_PORT = "80" # Only For VPS even if is_vps is false
|
||||
BASE_URL_OF_BOT = "" # Web Link, Required for Heroku to avoid sleep or use worker if you don't want to use web (selection)
|
||||
# If you want to use Credentials externally from Index Links, fill these vars with the direct links
|
||||
# These are optional, if you don't know, simply leave them, don't fill anything in them.
|
||||
|
|
@ -42,9 +42,6 @@ TORRENT_DIRECT_LIMIT = ""
|
|||
TAR_UNZIP_LIMIT = ""
|
||||
CLONE_LIMIT = ""
|
||||
MEGA_LIMIT = ""
|
||||
# Optional for Heroku features (dyno restart (/reboot) and update cmd soon)
|
||||
HEROKU_API_KEY = ""
|
||||
HEROKU_APP_NAME = ""
|
||||
# View Link button to open file Index Link in browser instead of direct download link
|
||||
# You can figure out if it's compatible with your Index code or not, open any video from you Index and check if the END of link from browser link bar is ?a=view, if yes make it "True" it will work (Compatible with Bhadoo Index Code)
|
||||
VIEW_LINK = ""
|
||||
|
|
|
|||
2
start.sh
2
start.sh
|
|
@ -1 +1 @@
|
|||
gunicorn wserver:start_server --bind 0.0.0.0:$PORT --worker-class aiohttp.GunicornWebWorker & ./aria.sh; python3 -m bot
|
||||
./aria.sh; python3 -m bot
|
||||
|
|
|
|||
11
wserver.py
11
wserver.py
|
|
@ -10,6 +10,10 @@ import asyncio
|
|||
from aiohttp import web
|
||||
import nodes
|
||||
|
||||
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
handlers=[logging.FileHandler('log.txt'), logging.StreamHandler()],
|
||||
level=logging.INFO)
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
routes = web.RouteTableDef()
|
||||
|
|
@ -626,7 +630,7 @@ async def re_verfiy(paused, resumed, client, torr):
|
|||
|
||||
if verify:
|
||||
break
|
||||
LOGGER.error("Reverification Failed, correcting stuff...")
|
||||
LOGGER.info("Reverification Failed: correcting stuff...")
|
||||
client.auth_log_out()
|
||||
client = qba.Client(host="localhost", port="8090",
|
||||
username="admin", password="adminadmin")
|
||||
|
|
@ -645,6 +649,7 @@ async def re_verfiy(paused, resumed, client, torr):
|
|||
k += 1
|
||||
if k > 4:
|
||||
return False
|
||||
LOGGER.info("Verified")
|
||||
return True
|
||||
|
||||
|
||||
|
|
@ -691,7 +696,7 @@ async def set_priority(request):
|
|||
|
||||
await asyncio.sleep(2)
|
||||
if not await re_verfiy(pause, resume, client, torr):
|
||||
LOGGER.error("The Torrent choose errored reverification failed")
|
||||
LOGGER.error("Verification Failed")
|
||||
client.auth_log_out()
|
||||
return await list_torrent_contents(request)
|
||||
|
||||
|
|
@ -725,7 +730,7 @@ async def start_server():
|
|||
return app
|
||||
|
||||
|
||||
async def start_server_async(port=8080):
|
||||
async def start_server_async(port=80):
|
||||
|
||||
app = web.Application(middlewares=[e404_middleware])
|
||||
app.add_routes(routes)
|
||||
|
|
|
|||
Loading…
Reference in New Issue