summary refs log tree commit diff
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/schemas/ActivitySchema.ts60
-rw-r--r--src/util/schemas/BackupCodesChallengeSchema.ts3
-rw-r--r--src/util/schemas/BanCreateSchema.ts4
-rw-r--r--src/util/schemas/BanModeratorSchema.ts7
-rw-r--r--src/util/schemas/BanRegistrySchema.ts8
-rw-r--r--src/util/schemas/BulkDeleteSchema.ts3
-rw-r--r--src/util/schemas/ChannelModifySchema.ts30
-rw-r--r--src/util/schemas/CodesVerificationSchema.ts5
-rw-r--r--src/util/schemas/DmChannelCreateSchema.ts4
-rw-r--r--src/util/schemas/EmojiCreateSchema.ts6
-rw-r--r--src/util/schemas/EmojiModifySchema.ts4
-rw-r--r--src/util/schemas/GuildCreateSchema.ts14
-rw-r--r--src/util/schemas/GuildTemplateCreateSchema.ts4
-rw-r--r--src/util/schemas/GuildUpdateWelcomeScreenSchema.ts10
-rw-r--r--src/util/schemas/IdentifySchema.ts106
-rw-r--r--src/util/schemas/InviteCreateSchema.ts11
-rw-r--r--src/util/schemas/LazyRequestSchema.ts19
-rw-r--r--src/util/schemas/LoginSchema.ts8
-rw-r--r--src/util/schemas/MemberChangeSchema.ts4
-rw-r--r--src/util/schemas/MemberNickChangeSchema.ts3
-rw-r--r--src/util/schemas/MessageAcknowledgeSchema.ts4
-rw-r--r--src/util/schemas/MessageCreateSchema.ts33
-rw-r--r--src/util/schemas/MfaCodesSchema.ts4
-rw-r--r--src/util/schemas/ModifyGuildStickerSchema.ts15
-rw-r--r--src/util/schemas/PruneSchema.ts6
-rw-r--r--src/util/schemas/PurgeSchema.ts4
-rw-r--r--src/util/schemas/RegisterSchema.ts27
-rw-r--r--src/util/schemas/RelationshipPostSchema.ts4
-rw-r--r--src/util/schemas/RelationshipPutSchema.ts5
-rw-r--r--src/util/schemas/RoleModifySchema.ts10
-rw-r--r--src/util/schemas/SelectProtocolSchema.ts19
-rw-r--r--src/util/schemas/TemplateCreateSchema.ts4
-rw-r--r--src/util/schemas/TemplateModifySchema.ts4
-rw-r--r--src/util/schemas/TotpDisableSchema.ts3
-rw-r--r--src/util/schemas/TotpEnableSchema.ts5
-rw-r--r--src/util/schemas/TotpSchema.ts6
-rw-r--r--src/util/schemas/UserModifySchema.ts19
-rw-r--r--src/util/schemas/VanityUrlSchema.ts7
-rw-r--r--src/util/schemas/VoiceIdentifySchema.ts12
-rw-r--r--src/util/schemas/VoiceStateUpdateSchema.ts22
-rw-r--r--src/util/schemas/VoiceVideoSchema.ts17
-rw-r--r--src/util/schemas/WebhookCreateSchema.ts8
-rw-r--r--src/util/schemas/WidgetModifySchema.ts4
-rw-r--r--src/util/schemas/index.ts41
-rw-r--r--src/util/schemas/voice.ts69
45 files changed, 595 insertions, 70 deletions
diff --git a/src/util/schemas/ActivitySchema.ts b/src/util/schemas/ActivitySchema.ts
new file mode 100644
index 00000000..d316420e
--- /dev/null
+++ b/src/util/schemas/ActivitySchema.ts
@@ -0,0 +1,60 @@
+import { Activity, Status } from "@fosscord/util";
+
+export const ActivitySchema = {
+	afk: Boolean,
+	status: String,
+	$activities: [
+		{
+			name: String,
+			type: Number,
+			$url: String,
+			$created_at: Date,
+			$timestamps: {
+				$start: Number,
+				$end: Number,
+			},
+			$application_id: String,
+			$details: String,
+			$state: String,
+			$emoji: {
+				$name: String,
+				$id: String,
+				$animated: Boolean,
+			},
+			$party: {
+				$id: String,
+				$size: [Number, Number],
+			},
+			$assets: {
+				$large_image: String,
+				$large_text: String,
+				$small_image: String,
+				$small_text: String,
+			},
+			$secrets: {
+				$join: String,
+				$spectate: String,
+				$match: String,
+			},
+			$instance: Boolean,
+			$flags: String,
+
+			$id: String,
+			$sync_id: String,
+			$metadata: { // spotify
+				$context_uri: String,
+				album_id: String,
+				artist_ids: [String],
+			},
+			$session_id: String,
+		},
+	],
+	$since: Number, // unix time (in milliseconds) of when the client went idle, or null if the client is not idle
+};
+
+export interface ActivitySchema {
+	afk: boolean;
+	status: Status;
+	activities?: Activity[];
+	since?: number; // unix time (in milliseconds) of when the client went idle, or null if the client is not idle
+}
\ No newline at end of file
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/BanCreateSchema.ts b/src/util/schemas/BanCreateSchema.ts
new file mode 100644
index 00000000..876b2a89
--- /dev/null
+++ b/src/util/schemas/BanCreateSchema.ts
@@ -0,0 +1,4 @@
+export interface BanCreateSchema {
+	delete_message_days?: string;
+	reason?: string;
+};
\ No newline at end of file
diff --git a/src/util/schemas/BanModeratorSchema.ts b/src/util/schemas/BanModeratorSchema.ts
new file mode 100644
index 00000000..8efa2402
--- /dev/null
+++ b/src/util/schemas/BanModeratorSchema.ts
@@ -0,0 +1,7 @@
+export interface BanModeratorSchema {
+	id: string;
+	user_id: string;
+	guild_id: string;
+	executor_id: string;
+	reason?: string | undefined;
+};
\ No newline at end of file
diff --git a/src/util/schemas/BanRegistrySchema.ts b/src/util/schemas/BanRegistrySchema.ts
new file mode 100644
index 00000000..8680d3db
--- /dev/null
+++ b/src/util/schemas/BanRegistrySchema.ts
@@ -0,0 +1,8 @@
+export interface BanRegistrySchema {
+	id: string;
+	user_id: string;
+	guild_id: string;
+	executor_id: string;
+	ip?: string;
+	reason?: string | undefined;
+};
\ No newline at end of file
diff --git a/src/util/schemas/BulkDeleteSchema.ts b/src/util/schemas/BulkDeleteSchema.ts
new file mode 100644
index 00000000..6a71e052
--- /dev/null
+++ b/src/util/schemas/BulkDeleteSchema.ts
@@ -0,0 +1,3 @@
+export interface BulkDeleteSchema {
+	messages: string[];
+}
\ No newline at end of file
diff --git a/src/util/schemas/ChannelModifySchema.ts b/src/util/schemas/ChannelModifySchema.ts
new file mode 100644
index 00000000..835ea2d7
--- /dev/null
+++ b/src/util/schemas/ChannelModifySchema.ts
@@ -0,0 +1,30 @@
+import { ChannelPermissionOverwriteType, ChannelType } from "@fosscord/util";
+
+export interface ChannelModifySchema {
+	/**
+	 * @maxLength 100
+	 */
+	name?: string;
+	type?: ChannelType;
+	topic?: string;
+	icon?: string | null;
+	bitrate?: number;
+	user_limit?: number;
+	rate_limit_per_user?: number;
+	position?: number;
+	permission_overwrites?: {
+		id: string;
+		type: ChannelPermissionOverwriteType;
+		allow: string;
+		deny: string;
+	}[];
+	parent_id?: string;
+	id?: string; // is not used (only for guild create)
+	nsfw?: boolean;
+	rtc_region?: string;
+	default_auto_archive_duration?: number;
+	default_reaction_emoji?: string | null;
+	flags?: number;
+	default_thread_rate_limit_per_user?: number;
+	video_quality_mode?: number;
+}
\ 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/DmChannelCreateSchema.ts b/src/util/schemas/DmChannelCreateSchema.ts
new file mode 100644
index 00000000..04b8ff69
--- /dev/null
+++ b/src/util/schemas/DmChannelCreateSchema.ts
@@ -0,0 +1,4 @@
+export interface DmChannelCreateSchema {
+	name?: string;
+	recipients: string[];
+}
\ No newline at end of file
diff --git a/src/util/schemas/EmojiCreateSchema.ts b/src/util/schemas/EmojiCreateSchema.ts
new file mode 100644
index 00000000..8e2a2307
--- /dev/null
+++ b/src/util/schemas/EmojiCreateSchema.ts
@@ -0,0 +1,6 @@
+export interface EmojiCreateSchema {
+	name?: string;
+	image: string;
+	require_colons?: boolean | null;
+	roles?: string[];
+}
\ No newline at end of file
diff --git a/src/util/schemas/EmojiModifySchema.ts b/src/util/schemas/EmojiModifySchema.ts
new file mode 100644
index 00000000..cd5b7e3e
--- /dev/null
+++ b/src/util/schemas/EmojiModifySchema.ts
@@ -0,0 +1,4 @@
+export interface EmojiModifySchema {
+	name?: string;
+	roles?: string[];
+}
\ No newline at end of file
diff --git a/src/util/schemas/GuildCreateSchema.ts b/src/util/schemas/GuildCreateSchema.ts
new file mode 100644
index 00000000..9b5f7dc2
--- /dev/null
+++ b/src/util/schemas/GuildCreateSchema.ts
@@ -0,0 +1,14 @@
+import { ChannelModifySchema } from ".";
+
+export interface GuildCreateSchema {
+	/**
+	 * @maxLength 100
+	 */
+	name?: string;
+	region?: string;
+	icon?: string | null;
+	channels?: ChannelModifySchema[];
+	guild_template_code?: string;
+	system_channel_id?: string;
+	rules_channel_id?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/GuildTemplateCreateSchema.ts b/src/util/schemas/GuildTemplateCreateSchema.ts
new file mode 100644
index 00000000..7caefcb8
--- /dev/null
+++ b/src/util/schemas/GuildTemplateCreateSchema.ts
@@ -0,0 +1,4 @@
+export interface GuildTemplateCreateSchema {
+	name: string;
+	avatar?: string | null;
+}
\ No newline at end of file
diff --git a/src/util/schemas/GuildUpdateWelcomeScreenSchema.ts b/src/util/schemas/GuildUpdateWelcomeScreenSchema.ts
new file mode 100644
index 00000000..0022da6e
--- /dev/null
+++ b/src/util/schemas/GuildUpdateWelcomeScreenSchema.ts
@@ -0,0 +1,10 @@
+export interface GuildUpdateWelcomeScreenSchema {
+	welcome_channels?: {
+		channel_id: string;
+		description: string;
+		emoji_id?: string;
+		emoji_name?: string;
+	}[];
+	enabled?: boolean;
+	description?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/IdentifySchema.ts b/src/util/schemas/IdentifySchema.ts
new file mode 100644
index 00000000..409a03da
--- /dev/null
+++ b/src/util/schemas/IdentifySchema.ts
@@ -0,0 +1,106 @@
+import { ActivitySchema } from "@fosscord/util";
+
+export const IdentifySchema = {
+	token: String,
+	$intents: BigInt, // discord uses a Integer for bitfields we use bigints tho. | instanceOf will automatically convert the Number to a BigInt
+	$properties: Object,
+	// {
+	// 	// discord uses $ in the property key for bots, so we need to double prefix it, because instanceOf treats $ (prefix) as a optional key
+	// 	$os: String,
+	// 	$os_arch: String,
+	// 	$browser: String,
+	// 	$device: String,
+	// 	$$os: String,
+	// 	$$browser: String,
+	// 	$$device: String,
+	// 	$browser_user_agent: String,
+	// 	$browser_version: String,
+	// 	$os_version: String,
+	// 	$referrer: String,
+	// 	$$referrer: String,
+	// 	$referring_domain: String,
+	// 	$$referring_domain: String,
+	// 	$referrer_current: String,
+	// 	$referring_domain_current: String,
+	// 	$release_channel: String,
+	// 	$client_build_number: Number,
+	// 	$client_event_source: String,
+	// 	$client_version: String,
+	// 	$system_locale: String,
+	// 	$window_manager: String,
+	// 	$distro: String,
+	// },
+	$presence: ActivitySchema,
+	$compress: Boolean,
+	$large_threshold: Number,
+	$shard: [BigInt, BigInt],
+	$guild_subscriptions: Boolean,
+	$capabilities: Number,
+	$client_state: {
+		$guild_hashes: Object,
+		$highest_last_message_id: String || Number,
+		$read_state_version: Number,
+		$user_guild_settings_version: Number,
+		$user_settings_version: undefined,
+		$useruser_guild_settings_version: undefined,
+	},
+	$clientState: {
+		$guildHashes: Object,
+		$highestLastMessageId: String || Number,
+		$readStateVersion: Number,
+		$useruserGuildSettingsVersion: undefined,
+		$userGuildSettingsVersion: undefined,
+	},
+	$v: Number,
+	$version: Number,
+};
+
+export interface IdentifySchema {
+	token: string;
+	properties: {
+		// bruh discord really uses $ in the property key, so we need to double prefix it, because instanceOf treats $ (prefix) as a optional key
+		os?: string;
+		os_atch?: string;
+		browser?: string;
+		device?: string;
+		$os?: string;
+		$browser?: string;
+		$device?: string;
+		browser_user_agent?: string;
+		browser_version?: string;
+		os_version?: string;
+		referrer?: string;
+		referring_domain?: string;
+		referrer_current?: string;
+		referring_domain_current?: string;
+		release_channel?: "stable" | "dev" | "ptb" | "canary";
+		client_build_number?: number;
+		client_event_source?: any;
+		client_version?: string;
+		system_locale?: string;
+	};
+	intents?: bigint; // discord uses a Integer for bitfields we use bigints tho. | instanceOf will automatically convert the Number to a BigInt
+	presence?: ActivitySchema;
+	compress?: boolean;
+	large_threshold?: number;
+	largeThreshold?: number;
+	shard?: [bigint, bigint];
+	guild_subscriptions?: boolean;
+	capabilities?: number;
+	client_state?: {
+		guild_hashes?: any;
+		highest_last_message_id?: string | number;
+		read_state_version?: number;
+		user_guild_settings_version?: number;
+		user_settings_version?: number;
+		useruser_guild_settings_version?: number;
+	};
+	clientState?: {
+		guildHashes?: any;
+		highestLastMessageId?: string | number;
+		readStateVersion?: number;
+		userGuildSettingsVersion?: number;
+		useruserGuildSettingsVersion?: number;
+	};
+	v?: number;
+}
diff --git a/src/util/schemas/InviteCreateSchema.ts b/src/util/schemas/InviteCreateSchema.ts
new file mode 100644
index 00000000..83ae22dd
--- /dev/null
+++ b/src/util/schemas/InviteCreateSchema.ts
@@ -0,0 +1,11 @@
+export interface InviteCreateSchema {
+	target_user_id?: string;
+	target_type?: string;
+	validate?: string; // ? what is this
+	max_age?: number;
+	max_uses?: number;
+	temporary?: boolean;
+	unique?: boolean;
+	target_user?: string;
+	target_user_type?: number;
+}
\ No newline at end of file
diff --git a/src/util/schemas/LazyRequestSchema.ts b/src/util/schemas/LazyRequestSchema.ts
new file mode 100644
index 00000000..e9f2df20
--- /dev/null
+++ b/src/util/schemas/LazyRequestSchema.ts
@@ -0,0 +1,19 @@
+export interface LazyRequestSchema {
+	guild_id: string;
+	channels?: Record<string, [number, number][]>;
+	activities?: boolean;
+	threads?: boolean;
+	typing?: true;
+	members?: any[];
+	thread_member_lists?: any[];
+}
+
+export const LazyRequestSchema = {
+	guild_id: String,
+	$activities: Boolean,
+	$channels: Object,
+	$typing: Boolean,
+	$threads: Boolean,
+	$members: [] as any[],
+	$thread_member_lists: [] as any[],
+};
diff --git a/src/util/schemas/LoginSchema.ts b/src/util/schemas/LoginSchema.ts
new file mode 100644
index 00000000..543d236c
--- /dev/null
+++ b/src/util/schemas/LoginSchema.ts
@@ -0,0 +1,8 @@
+export interface LoginSchema {
+	login: string;
+	password: string;
+	undelete?: boolean;
+	captcha_key?: string;
+	login_source?: string;
+	gift_code_sku_id?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/MemberChangeSchema.ts b/src/util/schemas/MemberChangeSchema.ts
new file mode 100644
index 00000000..566d7e20
--- /dev/null
+++ b/src/util/schemas/MemberChangeSchema.ts
@@ -0,0 +1,4 @@
+export interface MemberChangeSchema {
+	roles?: string[];
+	nick?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/MemberNickChangeSchema.ts b/src/util/schemas/MemberNickChangeSchema.ts
new file mode 100644
index 00000000..ed9fdb7b
--- /dev/null
+++ b/src/util/schemas/MemberNickChangeSchema.ts
@@ -0,0 +1,3 @@
+export interface MemberNickChangeSchema {
+	nick: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/MessageAcknowledgeSchema.ts b/src/util/schemas/MessageAcknowledgeSchema.ts
new file mode 100644
index 00000000..1e7fb80d
--- /dev/null
+++ b/src/util/schemas/MessageAcknowledgeSchema.ts
@@ -0,0 +1,4 @@
+export interface MessageAcknowledgeSchema {
+	manual?: boolean;
+	mention_count?: number;
+}
\ No newline at end of file
diff --git a/src/util/schemas/MessageCreateSchema.ts b/src/util/schemas/MessageCreateSchema.ts
new file mode 100644
index 00000000..9d77c485
--- /dev/null
+++ b/src/util/schemas/MessageCreateSchema.ts
@@ -0,0 +1,33 @@
+import { Embed } from "@fosscord/util";
+
+export interface MessageCreateSchema {
+	type?: number;
+	content?: string;
+	nonce?: string;
+	channel_id?: string;
+	tts?: boolean;
+	flags?: string;
+	embeds?: Embed[];
+	embed?: Embed;
+	// TODO: ^ embed is deprecated in favor of embeds (https://discord.com/developers/docs/resources/channel#message-object)
+	allowed_mentions?: {
+		parse?: string[];
+		roles?: string[];
+		users?: string[];
+		replied_user?: boolean;
+	};
+	message_reference?: {
+		message_id: string;
+		channel_id: string;
+		guild_id?: string;
+		fail_if_not_exists?: boolean;
+	};
+	payload_json?: string;
+	file?: any;
+	/**
+	TODO: we should create an interface for attachments
+	TODO: OpenWAAO<-->attachment-style metadata conversion
+	**/
+	attachments?: any[];
+	sticker_ids?: string[];
+}
\ No newline at end of file
diff --git a/src/util/schemas/MfaCodesSchema.ts b/src/util/schemas/MfaCodesSchema.ts
new file mode 100644
index 00000000..226c43f1
--- /dev/null
+++ b/src/util/schemas/MfaCodesSchema.ts
@@ -0,0 +1,4 @@
+export interface MfaCodesSchema {
+	password: string;
+	regenerate?: boolean;
+}
\ No newline at end of file
diff --git a/src/util/schemas/ModifyGuildStickerSchema.ts b/src/util/schemas/ModifyGuildStickerSchema.ts
new file mode 100644
index 00000000..06bf4ffe
--- /dev/null
+++ b/src/util/schemas/ModifyGuildStickerSchema.ts
@@ -0,0 +1,15 @@
+export interface ModifyGuildStickerSchema {
+	/**
+	 * @minLength 2
+	 * @maxLength 30
+	 */
+	name: string;
+	/**
+	 * @maxLength 100
+	 */
+	description?: string;
+	/**
+	 * @maxLength 200
+	 */
+	tags: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/PruneSchema.ts b/src/util/schemas/PruneSchema.ts
new file mode 100644
index 00000000..60601d81
--- /dev/null
+++ b/src/util/schemas/PruneSchema.ts
@@ -0,0 +1,6 @@
+export interface PruneSchema {
+	/**
+	 * @min 0
+	 */
+	days: number;
+}
\ No newline at end of file
diff --git a/src/util/schemas/PurgeSchema.ts b/src/util/schemas/PurgeSchema.ts
new file mode 100644
index 00000000..8916be92
--- /dev/null
+++ b/src/util/schemas/PurgeSchema.ts
@@ -0,0 +1,4 @@
+export interface PurgeSchema {
+	before: string;
+	after: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/RegisterSchema.ts b/src/util/schemas/RegisterSchema.ts
new file mode 100644
index 00000000..c0cc3805
--- /dev/null
+++ b/src/util/schemas/RegisterSchema.ts
@@ -0,0 +1,27 @@
+export interface RegisterSchema {
+	/**
+	 * @minLength 2
+	 * @maxLength 32
+	 */
+	username: string;
+	/**
+	 * @minLength 1
+	 * @maxLength 72
+	 */
+	password?: string;
+	consent: boolean;
+	/**
+	 * @TJS-format email
+	 */
+	email?: string;
+	fingerprint?: string;
+	invite?: string;
+	/**
+	 * @TJS-type string
+	 */
+	date_of_birth?: Date; // "2000-04-03"
+	gift_code_sku_id?: string;
+	captcha_key?: string;
+
+	promotional_email_opt_in?: boolean;
+}
\ No newline at end of file
diff --git a/src/util/schemas/RelationshipPostSchema.ts b/src/util/schemas/RelationshipPostSchema.ts
new file mode 100644
index 00000000..3ff6eade
--- /dev/null
+++ b/src/util/schemas/RelationshipPostSchema.ts
@@ -0,0 +1,4 @@
+export interface RelationshipPostSchema {
+	discriminator: string;
+	username: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/RelationshipPutSchema.ts b/src/util/schemas/RelationshipPutSchema.ts
new file mode 100644
index 00000000..455f854e
--- /dev/null
+++ b/src/util/schemas/RelationshipPutSchema.ts
@@ -0,0 +1,5 @@
+import { RelationshipType } from "@fosscord/util";
+
+export interface RelationshipPutSchema {
+	type?: RelationshipType;
+}
\ No newline at end of file
diff --git a/src/util/schemas/RoleModifySchema.ts b/src/util/schemas/RoleModifySchema.ts
new file mode 100644
index 00000000..adb0c1a6
--- /dev/null
+++ b/src/util/schemas/RoleModifySchema.ts
@@ -0,0 +1,10 @@
+export interface RoleModifySchema {
+	name?: string;
+	permissions?: string;
+	color?: number;
+	hoist?: boolean; // whether the role should be displayed separately in the sidebar
+	mentionable?: boolean; // whether the role should be mentionable
+	position?: number;
+	icon?: string;
+	unicode_emoji?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/SelectProtocolSchema.ts b/src/util/schemas/SelectProtocolSchema.ts
new file mode 100644
index 00000000..92958e97
--- /dev/null
+++ b/src/util/schemas/SelectProtocolSchema.ts
@@ -0,0 +1,19 @@
+export interface SelectProtocolSchema {
+	protocol: "webrtc" | "udp";
+	data:
+	| string
+	| {
+		address: string;
+		port: number;
+		mode: string;
+	};
+	sdp?: string;
+	codecs?: {
+		name: "opus" | "VP8" | "VP9" | "H264";
+		type: "audio" | "video";
+		priority: number;
+		payload_type: number;
+		rtx_payload_type?: number | null;
+	}[];
+	rtc_connection_id?: string; // uuid
+}
\ No newline at end of file
diff --git a/src/util/schemas/TemplateCreateSchema.ts b/src/util/schemas/TemplateCreateSchema.ts
new file mode 100644
index 00000000..3f98f692
--- /dev/null
+++ b/src/util/schemas/TemplateCreateSchema.ts
@@ -0,0 +1,4 @@
+export interface TemplateCreateSchema {
+	name: string;
+	description?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/TemplateModifySchema.ts b/src/util/schemas/TemplateModifySchema.ts
new file mode 100644
index 00000000..3e6efb74
--- /dev/null
+++ b/src/util/schemas/TemplateModifySchema.ts
@@ -0,0 +1,4 @@
+export interface TemplateModifySchema {
+	name: string;
+	description?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/TotpDisableSchema.ts b/src/util/schemas/TotpDisableSchema.ts
new file mode 100644
index 00000000..05192bfa
--- /dev/null
+++ b/src/util/schemas/TotpDisableSchema.ts
@@ -0,0 +1,3 @@
+export interface TotpDisableSchema {
+	code: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/TotpEnableSchema.ts b/src/util/schemas/TotpEnableSchema.ts
new file mode 100644
index 00000000..7f6fb5a9
--- /dev/null
+++ b/src/util/schemas/TotpEnableSchema.ts
@@ -0,0 +1,5 @@
+export interface TotpEnableSchema {
+	password: string;
+	code?: string;
+	secret?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/TotpSchema.ts b/src/util/schemas/TotpSchema.ts
new file mode 100644
index 00000000..889cb443
--- /dev/null
+++ b/src/util/schemas/TotpSchema.ts
@@ -0,0 +1,6 @@
+export interface TotpSchema {
+	code: string,
+	ticket: string,
+	gift_code_sku_id?: string | null,
+	login_source?: string | null,
+}
\ No newline at end of file
diff --git a/src/util/schemas/UserModifySchema.ts b/src/util/schemas/UserModifySchema.ts
new file mode 100644
index 00000000..34e0f135
--- /dev/null
+++ b/src/util/schemas/UserModifySchema.ts
@@ -0,0 +1,19 @@
+export interface UserModifySchema {
+	/**
+	 * @minLength 1
+	 * @maxLength 100
+	 */
+	username?: string;
+	avatar?: string | null;
+	/**
+	 * @maxLength 1024
+	 */
+	bio?: string;
+	accent_color?: number;
+	banner?: string | null;
+	password?: string;
+	new_password?: string;
+	code?: string;
+	email?: string;
+	discriminator?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/VanityUrlSchema.ts b/src/util/schemas/VanityUrlSchema.ts
new file mode 100644
index 00000000..28bf7f2b
--- /dev/null
+++ b/src/util/schemas/VanityUrlSchema.ts
@@ -0,0 +1,7 @@
+export interface VanityUrlSchema {
+	/**
+	 * @minLength 1
+	 * @maxLength 20
+	 */
+	code?: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/VoiceIdentifySchema.ts b/src/util/schemas/VoiceIdentifySchema.ts
new file mode 100644
index 00000000..d48de347
--- /dev/null
+++ b/src/util/schemas/VoiceIdentifySchema.ts
@@ -0,0 +1,12 @@
+export interface VoiceIdentifySchema {
+	server_id: string;
+	user_id: string;
+	session_id: string;
+	token: string;
+	video?: boolean;
+	streams?: {
+		type: string;
+		rid: string;
+		quality: number;
+	}[];
+}
\ No newline at end of file
diff --git a/src/util/schemas/VoiceStateUpdateSchema.ts b/src/util/schemas/VoiceStateUpdateSchema.ts
new file mode 100644
index 00000000..5f805f4d
--- /dev/null
+++ b/src/util/schemas/VoiceStateUpdateSchema.ts
@@ -0,0 +1,22 @@
+//TODO need more testing when community guild and voice stage channel are working
+export interface VoiceStateUpdateSchema {
+	guild_id?: string;
+	channel_id?: string;
+	self_mute: boolean;
+	self_deaf: boolean;
+	self_video?: boolean;
+	preferred_region?: string;
+	request_to_speak_timestamp?: Date;
+	suppress?: boolean;
+}
+
+export const VoiceStateUpdateSchema = {
+	$guild_id: String,
+	$channel_id: String,
+	self_mute: Boolean,
+	self_deaf: Boolean,
+	$self_video: Boolean,	//required in docs but bots don't always send it
+	$preferred_region: String,
+	$request_to_speak_timestamp: Date,
+	$suppress: Boolean,
+};
\ No newline at end of file
diff --git a/src/util/schemas/VoiceVideoSchema.ts b/src/util/schemas/VoiceVideoSchema.ts
new file mode 100644
index 00000000..837ee1e7
--- /dev/null
+++ b/src/util/schemas/VoiceVideoSchema.ts
@@ -0,0 +1,17 @@
+export interface VoiceVideoSchema {
+	audio_ssrc: number;
+	video_ssrc: number;
+	rtx_ssrc?: number;
+	user_id?: string;
+	streams?: {
+		type: "video" | "audio";
+		rid: string;
+		ssrc: number;
+		active: boolean;
+		quality: number;
+		rtx_ssrc: number;
+		max_bitrate: number;
+		max_framerate: number;
+		max_resolution: { type: string; width: number; height: number; };
+	}[];
+}
\ No newline at end of file
diff --git a/src/util/schemas/WebhookCreateSchema.ts b/src/util/schemas/WebhookCreateSchema.ts
new file mode 100644
index 00000000..c32b642d
--- /dev/null
+++ b/src/util/schemas/WebhookCreateSchema.ts
@@ -0,0 +1,8 @@
+// TODO: webhooks
+export interface WebhookCreateSchema {
+	/**
+	 * @maxLength 80
+	 */
+	name: string;
+	avatar: string;
+}
\ No newline at end of file
diff --git a/src/util/schemas/WidgetModifySchema.ts b/src/util/schemas/WidgetModifySchema.ts
new file mode 100644
index 00000000..3c84b3a1
--- /dev/null
+++ b/src/util/schemas/WidgetModifySchema.ts
@@ -0,0 +1,4 @@
+export interface WidgetModifySchema {
+	enabled: boolean; // whether the widget is enabled
+	channel_id: string; // the widget channel id
+}
\ No newline at end of file
diff --git a/src/util/schemas/index.ts b/src/util/schemas/index.ts
index 662152dc..f86552f3 100644
--- a/src/util/schemas/index.ts
+++ b/src/util/schemas/index.ts
@@ -1,2 +1,41 @@
 export * from "./Validator";
-export * from "./voice";
\ No newline at end of file
+export * from "./SelectProtocolSchema";
+export * from "./LoginSchema";
+export * from "./RegisterSchema";
+export * from "./TotpSchema";
+export * from "./BackupCodesChallengeSchema";
+export * from "./ChannelModifySchema";
+export * from "./InviteCreateSchema";
+export * from "./PurgeSchema";
+export * from "./WebhookCreateSchema";
+export * from "./MessageCreateSchema";
+export * from "./MessageAcknowledgeSchema";
+export * from "./GuildCreateSchema";
+export * from "./BanCreateSchema";
+export * from "./BanModeratorSchema";
+export * from "./BanRegistrySchema";
+export * from "./EmojiCreateSchema";
+export * from "./EmojiModifySchema";
+export * from "./ModifyGuildStickerSchema";
+export * from "./TemplateCreateSchema";
+export * from "./TemplateModifySchema";
+export * from "./VanityUrlSchema";
+export * from "./GuildUpdateWelcomeScreenSchema";
+export * from "./WidgetModifySchema";
+export * from "./MemberChangeSchema";
+export * from "./RoleModifySchema";
+export * from "./GuildTemplateCreateSchema";
+export * from "./DmChannelCreateSchema";
+export * from "./UserModifySchema";
+export * from "./RelationshipPostSchema";
+export * from "./RelationshipPutSchema";
+export * from "./CodesVerificationSchema";
+export * from "./MfaCodesSchema";
+export * from "./TotpDisableSchema";
+export * from "./TotpEnableSchema";
+export * from "./VoiceIdentifySchema";
+export * from "./VoiceStateUpdateSchema";
+export * from "./VoiceVideoSchema";
+export * from "./IdentifySchema";
+export * from "./ActivitySchema";
+export * from "./LazyRequestSchema";
\ No newline at end of file
diff --git a/src/util/schemas/voice.ts b/src/util/schemas/voice.ts
deleted file mode 100644
index 61c12f92..00000000
--- a/src/util/schemas/voice.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-export interface VoiceVideoSchema {
-	audio_ssrc: number;
-	video_ssrc: number;
-	rtx_ssrc?: number;
-	user_id?: string;
-	streams?: {
-		type: "video" | "audio";
-		rid: string;
-		ssrc: number;
-		active: boolean;
-		quality: number;
-		rtx_ssrc: number;
-		max_bitrate: number;
-		max_framerate: number;
-		max_resolution: { type: string; width: number; height: number; };
-	}[];
-}
-
-export const VoiceStateUpdateSchema = {
-	$guild_id: String,
-	$channel_id: String,
-	self_mute: Boolean,
-	self_deaf: Boolean,
-	self_video: Boolean
-};
-
-//TODO need more testing when community guild and voice stage channel are working
-export interface VoiceStateUpdateSchema {
-	channel_id: string;
-	guild_id?: string;
-	suppress?: boolean;
-	request_to_speak_timestamp?: Date;
-	self_mute?: boolean;
-	self_deaf?: boolean;
-	self_video?: boolean;
-}
-
-export interface VoiceIdentifySchema {
-	server_id: string;
-	user_id: string;
-	session_id: string;
-	token: string;
-	video?: boolean;
-	streams?: {
-		type: string;
-		rid: string;
-		quality: number;
-	}[];
-}
-
-export interface SelectProtocolSchema {
-	protocol: "webrtc" | "udp";
-	data:
-	| string
-	| {
-		address: string;
-		port: number;
-		mode: string;
-	};
-	sdp?: string;
-	codecs?: {
-		name: "opus" | "VP8" | "VP9" | "H264";
-		type: "audio" | "video";
-		priority: number;
-		payload_type: number;
-		rtx_payload_type?: number | null;
-	}[];
-	rtc_connection_id?: string; // uuid
-}
\ No newline at end of file