summary refs log tree commit diff
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-09-04 15:47:19 +1000
committerGitHub <noreply@github.com>2022-09-04 15:47:19 +1000
commit6977283e0e771ab1f5eae3f916bf56077aa61178 (patch)
tree890bee6f677ab73a1621f1c281f3f391e3b7b3a3
parentMerge pull request #879 from Puyodead1/fix/user-profiles (diff)
downloadserver-6977283e0e771ab1f5eae3f916bf56077aa61178.tar.xz
Various fixes for current web client (#875)
* Placeholder member verification endpoint

* Welcome screen

* Fix types for welcome screen

* Try to allow role icons to be removed

* Fix typo in genschemas script

* Remove left over welcome-screen endpoint

* Embedded activities
-rw-r--r--assets/index.html1
-rw-r--r--assets/schemas.json2686
-rw-r--r--package.json2
-rw-r--r--src/api/routes/applications/#id/bot/index.ts3
-rw-r--r--src/api/routes/auth/mfa/totp.ts3
-rw-r--r--src/api/routes/auth/verify/view-backup-codes-challenge.ts30
-rw-r--r--src/api/routes/guilds/#guild_id/member-verification.ts14
-rw-r--r--src/api/routes/guilds/#guild_id/welcome_screen.ts2
-rw-r--r--src/api/routes/users/@me/mfa/codes-verification.ts41
-rw-r--r--src/api/routes/users/@me/mfa/totp/disable.ts3
-rw-r--r--src/api/routes/users/@me/mfa/totp/enable.ts3
-rw-r--r--src/util/entities/Guild.ts2
-rw-r--r--src/util/entities/Member.ts3
-rw-r--r--src/util/interfaces/Event.ts1
-rw-r--r--src/util/schemas/BackupCodesChallengeSchema.ts3
-rw-r--r--src/util/schemas/CodesVerificationSchema.ts5
-rw-r--r--src/util/schemas/index.ts4
17 files changed, 1565 insertions, 1241 deletions
diff --git a/assets/index.html b/assets/index.html
index 1d4e4543..f73fe99f 100644
--- a/assets/index.html
+++ b/assets/index.html
@@ -72,6 +72,7 @@
 				localStorage.setItem("UserSettingsStore", JSON.stringify(settings));
 			}
 		</script>
+		
 		<script src="/assets/checkLocale.js"></script>
 		<script src="/assets/2f2e0c25e45eb2f5a6f1.js"></script>
 		<script src="/assets/006e72c08a4c69cb66fc.js"></script>
