#!/usr/bin/env python # Bot Wrapper by neersighted import sys import os import subprocess import re import json if os.path.isfile("./config"): try: config = json.load(open('config')) except ValueError, e: print 'error: malformed config', e else: config = False nocol = "\033[1;m" red = "\033[1;31m" green = "\033[1;32m" usage = "usage: ./cloudbot {start|stop|restart|status}" quit = "Goodbye! Thanks for using CloudBot!" pwd = os.getcwd() clearlog1 = ": > ./bot.log && " clearlog2 = ": > ./bot.log" command = ":" try: daemoncheck = subprocess.check_output("locate /usr/bin/daemon", shell=True) except (subprocess.CalledProcessError), e: daemoncheck = False print "daemon not installed!" exit daemon = re.match(r'^/usr/bin/daemon$', daemoncheck) try: screencheck = subprocess.check_output("locate /usr/bin/screen", shell=True) except (subprocess.CalledProcessError), e: screencheck = False print "screen not installed!" exit screen = re.match(r'^/usr/bin/screen$', screencheck) if os.path.isfile("./config"): backend = config.get("wrapper", {}).get("backend", "daemon") else: backend = daemon try: runningcheck = subprocess.check_output("ps ax|grep cloudbot|"\ "grep -v grep|grep -v ./cloudbot", shell=True) running = re.match(r'^[1-9]+', runningcheck) except (subprocess.CalledProcessError): running = False error1 = red + "Neither screen nor daemon is installed! "\ "This program cannot run! {ERROR 1}" + nocol error2 = red + "Could not find bot.py! Are you in the wrong folder? "\ "(" + pwd + ") {ERROR 2}" + nocol error3 = red + "Invalid choice, exiting! {ERROR 3}" + nocol error4 = red + "Program killed by user! {ERROR 4}" + nocol error5 = red + "Invalid backend in config! {ERROR 5}" + nocol error6 = red + "Author error! We be derpin'! {ERROR 6}" + nocol start = "echo " + error1 stop = "echo " + error1 restart = "echo " + error1 pid = "echo 'Cannot get pid'" if daemon: if backend == "daemon": start = "daemon -n cloudbot -O " + pwd + \ "/bot.log -r python " + pwd + "/bot.py" stop = clearlog1 + "daemon -n cloudbot --stop" restart = clearlog1 + "daemon -n cloudbot --restart" pid = "pidof /usr/bin/daemon" elif backend == "screen": start = "screen -S cloudbot -dm python" + pwd +\ "/bot.py >>" + pwd + "/bot.log 2>&1" stop = clearlog1 + "kill `pidof /usr/bin/screen`" restart = clearlog1 + "daemon -n cloudbot --restart" pid = "pidof /usr/bin/screen" else: print error5 elif screen: if backend == "daemon": start = "daemon -n cloudbot -O " + pwd + \ "/bot.log -r python " + pwd + "/bot.py" stop = clearlog1 + "daemon -n cloudbot --stop" restart = stop + " && " + start pid = "pidof /usr/bin/daemon" elif backend == "screen": start = "screen -S cloudbot -dm python" + pwd +\ "/bot.py >>" + pwd + "/bot.log 2>&1" stop = clearlog1 + "kill `pidof /usr/bin/screen`" restart = stop + " && " + start pid = "pidof /usr/bin/screen" else: print error5 else: command = command print " ______ __ ______ __ __ "\ " _______ .______ ______ .___________." print " / || | / __ \ | | | | "\ "| \ | _ \ / __ \ | |" print "| ,----'| | | | | | | | | | "\ "| .--. || |_) | | | | | `---| |----`" print "| | | | | | | | | | | | "\ "| | | || _ < | | | | | | " print "| `----.| `----.| `--' | | `--' | "\ "| '--' || |_) | | `--' | | | " print " \______||_______| \______/ \______/ "\ "|_______/ |______/ \______/ |__| " print "http://git.io/cloudbot "\ " by lukeroge" try: if running: if (len(sys.argv) > 1): if (sys.argv[1] == 'start'): print "Bot is alread running, cannot start!" elif (sys.argv[1] == 'stop'): command = stop print "Stopping... (" + backend + ")" elif (sys.argv[1] == 'restart'): command = restart print "Restarting... (" + backend + ")" elif (sys.argv[1] == 'status'): command = pid print green + "Bot is running! " + nocol elif (sys.argv[1] == 'clear'): command = clearlog2 else: print usage exit else: print "{1|start} {2|stop} {3|restart} {4|status} {5|exit}" read = int(raw_input('Please choose a option: ')) if read == 1: print "Bot is alread running, cannot start!" elif read == 2: command = stop print "Stopping... (" + backend + ")" elif read == 3: command = restart print "Restarting... (" + backend + ")" elif read == 4: command = pid print green + "Bot is running! " + nocol elif read == 5: print quit else: print error3 else: if (len(sys.argv) > 1): if (sys.argv[1] == 'start'): command = start print "Starting... (" + backend + ")" elif (sys.argv[1] == 'stop'): print "Bot is not running, cannot stop!" elif (sys.argv[1] == 'restart'): print "Bot is not running, cannot restart!" elif (sys.argv[1] == 'status'): print red + "Bot is not running!" + nocol elif (sys.argv[1] == 'clear'): command = clearlog2 else: print usage exit else: print "{1|start} {2|stop} {3|restart} {4|status} {5|exit}" read = int(raw_input('Please choose a option: ')) if read == 1: command = start print "Starting... (" + backend + ")" elif read == 2: print "Bot is not running, cannot stop!" elif read == 3: command = restart elif read == 4: print red + "Bot is not running, cannot restart!" + nocol elif read == 5: print quit else: print error3 exit except (TypeError, ValueError), e: print error3 exit except (KeyboardInterrupt), e: print error4 exit except (NameError, SyntaxError), e: print error6 exit if os.path.isfile("./bot.py"): command = command else: print error2 exit subprocess.call(command, shell=True) print quit exit