summary refs log tree commit diff
path: root/util/src/models/Activity.ts
diff options
context:
space:
mode:
Diffstat (limited to 'util/src/models/Activity.ts')
-rw-r--r--util/src/models/Activity.ts132
1 files changed, 132 insertions, 0 deletions
diff --git a/util/src/models/Activity.ts b/util/src/models/Activity.ts
new file mode 100644
index 00000000..17abd1ca
--- /dev/null
+++ b/util/src/models/Activity.ts
@@ -0,0 +1,132 @@
+import { User } from "..";
+import { ClientStatus, Status } from "./Status";
+import { Schema, model, Types, Document } from "mongoose";
+import toBigInt from "../util/toBigInt";
+
+export interface Presence {
+	user: User;
+	guild_id?: string;
+	status: Status;
+	activities: Activity[];
+	client_status: ClientStatus;
+}
+
+export interface Activity {
+	name: string;
+	type: ActivityType;
+	url?: string;
+	created_at?: Date;
+	timestamps?: {
+		start?: number;
+		end?: number;
+	}[];
+	application_id?: string;
+	details?: string;
+	state?: string;
+	emoji?: {
+		name: string;
+		id?: string;
+		amimated?: 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?: bigint;
+}
+
+export const ActivitySchema = {
+	name: { type: String, required: true },
+	type: { type: Number, required: true },
+	url: String,
+	created_at: Date,
+	timestamps: [
+		{
+			start: Number,
+			end: Number,
+		},
+	],
+	application_id: String,
+	details: String,
+	state: String,
+	emoji: {
+		name: String,
+		id: String,
+		amimated: 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: { type: String, get: toBigInt },
+};
+
+export const ActivityBodySchema = {
+	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,
+		$amimated: 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: BigInt,
+};
+
+export enum ActivityType {
+	GAME = 0,
+	STREAMING = 1,
+	LISTENING = 2,
+	CUSTOM = 4,
+	COMPETING = 5,
+}