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.
- package/lib/client/client.d.ts +1 -1
- package/lib/client/client.js +1 -2
- package/lib/client/workerclient.d.ts +3 -2
- package/lib/client/workerclient.js +37 -30
- package/lib/commands/applications/entrycontext.d.ts +1 -1
- package/lib/commands/applications/entrycontext.js +2 -2
- package/lib/commands/applications/menucontext.d.ts +1 -1
- package/lib/commands/applications/menucontext.js +2 -2
- package/lib/structures/Interaction.d.ts +1 -1
- package/lib/structures/Interaction.js +1 -1
- package/lib/websocket/discord/shared.d.ts +1 -0
- package/lib/websocket/discord/worker.d.ts +3 -2
- package/lib/websocket/discord/workermanager.d.ts +13 -6
- package/lib/websocket/discord/workermanager.js +22 -5
- package/package.json +4 -4
package/lib/client/client.d.ts
CHANGED
|
@@ -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 {
|
|
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';
|
package/lib/client/client.js
CHANGED
|
@@ -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 (!
|
|
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 {
|
|
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) =>
|
|
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
|
|
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
|
|
23
|
+
shards: process.env.SEYFERT_WORKER_SHARDS.split(',').map(id => Number(id)),
|
|
25
24
|
token: process.env.SEYFERT_WORKER_TOKEN,
|
|
26
|
-
workerId: Number
|
|
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
|
|
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 =
|
|
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.
|
|
215
|
-
if (
|
|
216
|
-
|
|
217
|
-
self.
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
227
|
-
|
|
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 =
|
|
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: '
|
|
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?.
|
|
446
|
-
this.__handleGuilds?.
|
|
447
|
-
if (!this.__handleGuilds?.
|
|
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?.
|
|
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
|
-
|
|
480
|
-
|
|
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 (!
|
|
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?:
|
|
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
|
|
139
|
+
deferReply(flags, withResponse) {
|
|
140
140
|
return this.reply({
|
|
141
141
|
type: types_1.InteractionResponseType.DeferredChannelMessageWithSource,
|
|
142
142
|
data: {
|
|
@@ -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
|
|
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 |
|
|
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 {
|
|
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 |
|
|
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):
|
|
56
|
-
createWorker(workerData: WorkerData): ClusterWorker |
|
|
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
|
|
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 |
|
|
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
|
-
|
|
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,
|
|
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(
|
|
373
|
+
evalResponse.resolve(response);
|
|
373
374
|
}
|
|
374
375
|
break;
|
|
375
|
-
case '
|
|
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: '
|
|
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-
|
|
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.
|
|
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.
|
|
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.
|
|
31
|
+
"vitest": "^2.1.3"
|
|
32
32
|
},
|
|
33
33
|
"homepage": "https://seyfert.dev",
|
|
34
34
|
"repository": {
|