seyfert 2.2.1-dev-12797288169.0 → 2.2.1-dev-12848723720.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/cache/index.d.ts +1 -1
- package/lib/cache/index.js +17 -0
- package/lib/client/workerclient.js +1 -1
- package/lib/websocket/discord/shard.d.ts +9 -2
- package/lib/websocket/discord/shard.js +55 -3
- package/lib/websocket/discord/sharder.d.ts +3 -3
- package/lib/websocket/discord/sharder.js +6 -5
- package/lib/websocket/discord/shared.d.ts +4 -1
- package/lib/websocket/discord/shared.js +3 -0
- package/package.json +1 -1
package/lib/cache/index.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ type ReturnManagers = {
|
|
|
30
30
|
[K in NonGuildBased | GuildBased | GuildRelated]: NonNullable<Awaited<ReturnType<NonNullable<Cache[K]>['get']>>>;
|
|
31
31
|
};
|
|
32
32
|
export * from './adapters/index';
|
|
33
|
-
export type CachedEvents = 'READY' | 'GUILD_CREATE' | 'GUILD_UPDATE' | 'GUILD_DELETE' | 'CHANNEL_CREATE' | 'CHANNEL_UPDATE' | 'CHANNEL_DELETE' | 'GUILD_ROLE_CREATE' | 'GUILD_ROLE_UPDATE' | 'GUILD_ROLE_DELETE' | 'GUILD_BAN_ADD' | 'GUILD_BAN_REMOVE' | 'GUILD_EMOJIS_UPDATE' | 'GUILD_STICKERS_UPDATE' | 'GUILD_MEMBER_ADD' | 'GUILD_MEMBER_UPDATE' | 'GUILD_MEMBER_REMOVE' | 'MESSAGE_CREATE' | 'PRESENCE_UPDATE' | 'THREAD_DELETE' | 'THREAD_CREATE' | 'THREAD_UPDATE' | 'USER_UPDATE' | 'VOICE_STATE_UPDATE' | 'STAGE_INSTANCE_CREATE' | 'STAGE_INSTANCE_UPDATE' | 'STAGE_INSTANCE_DELETE';
|
|
33
|
+
export type CachedEvents = 'READY' | 'GUILD_CREATE' | 'GUILD_UPDATE' | 'GUILD_DELETE' | 'CHANNEL_CREATE' | 'CHANNEL_UPDATE' | 'CHANNEL_DELETE' | 'GUILD_ROLE_CREATE' | 'GUILD_ROLE_UPDATE' | 'GUILD_ROLE_DELETE' | 'GUILD_BAN_ADD' | 'GUILD_BAN_REMOVE' | 'GUILD_EMOJIS_UPDATE' | 'GUILD_STICKERS_UPDATE' | 'GUILD_MEMBER_ADD' | 'GUILD_MEMBER_UPDATE' | 'GUILD_MEMBER_REMOVE' | 'MESSAGE_CREATE' | 'PRESENCE_UPDATE' | 'THREAD_DELETE' | 'THREAD_CREATE' | 'THREAD_UPDATE' | 'USER_UPDATE' | 'VOICE_STATE_UPDATE' | 'STAGE_INSTANCE_CREATE' | 'STAGE_INSTANCE_UPDATE' | 'STAGE_INSTANCE_DELETE' | 'GUILD_MEMBERS_CHUNK';
|
|
34
34
|
export type DisabledCache = {
|
|
35
35
|
[P in NonGuildBased | GuildBased | GuildRelated | SeyfertBased]?: boolean;
|
|
36
36
|
};
|
package/lib/cache/index.js
CHANGED
|
@@ -376,6 +376,23 @@ class Cache {
|
|
|
376
376
|
await this.stickers?.set(CacheFrom.Gateway, event.d.stickers.map(x => [x.id, x]), event.d.guild_id);
|
|
377
377
|
}
|
|
378
378
|
break;
|
|
379
|
+
case 'GUILD_MEMBERS_CHUNK': {
|
|
380
|
+
const data = [];
|
|
381
|
+
if (this.members) {
|
|
382
|
+
for (const member of event.d.members) {
|
|
383
|
+
data.push([CacheFrom.Gateway, 'members', member, member.user.id, event.d.guild_id], [CacheFrom.Gateway, 'users', member.user, member.user.id]);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
if (this.presences && event.d.presences) {
|
|
387
|
+
for (const presence of event.d.presences) {
|
|
388
|
+
data.push([CacheFrom.Gateway, 'presences', presence, presence.user.id, event.d.guild_id]);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if (data.length) {
|
|
392
|
+
await this.bulkSet(data);
|
|
393
|
+
}
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
379
396
|
case 'GUILD_MEMBER_ADD':
|
|
380
397
|
case 'GUILD_MEMBER_UPDATE':
|
|
381
398
|
if (event.d.user)
|
|
@@ -310,7 +310,7 @@ class WorkerClient extends base_1.BaseClient {
|
|
|
310
310
|
case 'DISCONNECT_ALL_SHARDS_RESHARDING':
|
|
311
311
|
{
|
|
312
312
|
for (const i of this.shards.values()) {
|
|
313
|
-
await i.disconnect();
|
|
313
|
+
await i.disconnect(websocket_1.ShardSocketCloseCodes.Resharding);
|
|
314
314
|
}
|
|
315
315
|
this.postMessage({
|
|
316
316
|
type: 'DISCONNECTED_ALL_SHARDS_RESHARDING',
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Logger, type MakeRequired } from '../../common';
|
|
2
|
-
import { type GatewayReceivePayload, type GatewaySendPayload } from '../../types';
|
|
2
|
+
import { type APIGuildMember, type GatewayGuildMembersChunkPresence, type GatewayReceivePayload, type GatewaySendPayload } from '../../types';
|
|
3
|
+
import type { GatewayRequestGuildMembersDataWithQuery, GatewayRequestGuildMembersDataWithUserIds } from '../../types/gateway';
|
|
3
4
|
import { DynamicBucket } from '../structures';
|
|
4
5
|
import { ConnectTimeout } from '../structures/timeout';
|
|
5
6
|
import { BaseSocket } from './basesocket';
|
|
6
7
|
import type { ShardData, ShardOptions } from './shared';
|
|
8
|
+
import { ShardSocketCloseCodes } from './shared';
|
|
7
9
|
export interface ShardHeart {
|
|
8
10
|
interval: number;
|
|
9
11
|
nodeInterval?: NodeJS.Timeout;
|
|
@@ -24,6 +26,7 @@ export declare class Shard {
|
|
|
24
26
|
pendingGuilds: Set<string>;
|
|
25
27
|
options: MakeRequired<ShardOptions, 'properties' | 'ratelimitOptions'>;
|
|
26
28
|
isReady: boolean;
|
|
29
|
+
private requestGuildMembersChunk;
|
|
27
30
|
constructor(id: number, options: ShardOptions);
|
|
28
31
|
get latency(): number;
|
|
29
32
|
get isOpen(): boolean;
|
|
@@ -37,9 +40,13 @@ export declare class Shard {
|
|
|
37
40
|
get resumable(): boolean;
|
|
38
41
|
resume(): Promise<void>;
|
|
39
42
|
heartbeat(requested: boolean): void;
|
|
40
|
-
disconnect(): void;
|
|
43
|
+
disconnect(code?: ShardSocketCloseCodes): void;
|
|
41
44
|
reconnect(): Promise<void>;
|
|
42
45
|
onpacket(packet: GatewayReceivePayload): void | Promise<void>;
|
|
46
|
+
requestGuildMember(options: Omit<GatewayRequestGuildMembersDataWithQuery, 'nonce'> | Omit<GatewayRequestGuildMembersDataWithUserIds, 'nonce'>): Promise<{
|
|
47
|
+
members: APIGuildMember[];
|
|
48
|
+
presences: GatewayGuildMembersChunkPresence[];
|
|
49
|
+
}>;
|
|
43
50
|
protected handleClosed(close: {
|
|
44
51
|
code: number;
|
|
45
52
|
reason: string;
|
|
@@ -27,6 +27,7 @@ class Shard {
|
|
|
27
27
|
pendingGuilds = new Set();
|
|
28
28
|
options;
|
|
29
29
|
isReady = false;
|
|
30
|
+
requestGuildMembersChunk = new Map();
|
|
30
31
|
constructor(id, options) {
|
|
31
32
|
this.id = id;
|
|
32
33
|
this.options = (0, common_1.MergeOptions)({
|
|
@@ -144,13 +145,13 @@ class Shard {
|
|
|
144
145
|
d: this.data.resume_seq ?? null,
|
|
145
146
|
}));
|
|
146
147
|
}
|
|
147
|
-
disconnect() {
|
|
148
|
+
disconnect(code = shared_1.ShardSocketCloseCodes.Shutdown) {
|
|
148
149
|
this.debugger?.info(`[Shard #${this.id}] Disconnecting`);
|
|
149
|
-
this.close(
|
|
150
|
+
this.close(code, 'Shard down request');
|
|
150
151
|
}
|
|
151
152
|
async reconnect() {
|
|
152
153
|
this.debugger?.info(`[Shard #${this.id}] Reconnecting`);
|
|
153
|
-
this.disconnect();
|
|
154
|
+
this.disconnect(shared_1.ShardSocketCloseCodes.Reconnect);
|
|
154
155
|
await this.connect();
|
|
155
156
|
}
|
|
156
157
|
onpacket(packet) {
|
|
@@ -239,6 +240,30 @@ class Shard {
|
|
|
239
240
|
this.options.handlePayload(this.id, packet);
|
|
240
241
|
}
|
|
241
242
|
break;
|
|
243
|
+
case types_1.GatewayDispatchEvents.GuildMembersChunk:
|
|
244
|
+
{
|
|
245
|
+
if (!packet.d.nonce) {
|
|
246
|
+
this.options.handlePayload(this.id, packet);
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
const guildMemberChunk = this.requestGuildMembersChunk.get(packet.d.nonce);
|
|
250
|
+
if (!guildMemberChunk) {
|
|
251
|
+
this.options.handlePayload(this.id, packet);
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
guildMemberChunk.members.push(...packet.d.members);
|
|
255
|
+
if (packet.d.presences)
|
|
256
|
+
guildMemberChunk.presences.push(...packet.d.presences);
|
|
257
|
+
if (packet.d.chunk_index + 1 === packet.d.chunk_count) {
|
|
258
|
+
this.requestGuildMembersChunk.delete(packet.d.nonce);
|
|
259
|
+
guildMemberChunk.resolve({
|
|
260
|
+
members: guildMemberChunk.members,
|
|
261
|
+
presences: guildMemberChunk.presences,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
this.options.handlePayload(this.id, packet);
|
|
265
|
+
}
|
|
266
|
+
break;
|
|
242
267
|
default:
|
|
243
268
|
this.options.handlePayload(this.id, packet);
|
|
244
269
|
break;
|
|
@@ -247,6 +272,33 @@ class Shard {
|
|
|
247
272
|
break;
|
|
248
273
|
}
|
|
249
274
|
}
|
|
275
|
+
async requestGuildMember(options) {
|
|
276
|
+
const nonce = Date.now().toString() + Math.random().toString(36);
|
|
277
|
+
let resolve = () => {
|
|
278
|
+
//
|
|
279
|
+
};
|
|
280
|
+
let reject = () => {
|
|
281
|
+
//
|
|
282
|
+
};
|
|
283
|
+
const promise = new Promise((res, rej) => {
|
|
284
|
+
resolve = res;
|
|
285
|
+
reject = rej;
|
|
286
|
+
});
|
|
287
|
+
this.requestGuildMembersChunk.set(nonce, {
|
|
288
|
+
members: [],
|
|
289
|
+
presences: [],
|
|
290
|
+
reject,
|
|
291
|
+
resolve,
|
|
292
|
+
});
|
|
293
|
+
this.send(false, {
|
|
294
|
+
op: types_1.GatewayOpcodes.RequestGuildMembers,
|
|
295
|
+
d: {
|
|
296
|
+
...options,
|
|
297
|
+
nonce,
|
|
298
|
+
},
|
|
299
|
+
});
|
|
300
|
+
return promise;
|
|
301
|
+
}
|
|
250
302
|
async handleClosed(close) {
|
|
251
303
|
this.isReady = false;
|
|
252
304
|
clearInterval(this.heart.nodeInterval);
|
|
@@ -4,7 +4,7 @@ import { type GatewaySendPayload, type GatewayUpdatePresence, type GatewayVoiceS
|
|
|
4
4
|
import { ShardManagerDefaults } from '../constants';
|
|
5
5
|
import { ConnectQueue } from '../structures/timeout';
|
|
6
6
|
import { Shard } from './shard';
|
|
7
|
-
import type
|
|
7
|
+
import { type ShardData, type ShardManagerOptions, ShardSocketCloseCodes } from './shared';
|
|
8
8
|
export declare class ShardManager extends Map<number, Shard> {
|
|
9
9
|
connectQueue: ConnectQueue;
|
|
10
10
|
options: MakeRequired<ShardManagerOptions, keyof typeof ShardManagerDefaults>;
|
|
@@ -22,8 +22,8 @@ export declare class ShardManager extends Map<number, Shard> {
|
|
|
22
22
|
startResharder(): Promise<void>;
|
|
23
23
|
spawnBuckets(): Shard[][];
|
|
24
24
|
forceIdentify(shardId: number): Promise<void>;
|
|
25
|
-
disconnect(shardId: number): void | undefined;
|
|
26
|
-
disconnectAll(): void;
|
|
25
|
+
disconnect(shardId: number, code?: ShardSocketCloseCodes): void | undefined;
|
|
26
|
+
disconnectAll(code?: ShardSocketCloseCodes): void;
|
|
27
27
|
setShardPresence(shardId: number, payload: GatewayUpdatePresence['d']): void;
|
|
28
28
|
setPresence(payload: GatewayUpdatePresence['d']): void;
|
|
29
29
|
joinVoice(guild_id: string, channel_id: string, options: Pick<GatewayVoiceStateUpdate['d'], 'self_deaf' | 'self_mute'>): void;
|
|
@@ -7,6 +7,7 @@ const constants_1 = require("../constants");
|
|
|
7
7
|
const structures_1 = require("../structures");
|
|
8
8
|
const timeout_1 = require("../structures/timeout");
|
|
9
9
|
const shard_1 = require("./shard");
|
|
10
|
+
const shared_1 = require("./shared");
|
|
10
11
|
let parentPort;
|
|
11
12
|
let workerData;
|
|
12
13
|
class ShardManager extends Map {
|
|
@@ -117,7 +118,7 @@ class ShardManager extends Map {
|
|
|
117
118
|
handlePayload = () => {
|
|
118
119
|
//
|
|
119
120
|
};
|
|
120
|
-
this.disconnectAll();
|
|
121
|
+
this.disconnectAll(shared_1.ShardSocketCloseCodes.Resharding);
|
|
121
122
|
this.clear();
|
|
122
123
|
this.options.totalShards = this.options.shardEnd = this.options.info.shards = info.shards;
|
|
123
124
|
for (const [id, shard] of sharder) {
|
|
@@ -169,13 +170,13 @@ class ShardManager extends Map {
|
|
|
169
170
|
this.debugger?.info(`Shard #${shardId} force identify`);
|
|
170
171
|
return this.create(shardId).identify();
|
|
171
172
|
}
|
|
172
|
-
disconnect(shardId) {
|
|
173
|
+
disconnect(shardId, code) {
|
|
173
174
|
this.debugger?.info(`Shard #${shardId} force disconnect`);
|
|
174
|
-
return this.get(shardId)?.disconnect();
|
|
175
|
+
return this.get(shardId)?.disconnect(code);
|
|
175
176
|
}
|
|
176
|
-
disconnectAll() {
|
|
177
|
+
disconnectAll(code = shared_1.ShardSocketCloseCodes.ShutdownAll) {
|
|
177
178
|
this.debugger?.info('Disconnect all shards');
|
|
178
|
-
this.forEach(shard => shard.disconnect());
|
|
179
|
+
this.forEach(shard => shard.disconnect(code));
|
|
179
180
|
}
|
|
180
181
|
setShardPresence(shardId, payload) {
|
|
181
182
|
this.debugger?.info(`Shard #${shardId} update presence`);
|
|
@@ -108,7 +108,10 @@ export interface ShardOptions extends ShardDetails {
|
|
|
108
108
|
}
|
|
109
109
|
export declare enum ShardSocketCloseCodes {
|
|
110
110
|
Shutdown = 3000,
|
|
111
|
-
ZombiedConnection = 3010
|
|
111
|
+
ZombiedConnection = 3010,
|
|
112
|
+
Reconnect = 3020,
|
|
113
|
+
Resharding = 3030,
|
|
114
|
+
ShutdownAll = 3040
|
|
112
115
|
}
|
|
113
116
|
export interface WorkerData {
|
|
114
117
|
intents: number;
|
|
@@ -5,4 +5,7 @@ var ShardSocketCloseCodes;
|
|
|
5
5
|
(function (ShardSocketCloseCodes) {
|
|
6
6
|
ShardSocketCloseCodes[ShardSocketCloseCodes["Shutdown"] = 3000] = "Shutdown";
|
|
7
7
|
ShardSocketCloseCodes[ShardSocketCloseCodes["ZombiedConnection"] = 3010] = "ZombiedConnection";
|
|
8
|
+
ShardSocketCloseCodes[ShardSocketCloseCodes["Reconnect"] = 3020] = "Reconnect";
|
|
9
|
+
ShardSocketCloseCodes[ShardSocketCloseCodes["Resharding"] = 3030] = "Resharding";
|
|
10
|
+
ShardSocketCloseCodes[ShardSocketCloseCodes["ShutdownAll"] = 3040] = "ShutdownAll";
|
|
8
11
|
})(ShardSocketCloseCodes || (exports.ShardSocketCloseCodes = ShardSocketCloseCodes = {}));
|