def run_bot(token: str = None): click.secho('Starting minder bot...', fg='green') try: build_bot(use_token=token, start_bot=True) except Exception as ex: exc_info = get_stacktrace(ex) click.secho(f'Error running bot: {ex}', fg='red') click.secho(f'Stack Trace:\n{"".join(exc_info)}', fg='cyan') raise click.Abort() else: click.secho('Bot finished :)', fg='green')
def start_bot(): logger.info('Starting minder Bot under uWSGI...') bot = build_bot(start_bot=True) loop = bot.loop try: loop.run_in_executor(None, app.run, kwargs={'reload': False, 'eager_loader': False}) loop.run_until_complete(bot.start(Config.BOT_TOKEN)) logger.info('Bot finished, exiting') except KeyboardInterrupt: logger.info('CTRL-C encountered, logging out and cleaning up') loop.run_until_complete(bot.logout()) logger.info('Bot logout complete') finally: logger.info('Loop closing..') loop.close() logger.info('Loop closed, exiting.')
def run_both(token: str, host: str, port: int, use_reloader: bool): from minder.web.app import create_app token = token or Config.BOT_TOKEN click.secho('Starting minder web app and bot...', fg='green') bot = build_bot(use_token=token, start_bot=False) app = create_app(hostname=host, port=port, use_reloader=use_reloader) def int_handler(): click.secho('In int_handler', fg='cyan') thr = threading.Thread(target=app.run, kwargs={'threaded': True}) thr.daemon = True click.secho('Starting Flask application..', fg='green') thr.start() click.secho('Starting bot...', fg='green') bot.run(token) click.secho('Bot closing...', fg='green')
def test_start_bot(): bot = build_bot(start_bot=False) with pytest.raises(discord.errors.LoginFailure): bot.run('asdf')
#!/usr/bin/env python from minder.bot import build_bot from minder.config import Config if __name__ == '__main__': bot = build_bot(start_bot=False) bot.run(Config.BOT_TOKEN)