seyfert 2.1.1-dev-11319654918.0 → 2.1.1-dev-11415038218.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import type { CommandContext, Message } from '..';
2
2
  import { type Awaitable, type DeepPartial, type If } from '../common';
3
3
  import { EventHandler } from '../events';
4
- import { type GatewayDispatchPayload, type GatewayPresenceUpdateData } from '../types';
4
+ import type { GatewayDispatchPayload, GatewayPresenceUpdateData } from '../types';
5
5
  import { ShardManager, type ShardManagerOptions } from '../websocket';
6
6
  import { MemberUpdateHandler } from '../websocket/discord/events/memberUpdate';
7
7
  import { PresenceUpdateHandler } from '../websocket/discord/events/presenceUpdate';
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Client = void 0;
4
4
  const common_1 = require("../common");
5
5
  const events_1 = require("../events");
6
- const types_1 = require("../types");
7
6
  const websocket_1 = require("../websocket");
8
7
  const memberUpdate_1 = require("../websocket/discord/events/memberUpdate");
9
8
  const presenceUpdate_1 = require("../websocket/discord/events/presenceUpdate");
@@ -164,7 +163,7 @@ class Client extends base_1.BaseClient {
164
163
  this.botId = packet.d.user.id;
165
164
  this.applicationId = packet.d.application.id;
166
165
  this.me = transformers_1.Transformers.ClientUser(this, packet.d.user, packet.d.application);
167
- if (!(0, common_1.hasIntent)(this.gateway.options.intents, types_1.GatewayIntentBits.Guilds)) {
166
+ if (!this.__handleGuilds.length) {
168
167
  if ([...this.gateway.values()].every(shard => shard.data.session_id)) {
169
168
  await this.events?.runEvent('BOT_READY', this, this.me, -1);
170
169
  }
@@ -1,6 +1,6 @@
1
1
  import { type DeepPartial, type When } from '../common';
2
2
  import { EventHandler } from '../events';
3
- import { type GatewayDispatchPayload } from '../types';
3
+ import type { GatewayDispatchPayload } from '../types';
4
4
  import { Shard, type ShardManagerOptions, type WorkerData } from '../websocket';
5
5
  import type { WorkerMessage, WorkerShardInfo } from '../websocket/discord/worker';
6
6
  import type { ManagerMessages } from '../websocket/discord/workermanager';
@@ -40,7 +40,8 @@ export declare class WorkerClient<Ready extends boolean = boolean> extends BaseC
40
40
  handleManagerMessages(data: ManagerMessages): Promise<any>;
41
41
  private generateNonce;
42
42
  private generateSendPromise;
43
- tellWorker(workerId: number, func: (_: this) => any): Promise<unknown>;
43
+ tellWorker<R>(workerId: number, func: (_: this) => R): Promise<R>;
44
+ tellWorkers<R>(func: (_: this) => R): Promise<Awaited<R>[]>;
44
45
  protected onPacket(packet: GatewayDispatchPayload, shardId: number): Promise<void>;
45
46
  }
46
47
  export declare function generateShardInfo(shard: Shard): WorkerShardInfo;
@@ -7,7 +7,6 @@ const __1 = require("..");
7
7
  const cache_1 = require("../cache");
8
8
  const common_1 = require("../common");
9
9
  const events_1 = require("../events");
10
- const types_1 = require("../types");
11
10
  const websocket_1 = require("../websocket");
12
11
  const base_1 = require("./base");
13
12
  const memberUpdate_1 = require("../websocket/discord/events/memberUpdate");
@@ -19,22 +18,23 @@ let manager;
19
18
  try {
20
19
  workerData = {
21
20
  debug: process.env.SEYFERT_WORKER_DEBUG === 'true',
22
- intents: Number.parseInt(process.env.SEYFERT_WORKER_INTENTS),
21
+ intents: Number(process.env.SEYFERT_WORKER_INTENTS),
23
22
  path: process.env.SEYFERT_WORKER_PATH,
24
- shards: process.env.SEYFERT_WORKER_SHARDS.split(',').map(id => Number.parseInt(id)),
23
+ shards: process.env.SEYFERT_WORKER_SHARDS.split(',').map(id => Number(id)),
25
24
  token: process.env.SEYFERT_WORKER_TOKEN,
26
- workerId: Number.parseInt(process.env.SEYFERT_WORKER_WORKERID),
25
+ workerId: Number(process.env.SEYFERT_WORKER_WORKERID),
27
26
  workerProxy: process.env.SEYFERT_WORKER_WORKERPROXY === 'true',
28
27
  totalShards: Number(process.env.SEYFERT_WORKER_TOTALSHARDS),
29
28
  mode: process.env.SEYFERT_WORKER_MODE,
30
29
  resharding: process.env.SEYFERT_WORKER_RESHARDING === 'true',
30
+ totalWorkers: Number(process.env.SEYFERT_WORKER_TOTALWORKERS),
31
31
  };
32
32
  }
33
33
  catch {
34
34
  //
35
35
  }
36
36
  class WorkerClient extends base_1.BaseClient {
37
- __handleGuilds = new Set();
37
+ __handleGuilds;
38
38
  __handleGuildsResharding;
39
39
  memberUpdateHandler = new memberUpdate_1.MemberUpdateHandler();
40
40
  presenceUpdateHandler = new presenceUpdate_1.PresenceUpdateHandler();
@@ -122,7 +122,7 @@ class WorkerClient extends base_1.BaseClient {
122
122
  workerId: workerData.workerId,
123
123
  });
124
124
  if (workerData.resharding) {
125
- this.__handleGuildsResharding = new Set();
125
+ this.__handleGuildsResharding = [];
126
126
  }
127
127
  await super.start(options);
128
128
  await this.loadEvents(options.eventsDir);
@@ -211,23 +211,24 @@ class WorkerClient extends base_1.BaseClient {
211
211
  },
212
212
  handlePayload(_, payload) {
213
213
  if (payload.t === 'GUILD_CREATE' || payload.t === 'GUILD_DELETE') {
214
- self.__handleGuildsResharding.delete(payload.d.id);
215
- if (!self.__handleGuildsResharding?.size && shardsConnected === workerData.shards.length) {
216
- delete self.__handleGuildsResharding;
217
- self.postMessage({
218
- type: 'WORKER_READY_RESHARDING',
219
- workerId: workerData.workerId,
220
- });
214
+ const indexOf = self.__handleGuildsResharding.indexOf(payload.d.id);
215
+ if (indexOf !== -1) {
216
+ self.__handleGuildsResharding.splice(indexOf, 1);
217
+ if (!self.__handleGuildsResharding?.length && shardsConnected === workerData.shards.length) {
218
+ delete self.__handleGuildsResharding;
219
+ self.postMessage({
220
+ type: 'WORKER_READY_RESHARDING',
221
+ workerId: workerData.workerId,
222
+ });
223
+ }
221
224
  }
222
225
  }
223
226
  if (payload.t !== 'READY')
224
227
  return;
225
228
  shardsConnected++;
226
- for (const guild of payload.d.guilds) {
227
- self.__handleGuildsResharding.add(guild.id);
228
- }
229
- if (shardsConnected === workerData.shards.length &&
230
- !(0, common_1.hasIntent)(workerData.intents, types_1.GatewayIntentBits.Guilds)) {
229
+ const ids = payload.d.guilds.map(x => x.id);
230
+ self.__handleGuildsResharding = self.__handleGuildsResharding?.concat(ids) ?? ids;
231
+ if (shardsConnected === workerData.shards.length && !self.__handleGuildsResharding.length) {
231
232
  delete self.__handleGuildsResharding;
232
233
  self.postMessage({
233
234
  type: 'WORKER_READY_RESHARDING',
@@ -327,6 +328,7 @@ class WorkerClient extends base_1.BaseClient {
327
328
  }
328
329
  break;
329
330
  case 'EXECUTE_EVAL':
331
+ case 'EXECUTE_EVAL_TO_WORKER':
330
332
  {
331
333
  let result;
332
334
  try {
@@ -357,7 +359,7 @@ class WorkerClient extends base_1.BaseClient {
357
359
  break;
358
360
  case 'WORKER_ALREADY_EXISTS_RESHARDING':
359
361
  {
360
- this.__handleGuildsResharding = new Set();
362
+ this.__handleGuildsResharding = [];
361
363
  this.postMessage({
362
364
  type: 'WORKER_START_RESHARDING',
363
365
  workerId: workerData.workerId,
@@ -409,7 +411,7 @@ class WorkerClient extends base_1.BaseClient {
409
411
  tellWorker(workerId, func) {
410
412
  const nonce = this.generateNonce();
411
413
  this.postMessage({
412
- type: 'EVAL',
414
+ type: 'EVAL_TO_WORKER',
413
415
  func: func.toString(),
414
416
  toWorkerId: workerId,
415
417
  workerId: workerData.workerId,
@@ -417,6 +419,13 @@ class WorkerClient extends base_1.BaseClient {
417
419
  });
418
420
  return this.generateSendPromise(nonce);
419
421
  }
422
+ tellWorkers(func) {
423
+ const promises = [];
424
+ for (let i = 0; i < workerData.totalWorkers; i++) {
425
+ promises.push(this.tellWorker(i, func));
426
+ }
427
+ return Promise.all(promises);
428
+ }
420
429
  async onPacket(packet, shardId) {
421
430
  Promise.allSettled([
422
431
  this.events?.runEvent('RAW', this, packet, shardId, false),
@@ -442,9 +451,9 @@ class WorkerClient extends base_1.BaseClient {
442
451
  break;
443
452
  case 'GUILD_DELETE':
444
453
  case 'GUILD_CREATE': {
445
- if (this.__handleGuilds?.has(packet.d.id)) {
446
- this.__handleGuilds?.delete(packet.d.id);
447
- if (!this.__handleGuilds?.size && [...this.shards.values()].every(shard => shard.data.session_id)) {
454
+ if (this.__handleGuilds?.includes(packet.d.id)) {
455
+ this.__handleGuilds?.splice(this.__handleGuilds.indexOf(packet.d.id), 1);
456
+ if (!this.__handleGuilds?.length && [...this.shards.values()].every(shard => shard.data.session_id)) {
448
457
  delete this.__handleGuilds;
449
458
  await this.cache.onPacket(packet);
450
459
  this.postMessage({
@@ -453,7 +462,7 @@ class WorkerClient extends base_1.BaseClient {
453
462
  });
454
463
  return this.events?.runEvent('WORKER_READY', this, this.me, -1);
455
464
  }
456
- if (!this.__handleGuilds?.size)
465
+ if (!this.__handleGuilds?.length)
457
466
  delete this.__handleGuilds;
458
467
  return this.cache.onPacket(packet);
459
468
  }
@@ -476,11 +485,8 @@ class WorkerClient extends base_1.BaseClient {
476
485
  break;
477
486
  case 'READY':
478
487
  {
479
- if (!this.__handleGuilds)
480
- this.__handleGuilds = new Set();
481
- for (const g of packet.d.guilds) {
482
- this.__handleGuilds?.add(g.id);
483
- }
488
+ const ids = packet.d.guilds.map(x => x.id);
489
+ this.__handleGuilds = this.__handleGuilds?.concat(ids) ?? ids;
484
490
  this.botId = packet.d.user.id;
485
491
  this.applicationId = packet.d.application.id;
486
492
  this.me = transformers_1.Transformers.ClientUser(this, packet.d.user, packet.d.application);
@@ -493,7 +499,7 @@ class WorkerClient extends base_1.BaseClient {
493
499
  });
494
500
  await this.events?.runEvent('WORKER_SHARDS_CONNECTED', this, this.me, -1);
495
501
  }
496
- if (!(0, common_1.hasIntent)(workerData.intents, types_1.GatewayIntentBits.Guilds)) {
502
+ if (!this.__handleGuilds.length) {
497
503
  if ([...this.shards.values()].every(shard => shard.data.session_id)) {
498
504
  this.postMessage({
499
505
  type: 'WORKER_READY',
@@ -522,5 +528,6 @@ function generateShardInfo(shard) {
522
528
  shardId: shard.id,
523
529
  latency: shard.latency,
524
530
  resumable: shard.resumable,
531
+ workerId: workerData.workerId,
525
532
  };
526
533
  }
@@ -22,7 +22,7 @@ export declare class EntryPointContext<M extends keyof RegisteredMiddlewares = n
22
22
  get fullCommandName(): string;
23
23
  write<WR extends boolean = false>(body: InteractionCreateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure, void | WebhookMessageStructure>>;
24
24
  modal(body: ModalCreateBodyRequest): Promise<undefined>;
25
- deferReply<WR extends boolean = false>(ephemeral?: boolean): Promise<When<WR, WebhookMessageStructure, undefined>>;
25
+ deferReply<WR extends boolean = false>(ephemeral?: boolean, withResponse?: WR): Promise<When<WR, WebhookMessageStructure, undefined>>;
26
26
  editResponse(body: InteractionMessageUpdateBodyRequest): Promise<import("../..").WebhookMessage>;
27
27
  deleteResponse(): Promise<void | undefined>;
28
28
  editOrReply<WR extends boolean = false>(body: InteractionCreateBodyRequest | InteractionMessageUpdateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure | MessageStructure, void | WebhookMessageStructure | MessageStructure>>;
@@ -29,8 +29,8 @@ class EntryPointContext extends basecontext_1.BaseContext {
29
29
  modal(body) {
30
30
  return this.interaction.modal(body);
31
31
  }
32
- deferReply(ephemeral = false) {
33
- return this.interaction.deferReply(ephemeral ? types_1.MessageFlags.Ephemeral : undefined);
32
+ deferReply(ephemeral = false, withResponse) {
33
+ return this.interaction.deferReply(ephemeral ? types_1.MessageFlags.Ephemeral : undefined, withResponse);
34
34
  }
35
35
  editResponse(body) {
36
36
  return this.interaction.editResponse(body);
@@ -23,7 +23,7 @@ export declare class MenuCommandContext<T extends MessageCommandInteraction | Us
23
23
  get fullCommandName(): string;
24
24
  write<WR extends boolean = false>(body: InteractionCreateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure, void | WebhookMessageStructure>>;
25
25
  modal(body: ModalCreateBodyRequest): Promise<undefined>;
26
- deferReply<WR extends boolean = false>(ephemeral?: boolean): Promise<When<WR, WebhookMessageStructure, undefined>>;
26
+ deferReply<WR extends boolean = false>(ephemeral?: boolean, withResponse?: WR): Promise<When<WR, WebhookMessageStructure, undefined>>;
27
27
  editResponse(body: InteractionMessageUpdateBodyRequest): Promise<import("../..").WebhookMessage>;
28
28
  deleteResponse(): Promise<void | undefined>;
29
29
  editOrReply<WR extends boolean = false>(body: InteractionCreateBodyRequest | InteractionMessageUpdateBodyRequest, withResponse?: WR): Promise<When<WR, WebhookMessageStructure | MessageStructure, void | WebhookMessageStructure | MessageStructure>>;
@@ -44,8 +44,8 @@ class MenuCommandContext extends basecontext_1.BaseContext {
44
44
  modal(body) {
45
45
  return this.interaction.modal(body);
46
46
  }
47
- deferReply(ephemeral = false) {
48
- return this.interaction.deferReply(ephemeral ? types_1.MessageFlags.Ephemeral : undefined);
47
+ deferReply(ephemeral = false, withResponse) {
48
+ return this.interaction.deferReply(ephemeral ? types_1.MessageFlags.Ephemeral : undefined, withResponse);
49
49
  }
50
50
  editResponse(body) {
51
51
  return this.interaction.editResponse(body);
@@ -36,7 +36,7 @@ export declare class BaseInteraction<FromGuild extends boolean = boolean, Type e
36
36
  static transformBody<T>(body: InteractionCreateBodyRequest | InteractionMessageUpdateBodyRequest | MessageUpdateBodyRequest | MessageCreateBodyRequest | MessageWebhookCreateBodyRequest, files: RawFile[] | undefined, self: UsingClient): T;
37
37
  private matchReplied;
38
38
  reply<WR extends boolean = false>(body: ReplyInteractionBody, withResponse?: WR): Promise<When<WR, WebhookMessageStructure, undefined>>;
39
- deferReply<WR extends boolean = false>(flags?: MessageFlags, withResponse?: boolean): Promise<When<WR, WebhookMessageStructure, undefined>>;
39
+ deferReply<WR extends boolean = false>(flags?: MessageFlags, withResponse?: WR): Promise<When<WR, WebhookMessageStructure, undefined>>;
40
40
  isButton(): this is ButtonInteraction;
41
41
  isChannelSelectMenu(): this is ChannelSelectMenuInteraction;
42
42
  isRoleSelectMenu(): this is RoleSelectMenuInteraction;
@@ -136,7 +136,7 @@ class BaseInteraction extends DiscordBase_1.DiscordBase {
136
136
  }
137
137
  return result;
138
138
  }
139
- deferReply(flags, withResponse = false) {
139
+ deferReply(flags, withResponse) {
140
140
  return this.reply({
141
141
  type: types_1.InteractionResponseType.DeferredChannelMessageWithSource,
142
142
  data: {
@@ -112,6 +112,7 @@ export interface WorkerData {
112
112
  path: string;
113
113
  shards: number[];
114
114
  totalShards: number;
115
+ totalWorkers: number;
115
116
  mode: 'custom' | 'clusters' | 'threads';
116
117
  workerId: number;
117
118
  debug: boolean;
@@ -5,6 +5,7 @@ export interface WorkerShardInfo {
5
5
  shardId: number;
6
6
  latency: number;
7
7
  resumable: boolean;
8
+ workerId: number;
8
9
  }
9
10
  export type WorkerInfo = {
10
11
  shards: WorkerShardInfo[];
@@ -53,10 +54,10 @@ export type WorkerSendEvalResponse = CreateWorkerMessage<'EVAL_RESPONSE', {
53
54
  response: unknown;
54
55
  nonce: string;
55
56
  }>;
56
- export type WorkerSendEval = CreateWorkerMessage<'EVAL', {
57
+ export type WorkerSendToWorkerEval = CreateWorkerMessage<'EVAL_TO_WORKER', {
57
58
  func: string;
58
59
  nonce: string;
59
60
  toWorkerId: number;
60
61
  }>;
61
- export type WorkerMessage = WorkerRequestConnect | WorkerReceivePayload | WorkerSendResultPayload | WorkerSendCacheRequest | WorkerSendShardInfo | WorkerSendInfo | WorkerReady | WorkerShardsConnected | WorkerSendApiRequest | WorkerSendEvalResponse | WorkerSendEval | WorkerStart | WorkerStartResharding | WorkerRequestConnectResharding | WorkerReadyResharding | WorkerDisconnectedAllShardsResharding;
62
+ export type WorkerMessage = WorkerRequestConnect | WorkerReceivePayload | WorkerSendResultPayload | WorkerSendCacheRequest | WorkerSendShardInfo | WorkerSendInfo | WorkerReady | WorkerShardsConnected | WorkerSendApiRequest | WorkerSendEvalResponse | WorkerSendToWorkerEval | WorkerStart | WorkerStartResharding | WorkerRequestConnectResharding | WorkerReadyResharding | WorkerDisconnectedAllShardsResharding;
62
63
  export {};
@@ -1,12 +1,13 @@
1
1
  import { type Worker as ClusterWorker } from 'node:cluster';
2
- import { ApiHandler, Logger } from '../..';
2
+ import type { Worker as WorkerThreadsWorker } from 'node:worker_threads';
3
+ import { ApiHandler, Logger, type UsingClient, type WorkerClient } from '../..';
3
4
  import { type Adapter } from '../../cache';
4
5
  import { type MakePartial } from '../../common';
5
6
  import type { GatewayPresenceUpdateData, GatewaySendPayload } from '../../types';
6
7
  import { ConnectQueue } from '../structures/timeout';
7
8
  import type { ShardOptions, WorkerData, WorkerManagerOptions } from './shared';
8
9
  import type { WorkerInfo, WorkerMessage, WorkerShardInfo } from './worker';
9
- export declare class WorkerManager extends Map<number, (ClusterWorker | import('node:worker_threads').Worker | {
10
+ export declare class WorkerManager extends Map<number, (ClusterWorker | WorkerThreadsWorker | {
10
11
  ready?: boolean;
11
12
  }) & {
12
13
  ready?: boolean;
@@ -52,8 +53,8 @@ export declare class WorkerManager extends Map<number, (ClusterWorker | import('
52
53
  calculateShardId(guildId: string): number;
53
54
  calculateWorkerId(shardId: number): number;
54
55
  postMessage(id: number, body: ManagerMessages): void;
55
- prepareWorkers(shards: number[][], resharding?: boolean): Promise<void>;
56
- createWorker(workerData: WorkerData): ClusterWorker | import("worker_threads").Worker | ({
56
+ prepareWorkers(shards: number[][], resharding?: boolean): void;
57
+ createWorker(workerData: WorkerData): ClusterWorker | WorkerThreadsWorker | ({
57
58
  ready?: boolean;
58
59
  } & {
59
60
  ready?: boolean;
@@ -67,6 +68,8 @@ export declare class WorkerManager extends Map<number, (ClusterWorker | import('
67
68
  send(data: GatewaySendPayload, shardId: number): Promise<true>;
68
69
  getShardInfo(shardId: number): Promise<WorkerShardInfo>;
69
70
  getWorkerInfo(workerId: number): Promise<WorkerInfo>;
71
+ tellWorker<R>(workerId: number, func: (_: WorkerClient & UsingClient) => R): Promise<R>;
72
+ tellWorkers<R>(func: (_: WorkerClient & UsingClient) => R): Promise<Awaited<R>[]>;
70
73
  start(): Promise<void>;
71
74
  startResharding(): Promise<void>;
72
75
  }
@@ -107,14 +110,18 @@ export type ManagerSendApiResponse = CreateManagerMessage<'API_RESPONSE', {
107
110
  error?: any;
108
111
  nonce: string;
109
112
  }>;
110
- export type ManagerExecuteEval = CreateManagerMessage<'EXECUTE_EVAL', {
113
+ export type ManagerExecuteEvalToWorker = CreateManagerMessage<'EXECUTE_EVAL_TO_WORKER', {
111
114
  func: string;
112
115
  nonce: string;
113
116
  toWorkerId: number;
114
117
  }>;
118
+ export type ManagerExecuteEval = CreateManagerMessage<'EXECUTE_EVAL', {
119
+ func: string;
120
+ nonce: string;
121
+ }>;
115
122
  export type ManagerSendEvalResponse = CreateManagerMessage<'EVAL_RESPONSE', {
116
123
  response: any;
117
124
  nonce: string;
118
125
  }>;
119
- export type ManagerMessages = ManagerAllowConnect | ManagerSpawnShards | ManagerSendPayload | ManagerRequestShardInfo | ManagerRequestWorkerInfo | ManagerSendCacheResult | ManagerSendBotReady | ManagerSendApiResponse | ManagerSendEvalResponse | ManagerExecuteEval | ManagerWorkerAlreadyExistsResharding | ManagerSpawnShardsResharding | ManagerAllowConnectResharding | DisconnectAllShardsResharding | ConnnectAllShardsResharding;
126
+ export type ManagerMessages = ManagerAllowConnect | ManagerSpawnShards | ManagerSendPayload | ManagerRequestShardInfo | ManagerRequestWorkerInfo | ManagerSendCacheResult | ManagerSendBotReady | ManagerSendApiResponse | ManagerSendEvalResponse | ManagerExecuteEvalToWorker | ManagerWorkerAlreadyExistsResharding | ManagerSpawnShardsResharding | ManagerAllowConnectResharding | DisconnectAllShardsResharding | ConnnectAllShardsResharding | ManagerExecuteEval;
120
127
  export {};
@@ -104,7 +104,7 @@ class WorkerManager extends Map {
104
104
  break;
105
105
  }
106
106
  }
107
- async prepareWorkers(shards, resharding = false) {
107
+ prepareWorkers(shards, resharding = false) {
108
108
  const worker_threads = (0, common_1.lazyLoadPackage)('node:worker_threads');
109
109
  if (!worker_threads)
110
110
  throw new Error('Cannot prepare workers without worker_threads.');
@@ -123,6 +123,7 @@ class WorkerManager extends Map {
123
123
  totalShards: resharding ? this._info.shards : this.totalShards,
124
124
  mode: this.options.mode,
125
125
  resharding,
126
+ totalWorkers: shards.length,
126
127
  });
127
128
  this.set(i, worker);
128
129
  });
@@ -362,23 +363,23 @@ class WorkerManager extends Map {
362
363
  break;
363
364
  case 'EVAL_RESPONSE':
364
365
  {
365
- const { nonce, type, ...data } = message;
366
+ const { nonce, response } = message;
366
367
  const evalResponse = this.promises.get(nonce);
367
368
  if (!evalResponse) {
368
369
  return;
369
370
  }
370
371
  this.promises.delete(nonce);
371
372
  clearTimeout(evalResponse.timeout);
372
- evalResponse.resolve(data.response);
373
+ evalResponse.resolve(response);
373
374
  }
374
375
  break;
375
- case 'EVAL':
376
+ case 'EVAL_TO_WORKER':
376
377
  {
377
378
  const nonce = this.generateNonce();
378
379
  this.postMessage(message.toWorkerId, {
379
380
  nonce,
380
381
  func: message.func,
381
- type: 'EXECUTE_EVAL',
382
+ type: 'EXECUTE_EVAL_TO_WORKER',
382
383
  toWorkerId: message.toWorkerId,
383
384
  });
384
385
  this.generateSendPromise(nonce, 'Eval timeout').then(val => this.postMessage(message.workerId, {
@@ -439,6 +440,22 @@ class WorkerManager extends Map {
439
440
  this.postMessage(workerId, { nonce, type: 'WORKER_INFO' });
440
441
  return this.generateSendPromise(nonce, 'Get worker info timeout');
441
442
  }
443
+ tellWorker(workerId, func) {
444
+ const nonce = this.generateNonce();
445
+ this.postMessage(workerId, {
446
+ type: 'EXECUTE_EVAL',
447
+ func: func.toString(),
448
+ nonce,
449
+ });
450
+ return this.generateSendPromise(nonce);
451
+ }
452
+ tellWorkers(func) {
453
+ const promises = [];
454
+ for (const i of this.keys()) {
455
+ promises.push(this.tellWorker(i, func));
456
+ }
457
+ return Promise.all(promises);
458
+ }
442
459
  async start() {
443
460
  const rc = await base_1.BaseClient.prototype.getRC();
444
461
  this.options.debug ||= rc.debug;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "seyfert",
3
- "version": "2.1.1-dev-11319654918.0",
3
+ "version": "2.1.1-dev-11415038218.0",
4
4
  "description": "The most advanced framework for discord bots",
5
5
  "main": "./lib/index.js",
6
6
  "module": "./lib/index.js",
@@ -21,14 +21,14 @@
21
21
  "author": "MARCROCK22",
22
22
  "license": "MIT",
23
23
  "devDependencies": {
24
- "@biomejs/biome": "1.9.3",
24
+ "@biomejs/biome": "1.9.4",
25
25
  "@commitlint/cli": "^19.5.0",
26
26
  "@commitlint/config-conventional": "^19.5.0",
27
- "@types/node": "^22.7.5",
27
+ "@types/node": "^22.7.7",
28
28
  "husky": "^9.1.6",
29
29
  "lint-staged": "^15.2.10",
30
30
  "typescript": "^5.6.3",
31
- "vitest": "^2.1.2"
31
+ "vitest": "^2.1.3"
32
32
  },
33
33
  "homepage": "https://seyfert.dev",
34
34
  "repository": {