hitomi/bot/management/commands/starthitomi.py

55 lines
1.5 KiB
Python

"""Start the Discord bot and connect to Discord."""
import asyncio
import importlib
import logging
from django.conf import settings
from django.core.management.base import BaseCommand
from bot import hitomi
from bot.api import hitomi_api
logger = logging.getLogger(__name__)
@hitomi.event
async def on_ready():
"""Print some basic login info to the console, when the bot connects."""
logger.info("Logged in as {0:s} ({1:s})".format(hitomi.user.name, hitomi.user.id))
# now load bot plugins
for plugin in settings.BOT_PLUGINS:
importlib.import_module(plugin)
@hitomi.event
async def on_message(message):
"""Call all registered on_message handlers."""
for handler in hitomi.on_message_handlers:
handler(message)
# let other stuff happen
await hitomi.process_commands(message)
async def run_bot():
"""Initialize and begin the bot in an asyncio context."""
await hitomi.login(settings.DISCORD_BOT_TOKEN)
await hitomi.connect()
class Command(BaseCommand):
help = "Start the Discord bot and connect to Discord."
def handle(self, *args, **options):
loop = asyncio.get_event_loop()
handler = hitomi_api.make_handler()
api_server = loop.create_server(handler, '0.0.0.0', settings.API_PORT)
futures = asyncio.gather(run_bot(), api_server)
try:
loop.run_until_complete(futures)
except:
loop.run_until_complete(hitomi.logout())
finally:
loop.close()