import shutil import signal import pickle from os import execl, path, remove from sys import executable from telegram.ext import CommandHandler, run_async from bot import dispatcher, updater, botStartTime 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 .modules import authorize, list, cancel_mirror, mirror_status, mirror, clone, watch @run_async def stats(update, context): currentTime = get_readable_time((time.time() - botStartTime)) total, used, free = shutil.disk_usage('.') total = get_readable_file_size(total) used = get_readable_file_size(used) free = get_readable_file_size(free) stats = f'Bot Uptime: {currentTime}\n' \ f'Total disk space: {total}\n' \ f'Used: {used}\n' \ f'Free: {free}' sendMessage(stats, context.bot, update) @run_async def start(update, context): sendMessage("This is a bot which can mirror all your links to Google drive!\n" "Type /help to get a list of available commands", context.bot, update) @run_async def restart(update, context): restart_message = sendMessage("Restarting, Please wait!", context.bot, update) # Save restart message object in order to reply to it after restarting fs_utils.clean_all() with open('restart.pickle', 'wb') as status: pickle.dump(restart_message, status) execl(executable, executable, "-m", "bot") @run_async def ping(update, context): start_time = int(round(time.time() * 1000)) reply = sendMessage("Starting Ping", context.bot, update) end_time = int(round(time.time() * 1000)) editMessage(f'{end_time - start_time} ms', reply) @run_async def log(update, context): sendLogFile(context.bot, update) @run_async def bot_help(update, context): help_string = f''' /{BotCommands.HelpCommand}: To get this message /{BotCommands.MirrorCommand} [download_url][magnet_link]: Start mirroring the link to google drive /{BotCommands.TarMirrorCommand} [download_url][magnet_link]: start mirroring and upload the archived (.tar) version of the download /{BotCommands.WatchCommand} [youtube-dl supported link]: Mirror through youtube-dl /{BotCommands.TarWatchCommand} [youtube-dl supported link]: Mirror through youtube-dl and tar before uploading /{BotCommands.CancelMirror} : Reply to the message by which the download was initiated and that download will be cancelled /{BotCommands.StatusCommand}: Shows a status of all the downloads /{BotCommands.ListCommand} [search term]: Searches the search term in the Google drive, if found replies with the link /{BotCommands.StatsCommand}: Show Stats of the machine the bot is hosted on /{BotCommands.AuthorizeCommand}: Authorize a chat or a user to use the bot (Can only be invoked by owner of the bot) /{BotCommands.LogCommand}: Get a log file of the bot. Handy for getting crash reports ''' sendMessage(help_string, context.bot, update) def main(): fs_utils.start_cleanup() # Check if the bot is restarting if path.exists('restart.pickle'): with open('restart.pickle', 'rb') as status: restart_message = pickle.load(status) restart_message.edit_text("Restarted Successfully!") remove('restart.pickle') start_handler = CommandHandler(BotCommands.StartCommand, start, filters=CustomFilters.authorized_chat | CustomFilters.authorized_user) ping_handler = CommandHandler(BotCommands.PingCommand, ping, filters=CustomFilters.authorized_chat | CustomFilters.authorized_user) restart_handler = CommandHandler(BotCommands.RestartCommand, restart, filters=CustomFilters.owner_filter) help_handler = CommandHandler(BotCommands.HelpCommand, bot_help, filters=CustomFilters.authorized_chat | CustomFilters.authorized_user) stats_handler = CommandHandler(BotCommands.StatsCommand, stats, filters=CustomFilters.authorized_chat | CustomFilters.authorized_user) log_handler = CommandHandler(BotCommands.LogCommand, log, filters=CustomFilters.owner_filter) dispatcher.add_handler(start_handler) dispatcher.add_handler(ping_handler) dispatcher.add_handler(restart_handler) dispatcher.add_handler(help_handler) dispatcher.add_handler(stats_handler) dispatcher.add_handler(log_handler) updater.start_polling() LOGGER.info("Bot Started!") signal.signal(signal.SIGINT, fs_utils.exit_clean_up) main()