summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gateway/src/schema/Activity.ts39
-rw-r--r--gateway/src/schema/Emoji.ts11
-rw-r--r--util/src/interfaces/Activity.ts37
-rw-r--r--util/src/interfaces/Event.ts37
-rw-r--r--util/src/interfaces/Presence.ts4
5 files changed, 62 insertions, 66 deletions
diff --git a/gateway/src/schema/Activity.ts b/gateway/src/schema/Activity.ts
index f1665efd..e8763046 100644
--- a/gateway/src/schema/Activity.ts
+++ b/gateway/src/schema/Activity.ts
@@ -1,4 +1,4 @@
-import { EmojiSchema } from "./Emoji";
+import { Activity, Status } from "@fosscord/util";
 
 export const ActivitySchema = {
 	afk: Boolean,
@@ -47,40 +47,7 @@ export const ActivitySchema = {
 
 export interface ActivitySchema {
 	afk: boolean;
-	status: string;
-	activities?: [
-		{
-			name: string; // the activity's name
-			type: number; // activity type // TODO: check if its between range 0-5
-			url?: string; // stream url, is validated when type is 1
-			created_at?: number; // unix timestamp of when the activity was added to the user's session
-			timestamps?: {
-				// unix timestamps for start and/or end of the game
-				start: number;
-				end: number;
-			};
-			application_id?: string; // application id for the game
-			details?: string;
-			state?: string;
-			emoji?: EmojiSchema;
-			party?: {
-				id?: string;
-				size?: [number]; // used to show the party's current and maximum size // TODO: array length 2
-			};
-			assets?: {
-				large_image?: string; // the id for a large asset of the activity, usually a snowflake
-				large_text?: string; // text displayed when hovering over the large image of the activity
-				small_image?: string; // the id for a small asset of the activity, usually a snowflake
-				small_text?: string; // text displayed when hovering over the small image of the activity
-			};
-			secrets?: {
-				join?: string; // the secret for joining a party
-				spectate?: string; // the secret for spectating a game
-				match?: string; // the secret for a specific instanced match
-			};
-			instance?: boolean;
-			flags: string; // activity flags OR d together, describes what the payload includes
-		}
-	];
+	status: Status;
+	activities?: Activity[];
 	since?: number; // unix time (in milliseconds) of when the client went idle, or null if the client is not idle
 }
diff --git a/gateway/src/schema/Emoji.ts b/gateway/src/schema/Emoji.ts
deleted file mode 100644
index 413b8359..00000000
--- a/gateway/src/schema/Emoji.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export const EmojiSchema = {
-	name: String, // the name of the emoji
-	$id: String, // the id of the emoji
-	animated: Boolean, // whether this emoji is animated
-};
-
-export interface EmojiSchema {
-	name: string;
-	id?: string;
-	animated: Boolean;
-}
diff --git a/util/src/interfaces/Activity.ts b/util/src/interfaces/Activity.ts
index f5a3c270..43984afd 100644
--- a/util/src/interfaces/Activity.ts
+++ b/util/src/interfaces/Activity.ts
@@ -1,37 +1,38 @@
 export interface Activity {
-	name: string;
-	type: ActivityType;
-	url?: string;
-	created_at?: Date;
+	name: string; // the activity's name
+	type: ActivityType; // activity type // TODO: check if its between range 0-5
+	url?: string; // stream url, is validated when type is 1
+	created_at?: number; // unix timestamp of when the activity was added to the user's session
 	timestamps?: {
-		start?: number;
-		end?: number;
-	}[];
-	application_id?: string;
+		// unix timestamps for start and/or end of the game
+		start: number;
+		end: number;
+	};
+	application_id?: string; // application id for the game
 	details?: string;
 	state?: string;
 	emoji?: {
 		name: string;
 		id?: string;
-		amimated?: boolean;
+		animated: boolean;
 	};
 	party?: {
 		id?: string;
-		size?: [number, number];
+		size?: [number]; // used to show the party's current and maximum size // TODO: array length 2
 	};
 	assets?: {
-		large_image?: string;
-		large_text?: string;
-		small_image?: string;
-		small_text?: string;
+		large_image?: string; // the id for a large asset of the activity, usually a snowflake
+		large_text?: string; // text displayed when hovering over the large image of the activity
+		small_image?: string; // the id for a small asset of the activity, usually a snowflake
+		small_text?: string; // text displayed when hovering over the small image of the activity
 	};
 	secrets?: {
-		join?: string;
-		spectate?: string;
-		match?: string;
+		join?: string; // the secret for joining a party
+		spectate?: string; // the secret for spectating a game
+		match?: string; // the secret for a specific instanced match
 	};
 	instance?: boolean;
-	flags?: bigint;
+	flags: string; // activity flags OR d together, describes what the payload includes
 }
 
 export enum ActivityType {
diff --git a/util/src/interfaces/Event.ts b/util/src/interfaces/Event.ts
index 13fd4b8b..a5253c09 100644
--- a/util/src/interfaces/Event.ts
+++ b/util/src/interfaces/Event.ts
@@ -13,6 +13,7 @@ import { ConnectedAccount } from "../entities/ConnectedAccount";
 import { Relationship, RelationshipType } from "../entities/Relationship";
 import { Presence } from "./Presence";
 import { Sticker } from "..";
+import { Activity, Status } from ".";
 
 export interface Event {
 	guild_id?: string;
@@ -454,6 +455,37 @@ export interface RelationshipRemoveEvent extends Event {
 	data: Omit<PublicRelationship, "nickname">;
 }
 
+export interface SessionsReplace extends Event {
+	event: "SESSIONS_REPLACE";
+	data: {
+		activities: Activity[];
+		client_info: {
+			version: number;
+			os: string;
+			client: string;
+		};
+		status: Status;
+	}[];
+}
+
+export interface GuildMemberListUpdate extends Event {
+	event: "GUILD_MEMBER_LIST_UPDATE";
+	data: {
+		groups: { id: string; count: number }[];
+		guild_id: string;
+		id: string;
+		member_count: number;
+		online_count: number;
+		ops: {
+			index: number;
+			item: {
+				member?: PublicMember & { presence: Presence };
+				group?: { id: string; count: number }[];
+			};
+		}[];
+	};
+}
+
 export type EventData =
 	| InvalidatedEvent
 	| ReadyEvent
@@ -474,6 +506,7 @@ export type EventData =
 	| GuildMemberRemoveEvent
 	| GuildMemberUpdateEvent
 	| GuildMembersChunkEvent
+	| GuildMemberListUpdate
 	| GuildRoleCreateEvent
 	| GuildRoleUpdateEvent
 	| GuildRoleDeleteEvent
@@ -523,6 +556,7 @@ export enum EVENTEnum {
 	GuildMemberUpdate = "GUILD_MEMBER_UPDATE",
 	GuildMemberSpeaking = "GUILD_MEMBER_SPEAKING",
 	GuildMembersChunk = "GUILD_MEMBERS_CHUNK",
+	GuildMemberListUpdate = "GUILD_MEMBER_LIST_UPDATE",
 	GuildRoleCreate = "GUILD_ROLE_CREATE",
 	GuildRoleDelete = "GUILD_ROLE_DELETE",
 	GuildRoleUpdate = "GUILD_ROLE_UPDATE",
@@ -546,6 +580,7 @@ export enum EVENTEnum {
 	ApplicationCommandCreate = "APPLICATION_COMMAND_CREATE",
 	ApplicationCommandUpdate = "APPLICATION_COMMAND_UPDATE",
 	ApplicationCommandDelete = "APPLICATION_COMMAND_DELETE",
+	SessionsReplace = "SESSIONS_REPLACE",
 }
 
 export type EVENT =
@@ -569,6 +604,7 @@ export type EVENT =
 	| "GUILD_MEMBER_UPDATE"
 	| "GUILD_MEMBER_SPEAKING"
 	| "GUILD_MEMBERS_CHUNK"
+	| "GUILD_MEMBER_LIST_UPDATE"
 	| "GUILD_ROLE_CREATE"
 	| "GUILD_ROLE_DELETE"
 	| "GUILD_ROLE_UPDATE"
@@ -597,6 +633,7 @@ export type EVENT =
 	| "MESSAGE_ACK"
 	| "RELATIONSHIP_ADD"
 	| "RELATIONSHIP_REMOVE"
+	| "SESSIONS_REPLACE"
 	| CUSTOMEVENTS;
 
 export type CUSTOMEVENTS = "INVALIDATED" | "RATELIMIT";
diff --git a/util/src/interfaces/Presence.ts b/util/src/interfaces/Presence.ts
index 4a1ff038..7663891a 100644
--- a/util/src/interfaces/Presence.ts
+++ b/util/src/interfaces/Presence.ts
@@ -1,10 +1,12 @@
 import { ClientStatus, Status } from "./Status";
 import { Activity } from "./Activity";
+import { PublicUser } from "../entities/User";
 
 export interface Presence {
-	user_id: string;
+	user: PublicUser;
 	guild_id?: string;
 	status: Status;
 	activities: Activity[];
 	client_status: ClientStatus;
+	// TODO: game
 }