- state_manager: add StateManager.guild_states
- add PresenceManager in the presence module
- fix get_user_guilds not returning ints
- gateway: add dummy handler for op 4
- gateway: add hazmat implementation for op 14
- run: keep websockets logger on INFO
- run: add more headers on app_after_request
It is clunky when sending messages as Atomic, nor we have proper channel
management, but it works.
- dispatcher: add sub_many
- errors: add failsafe on LitecordError.message
- errors: add ChannelNotFound
- gateway.websocket: add dispatcher to WebsocketObjects
- schemas: add regexes for mentions
- storage: add get_channel, get_message
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()