seyfert 2.1.1-dev-11388830407.0 → 2.1.1-dev-11415196258.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/workerclient.d.ts +2 -1
- package/lib/client/workerclient.js +14 -4
- 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 +3 -3
|
@@ -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;
|
|
@@ -18,15 +18,16 @@ let manager;
|
|
|
18
18
|
try {
|
|
19
19
|
workerData = {
|
|
20
20
|
debug: process.env.SEYFERT_WORKER_DEBUG === 'true',
|
|
21
|
-
intents: Number
|
|
21
|
+
intents: Number(process.env.SEYFERT_WORKER_INTENTS),
|
|
22
22
|
path: process.env.SEYFERT_WORKER_PATH,
|
|
23
|
-
shards: process.env.SEYFERT_WORKER_SHARDS.split(',').map(id => Number
|
|
23
|
+
shards: process.env.SEYFERT_WORKER_SHARDS.split(',').map(id => Number(id)),
|
|
24
24
|
token: process.env.SEYFERT_WORKER_TOKEN,
|
|
25
|
-
workerId: Number
|
|
25
|
+
workerId: Number(process.env.SEYFERT_WORKER_WORKERID),
|
|
26
26
|
workerProxy: process.env.SEYFERT_WORKER_WORKERPROXY === 'true',
|
|
27
27
|
totalShards: Number(process.env.SEYFERT_WORKER_TOTALSHARDS),
|
|
28
28
|
mode: process.env.SEYFERT_WORKER_MODE,
|
|
29
29
|
resharding: process.env.SEYFERT_WORKER_RESHARDING === 'true',
|
|
30
|
+
totalWorkers: Number(process.env.SEYFERT_WORKER_TOTALWORKERS),
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
33
|
catch {
|
|
@@ -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 {
|
|
@@ -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),
|
|
@@ -519,5 +528,6 @@ function generateShardInfo(shard) {
|
|
|
519
528
|
shardId: shard.id,
|
|
520
529
|
latency: shard.latency,
|
|
521
530
|
resumable: shard.resumable,
|
|
531
|
+
workerId: workerData.workerId,
|
|
522
532
|
};
|
|
523
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-11415196258.0",
|
|
4
4
|
"description": "The most advanced framework for discord bots",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"module": "./lib/index.js",
|
|
@@ -21,10 +21,10 @@
|
|
|
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",
|