check_self starts in setup() (during on_ready), and its first tick can
fire before the gateway has populated the channel cache - get_channel()
then returns None and channel.history() raises AttributeError. Because an
unhandled exception stops a tasks.loop, this also silently killed the log
rollover and spontaneous messages the loop is responsible for.
Add a before_loop that awaits wait_until_ready() (fixes the startup race)
and a None guard that skips the tick with a warning (keeps the loop alive
even if the channel is genuinely unreachable: wrong id / not in the guild
/ missing permission).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>