Created
September 20, 2016 01:17
-
-
Save sleetla/f5be5d8e993845f8d849628e19fa1d4d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pass | |
def main(): | |
if not sys.version_info >= (3, 5): | |
print("Python 3.5+ is required. This version is %s" % sys.version.split()[0]) | |
print("Attempting to locate python 3.5...") | |
pycom = None | |
# Maybe I should check for if the current dir is the musicbot folder, just in case | |
if sys.platform.startswith('win'): | |
try: | |
subprocess.check_output('py -3.5 -c "exit()"', shell=True) | |
pycom = 'py -3.5' | |
except: | |
try: | |
subprocess.check_output('python3 -c "exit()"', shell=True) | |
pycom = 'python3' | |
except: | |
pass | |
if pycom: | |
print("Python 3 found. Launching bot...") | |
os.system('start cmd /k %s run.py' % pycom) | |
sys.exit(0) | |
else: | |
try: | |
pycom = subprocess.check_output(['which', 'python3.5']).strip().decode() | |
except: | |
pass | |
if pycom: | |
print("\nPython 3 found. Re-launching bot using: ") | |
print(" %s run.py\n" % pycom) | |
os.execlp(pycom, pycom, 'run.py') | |
print("Please run the bot using python 3.5") | |
input("Press enter to continue . . .") | |
return | |
import asyncio | |
tried_requirementstxt = False | |
tryagain = True | |
loops = 0 | |
max_wait_time = 60 | |
while tryagain: | |
# Maybe I need to try to import stuff first, then actually import stuff | |
# It'd save me a lot of pain with all that awful exception type checking | |
m = None | |
try: | |
from musicbot import MusicBot | |
m = MusicBot() | |
print("Connecting...", end='', flush=True) | |
m.run() | |
except SyntaxError: | |
traceback.print_exc() | |
break | |
except ImportError as e: | |
if not tried_requirementstxt: | |
tried_requirementstxt = True | |
# TODO: Better output | |
print(e) | |
print("Attempting to install dependencies...") | |
err = PIP.run_install('--upgrade -r requirements.txt') | |
if err: | |
print("\nYou may need to %s to install dependencies." % | |
['use sudo', 'run as admin'][sys.platform.startswith('win')]) | |
break | |
else: | |
print("\nOk lets hope it worked\n") | |
else: | |
traceback.print_exc() | |
print("Unknown ImportError, exiting.") | |
break | |
except Exception as e: | |
if hasattr(e, '__module__') and e.__module__ == 'musicbot.exceptions': | |
if e.__class__.__name__ == 'HelpfulError': | |
print(e.message) | |
break | |
elif e.__class__.__name__ == "TerminateSignal": | |
break | |
elif e.__class__.__name__ == "RestartSignal": | |
loops = -1 | |
else: | |
traceback.print_exc() | |
finally: | |
if not m or not m.init_ok: | |
break | |
asyncio.set_event_loop(asyncio.new_event_loop()) | |
loops += 1 | |
print("Cleaning up... ", end='') | |
gc.collect() | |
print("Done.") | |
sleeptime = min(loops * 2, max_wait_time) | |
if sleeptime: | |
print("Restarting in {} seconds...".format(loops*2)) | |
time.sleep(sleeptime) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment