mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-15 11:03:30 +01:00
feat: fetch gateway information without requiring rest in ws (#10651)
* feat: overridable initial gateway URL * chore: discussion changes * chore: requested change * chore: other changes * Update packages/ws/src/ws/WebSocketManager.ts * style: run ESLint --------- Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
@@ -42,13 +42,16 @@ bun add @discordjs/ws
|
||||
```ts
|
||||
import { WebSocketManager, WebSocketShardEvents, CompressionMethod } from '@discordjs/ws';
|
||||
import { REST } from '@discordjs/rest';
|
||||
import type { RESTGetAPIGatewayBotResult } from 'discord-api-types/v10';
|
||||
|
||||
const rest = new REST().setToken(process.env.DISCORD_TOKEN);
|
||||
// This example will spawn Discord's recommended shard count, all under the current process.
|
||||
const manager = new WebSocketManager({
|
||||
token: process.env.DISCORD_TOKEN,
|
||||
intents: 0, // for no intents
|
||||
rest,
|
||||
fetchGatewayInformation() {
|
||||
return rest.get(Routes.gatewayBot()) as Promise<RESTGetAPIGatewayBotResult>;
|
||||
},
|
||||
// uncomment if you have zlib-sync installed and want to use compression
|
||||
// compression: CompressionMethod.ZlibSync,
|
||||
|
||||
@@ -70,8 +73,10 @@ await manager.connect();
|
||||
const manager = new WebSocketManager({
|
||||
token: process.env.DISCORD_TOKEN,
|
||||
intents: 0,
|
||||
rest,
|
||||
shardCount: 4,
|
||||
fetchGatewayInformation() {
|
||||
return rest.get(Routes.gatewayBot()) as Promise<RESTGetAPIGatewayBotResult>;
|
||||
},
|
||||
});
|
||||
|
||||
// The manager also supports being responsible for only a subset of your shards:
|
||||
@@ -81,21 +86,25 @@ const manager = new WebSocketManager({
|
||||
const manager = new WebSocketManager({
|
||||
token: process.env.DISCORD_TOKEN,
|
||||
intents: 0,
|
||||
rest,
|
||||
shardCount: 8,
|
||||
shardIds: [0, 2, 4, 6],
|
||||
fetchGatewayInformation() {
|
||||
return rest.get(Routes.gatewayBot()) as Promise<RESTGetAPIGatewayBotResult>;
|
||||
},
|
||||
});
|
||||
|
||||
// Alternatively, if your shards are consecutive, you can pass in a range
|
||||
const manager = new WebSocketManager({
|
||||
token: process.env.DISCORD_TOKEN,
|
||||
intents: 0,
|
||||
rest,
|
||||
shardCount: 8,
|
||||
shardIds: {
|
||||
start: 0,
|
||||
end: 4,
|
||||
},
|
||||
fetchGatewayInformation() {
|
||||
return rest.get(Routes.gatewayBot()) as Promise<RESTGetAPIGatewayBotResult>;
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
@@ -111,8 +120,10 @@ const rest = new REST().setToken(process.env.DISCORD_TOKEN);
|
||||
const manager = new WebSocketManager({
|
||||
token: process.env.DISCORD_TOKEN,
|
||||
intents: 0,
|
||||
rest,
|
||||
shardCount: 6,
|
||||
fetchGatewayInformation() {
|
||||
return rest.get(Routes.gatewayBot()) as Promise<RESTGetAPIGatewayBotResult>;
|
||||
},
|
||||
// This will cause 3 workers to spawn, 2 shards per each
|
||||
buildStrategy: (manager) => new WorkerShardingStrategy(manager, { shardsPerWorker: 2 }),
|
||||
// Or maybe you want all your shards under a single worker
|
||||
@@ -130,7 +141,9 @@ const rest = new REST().setToken(process.env.DISCORD_TOKEN);
|
||||
const manager = new WebSocketManager({
|
||||
token: process.env.DISCORD_TOKEN,
|
||||
intents: 0,
|
||||
rest,
|
||||
fetchGatewayInformation() {
|
||||
return rest.get(Routes.gatewayBot()) as Promise<RESTGetAPIGatewayBotResult>;
|
||||
},
|
||||
buildStrategy: (manager) =>
|
||||
new WorkerShardingStrategy(manager, {
|
||||
shardsPerWorker: 2,
|
||||
|
||||
Reference in New Issue
Block a user