aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Jens <[email protected]>2019-10-03 17:36:32 +0200
committerGravatar Jens <[email protected]>2019-10-03 17:36:32 +0200
commitee71c2c78050649d4608962398daa5e70ad35e23 (patch)
tree3991005af853be842ac28d47c6fe8000a708f872
parentUpdate contrib doc for new wiki links (#470) (diff)
Prepare cogs on cog init & wait for bot ready flag
-rw-r--r--bot/cogs/antispam.py6
-rw-r--r--bot/cogs/defcon.py6
-rw-r--r--bot/cogs/doc.py6
-rw-r--r--bot/cogs/logging.py6
-rw-r--r--bot/cogs/moderation.py6
-rw-r--r--bot/cogs/off_topic_names.py6
-rw-r--r--bot/cogs/reddit.py6
-rw-r--r--bot/cogs/reminders.py6
-rw-r--r--bot/cogs/sync/cog.py6
9 files changed, 36 insertions, 18 deletions
diff --git a/bot/cogs/antispam.py b/bot/cogs/antispam.py
index 8dfa0ad05..68b3cf91b 100644
--- a/bot/cogs/antispam.py
+++ b/bot/cogs/antispam.py
@@ -107,14 +107,16 @@ class AntiSpam(Cog):
self.message_deletion_queue = dict()
self.queue_consumption_tasks = dict()
+ bot.loop.create_task(self.prepare_cog())
+
@property
def mod_log(self) -> ModLog:
"""Allows for easy access of the ModLog cog."""
return self.bot.get_cog("ModLog")
- @Cog.listener()
- async def on_ready(self) -> None:
+ async def prepare_cog(self) -> None:
"""Unloads the cog and alerts admins if configuration validation failed."""
+ await self.bot.wait_until_ready()
if self.validation_errors:
body = "**The following errors were encountered:**\n"
body += "\n".join(f"- {error}" for error in self.validation_errors.values())
diff --git a/bot/cogs/defcon.py b/bot/cogs/defcon.py
index 048d8a683..93d84e6b5 100644
--- a/bot/cogs/defcon.py
+++ b/bot/cogs/defcon.py
@@ -35,14 +35,16 @@ class Defcon(Cog):
self.channel = None
self.days = timedelta(days=0)
+ bot.loop.create_task(self.prepare_cog())
+
@property
def mod_log(self) -> ModLog:
"""Get currently loaded ModLog cog instance."""
return self.bot.get_cog("ModLog")
- @Cog.listener()
- async def on_ready(self) -> None:
+ async def prepare_cog(self) -> None:
"""On cog load, try to synchronize DEFCON settings to the API."""
+ self.bot.wait_until_ready()
self.channel = await self.bot.fetch_channel(Channels.defcon)
try:
response = await self.bot.api_client.get('bot/bot-settings/defcon')
diff --git a/bot/cogs/doc.py b/bot/cogs/doc.py
index e5c51748f..d503ea4c1 100644
--- a/bot/cogs/doc.py
+++ b/bot/cogs/doc.py
@@ -126,9 +126,11 @@ class Doc(commands.Cog):
self.bot = bot
self.inventories = {}
- @commands.Cog.listener()
- async def on_ready(self) -> None:
+ bot.loop.create_task(self.prepare_cog())
+
+ async def prepare_cog(self) -> None:
"""Refresh documentation inventory."""
+ await self.bot.wait_until_ready()
await self.refresh_inventory()
async def update_single(
diff --git a/bot/cogs/logging.py b/bot/cogs/logging.py
index 8e47bcc36..25b7d77cc 100644
--- a/bot/cogs/logging.py
+++ b/bot/cogs/logging.py
@@ -15,9 +15,11 @@ class Logging(Cog):
def __init__(self, bot: Bot):
self.bot = bot
- @Cog.listener()
- async def on_ready(self) -> None:
+ bot.loop.create_task(self.prepare_cog())
+
+ async def prepare_cog(self) -> None:
"""Announce our presence to the configured devlog channel."""
+ await self.bot.wait_until_ready()
log.info("Bot connected!")
embed = Embed(description="Connected!")
diff --git a/bot/cogs/moderation.py b/bot/cogs/moderation.py
index b596f36e6..79502ee1c 100644
--- a/bot/cogs/moderation.py
+++ b/bot/cogs/moderation.py
@@ -64,14 +64,16 @@ class Moderation(Scheduler, Cog):
self._muted_role = Object(constants.Roles.muted)
super().__init__()
+ bot.loop.create_task(self.prepare_cog())
+
@property
def mod_log(self) -> ModLog:
"""Get currently loaded ModLog cog instance."""
return self.bot.get_cog("ModLog")
- @Cog.listener()
- async def on_ready(self) -> None:
+ async def prepare_cog(self) -> None:
"""Schedule expiration for previous infractions."""
+ await self.bot.wait_until_ready()
# Schedule expiration for previous infractions
infractions = await self.bot.api_client.get(
'bot/infractions', params={'active': 'true'}
diff --git a/bot/cogs/off_topic_names.py b/bot/cogs/off_topic_names.py
index 16717d523..eb966c737 100644
--- a/bot/cogs/off_topic_names.py
+++ b/bot/cogs/off_topic_names.py
@@ -75,14 +75,16 @@ class OffTopicNames(Cog):
self.bot = bot
self.updater_task = None
+ bot.loop.create_task(self.prepare_cog())
+
def cog_unload(self) -> None:
"""Cancel any running updater tasks on cog unload."""
if self.updater_task is not None:
self.updater_task.cancel()
- @Cog.listener()
- async def on_ready(self) -> None:
+ async def prepare_cog(self) -> None:
"""Start off-topic channel updating event loop if it hasn't already started."""
+ self.bot.wait_until_ready()
if self.updater_task is None:
coro = update_names(self.bot)
self.updater_task = self.bot.loop.create_task(coro)
diff --git a/bot/cogs/reddit.py b/bot/cogs/reddit.py
index 63a57c5c6..ba926e166 100644
--- a/bot/cogs/reddit.py
+++ b/bot/cogs/reddit.py
@@ -33,6 +33,8 @@ class Reddit(Cog):
self.new_posts_task = None
self.top_weekly_posts_task = None
+ bot.loop.create_task(self.prepare_cog())
+
async def fetch_posts(self, route: str, *, amount: int = 25, params: dict = None) -> List[dict]:
"""A helper method to fetch a certain amount of Reddit posts at a given route."""
# Reddit's JSON responses only provide 25 posts at most.
@@ -253,9 +255,9 @@ class Reddit(Cog):
max_lines=15
)
- @Cog.listener()
- async def on_ready(self) -> None:
+ async def prepare_cog(self) -> None:
"""Initiate reddit post event loop."""
+ self.bot.wait_until_ready()
self.reddit_channel = await self.bot.fetch_channel(Channels.reddit)
if self.reddit_channel is not None:
diff --git a/bot/cogs/reminders.py b/bot/cogs/reminders.py
index 6e91d2c06..dc5536b12 100644
--- a/bot/cogs/reminders.py
+++ b/bot/cogs/reminders.py
@@ -30,9 +30,11 @@ class Reminders(Scheduler, Cog):
self.bot = bot
super().__init__()
- @Cog.listener()
- async def on_ready(self) -> None:
+ bot.loop.create_task(self.prepare_cog())
+
+ async def prepare_cog(self) -> None:
"""Get all current reminders from the API and reschedule them."""
+ self.bot.wait_until_ready()
response = await self.bot.api_client.get(
'bot/reminders',
params={'active': 'true'}
diff --git a/bot/cogs/sync/cog.py b/bot/cogs/sync/cog.py
index b75fb26cd..15e671ab3 100644
--- a/bot/cogs/sync/cog.py
+++ b/bot/cogs/sync/cog.py
@@ -29,9 +29,11 @@ class Sync(Cog):
def __init__(self, bot: Bot) -> None:
self.bot = bot
- @Cog.listener()
- async def on_ready(self) -> None:
+ bot.loop.create_task(self.prepare_cog())
+
+ async def prepare_cog(self) -> None:
"""Syncs the roles/users of the guild with the database."""
+ self.bot.wait_until_ready()
guild = self.bot.get_guild(self.SYNC_SERVER_ID)
if guild is not None:
for syncer in self.ON_READY_SYNCERS: