55 lines
1.5 KiB
Python
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()
|