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()