diff --git a/src/Client.ts b/src/Client.ts index 34d8091e..0591393c 100644 --- a/src/Client.ts +++ b/src/Client.ts @@ -78,6 +78,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: [ @@ -279,7 +280,7 @@ export class Client extends AsyncEventEmitter { this.#reconnectTimeout = setTimeout( () => this.connect(), this.options.retryDelayFunction(this.connectionFailureCount()) * - 1e3, + 1e3, ) as never; this.#setConnectionFailureCount((count) => count + 1); diff --git a/src/events/v1.ts b/src/events/v1.ts index eb51b2f4..9f561f44 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"; @@ -719,6 +720,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) {