diff --git a/administration_commands.py b/administration_commands.py index c964d48..cb543f5 100644 --- a/administration_commands.py +++ b/administration_commands.py @@ -171,6 +171,17 @@ class AdministrationModule(commands.Cog): """ # logger.info("Heartbeat of cleanup proc") channel = self.bot.get_channel(1062047367337095268) + if channel is None: + # get_channel() returns None before the gateway cache is populated + # (the before_loop below normally prevents that) or when the bot + # cannot see the channel at all (wrong id / not in the guild / + # missing permission). Skip this tick instead of crashing - an + # unhandled exception here stops the whole loop, killing log + # rollover and the spontaneous messages with it. + self.logger.warning( + "check_self: channel 1062047367337095268 unavailable - skipping tick" + ) + return messages = [message async for message in channel.history(limit=1)] for mess in messages: channel = mess.channel @@ -254,6 +265,13 @@ class AdministrationModule(commands.Cog): self.logger.info(message) await channel.send(message) + @check_self.before_loop + async def before_check_self(self): + # Don't fire the first tick until the gateway is READY and the channel + # cache is populated - get_channel() returns None before that, which is + # exactly what used to crash check_self at startup. + await self.bot.wait_until_ready() + async def setup(bot): logger = logging.getLogger("discord")