From 0cef3a9f6f1bbb994e3a50852e64447f8dbef0fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Susa=C3=B1a?= Date: Mon, 2 Sep 2024 18:01:34 -0400 Subject: [PATCH] fix(Watcher): partial types --- src/client/client.ts | 2 +- src/common/bot/watcher.ts | 2 ++ src/common/types/util.ts | 2 +- src/websocket/constants/index.ts | 5 +++-- src/websocket/discord/sharder.ts | 4 +++- src/websocket/discord/shared.ts | 5 ++++- 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/client/client.ts b/src/client/client.ts index 930cb40..83ed074 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -111,7 +111,6 @@ export class Client extends BaseClient { this.gateway = new ShardManager({ token, info: await this.proxy.gateway.bot.get(), - getInfo: () => this.proxy.gateway.bot.get(), intents, handlePayload: async (shardId, packet) => { await this.options?.handlePayload?.(shardId, packet); @@ -128,6 +127,7 @@ export class Client extends BaseClient { }, compress: this.options?.gateway?.compress, resharding: { + getInfo: () => this.proxy.gateway.bot.get(), interval: this.options?.resharding?.interval ?? 0, percentage: this.options?.resharding?.percentage ?? 0, reloadGuilds: ids => { diff --git a/src/common/bot/watcher.ts b/src/common/bot/watcher.ts index ca336e4..e55c4b6 100644 --- a/src/common/bot/watcher.ts +++ b/src/common/bot/watcher.ts @@ -14,6 +14,8 @@ export interface WatcherOptions | 'totalShards' | 'url' | 'version' + | 'resharding' + | 'debug' > { filePath: string; transpileCommand: string; diff --git a/src/common/types/util.ts b/src/common/types/util.ts index aebf8c9..442525a 100644 --- a/src/common/types/util.ts +++ b/src/common/types/util.ts @@ -21,7 +21,7 @@ export type DeepPartial = { ? DeepPartial : T[K] extends (infer I)[] ? DeepPartial[] - : T[K]; + : Partial; }; export type OmitInsert = I extends [] ? Omit & I[number] : Omit & I; diff --git a/src/websocket/constants/index.ts b/src/websocket/constants/index.ts index 8b9a2a4..6e7e1c0 100644 --- a/src/websocket/constants/index.ts +++ b/src/websocket/constants/index.ts @@ -1,3 +1,4 @@ +import type { DeepPartial } from '../../common'; import type { GatewayDispatchPayload } from '../../types'; import type { ShardManagerOptions, WorkerManagerOptions } from '../discord'; @@ -9,7 +10,7 @@ const properties = { device: 'Seyfert', }; -const ShardManagerDefaults: Partial = { +const ShardManagerDefaults: DeepPartial = { totalShards: 1, spawnShardDelay: 5300, debug: false, @@ -32,7 +33,7 @@ const ShardManagerDefaults: Partial = { }, }; -const WorkerManagerDefaults: Partial = { +const WorkerManagerDefaults: DeepPartial = { ...ShardManagerDefaults, shardsPerWorker: 16, handlePayload: (_shardId: number, _workerId: number, _packet: GatewayDispatchPayload): void => {}, diff --git a/src/websocket/discord/sharder.ts b/src/websocket/discord/sharder.ts index 63e6209..3a6113a 100644 --- a/src/websocket/discord/sharder.ts +++ b/src/websocket/discord/sharder.ts @@ -56,7 +56,7 @@ export class ShardManager extends Map { if (this.options.resharding.interval <= 0) return; setInterval(async () => { this.debugger?.debug('Checking if reshard is needed'); - const info = await this.options.getInfo(); + const info = await this.options.resharding.getInfo(); if (info.shards <= this.totalShards) return this.debugger?.debug('Resharding not needed'); //https://github.com/discordeno/discordeno/blob/6a5f446c0651b9fad9f1550ff1857fe7a026426b/packages/gateway/src/manager.ts#L106C8-L106C94 const percentage = (info.shards / ((this.totalShards * 2500) / 1000)) * 100; @@ -104,6 +104,8 @@ export class ShardManager extends Map { const resharder = new ShardManager({ ...this.options, resharding: { + // getInfo mock, we don't need it + getInfo: () => ({}) as any, interval: 0, percentage: 0, reloadGuilds() {}, diff --git a/src/websocket/discord/shared.ts b/src/websocket/discord/shared.ts index d4a9e72..6a76d19 100644 --- a/src/websocket/discord/shared.ts +++ b/src/websocket/discord/shared.ts @@ -8,7 +8,6 @@ import type { Awaitable, DeepPartial, Logger } from '../../common'; import type { IdentifyProperties } from '../constants'; export interface ShardManagerOptions extends ShardDetails { - getInfo(): Promise; /** Important data which is used by the manager to connect shards to the gateway. */ info: APIGatewayBotInfo; /** @@ -38,6 +37,10 @@ export interface ShardManagerOptions extends ShardDetails { compress?: boolean; resharding?: { + /** + * @returns the gateway connection info + */ + getInfo(): Promise; interval: number; percentage: number; /**