Exemplo n.º 1
0
def runBot(argv):
    # argv -1, sub program call
    if sys.argv[-1] == '--subprocessCall':
        # Remove the last item
        sys.argv.pop()
        try:
            # Bot login, run
            # QQBot is defined below.
            bot = QQBot._bot
            bot.Login(argv)
            bot.Run()
        finally:
            # Finally, always run, no matter what
            # If bot has conf, bot conf storeQQ
            if hasattr(bot, 'conf'):
                bot.conf.StoreQQ()
    else:
        # Not sub program called
        conf = QConf()

        # QQ run in background
        if conf.daemon:
            conf.Daemonize()

        if sys.argv[0].endswith('py') or sys.argv[0].endswith('pyc'):
            args = [sys.executable] + sys.argv
        else:
            args = sys.argv

        args = args + ['--mailAuthCode', conf.mailAuthCode]
        args = args + ['--qq', conf.qq]
        args = args + ['--subprocessCall']

        while True:
            p = subprocess.Popen(args)
            code = p.wait()
            if code == 0:
                INFO('QQBot 正常停止')
                sys.exit(code)
            elif code == RESTART:
                args[-2] = conf.LoadQQ()
                INFO('5 秒后重新启动 QQBot (自动登陆,qq=%s)', args[-2])
                time.sleep(5)
            elif code == FRESH_RESTART:
                args[-2] = ''
                INFO('5 秒后重新启动 QQBot (手工登陆)')
                time.sleep(5)
            else:
                CRITICAL('QQBOT 异常停止(code=%s)', code)
                if conf.restartOnOffline:
                    args[-2] = conf.LoadQQ()
                    INFO('15秒后重新启动 QQBot (自动登陆,qq=%s)', args[-2])
                    time.sleep(15)
                else:
                    sys.exit(code)
Exemplo n.º 2
0
def runBot(argv):
    if sys.argv[-1] == '--subprocessCall':
        sys.argv.pop()
        try:
            bot = QQBot._bot
            bot.Login(argv)
            bot.Run()
        finally:
            if hasattr(bot, 'conf'):
                bot.conf.StoreQQ()
    else:
        conf = QConf()

        if conf.daemon:
            conf.Daemonize()

        if sys.argv[0].endswith('py') or sys.argv[0].endswith('pyc'):
            args = [sys.executable] + sys.argv
        else:
            args = sys.argv

        args = args + ['--mailAuthCode', conf.mailAuthCode]
        args = args + ['--qq', conf.qq]
        args = args + ['--subprocessCall']

        while True:
            p = subprocess.Popen(args)
            code = p.wait()
            if code == 0:
                INFO('QQBot 正常停止')
                sys.exit(code)
            elif code == RESTART:
                args[-2] = conf.LoadQQ()
                INFO('5 秒后重新启动 QQBot (自动登陆,qq=%s)', args[-2])
                time.sleep(5)
            elif code == FRESH_RESTART:
                args[-2] = ''
                INFO('5 秒后重新启动 QQBot (手工登陆)')
                time.sleep(5)
            else:
                CRITICAL('QQBOT 异常停止(code=%s)', code)
                if conf.restartOnOffline:
                    args[-2] = conf.LoadQQ()
                    INFO('15秒后重新启动 QQBot (自动登陆,qq=%s)', args[-2])
                    time.sleep(15)
                else:
                    sys.exit(code)
Exemplo n.º 3
0
def runBot(botCls, qq, user):
    if sys.argv[-1] == '--subprocessCall':
        isSubprocessCall = True
        sys.argv.pop()
    else:
        isSubprocessCall = False

    if isSubprocessCall:
        bot = botCls()
        bot.Login(qq, user)
        bot.Run()
    else:
        conf = QConf(qq, user)

        if sys.argv[0].endswith('py') or sys.argv[0].endswith('pyc'):
            args = [sys.executable] + sys.argv
        else:
            args = sys.argv

        args = args + ['--mailAuthCode', conf.mailAuthCode]
        args = args + ['--qq', conf.qq]
        args = args + ['--subprocessCall']

        while True:
            p = subprocess.Popen(args)
            pid = p.pid
            code = p.wait()
            if code == 0:
                INFO('QQBot 正常停止')
                sys.exit(code)
            elif code == RESTART:
                args[-2] = conf.LoadQQ(pid)
                INFO('5 秒后重新启动 QQBot (自动登陆)')
                time.sleep(5)
            elif code == FRESH_RESTART:
                args[-2] = ''
                INFO('5 秒后重新启动 QQBot (手工登陆)')
                time.sleep(5)
            else:
                CRITICAL('QQBOT 异常停止(code=%s)', code)
                if conf.restartOnOffline:
                    args[-2] = conf.LoadQQ(pid)
                    INFO('30秒后重新启动 QQBot (自动登陆)')
                    time.sleep(30)
                else:
                    sys.exit(code)