diff --git a/assets/schemas.json b/assets/schemas.json
index ce3e7360..f3d96959 100644
--- a/assets/schemas.json
+++ b/assets/schemas.json
@@ -1,1230 +1,1458 @@
 {
-	"ActivitySchema": {
-		"type": "object",
-		"properties": {
-			"afk": {
-				"type": "boolean"
-			},
-			"status": {},
-			"activities": {
-				"type": "array",
-				"items": {}
-			},
-			"since": {
-				"type": "integer"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["afk", "status"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"BanCreateSchema": {
-		"type": "object",
-		"properties": {
-			"delete_message_days": {
-				"type": "string"
-			},
-			"reason": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"BanModeratorSchema": {
-		"type": "object",
-		"properties": {
-			"id": {
-				"type": "string"
-			},
-			"user_id": {
-				"type": "string"
-			},
-			"guild_id": {
-				"type": "string"
-			},
-			"executor_id": {
-				"type": "string"
-			},
-			"reason": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["executor_id", "guild_id", "id", "user_id"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"BanRegistrySchema": {
-		"type": "object",
-		"properties": {
-			"id": {
-				"type": "string"
-			},
-			"user_id": {
-				"type": "string"
-			},
-			"guild_id": {
-				"type": "string"
-			},
-			"executor_id": {
-				"type": "string"
-			},
-			"ip": {
-				"type": "string"
-			},
-			"reason": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["executor_id", "guild_id", "id", "user_id"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"BulkDeleteSchema": {
-		"type": "object",
-		"properties": {
-			"messages": {
-				"type": "array",
-				"items": {
-					"type": "string"
-				}
-			}
-		},
-		"additionalProperties": false,
-		"required": ["messages"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"ChannelPermissionOverwriteSchema": {
-		"type": "object",
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"ChannelReorderSchema": {
-		"type": "array",
-		"items": {
-			"type": "object",
-			"properties": {
-				"id": {
-					"type": "string"
-				},
-				"position": {
-					"type": "integer"
-				},
-				"lock_permissions": {
-					"type": "boolean"
-				},
-				"parent_id": {
-					"type": "string"
-				}
-			},
-			"additionalProperties": false,
-			"required": ["id"]
-		},
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"DmChannelCreateSchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"type": "string"
-			},
-			"recipients": {
-				"type": "array",
-				"items": {
-					"type": "string"
-				}
-			}
-		},
-		"additionalProperties": false,
-		"required": ["recipients"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"EmojiCreateSchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"type": "string"
-			},
-			"image": {
-				"type": "string"
-			},
-			"require_colons": {
-				"type": ["null", "boolean"]
-			},
-			"roles": {
-				"type": "array",
-				"items": {
-					"type": "string"
-				}
-			}
-		},
-		"additionalProperties": false,
-		"required": ["image"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"EmojiModifySchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"type": "string"
-			},
-			"roles": {
-				"type": "array",
-				"items": {
-					"type": "string"
-				}
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"GuildCreateSchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"maxLength": 100,
-				"type": "string"
-			},
-			"region": {
-				"type": "string"
-			},
-			"icon": {
-				"type": ["null", "string"]
-			},
-			"channels": {
-				"type": "array",
-				"items": {
-					"$ref": "#/definitions/ChannelModifySchema"
-				}
-			},
-			"guild_template_code": {
-				"type": "string"
-			},
-			"system_channel_id": {
-				"type": "string"
-			},
-			"rules_channel_id": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["name"],
-		"definitions": {
-			"ChannelModifySchema": {
-				"type": "object",
-				"properties": {
-					"name": {
-						"maxLength": 100,
-						"type": "string"
-					},
-					"type": {
-						"enum": [0, 1, 10, 11, 12, 13, 14, 15, 2, 255, 3, 33, 34, 35, 4, 5, 6, 64, 7, 8, 9],
-						"type": "number"
-					},
-					"topic": {
-						"type": "string"
-					},
-					"icon": {
-						"type": ["null", "string"]
-					},
-					"bitrate": {
-						"type": "integer"
-					},
-					"user_limit": {
-						"type": "integer"
-					},
-					"rate_limit_per_user": {
-						"type": "integer"
-					},
-					"position": {
-						"type": "integer"
-					},
-					"permission_overwrites": {
-						"type": "array",
-						"items": {
-							"type": "object",
-							"properties": {
-								"id": {
-									"type": "string"
-								},
-								"type": {
-									"$ref": "#/definitions/ChannelPermissionOverwriteType"
-								},
-								"allow": {
-									"type": "string"
-								},
-								"deny": {
-									"type": "string"
-								}
-							},
-							"additionalProperties": false,
-							"required": ["allow", "deny", "id", "type"]
-						}
-					},
-					"parent_id": {
-						"type": "string"
-					},
-					"id": {
-						"type": "string"
-					},
-					"nsfw": {
-						"type": "boolean"
-					},
-					"rtc_region": {
-						"type": "string"
-					},
-					"default_auto_archive_duration": {
-						"type": "integer"
-					},
-					"flags": {
-						"type": "integer"
-					},
-					"default_thread_rate_limit_per_user": {
-						"type": "integer"
-					}
-				},
-				"additionalProperties": false
-			},
-			"ChannelPermissionOverwriteType": {
-				"enum": [0, 1, 2],
-				"type": "number"
-			}
-		},
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"GuildTemplateCreateSchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"type": "string"
-			},
-			"avatar": {
-				"type": ["null", "string"]
-			}
-		},
-		"additionalProperties": false,
-		"required": ["name"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"GuildUpdateSchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"type": "string"
-			},
-			"banner": {
-				"type": ["null", "string"]
-			},
-			"splash": {
-				"type": ["null", "string"]
-			},
-			"description": {
-				"type": "string"
-			},
-			"features": {
-				"type": "array",
-				"items": {
-					"type": "string"
-				}
-			},
-			"verification_level": {
-				"type": "integer"
-			},
-			"default_message_notifications": {
-				"type": "integer"
-			},
-			"system_channel_flags": {
-				"type": "integer"
-			},
-			"explicit_content_filter": {
-				"type": "integer"
-			},
-			"public_updates_channel_id": {
-				"type": "string"
-			},
-			"afk_timeout": {
-				"type": "integer"
-			},
-			"afk_channel_id": {
-				"type": "string"
-			},
-			"preferred_locale": {
-				"type": "string"
-			},
-			"premium_progress_bar_enabled": {
-				"type": "boolean"
-			},
-			"region": {
-				"type": "string"
-			},
-			"icon": {
-				"type": ["null", "string"]
-			},
-			"guild_template_code": {
-				"type": "string"
-			},
-			"system_channel_id": {
-				"type": "string"
-			},
-			"rules_channel_id": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"GuildUpdateWelcomeScreenSchema": {
-		"type": "object",
-		"properties": {
-			"welcome_channels": {
-				"type": "array",
-				"items": {
-					"type": "object",
-					"properties": {
-						"channel_id": {
-							"type": "string"
-						},
-						"description": {
-							"type": "string"
-						},
-						"emoji_id": {
-							"type": "string"
-						},
-						"emoji_name": {
-							"type": "string"
-						}
-					},
-					"additionalProperties": false,
-					"required": ["channel_id", "description", "emoji_name"]
-				}
-			},
-			"enabled": {
-				"type": "boolean"
-			},
-			"description": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"IdentifySchema": {
-		"type": "object",
-		"properties": {
-			"token": {
-				"type": "string"
-			},
-			"properties": {
-				"type": "object",
-				"properties": {
-					"os": {
-						"type": "string"
-					},
-					"os_atch": {
-						"type": "string"
-					},
-					"browser": {
-						"type": "string"
-					},
-					"device": {
-						"type": "string"
-					},
-					"$os": {
-						"type": "string"
-					},
-					"$browser": {
-						"type": "string"
-					},
-					"$device": {
-						"type": "string"
-					},
-					"browser_user_agent": {
-						"type": "string"
-					},
-					"browser_version": {
-						"type": "string"
-					},
-					"os_version": {
-						"type": "string"
-					},
-					"referrer": {
-						"type": "string"
-					},
-					"referring_domain": {
-						"type": "string"
-					},
-					"referrer_current": {
-						"type": "string"
-					},
-					"referring_domain_current": {
-						"type": "string"
-					},
-					"release_channel": {
-						"enum": ["canary", "dev", "ptb", "stable"],
-						"type": "string"
-					},
-					"client_build_number": {
-						"type": "integer"
-					},
-					"client_event_source": {},
-					"client_version": {
-						"type": "string"
-					},
-					"system_locale": {
-						"type": "string"
-					}
-				},
-				"additionalProperties": false
-			},
-			"intents": {
-				"type": "string"
-			},
-			"presence": {
-				"$ref": "#/definitions/ActivitySchema"
-			},
-			"compress": {
-				"type": "boolean"
-			},
-			"large_threshold": {
-				"type": "integer"
-			},
-			"shard": {
-				"type": "array",
-				"items": [
-					{
-						"type": "integer"
-					},
-					{
-						"type": "integer"
-					}
-				],
-				"minItems": 2,
-				"maxItems": 2
-			},
-			"guild_subscriptions": {
-				"type": "boolean"
-			},
-			"capabilities": {
-				"type": "integer"
-			},
-			"client_state": {
-				"type": "object",
-				"properties": {
-					"guild_hashes": {},
-					"highest_last_message_id": {
-						"type": "string"
-					},
-					"read_state_version": {
-						"type": "integer"
-					},
-					"user_guild_settings_version": {
-						"type": "integer"
-					},
-					"user_settings_version": {
-						"type": "integer"
-					}
-				},
-				"additionalProperties": false
-			},
-			"v": {
-				"type": "integer"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["properties", "token"],
-		"definitions": {
-			"ActivitySchema": {
-				"type": "object",
-				"properties": {
-					"afk": {
-						"type": "boolean"
-					},
-					"status": {},
-					"activities": {
-						"type": "array",
-						"items": {}
-					},
-					"since": {
-						"type": "integer"
-					}
-				},
-				"additionalProperties": false,
-				"required": ["afk", "status"]
-			}
-		},
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"InviteCreateSchema": {
-		"type": "object",
-		"properties": {
-			"target_user_id": {
-				"type": "string"
-			},
-			"target_type": {
-				"type": "string"
-			},
-			"validate": {
-				"type": "string"
-			},
-			"max_age": {
-				"type": "integer"
-			},
-			"max_uses": {
-				"type": "integer"
-			},
-			"temporary": {
-				"type": "boolean"
-			},
-			"unique": {
-				"type": "boolean"
-			},
-			"target_user": {
-				"type": "string"
-			},
-			"target_user_type": {
-				"type": "integer"
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"LoginSchema": {
-		"type": "object",
-		"properties": {
-			"login": {
-				"type": "string"
-			},
-			"password": {
-				"type": "string"
-			},
-			"undelete": {
-				"type": "boolean"
-			},
-			"captcha_key": {
-				"type": "string"
-			},
-			"login_source": {
-				"type": "string"
-			},
-			"gift_code_sku_id": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["login", "password"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"MemberChangeProfileSchema": {
-		"type": "object",
-		"properties": {
-			"banner": {
-				"type": ["null", "string"]
-			},
-			"nick": {
-				"type": "string"
-			},
-			"bio": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"MemberChangeSchema": {
-		"type": "object",
-		"properties": {
-			"roles": {
-				"type": "array",
-				"items": {
-					"type": "string"
-				}
-			},
-			"nick": {
-				"type": "string"
-			},
-			"avatar": {
-				"type": ["null", "string"]
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"MemberNickChangeSchema": {
-		"type": "object",
-		"properties": {
-			"nick": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["nick"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"MessageAcknowledgeSchema": {
-		"type": "object",
-		"properties": {
-			"manual": {
-				"type": "boolean"
-			},
-			"mention_count": {
-				"type": "integer"
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"MessageCreateSchema": {
-		"type": "object",
-		"properties": {
-			"type": {
-				"type": "integer"
-			},
-			"content": {
-				"type": "string"
-			},
-			"nonce": {
-				"type": "string"
-			},
-			"channel_id": {
-				"type": "string"
-			},
-			"tts": {
-				"type": "boolean"
-			},
-			"flags": {
-				"type": "string"
-			},
-			"embeds": {
-				"type": "array",
-				"items": {}
-			},
-			"embed": {},
-			"allowed_mentions": {
-				"type": "object",
-				"properties": {
-					"parse": {
-						"type": "array",
-						"items": {
-							"type": "string"
-						}
-					},
-					"roles": {
-						"type": "array",
-						"items": {
-							"type": "string"
-						}
-					},
-					"users": {
-						"type": "array",
-						"items": {
-							"type": "string"
-						}
-					},
-					"replied_user": {
-						"type": "boolean"
-					}
-				},
-				"additionalProperties": false
-			},
-			"message_reference": {
-				"type": "object",
-				"properties": {
-					"message_id": {
-						"type": "string"
-					},
-					"channel_id": {
-						"type": "string"
-					},
-					"guild_id": {
-						"type": "string"
-					},
-					"fail_if_not_exists": {
-						"type": "boolean"
-					}
-				},
-				"additionalProperties": false,
-				"required": ["channel_id", "message_id"]
-			},
-			"payload_json": {
-				"type": "string"
-			},
-			"file": {},
-			"attachments": {
-				"description": "TODO: we should create an interface for attachments\nTODO: OpenWAAO<-->attachment-style metadata conversion",
-				"type": "array",
-				"items": {}
-			},
-			"sticker_ids": {
-				"type": "array",
-				"items": {
-					"type": "string"
-				}
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"MfaCodesSchema": {
-		"type": "object",
-		"properties": {
-			"password": {
-				"type": "string"
-			},
-			"regenerate": {
-				"type": "boolean"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["password"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"ModifyGuildStickerSchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"minLength": 2,
-				"maxLength": 30,
-				"type": "string"
-			},
-			"description": {
-				"maxLength": 100,
-				"type": "string"
-			},
-			"tags": {
-				"maxLength": 200,
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["name", "tags"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"PruneSchema": {
-		"type": "object",
-		"properties": {
-			"days": {
-				"type": "integer"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["days"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"PurgeSchema": {
-		"type": "object",
-		"properties": {
-			"before": {
-				"type": "string"
-			},
-			"after": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["after", "before"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"RegisterSchema": {
-		"type": "object",
-		"properties": {
-			"username": {
-				"minLength": 2,
-				"maxLength": 32,
-				"type": "string"
-			},
-			"password": {
-				"minLength": 1,
-				"maxLength": 72,
-				"type": "string"
-			},
-			"consent": {
-				"type": "boolean"
-			},
-			"email": {
-				"format": "email",
-				"type": "string"
-			},
-			"fingerprint": {
-				"type": "string"
-			},
-			"invite": {
-				"type": "string"
-			},
-			"date_of_birth": {
-				"type": "string"
-			},
-			"gift_code_sku_id": {
-				"type": "string"
-			},
-			"captcha_key": {
-				"type": "string"
-			},
-			"promotional_email_opt_in": {
-				"type": "boolean"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["consent", "username"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"RelationshipPostSchema": {
-		"type": "object",
-		"properties": {
-			"discriminator": {
-				"type": "string"
-			},
-			"username": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["discriminator", "username"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"RelationshipPutSchema": {
-		"type": "object",
-		"properties": {
-			"type": {}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"RoleModifySchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"type": "string"
-			},
-			"permissions": {
-				"type": "string"
-			},
-			"color": {
-				"type": "integer"
-			},
-			"hoist": {
-				"type": "boolean"
-			},
-			"mentionable": {
-				"type": "boolean"
-			},
-			"position": {
-				"type": "integer"
-			},
-			"icon": {
-				"type": "string"
-			},
-			"unicode_emoji": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"RolePositionUpdateSchema": {
-		"type": "array",
-		"items": {
-			"type": "object",
-			"properties": {
-				"id": {
-					"type": "string"
-				},
-				"position": {
-					"type": "integer"
-				}
-			},
-			"additionalProperties": false,
-			"required": ["id", "position"]
-		},
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"TemplateCreateSchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"type": "string"
-			},
-			"description": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["name"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"TemplateModifySchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"type": "string"
-			},
-			"description": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["name"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"TotpDisableSchema": {
-		"type": "object",
-		"properties": {
-			"code": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["code"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"TotpEnableSchema": {
-		"type": "object",
-		"properties": {
-			"password": {
-				"type": "string"
-			},
-			"code": {
-				"type": "string"
-			},
-			"secret": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["password"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"TotpSchema": {
-		"type": "object",
-		"properties": {
-			"code": {
-				"type": "string"
-			},
-			"ticket": {
-				"type": "string"
-			},
-			"gift_code_sku_id": {
-				"type": ["null", "string"]
-			},
-			"login_source": {
-				"type": ["null", "string"]
-			}
-		},
-		"additionalProperties": false,
-		"required": ["code", "ticket"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"UserModifySchema": {
-		"type": "object",
-		"properties": {
-			"username": {
-				"minLength": 1,
-				"maxLength": 100,
-				"type": "string"
-			},
-			"discriminator": {
-				"type": "string"
-			},
-			"avatar": {
-				"type": ["null", "string"]
-			},
-			"bio": {
-				"maxLength": 1024,
-				"type": "string"
-			},
-			"accent_color": {
-				"type": "integer"
-			},
-			"banner": {
-				"type": ["null", "string"]
-			},
-			"password": {
-				"type": "string"
-			},
-			"new_password": {
-				"type": "string"
-			},
-			"code": {
-				"type": "string"
-			},
-			"email": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"UserProfileModifySchema": {
-		"type": "object",
-		"properties": {
-			"bio": {
-				"type": "string"
-			},
-			"accent_color": {
-				"type": ["null", "integer"]
-			},
-			"banner": {
-				"type": ["null", "string"]
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"UserSettingsSchema": {
-		"type": "object",
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"VanityUrlSchema": {
-		"type": "object",
-		"properties": {
-			"code": {
-				"minLength": 1,
-				"maxLength": 20,
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"VoiceStateUpdateSchema": {
-		"type": "object",
-		"properties": {
-			"channel_id": {
-				"type": "string"
-			},
-			"guild_id": {
-				"type": "string"
-			},
-			"suppress": {
-				"type": "boolean"
-			},
-			"request_to_speak_timestamp": {
-				"type": "string",
-				"format": "date-time"
-			},
-			"self_mute": {
-				"type": "boolean"
-			},
-			"self_deaf": {
-				"type": "boolean"
-			},
-			"self_video": {
-				"type": "boolean"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["channel_id"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"WebhookCreateSchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"maxLength": 80,
-				"type": "string"
-			},
-			"avatar": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["name"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"WidgetModifySchema": {
-		"type": "object",
-		"properties": {
-			"enabled": {
-				"type": "boolean"
-			},
-			"channel_id": {
-				"type": "string"
-			}
-		},
-		"additionalProperties": false,
-		"required": ["channel_id", "enabled"],
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	},
-	"ChannelModifySchema": {
-		"type": "object",
-		"properties": {
-			"name": {
-				"maxLength": 100,
-				"type": "string"
-			},
-			"type": {
-				"enum": [0, 1, 10, 11, 12, 13, 14, 15, 2, 255, 3, 33, 34, 35, 4, 5, 6, 64, 7, 8, 9],
-				"type": "number"
-			},
-			"topic": {
-				"type": "string"
-			},
-			"icon": {
-				"type": ["null", "string"]
-			},
-			"bitrate": {
-				"type": "integer"
-			},
-			"user_limit": {
-				"type": "integer"
-			},
-			"rate_limit_per_user": {
-				"type": "integer"
-			},
-			"position": {
-				"type": "integer"
-			},
-			"permission_overwrites": {
-				"type": "array",
-				"items": {
-					"type": "object",
-					"properties": {
-						"id": {
-							"type": "string"
-						},
-						"type": {
-							"$ref": "#/definitions/ChannelPermissionOverwriteType"
-						},
-						"allow": {
-							"type": "string"
-						},
-						"deny": {
-							"type": "string"
-						}
-					},
-					"additionalProperties": false,
-					"required": ["allow", "deny", "id", "type"]
-				}
-			},
-			"parent_id": {
-				"type": "string"
-			},
-			"id": {
-				"type": "string"
-			},
-			"nsfw": {
-				"type": "boolean"
-			},
-			"rtc_region": {
-				"type": "string"
-			},
-			"default_auto_archive_duration": {
-				"type": "integer"
-			},
-			"flags": {
-				"type": "integer"
-			},
-			"default_thread_rate_limit_per_user": {
-				"type": "integer"
-			}
-		},
-		"additionalProperties": false,
-		"definitions": {
-			"ChannelPermissionOverwriteType": {
-				"enum": [0, 1, 2],
-				"type": "number"
-			}
-		},
-		"$schema": "http://json-schema.org/draft-07/schema#"
-	}
-}
+    "ActivitySchema": {
+        "type": "object",
+        "properties": {
+            "afk": {
+                "type": "boolean"
+            },
+            "status": {},
+            "activities": {
+                "type": "array",
+                "items": {}
+            },
+            "since": {
+                "type": "integer"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "afk",
+            "status"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "BackupCodesChallengeSchema": {
+        "type": "object",
+        "properties": {
+            "password": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "password"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "BanCreateSchema": {
+        "type": "object",
+        "properties": {
+            "delete_message_days": {
+                "type": "string"
+            },
+            "reason": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "BanModeratorSchema": {
+        "type": "object",
+        "properties": {
+            "id": {
+                "type": "string"
+            },
+            "user_id": {
+                "type": "string"
+            },
+            "guild_id": {
+                "type": "string"
+            },
+            "executor_id": {
+                "type": "string"
+            },
+            "reason": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "executor_id",
+            "guild_id",
+            "id",
+            "user_id"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "BanRegistrySchema": {
+        "type": "object",
+        "properties": {
+            "id": {
+                "type": "string"
+            },
+            "user_id": {
+                "type": "string"
+            },
+            "guild_id": {
+                "type": "string"
+            },
+            "executor_id": {
+                "type": "string"
+            },
+            "ip": {
+                "type": "string"
+            },
+            "reason": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "executor_id",
+            "guild_id",
+            "id",
+            "user_id"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "BulkDeleteSchema": {
+        "type": "object",
+        "properties": {
+            "messages": {
+                "type": "array",
+                "items": {
+                    "type": "string"
+                }
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "messages"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "ChannelPermissionOverwriteSchema": {
+        "type": "object",
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "ChannelReorderSchema": {
+        "type": "array",
+        "items": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "string"
+                },
+                "position": {
+                    "type": "integer"
+                },
+                "lock_permissions": {
+                    "type": "boolean"
+                },
+                "parent_id": {
+                    "type": "string"
+                }
+            },
+            "additionalProperties": false,
+            "required": [
+                "id"
+            ]
+        },
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "CodesVerificationSchema": {
+        "type": "object",
+        "properties": {
+            "key": {
+                "type": "string"
+            },
+            "nonce": {
+                "type": "string"
+            },
+            "regenerate": {
+                "type": "boolean"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "key",
+            "nonce"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "DmChannelCreateSchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "type": "string"
+            },
+            "recipients": {
+                "type": "array",
+                "items": {
+                    "type": "string"
+                }
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "recipients"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "EmojiCreateSchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "type": "string"
+            },
+            "image": {
+                "type": "string"
+            },
+            "require_colons": {
+                "type": [
+                    "null",
+                    "boolean"
+                ]
+            },
+            "roles": {
+                "type": "array",
+                "items": {
+                    "type": "string"
+                }
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "image"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "EmojiModifySchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "type": "string"
+            },
+            "roles": {
+                "type": "array",
+                "items": {
+                    "type": "string"
+                }
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "GuildCreateSchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "maxLength": 100,
+                "type": "string"
+            },
+            "region": {
+                "type": "string"
+            },
+            "icon": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
+            "channels": {
+                "type": "array",
+                "items": {
+                    "$ref": "#/definitions/ChannelModifySchema"
+                }
+            },
+            "guild_template_code": {
+                "type": "string"
+            },
+            "system_channel_id": {
+                "type": "string"
+            },
+            "rules_channel_id": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "name"
+        ],
+        "definitions": {
+            "ChannelModifySchema": {
+                "type": "object",
+                "properties": {
+                    "name": {
+                        "maxLength": 100,
+                        "type": "string"
+                    },
+                    "type": {
+                        "enum": [
+                            0,
+                            1,
+                            10,
+                            11,
+                            12,
+                            13,
+                            14,
+                            15,
+                            2,
+                            255,
+                            3,
+                            33,
+                            34,
+                            35,
+                            4,
+                            5,
+                            6,
+                            64,
+                            7,
+                            8,
+                            9
+                        ],
+                        "type": "number"
+                    },
+                    "topic": {
+                        "type": "string"
+                    },
+                    "icon": {
+                        "type": [
+                            "null",
+                            "string"
+                        ]
+                    },
+                    "bitrate": {
+                        "type": "integer"
+                    },
+                    "user_limit": {
+                        "type": "integer"
+                    },
+                    "rate_limit_per_user": {
+                        "type": "integer"
+                    },
+                    "position": {
+                        "type": "integer"
+                    },
+                    "permission_overwrites": {
+                        "type": "array",
+                        "items": {
+                            "type": "object",
+                            "properties": {
+                                "id": {
+                                    "type": "string"
+                                },
+                                "type": {
+                                    "$ref": "#/definitions/ChannelPermissionOverwriteType"
+                                },
+                                "allow": {
+                                    "type": "string"
+                                },
+                                "deny": {
+                                    "type": "string"
+                                }
+                            },
+                            "additionalProperties": false,
+                            "required": [
+                                "allow",
+                                "deny",
+                                "id",
+                                "type"
+                            ]
+                        }
+                    },
+                    "parent_id": {
+                        "type": "string"
+                    },
+                    "id": {
+                        "type": "string"
+                    },
+                    "nsfw": {
+                        "type": "boolean"
+                    },
+                    "rtc_region": {
+                        "type": "string"
+                    },
+                    "default_auto_archive_duration": {
+                        "type": "integer"
+                    },
+                    "flags": {
+                        "type": "integer"
+                    },
+                    "default_thread_rate_limit_per_user": {
+                        "type": "integer"
+                    }
+                },
+                "additionalProperties": false
+            },
+            "ChannelPermissionOverwriteType": {
+                "enum": [
+                    0,
+                    1,
+                    2
+                ],
+                "type": "number"
+            }
+        },
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "GuildTemplateCreateSchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "type": "string"
+            },
+            "avatar": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "name"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "GuildUpdateSchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "type": "string"
+            },
+            "banner": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
+            "splash": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
+            "description": {
+                "type": "string"
+            },
+            "features": {
+                "type": "array",
+                "items": {
+                    "type": "string"
+                }
+            },
+            "verification_level": {
+                "type": "integer"
+            },
+            "default_message_notifications": {
+                "type": "integer"
+            },
+            "system_channel_flags": {
+                "type": "integer"
+            },
+            "explicit_content_filter": {
+                "type": "integer"
+            },
+            "public_updates_channel_id": {
+                "type": "string"
+            },
+            "afk_timeout": {
+                "type": "integer"
+            },
+            "afk_channel_id": {
+                "type": "string"
+            },
+            "preferred_locale": {
+                "type": "string"
+            },
+            "premium_progress_bar_enabled": {
+                "type": "boolean"
+            },
+            "region": {
+                "type": "string"
+            },
+            "icon": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
+            "guild_template_code": {
+                "type": "string"
+            },
+            "system_channel_id": {
+                "type": "string"
+            },
+            "rules_channel_id": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "GuildUpdateWelcomeScreenSchema": {
+        "type": "object",
+        "properties": {
+            "welcome_channels": {
+                "type": "array",
+                "items": {
+                    "type": "object",
+                    "properties": {
+                        "channel_id": {
+                            "type": "string"
+                        },
+                        "description": {
+                            "type": "string"
+                        },
+                        "emoji_id": {
+                            "type": "string"
+                        },
+                        "emoji_name": {
+                            "type": "string"
+                        }
+                    },
+                    "additionalProperties": false,
+                    "required": [
+                        "channel_id",
+                        "description",
+                        "emoji_name"
+                    ]
+                }
+            },
+            "enabled": {
+                "type": "boolean"
+            },
+            "description": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "IdentifySchema": {
+        "type": "object",
+        "properties": {
+            "token": {
+                "type": "string"
+            },
+            "properties": {
+                "type": "object",
+                "properties": {
+                    "os": {
+                        "type": "string"
+                    },
+                    "os_atch": {
+                        "type": "string"
+                    },
+                    "browser": {
+                        "type": "string"
+                    },
+                    "device": {
+                        "type": "string"
+                    },
+                    "$os": {
+                        "type": "string"
+                    },
+                    "$browser": {
+                        "type": "string"
+                    },
+                    "$device": {
+                        "type": "string"
+                    },
+                    "browser_user_agent": {
+                        "type": "string"
+                    },
+                    "browser_version": {
+                        "type": "string"
+                    },
+                    "os_version": {
+                        "type": "string"
+                    },
+                    "referrer": {
+                        "type": "string"
+                    },
+                    "referring_domain": {
+                        "type": "string"
+                    },
+                    "referrer_current": {
+                        "type": "string"
+                    },
+                    "referring_domain_current": {
+                        "type": "string"
+                    },
+                    "release_channel": {
+                        "enum": [
+                            "canary",
+                            "dev",
+                            "ptb",
+                            "stable"
+                        ],
+                        "type": "string"
+                    },
+                    "client_build_number": {
+                        "type": "integer"
+                    },
+                    "client_event_source": {},
+                    "client_version": {
+                        "type": "string"
+                    },
+                    "system_locale": {
+                        "type": "string"
+                    }
+                },
+                "additionalProperties": false
+            },
+            "intents": {
+                "type": "string"
+            },
+            "presence": {
+                "$ref": "#/definitions/ActivitySchema"
+            },
+            "compress": {
+                "type": "boolean"
+            },
+            "large_threshold": {
+                "type": "integer"
+            },
+            "shard": {
+                "type": "array",
+                "items": [
+                    {
+                        "type": "integer"
+                    },
+                    {
+                        "type": "integer"
+                    }
+                ],
+                "minItems": 2,
+                "maxItems": 2
+            },
+            "guild_subscriptions": {
+                "type": "boolean"
+            },
+            "capabilities": {
+                "type": "integer"
+            },
+            "client_state": {
+                "type": "object",
+                "properties": {
+                    "guild_hashes": {},
+                    "highest_last_message_id": {
+                        "type": "string"
+                    },
+                    "read_state_version": {
+                        "type": "integer"
+                    },
+                    "user_guild_settings_version": {
+                        "type": "integer"
+                    },
+                    "user_settings_version": {
+                        "type": "integer"
+                    }
+                },
+                "additionalProperties": false
+            },
+            "v": {
+                "type": "integer"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "properties",
+            "token"
+        ],
+        "definitions": {
+            "ActivitySchema": {
+                "type": "object",
+                "properties": {
+                    "afk": {
+                        "type": "boolean"
+                    },
+                    "status": {},
+                    "activities": {
+                        "type": "array",
+                        "items": {}
+                    },
+                    "since": {
+                        "type": "integer"
+                    }
+                },
+                "additionalProperties": false,
+                "required": [
+                    "afk",
+                    "status"
+                ]
+            }
+        },
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "InviteCreateSchema": {
+        "type": "object",
+        "properties": {
+            "target_user_id": {
+                "type": "string"
+            },
+            "target_type": {
+                "type": "string"
+            },
+            "validate": {
+                "type": "string"
+            },
+            "max_age": {
+                "type": "integer"
+            },
+            "max_uses": {
+                "type": "integer"
+            },
+            "temporary": {
+                "type": "boolean"
+            },
+            "unique": {
+                "type": "boolean"
+            },
+            "target_user": {
+                "type": "string"
+            },
+            "target_user_type": {
+                "type": "integer"
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "LoginSchema": {
+        "type": "object",
+        "properties": {
+            "login": {
+                "type": "string"
+            },
+            "password": {
+                "type": "string"
+            },
+            "undelete": {
+                "type": "boolean"
+            },
+            "captcha_key": {
+                "type": "string"
+            },
+            "login_source": {
+                "type": "string"
+            },
+            "gift_code_sku_id": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "login",
+            "password"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "MemberChangeProfileSchema": {
+        "type": "object",
+        "properties": {
+            "banner": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
+            "nick": {
+                "type": "string"
+            },
+            "bio": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "MemberChangeSchema": {
+        "type": "object",
+        "properties": {
+            "roles": {
+                "type": "array",
+                "items": {
+                    "type": "string"
+                }
+            },
+            "nick": {
+                "type": "string"
+            },
+            "avatar": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "MemberNickChangeSchema": {
+        "type": "object",
+        "properties": {
+            "nick": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "nick"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "MessageAcknowledgeSchema": {
+        "type": "object",
+        "properties": {
+            "manual": {
+                "type": "boolean"
+            },
+            "mention_count": {
+                "type": "integer"
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "MessageCreateSchema": {
+        "type": "object",
+        "properties": {
+            "type": {
+                "type": "integer"
+            },
+            "content": {
+                "type": "string"
+            },
+            "nonce": {
+                "type": "string"
+            },
+            "channel_id": {
+                "type": "string"
+            },
+            "tts": {
+                "type": "boolean"
+            },
+            "flags": {
+                "type": "string"
+            },
+            "embeds": {
+                "type": "array",
+                "items": {}
+            },
+            "embed": {},
+            "allowed_mentions": {
+                "type": "object",
+                "properties": {
+                    "parse": {
+                        "type": "array",
+                        "items": {
+                            "type": "string"
+                        }
+                    },
+                    "roles": {
+                        "type": "array",
+                        "items": {
+                            "type": "string"
+                        }
+                    },
+                    "users": {
+                        "type": "array",
+                        "items": {
+                            "type": "string"
+                        }
+                    },
+                    "replied_user": {
+                        "type": "boolean"
+                    }
+                },
+                "additionalProperties": false
+            },
+            "message_reference": {
+                "type": "object",
+                "properties": {
+                    "message_id": {
+                        "type": "string"
+                    },
+                    "channel_id": {
+                        "type": "string"
+                    },
+                    "guild_id": {
+                        "type": "string"
+                    },
+                    "fail_if_not_exists": {
+                        "type": "boolean"
+                    }
+                },
+                "additionalProperties": false,
+                "required": [
+                    "channel_id",
+                    "message_id"
+                ]
+            },
+            "payload_json": {
+                "type": "string"
+            },
+            "file": {},
+            "attachments": {
+                "description": "TODO: we should create an interface for attachments\nTODO: OpenWAAO<-->attachment-style metadata conversion",
+                "type": "array",
+                "items": {}
+            },
+            "sticker_ids": {
+                "type": "array",
+                "items": {
+                    "type": "string"
+                }
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "MfaCodesSchema": {
+        "type": "object",
+        "properties": {
+            "password": {
+                "type": "string"
+            },
+            "regenerate": {
+                "type": "boolean"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "password"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "ModifyGuildStickerSchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "minLength": 2,
+                "maxLength": 30,
+                "type": "string"
+            },
+            "description": {
+                "maxLength": 100,
+                "type": "string"
+            },
+            "tags": {
+                "maxLength": 200,
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "name",
+            "tags"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "PruneSchema": {
+        "type": "object",
+        "properties": {
+            "days": {
+                "type": "integer"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "days"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "PurgeSchema": {
+        "type": "object",
+        "properties": {
+            "before": {
+                "type": "string"
+            },
+            "after": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "after",
+            "before"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "RegisterSchema": {
+        "type": "object",
+        "properties": {
+            "username": {
+                "minLength": 2,
+                "maxLength": 32,
+                "type": "string"
+            },
+            "password": {
+                "minLength": 1,
+                "maxLength": 72,
+                "type": "string"
+            },
+            "consent": {
+                "type": "boolean"
+            },
+            "email": {
+                "format": "email",
+                "type": "string"
+            },
+            "fingerprint": {
+                "type": "string"
+            },
+            "invite": {
+                "type": "string"
+            },
+            "date_of_birth": {
+                "type": "string"
+            },
+            "gift_code_sku_id": {
+                "type": "string"
+            },
+            "captcha_key": {
+                "type": "string"
+            },
+            "promotional_email_opt_in": {
+                "type": "boolean"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "consent",
+            "username"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "RelationshipPostSchema": {
+        "type": "object",
+        "properties": {
+            "discriminator": {
+                "type": "string"
+            },
+            "username": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "discriminator",
+            "username"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "RelationshipPutSchema": {
+        "type": "object",
+        "properties": {
+            "type": {}
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "RoleModifySchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "type": "string"
+            },
+            "permissions": {
+                "type": "string"
+            },
+            "color": {
+                "type": "integer"
+            },
+            "hoist": {
+                "type": "boolean"
+            },
+            "mentionable": {
+                "type": "boolean"
+            },
+            "position": {
+                "type": "integer"
+            },
+            "icon": {
+                "type": "string"
+            },
+            "unicode_emoji": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "RolePositionUpdateSchema": {
+        "type": "array",
+        "items": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "string"
+                },
+                "position": {
+                    "type": "integer"
+                }
+            },
+            "additionalProperties": false,
+            "required": [
+                "id",
+                "position"
+            ]
+        },
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "TemplateCreateSchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "type": "string"
+            },
+            "description": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "name"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "TemplateModifySchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "type": "string"
+            },
+            "description": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "name"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "TotpDisableSchema": {
+        "type": "object",
+        "properties": {
+            "code": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "code"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "TotpEnableSchema": {
+        "type": "object",
+        "properties": {
+            "password": {
+                "type": "string"
+            },
+            "code": {
+                "type": "string"
+            },
+            "secret": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "password"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "TotpSchema": {
+        "type": "object",
+        "properties": {
+            "code": {
+                "type": "string"
+            },
+            "ticket": {
+                "type": "string"
+            },
+            "gift_code_sku_id": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
+            "login_source": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "code",
+            "ticket"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "UserModifySchema": {
+        "type": "object",
+        "properties": {
+            "username": {
+                "minLength": 1,
+                "maxLength": 100,
+                "type": "string"
+            },
+            "discriminator": {
+                "type": "string"
+            },
+            "avatar": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
+            "bio": {
+                "maxLength": 1024,
+                "type": "string"
+            },
+            "accent_color": {
+                "type": "integer"
+            },
+            "banner": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
+            "password": {
+                "type": "string"
+            },
+            "new_password": {
+                "type": "string"
+            },
+            "code": {
+                "type": "string"
+            },
+            "email": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "UserProfileModifySchema": {
+        "type": "object",
+        "properties": {
+            "bio": {
+                "type": "string"
+            },
+            "accent_color": {
+                "type": [
+                    "null",
+                    "integer"
+                ]
+            },
+            "banner": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "UserSettingsSchema": {
+        "type": "object",
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "VanityUrlSchema": {
+        "type": "object",
+        "properties": {
+            "code": {
+                "minLength": 1,
+                "maxLength": 20,
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "VoiceStateUpdateSchema": {
+        "type": "object",
+        "properties": {
+            "channel_id": {
+                "type": "string"
+            },
+            "guild_id": {
+                "type": "string"
+            },
+            "suppress": {
+                "type": "boolean"
+            },
+            "request_to_speak_timestamp": {
+                "type": "string",
+                "format": "date-time"
+            },
+            "self_mute": {
+                "type": "boolean"
+            },
+            "self_deaf": {
+                "type": "boolean"
+            },
+            "self_video": {
+                "type": "boolean"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "channel_id"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "WebhookCreateSchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "maxLength": 80,
+                "type": "string"
+            },
+            "avatar": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "name"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "WidgetModifySchema": {
+        "type": "object",
+        "properties": {
+            "enabled": {
+                "type": "boolean"
+            },
+            "channel_id": {
+                "type": "string"
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "channel_id",
+            "enabled"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
+    "ChannelModifySchema": {
+        "type": "object",
+        "properties": {
+            "name": {
+                "maxLength": 100,
+                "type": "string"
+            },
+            "type": {
+                "enum": [
+                    0,
+                    1,
+                    10,
+                    11,
+                    12,
+                    13,
+                    14,
+                    15,
+                    2,
+                    255,
+                    3,
+                    33,
+                    34,
+                    35,
+                    4,
+                    5,
+                    6,
+                    64,
+                    7,
+                    8,
+                    9
+                ],
+                "type": "number"
+            },
+            "topic": {
+                "type": "string"
+            },
+            "icon": {
+                "type": [
+                    "null",
+                    "string"
+                ]
+            },
+            "bitrate": {
+                "type": "integer"
+            },
+            "user_limit": {
+                "type": "integer"
+            },
+            "rate_limit_per_user": {
+                "type": "integer"
+            },
+            "position": {
+                "type": "integer"
+            },
+            "permission_overwrites": {
+                "type": "array",
+                "items": {
+                    "type": "object",
+                    "properties": {
+                        "id": {
+                            "type": "string"
+                        },
+                        "type": {
+                            "$ref": "#/definitions/ChannelPermissionOverwriteType"
+                        },
+                        "allow": {
+                            "type": "string"
+                        },
+                        "deny": {
+                            "type": "string"
+                        }
+                    },
+                    "additionalProperties": false,
+                    "required": [
+                        "allow",
+                        "deny",
+                        "id",
+                        "type"
+                    ]
+                }
+            },
+            "parent_id": {
+                "type": "string"
+            },
+            "id": {
+                "type": "string"
+            },
+            "nsfw": {
+                "type": "boolean"
+            },
+            "rtc_region": {
+                "type": "string"
+            },
+            "default_auto_archive_duration": {
+                "type": "integer"
+            },
+            "flags": {
+                "type": "integer"
+            },
+            "default_thread_rate_limit_per_user": {
+                "type": "integer"
+            }
+        },
+        "additionalProperties": false,
+        "definitions": {
+            "ChannelPermissionOverwriteType": {
+                "enum": [
+                    0,
+                    1,
+                    2
+                ],
+                "type": "number"
+            }
+        },
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    }
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index d8febb96..878c2e2d 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,7 @@
 		"depclean": "node scripts/depclean.js",
 		"depcheck": "node scripts/depcheck.js",
 		"tsnode": "npx ts-node --transpile-only -P tsnode.tsconfig.json src/start.ts",
-		"genschemas": "node scripts/generate_schemas.js",
+		"genschemas": "node scripts/generate_schema.js",
 		"migrate": "cd ../util/ && npm i && node --require ts-node/register node_modules/typeorm/cli.js -f ../util/ormconfig.json migration:run",
 		"postinstall": "patch-package && npx --yes node-git-hooks"
 	},
diff --git a/src/api/routes/applications/#id/bot/index.ts b/src/api/routes/applications/#id/bot/index.ts
index e663059e..2ac3523b 100644
--- a/src/api/routes/applications/#id/bot/index.ts
+++ b/src/api/routes/applications/#id/bot/index.ts
@@ -1,7 +1,6 @@
 import { route } from "@fosscord/api";
-import { Application, Config, FieldErrors, generateToken, handleFile, OrmUtils, trimSpecial, User } from "@fosscord/util";
+import { Application, Config, FieldErrors, generateToken, handleFile, OrmUtils, trimSpecial, User, HTTPError } from "@fosscord/util";
 import { Request, Response, Router } from "express";
-import { HTTPError } from "lambert-server";
 import { verifyToken } from "node-2fa";
 
 const router: Router = Router();
diff --git a/src/api/routes/auth/mfa/totp.ts b/src/api/routes/auth/mfa/totp.ts
index 9938569e..4b080af6 100644
--- a/src/api/routes/auth/mfa/totp.ts
+++ b/src/api/routes/auth/mfa/totp.ts
@@ -1,7 +1,6 @@
 import { route } from "@fosscord/api";
-import { BackupCode, generateToken, TotpSchema, User } from "@fosscord/util";
+import { BackupCode, generateToken, TotpSchema, User, HTTPError } from "@fosscord/util";
 import { Request, Response, Router } from "express";
-import { HTTPError } from "lambert-server";
 import { verifyToken } from "node-2fa";
 const router = Router();
 
diff --git a/src/api/routes/auth/verify/view-backup-codes-challenge.ts b/src/api/routes/auth/verify/view-backup-codes-challenge.ts
new file mode 100644
index 00000000..d524e0f7
--- /dev/null
+++ b/src/api/routes/auth/verify/view-backup-codes-challenge.ts
@@ -0,0 +1,30 @@
+import { Router, Request, Response } from "express";
+import { route } from "@fosscord/api";
+import { FieldErrors, User, BackupCodesChallengeSchema } from "@fosscord/util";
+
+let bcrypt: any;
+try {
+	bcrypt = require("bcrypt");
+} catch {
+	bcrypt = require("bcryptjs");
+	console.log("Warning: using bcryptjs because bcrypt is not installed! Performance will be affected.");
+}
+
+const router = Router();
+
+router.post("/", route({ body: "BackupCodesChallengeSchema" }), async (req: Request, res: Response) => {
+	const { password } = req.body as BackupCodesChallengeSchema;
+
+	const user = await User.findOneOrFail({ where: { id: req.user_id }, select: ["data"] });
+
+	if (!await bcrypt.compare(password, user.data.hash || "")) {
+		throw FieldErrors({ password: { message: req.t("auth:login.INVALID_PASSWORD"), code: "INVALID_PASSWORD" } });
+	}
+
+	return res.json({
+		nonce: "NoncePlaceholder",
+		regenerate_nonce: "RegenNoncePlaceholder",
+	});
+});
+
+export default router;
diff --git a/src/api/routes/guilds/#guild_id/member-verification.ts b/src/api/routes/guilds/#guild_id/member-verification.ts
new file mode 100644
index 00000000..265a1b35
--- /dev/null
+++ b/src/api/routes/guilds/#guild_id/member-verification.ts
@@ -0,0 +1,14 @@
+import { Router, Request, Response } from "express";
+import { route } from "@fosscord/api";
+const router = Router();
+
+router.get("/",route({}), async (req: Request, res: Response) => {
+	// TODO: member verification
+
+	res.status(404).json({
+		message: "Unknown Guild Member Verification Form",
+		code: 10068
+	});
+});
+
+export default router;
diff --git a/src/api/routes/guilds/#guild_id/welcome_screen.ts b/src/api/routes/guilds/#guild_id/welcome_screen.ts
index 85c22a19..7e955c56 100644
--- a/src/api/routes/guilds/#guild_id/welcome_screen.ts
+++ b/src/api/routes/guilds/#guild_id/welcome_screen.ts
@@ -24,6 +24,8 @@ router.patch("/", route({ body: "GuildUpdateWelcomeScreenSchema", permission: "M
 	if (body.description) guild.welcome_screen.description = body.description;
 	if (body.enabled != null) guild.welcome_screen.enabled = body.enabled;
 
+	await guild.save();
+
 	res.sendStatus(204);
 });
 
diff --git a/src/api/routes/users/@me/mfa/codes-verification.ts b/src/api/routes/users/@me/mfa/codes-verification.ts
new file mode 100644
index 00000000..071c71fa
--- /dev/null
+++ b/src/api/routes/users/@me/mfa/codes-verification.ts
@@ -0,0 +1,41 @@
+import { Router, Request, Response } from "express";
+import { route } from "@fosscord/api";
+import { BackupCode, generateMfaBackupCodes, User, CodesVerificationSchema } from "@fosscord/util";
+
+const router = Router();
+
+router.post("/", route({ body: "CodesVerificationSchema" }), async (req: Request, res: Response) => {
+	const { key, nonce, regenerate } = req.body as CodesVerificationSchema;
+
+	// TODO: We don't have email/etc etc, so can't send a verification code.
+	// Once that's done, this route can verify `key`
+
+	const user = await User.findOneOrFail({ where: { id: req.user_id } });
+
+	var codes: BackupCode[];
+	if (regenerate) {
+		await BackupCode.update(
+			{ user: { id: req.user_id } },
+			{ expired: true }
+		);
+
+		codes = generateMfaBackupCodes(req.user_id);
+		await Promise.all(codes.map(x => x.save()));
+	}
+	else {
+		codes = await BackupCode.find({
+			where: {
+				user: {
+					id: req.user_id,
+				},
+				expired: false,
+			}
+		});
+	}
+
+	return res.json({
+		backup_codes: codes.map(x => ({ ...x, expired: undefined })),
+	});
+});
+
+export default router;
diff --git a/src/api/routes/users/@me/mfa/totp/disable.ts b/src/api/routes/users/@me/mfa/totp/disable.ts
index 6bc9a5c7..07fdbb05 100644
--- a/src/api/routes/users/@me/mfa/totp/disable.ts
+++ b/src/api/routes/users/@me/mfa/totp/disable.ts
@@ -1,7 +1,6 @@
 import { route } from "@fosscord/api";
-import { BackupCode, generateToken, TotpDisableSchema, User } from "@fosscord/util";
+import { BackupCode, generateToken, TotpDisableSchema, User, HTTPError } from "@fosscord/util";
 import { Request, Response, Router } from "express";
-import { HTTPError } from "lambert-server";
 import { verifyToken } from "node-2fa";
 
 const router = Router();
diff --git a/src/api/routes/users/@me/mfa/totp/enable.ts b/src/api/routes/users/@me/mfa/totp/enable.ts
index f3a73c28..adf51d6e 100644
--- a/src/api/routes/users/@me/mfa/totp/enable.ts
+++ b/src/api/routes/users/@me/mfa/totp/enable.ts
@@ -1,7 +1,6 @@
 import { route } from "@fosscord/api";
-import { BackupCode, Config, generateMfaBackupCodes, generateToken, TotpEnableSchema, User } from "@fosscord/util";
+import { BackupCode, Config, generateMfaBackupCodes, generateToken, TotpEnableSchema, User, HTTPError } from "@fosscord/util";
 import { Request, Response, Router } from "express";
-import { HTTPError } from "lambert-server";
 import { verifyToken } from "node-2fa";
 
 let bcrypt: any;
diff --git a/src/util/entities/Guild.ts b/src/util/entities/Guild.ts
index 015c6d04..cd7fa561 100644
--- a/src/util/entities/Guild.ts
+++ b/src/util/entities/Guild.ts
@@ -241,7 +241,7 @@ export class Guild extends BaseClass {
 		welcome_channels: {
 			description: string;
 			emoji_id?: string;
-			emoji_name: string;
+			emoji_name?: string;
 			channel_id: string;
 		}[];
 	};
diff --git a/src/util/entities/Member.ts b/src/util/entities/Member.ts
index a2a7b8cb..1b947a08 100644
--- a/src/util/entities/Member.ts
+++ b/src/util/entities/Member.ts
@@ -300,7 +300,8 @@ export class Member extends BaseClassWithoutId {
 					joined_at: member.joined_at,
 					presences: [],
 					stage_instances: [],
-					threads: []
+					threads: [],
+					embedded_activities: [],
 				},
 				user_id
 			} as GuildCreateEvent)
diff --git a/src/util/interfaces/Event.ts b/src/util/interfaces/Event.ts
index f97f4615..2631ef13 100644
--- a/src/util/interfaces/Event.ts
+++ b/src/util/interfaces/Event.ts
@@ -155,6 +155,7 @@ export interface GuildCreateEvent extends Event {
 		presences: never[];
 		stage_instances: never[];
 		threads: never[];
+		embedded_activities: never[];
 	};
 }
 
diff --git a/src/util/schemas/BackupCodesChallengeSchema.ts b/src/util/schemas/BackupCodesChallengeSchema.ts
new file mode 100644
index 00000000..d6b519b7
--- /dev/null
+++ b/src/util/schemas/BackupCodesChallengeSchema.ts
@@ -0,0 +1,3 @@
+export interface BackupCodesChallengeSchema {
+	password: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/CodesVerificationSchema.ts b/src/util/schemas/CodesVerificationSchema.ts
new file mode 100644
index 00000000..e8e2e7b4
--- /dev/null
+++ b/src/util/schemas/CodesVerificationSchema.ts
@@ -0,0 +1,5 @@
+export interface CodesVerificationSchema {
+	key: string;
+	nonce: string;
+	regenerate?: boolean;
+}
\ No newline at end of file
diff --git a/src/util/schemas/index.ts b/src/util/schemas/index.ts
index 3770daf0..320593ec 100644
--- a/src/util/schemas/index.ts
+++ b/src/util/schemas/index.ts
@@ -1,4 +1,5 @@
 export * from "./ActivitySchema";
+export * from "./BackupCodesChallengeSchema";
 export * from "./BanCreateSchema";
 export * from "./BanModeratorSchema";
 export * from "./BanRegistrySchema";
@@ -6,6 +7,7 @@ export * from "./BulkDeleteSchema";
 export * from "./ChannelModifySchema";
 export * from "./ChannelPermissionOverwriteSchema";
 export * from "./ChannelReorderSchema";
+export * from "./CodesVerificationSchema";
 export * from "./DmChannelCreateSchema";
 export * from "./EmojiCreateSchema";
 export * from "./EmojiModifySchema";
@@ -42,4 +44,4 @@ export * from "./UserSettingsSchema";
 export * from "./VanityUrlSchema";
 export * from "./VoiceStateUpdateSchema";
 export * from "./WebhookCreateSchema";
-export * from "./WidgetModifySchema";
+export * from "./WidgetModifySchema";
\ No newline at end of file