With this comment we have a proper READY event that can be
successfully parsed by discord.py! hooray for progress!
- gateway.websocket: add dummy handler for op 1
- gateway.websocket: change op 0 to op 2
- storage: fix 'None' strings on channel IDs
- run: use logbook.compat.redirect_logging()
- gateway.websocket: merge get_guild and get_guild_extra
- gateway.websocket: only apply too many shards close when
guilds > 2500
- storage: detach state usage
- storage: fix large calc on get_guild_extra
Storage serves as a way to reduce code repeatbility. So that we
don't need to keep repeating the same SQL statements over and over,
and to detach some SQL calls into their own code (like guild fetching)
- gateway.websocket: add WebsocketObjects to hold db, state_manager,
storage and loop
- gateway.websocket: add _make_guild_list
- schema: add members.deafened, members.muted
It doesn't work since quart's objects only work with stuff
that is already from quart, e.g the current_app stuff
requires you to be inside a special hidden context
that only quart functions get.
Gateway code is detached from quart since quart's websocket
stuff can't handle custom error codes.
- auth: optional db detach
- gateway.errors: add InvalidShard, ShardingRequired
- gateway.gateway: pass asyncpg connection and StateManager
- gateway.state: add repr, etc
- gateway.state_man: add remove(), fetch_states()