diff --git a/src/Client.ts b/src/Client.ts index d85266b7..74d952ae 100644 --- a/src/Client.ts +++ b/src/Client.ts @@ -82,6 +82,7 @@ export type Events = { serverDelete: [server: HydratedServer]; serverLeave: [server: HydratedServer]; serverRoleUpdate: [server: Server, roleId: string, previousRole: Role]; + serverRoleRanksUpdate: [server: Server, ranks: string[]]; serverRoleDelete: [server: Server, roleId: string, role: Role]; serverMemberUpdate: [ diff --git a/src/classes/File.ts b/src/classes/File.ts index cf1e25d2..b0e37cb2 100644 --- a/src/classes/File.ts +++ b/src/classes/File.ts @@ -45,15 +45,24 @@ export class File { */ constructor( client: Client, - file: Pick & Partial, + file: (Pick & Partial) | File, ) { this.#client = client; - this.id = file._id; - this.tag = file.tag; - this.filename = file.filename; - this.metadata = file.metadata; - this.contentType = file.content_type; - this.size = file.size; + if (file instanceof File) { + this.id = file.id; + this.tag = file.tag; + this.filename = file.filename; + this.metadata = file.metadata; + this.contentType = file.contentType; + this.size = file.size; + } else { + this.id = file._id; + this.tag = file.tag; + this.filename = file.filename; + this.metadata = file.metadata; + this.contentType = file.content_type; + this.size = file.size; + } } /** diff --git a/src/events/v1.ts b/src/events/v1.ts index 852142d1..bfc71828 100644 --- a/src/events/v1.ts +++ b/src/events/v1.ts @@ -145,6 +145,7 @@ type ServerMessage = role_id: string; data: Partial; } + | { type: "ServerRoleRanksUpdate"; id: string; ranks: string[] } | { type: "ServerRoleDelete"; id: string; role_id: string } | { type: "UserUpdate"; @@ -733,6 +734,25 @@ export async function handleEvent( } break; } + case "ServerRoleRanksUpdate": { + const server = client.servers.getOrPartial(event.id); + if (server && event.ranks) { + event.ranks.forEach((roleId: string, idx: number) => { + const role = server.roles.get(roleId); + if (role) { + server.roles.set( + roleId, + new ServerRole(client, server.id, roleId, { + ...role, + rank: idx, + } as never), + ); + } + }); + client.emit("serverRoleRanksUpdate", server, event.ranks); + } + break; + } case "ServerRoleDelete": { const server = client.servers.getOrPartial(event.id); if (server) {