aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Hassan Abouelela <[email protected]>2021-02-25 12:58:15 +0300
committerGravatar Hassan Abouelela <[email protected]>2021-02-25 12:58:15 +0300
commitc5e113734d16e8d5ac2eede6c1f29e019cfc2f28 (patch)
tree9910e9a508cc6e9b5f05215ad24f4aed89499861
parentMerge pull request #1409 from HassanAbouelela/insensitive-otn-search (diff)
Adds More Descriptive Startup Error Messages
Signed-off-by: Hassan Abouelela <[email protected]>
-rw-r--r--bot/__main__.py24
-rw-r--r--bot/bot.py13
2 files changed, 32 insertions, 5 deletions
diff --git a/bot/__main__.py b/bot/__main__.py
index 257216fa7..e4df4b77d 100644
--- a/bot/__main__.py
+++ b/bot/__main__.py
@@ -1,10 +1,26 @@
+import logging
+
+import aiohttp
+
import bot
from bot import constants
-from bot.bot import Bot
+from bot.bot import Bot, StartupError
from bot.log import setup_sentry
setup_sentry()
-bot.instance = Bot.create()
-bot.instance.load_extensions()
-bot.instance.run(constants.Bot.token)
+try:
+ bot.instance = Bot.create()
+ bot.instance.load_extensions()
+ bot.instance.run(constants.Bot.token)
+except StartupError as e:
+ message = "Unknown Startup Error Occurred."
+ if isinstance(e.exception, aiohttp.ClientConnectorError):
+ message = "Could not connect to site API. Is it running?"
+ elif isinstance(e.exception, OSError):
+ message = "Could not connect to Redis. Is it running?"
+
+ # The exception is logged with an empty message so the actual message is visible at the bottom
+ log = logging.getLogger("bot")
+ log.fatal("", exc_info=e.exception)
+ log.fatal(message)
diff --git a/bot/bot.py b/bot/bot.py
index d5f108575..df80868ee 100644
--- a/bot/bot.py
+++ b/bot/bot.py
@@ -19,6 +19,14 @@ log = logging.getLogger('bot')
LOCALHOST = "127.0.0.1"
+class StartupError(Exception):
+ """Exception class for startup errors."""
+
+ def __init__(self, base: Exception):
+ super()
+ self.exception = base
+
+
class Bot(commands.Bot):
"""A subclass of `discord.ext.commands.Bot` with an aiohttp session and an API client."""
@@ -318,5 +326,8 @@ def _create_redis_session(loop: asyncio.AbstractEventLoop) -> RedisSession:
use_fakeredis=constants.Redis.use_fakeredis,
global_namespace="bot",
)
- loop.run_until_complete(redis_session.connect())
+ try:
+ loop.run_until_complete(redis_session.connect())
+ except OSError as e:
+ raise StartupError(e)
return redis_session