update gateway schemas

This commit is contained in:
Luna 2021-07-14 22:13:09 -03:00
parent 07edc235f5
commit a830c9cb77
2 changed files with 56 additions and 4 deletions

View File

@ -65,6 +65,47 @@ IDENTIFY_SCHEMA = {
"shard": {"type": "list", "required": False},
"presence": {"type": "dict", "required": False},
"intents": {"coerce": Intents, "required": False},
# TODO schema
"properties": {
"type": "dict",
"required": False,
"schema": {
"browser": {"type": "string", "required": False},
"client_build_number": {"type": "number", "required": False},
"client_event_source": {
"type": "string",
"required": False,
"nullable": True,
},
"client_version": {"type": "string", "required": False},
"distro": {"type": "string", "required": False},
"os": {"type": "string", "required": False},
"os_arch": {"type": "string", "required": False},
"os_version": {"type": "string", "required": False},
"release_channel": {"type": "string", "required": False},
"system_locale": {"type": "string", "required": False},
"window_manager": {"type": "string", "required": False},
},
},
"capabilities": {"type": "number", "required": False},
"client_state": {
"type": "dict",
"required": False,
"schema": {
# guild_hashes is a Dict with keys being guild ids and
# values being a list of 3 strings. this can not be
# validated by cerberus
"highest_last_message_id": {
"type": "string",
"required": False,
},
"read_state_version": {"type": "number", "required": False},
"user_guild_settings_version": {
"type": "number",
"required": False,
},
},
},
},
}
},
@ -90,8 +131,11 @@ REQ_GUILD_SCHEMA = {
"d": {
"type": "dict",
"schema": {
"guild_id": {"type": "string", "required": True},
"user_ids": {"type": "list", "required": False},
"user_ids": {
"type": "list",
"required": False,
"schema": {"type": "string"},
},
"query": {"type": "string", "required": False},
"limit": {"type": "number", "required": False},
"presences": {"type": "bool", "required": False},

View File

@ -664,7 +664,9 @@ class GatewayWebsocket:
async def handle_2(self, payload: Dict[str, Any]):
"""Handle the OP 2 Identify packet."""
payload = validate(payload, IDENTIFY_SCHEMA)
payload_copy = dict(payload)
payload_copy["d"].get("client_state", {}).pop("guild_hashes")
validate(payload_copy, IDENTIFY_SCHEMA)
data = payload["d"]
token = data["token"]
@ -924,7 +926,13 @@ class GatewayWebsocket:
async def handle_8(self, payload: Dict):
"""Handle OP 8 Request Guild Members."""
payload = validate(payload, REQ_GUILD_SCHEMA)
# we do not validate guild ids because it can either be a string
# or a list of strings and cerberus does not validate that.
payload_copy = dict(payload)
payload_copy["d"].pop("guild_id")
validate(payload_copy, REQ_GUILD_SCHEMA)
data = payload["d"]
gids = data["guild_id"]