fix: make pendingGuilds optional and update related logic for guild handling

This commit is contained in:
MARCROCK22 2025-05-19 18:16:47 -04:00
parent c20f2fd0a3
commit 3350570334

View File

@ -45,7 +45,7 @@ export class Shard {
bucket: DynamicBucket; bucket: DynamicBucket;
offlineSendQueue: ((_?: unknown) => void)[] = []; offlineSendQueue: ((_?: unknown) => void)[] = [];
pendingGuilds = new Set<string>(); pendingGuilds?: Set<string>;
options: MakeRequired<ShardOptions, 'properties' | 'ratelimitOptions' | 'reconnectTimeout' | 'connectionTimeout'>; options: MakeRequired<ShardOptions, 'properties' | 'ratelimitOptions' | 'reconnectTimeout' | 'connectionTimeout'>;
isReady = false; isReady = false;
@ -301,16 +301,14 @@ export class Shard {
clearTimeout(this.connectionTimeout); clearTimeout(this.connectionTimeout);
this.connectionTimeout = undefined; this.connectionTimeout = undefined;
if (hasIntent(this.options.intents, 'Guilds')) { if (hasIntent(this.options.intents, 'Guilds')) {
for (let i = 0; i < packet.d.guilds.length; i++) { this.pendingGuilds = new Set(...packet.d.guilds.map(guild => guild.id));
this.pendingGuilds.add(packet.d.guilds.at(i)!.id);
}
} }
this.data.resume_gateway_url = packet.d.resume_gateway_url; this.data.resume_gateway_url = packet.d.resume_gateway_url;
this.data.session_id = packet.d.session_id; this.data.session_id = packet.d.session_id;
this.offlineSendQueue.map(resolve => resolve()); this.offlineSendQueue.map(resolve => resolve());
this.options.handlePayload(this.id, packet); this.options.handlePayload(this.id, packet);
if (this.pendingGuilds.size === 0) { if (this.pendingGuilds?.size === 0) {
this.isReady = true; this.isReady = true;
this.options.handlePayload(this.id, { this.options.handlePayload(this.id, {
t: GatewayDispatchEvents.GuildsReady, t: GatewayDispatchEvents.GuildsReady,
@ -322,7 +320,7 @@ export class Shard {
} }
case GatewayDispatchEvents.GuildCreate: case GatewayDispatchEvents.GuildCreate:
case GatewayDispatchEvents.GuildDelete: case GatewayDispatchEvents.GuildDelete:
if (this.pendingGuilds.delete(packet.d.id)) { if (this.pendingGuilds?.delete(packet.d.id)) {
(packet as any).t = `RAW_${packet.t}`; (packet as any).t = `RAW_${packet.t}`;
this.options.handlePayload(this.id, packet); this.options.handlePayload(this.id, packet);
if (this.pendingGuilds.size === 0) { if (this.pendingGuilds.size === 0) {