Skip to content

Commit eac892f

Browse files
committed
Move to gateway v8, add requestApplicationCommands
- Changed gateway version to v8 -> This requires intents now - Added GATEWAY_INTENTS_ALL, GATEWAY_INTENTS_ALL_DIRECT_MESSAGES, GATEWAY_INTENTS_ALL_GUILD to constants - Sending in '*' as the intents will use GATEWAY_INTENTS_ALL - Added a few new events to GatewayDispatchEvents
1 parent 24da329 commit eac892f

File tree

4 files changed

+239
-160
lines changed

4 files changed

+239
-160
lines changed

package.json

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "detritus-client-socket",
3-
"version": "0.6.1",
3+
"version": "0.7.0",
44
"description": "A TypeScript NodeJS library to interact with Discord's Gateway",
55
"main": "lib/index.js",
66
"types": "lib/index.d.ts",
@@ -9,16 +9,15 @@
99
],
1010
"dependencies": {
1111
"detritus-utils": "^0.3.0",
12-
"ws": "^7.3.1"
12+
"ws": "^7.4.0"
1313
},
1414
"devDependencies": {
15-
"@types/node": "^14.0.27",
16-
"typedoc": "^0.17.8",
17-
"typescript": "^3.9.7"
15+
"@types/node": "^14.14.9",
16+
"typedoc": "^0.19.2"
1817
},
1918
"peerDependencies": {
2019
"erlpack": "^0.1.3",
21-
"libsodium-wrappers": "^0.7.6",
20+
"libsodium-wrappers": "^0.7.8",
2221
"pako": "^1.0.11",
2322
"sodium": "^3.0.2",
2423
"tweetnacl": "^1.0.3",

src/basesocket.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@ import {
55
SocketEventsBase,
66
} from './constants';
77

8-
export const DependencyTypes = Object.freeze({
9-
UWS: 'uws',
10-
WS: 'ws',
11-
});
8+
9+
export enum DependencyTypes {
10+
UWS = 'uws',
11+
WS = 'ws',
12+
}
1213

1314
export const WebsocketDependency: {
1415
module: any,
15-
type: string,
16+
type: null | DependencyTypes,
1617
} = {
1718
module: null,
18-
type: '',
19+
type: null,
1920
};
2021

2122
[
@@ -68,7 +69,10 @@ export class BaseSocket extends EventSpewer {
6869
return this.socket.readyState === this.socket.CONNECTING;
6970
}
7071

71-
get using(): string {
72+
get using(): DependencyTypes {
73+
if (!WebsocketDependency.type) {
74+
throw new Error(`Missing a WebSocket Dependency, pick one: ${JSON.stringify(Object.values(DependencyTypes))}`);
75+
}
7276
return WebsocketDependency.type;
7377
}
7478

@@ -137,4 +141,8 @@ export class BaseSocket extends EventSpewer {
137141
});
138142
});
139143
}
144+
145+
terminate() {
146+
return this.socket.terminate();
147+
}
140148
}

src/constants.ts

Lines changed: 139 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
11
export const Package = Object.freeze({
22
URL: 'https://github.com/detritusjs/client-socket',
3-
VERSION: '0.6.1',
3+
VERSION: '0.7.0',
44
});
55

6-
function normalize(object: {[key: string]: any}) {
7-
for (let key in object) {
8-
object[key] = key;
9-
}
10-
return Object.freeze(object);
11-
}
12-
136

147
export const ApiVersions = Object.freeze({
15-
GATEWAY: 6,
8+
GATEWAY: 8,
169
MEDIA_GATEWAY: 5,
1710
});
1811

@@ -54,6 +47,9 @@ export enum GatewayActivityFlags {
5447
JOIN_REQUEST = 1 << 3,
5548
SYNC = 1 << 4,
5649
PLAY = 1 << 5,
50+
PARTY_PRIVACY_FRIENDS = 1 << 6,
51+
PARTY_PRIVACY_VOICE_CHANNEL = 1 << 7,
52+
PARTY_EMBEDDED = 1 << 8,
5753
}
5854

5955
export enum GatewayActivityTypes {
@@ -64,92 +60,96 @@ export enum GatewayActivityTypes {
6460
CUSTOM_STATUS = 4,
6561
}
6662

67-
export const GatewayDispatchEvents = normalize({
68-
READY: null,
69-
RESUMED: null,
70-
ACTIVITY_JOIN_INVITE: null,
71-
ACTIVITY_JOIN_REQUEST: null,
72-
ACTIVITY_START: null,
73-
BRAINTREE_POPUP_BRIDGE_CALLBACK: null,
74-
CALL_CREATE: null,
75-
CALL_DELETE: null,
76-
CALL_UPDATE: null,
77-
CHANNEL_CREATE: null,
78-
CHANNEL_DELETE: null,
79-
CHANNEL_UPDATE: null,
80-
CHANNEL_PINS_ACK: null,
81-
CHANNEL_PINS_UPDATE: null,
82-
CHANNEL_RECIPIENT_ADD: null,
83-
CHANNEL_RECIPIENT_REMOVE: null,
84-
ENTITLEMENT_CREATE: null,
85-
ENTITLEMENT_DELETE: null,
86-
ENTITLEMENT_UPDATE: null,
87-
FRIEND_SUGGESTION_CREATE: null,
88-
FRIEND_SUGGESTION_DELETE: null,
89-
GIFT_CODE_UPDATE: null,
90-
GUILD_BAN_ADD: null,
91-
GUILD_BAN_REMOVE: null,
92-
GUILD_CREATE: null,
93-
GUILD_DELETE: null,
94-
GUILD_UPDATE: null,
95-
GUILD_EMOJIS_UPDATE: null,
96-
GUILD_INTEGRATIONS_UPDATE: null,
97-
GUILD_MEMBER_ADD: null,
98-
GUILD_MEMBER_LIST_UPDATE: null,
99-
GUILD_MEMBER_REMOVE: null,
100-
GUILD_MEMBER_UPDATE: null,
101-
GUILD_MEMBERS_CHUNK: null,
102-
GUILD_ROLE_CREATE: null,
103-
GUILD_ROLE_DELETE: null,
104-
GUILD_ROLE_UPDATE: null,
105-
INVITE_CREATE: null,
106-
INVITE_DELETE: null,
107-
LIBRARY_APPLICATION_UPDATE: null,
108-
LOBBY_CREATE: null,
109-
LOBBY_DELETE: null,
110-
LOBBY_UPDATE: null,
111-
LOBBY_MEMBER_CONNECT: null,
112-
LOBBY_MEMBER_DISCONNECT: null,
113-
LOBBY_MEMBER_UPDATE: null,
114-
LOBBY_MESSAGE: null,
115-
LOBBY_VOICE_SERVER_UPDATE: null,
116-
LOBBY_VOICE_STATE_UPDATE: null,
117-
MESSAGE_ACK: null,
118-
MESSAGE_CREATE: null,
119-
MESSAGE_DELETE: null,
120-
MESSAGE_DELETE_BULK: null,
121-
MESSAGE_REACTION_ADD: null,
122-
MESSAGE_REACTION_REMOVE: null,
123-
MESSAGE_REACTION_REMOVE_ALL: null,
124-
MESSAGE_REACTION_REMOVE_EMOJI: null,
125-
MESSAGE_UPDATE: null,
126-
OAUTH2_TOKEN_REMOVE: null,
127-
PRESENCES_REPLACE: null,
128-
PRESENCE_UPDATE: null,
129-
RECENT_MENTION_DELETE: null,
130-
RELATIONSHIP_ADD: null,
131-
RELATIONSHIP_REMOVE: null,
132-
SESSIONS_REPLACE: null,
133-
STREAM_CREATE: null,
134-
STREAM_DELETE: null,
135-
STREAM_SERVER_UPDATE: null,
136-
STREAM_UPDATE: null,
137-
TYPING_START: null,
138-
USER_ACHIEVEMENT_UPDATE: null,
139-
USER_CONNECTIONS_UPDATE: null,
140-
USER_FEED_SETTINGS_UPDATE: null,
141-
USER_GUILD_SETTINGS_UPDATE: null,
142-
USER_NOTE_UPDATE: null,
143-
USER_PAYMENT_SOURCES_UPDATE: null,
144-
USER_PAYMENTS_UPDATE: null,
145-
USER_SETTINGS_UPDATE: null,
146-
USER_SUBSCRIPTIONS_UPDATE: null,
147-
USER_REQUIRED_ACTION_UPDATE: null,
148-
USER_UPDATE: null,
149-
VOICE_SERVER_UPDATE: null,
150-
VOICE_STATE_UPDATE: null,
151-
WEBHOOKS_UPDATE: null,
152-
});
63+
export enum GatewayDispatchEvents {
64+
READY = 'READY',
65+
RESUMED = 'RESUMED',
66+
ACTIVITY_JOIN_INVITE = 'ACTIVITY_JOIN_INVITE',
67+
ACTIVITY_JOIN_REQUEST = 'ACTIVITY_JOIN_REQUEST',
68+
ACTIVITY_START = 'ACTIVITY_START',
69+
BRAINTREE_POPUP_BRIDGE_CALLBACK = 'BRAINTREE_POPUP_BRIDGE_CALLBACK',
70+
CALL_CREATE = 'CALL_CREATE',
71+
CALL_DELETE = 'CALL_DELETE',
72+
CALL_UPDATE = 'CALL_UPDATE',
73+
CHANNEL_CREATE = 'CHANNEL_CREATE',
74+
CHANNEL_DELETE = 'CHANNEL_DELETE',
75+
CHANNEL_UPDATE = 'CHANNEL_UPDATE',
76+
CHANNEL_PINS_ACK = 'CHANNEL_PINS_ACK',
77+
CHANNEL_PINS_UPDATE = 'CHANNEL_PINS_UPDATE',
78+
CHANNEL_RECIPIENT_ADD = 'CHANNEL_RECIPIENT_ADD',
79+
CHANNEL_RECIPIENT_REMOVE = 'CHANNEL_RECIPIENT_REMOVE',
80+
ENTITLEMENT_CREATE = 'ENTITLEMENT_CREATE',
81+
ENTITLEMENT_DELETE = 'ENTITLEMENT_DELETE',
82+
ENTITLEMENT_UPDATE = 'ENTITLEMENT_UPDATE',
83+
FRIEND_SUGGESTION_CREATE = 'FRIEND_SUGGESTION_CREATE',
84+
FRIEND_SUGGESTION_DELETE = 'FRIEND_SUGGESTION_DELETE',
85+
GIFT_CODE_UPDATE = 'GIFT_CODE_UPDATE',
86+
GUILD_APPLICATION_COMMANDS_UPDATE = 'GUILD_APPLICATION_COMMANDS_UPDATE',
87+
GUILD_BAN_ADD = 'GUILD_BAN_ADD',
88+
GUILD_BAN_REMOVE = 'GUILD_BAN_REMOVE',
89+
GUILD_CREATE = 'GUILD_CREATE',
90+
GUILD_DELETE = 'GUILD_DELETE',
91+
GUILD_UPDATE = 'GUILD_UPDATE',
92+
GUILD_EMOJIS_UPDATE = 'GUILD_EMOJIS_UPDATE',
93+
GUILD_INTEGRATIONS_UPDATE = 'GUILD_INTEGRATIONS_UPDATE',
94+
GUILD_MEMBER_ADD = 'GUILD_MEMBER_ADD',
95+
GUILD_MEMBER_LIST_UPDATE = 'GUILD_MEMBER_LIST_UPDATE',
96+
GUILD_MEMBER_REMOVE = 'GUILD_MEMBER_REMOVE',
97+
GUILD_MEMBER_UPDATE = 'GUILD_MEMBER_UPDATE',
98+
GUILD_MEMBERS_CHUNK = 'GUILD_MEMBERS_CHUNK',
99+
GUILD_ROLE_CREATE = 'GUILD_ROLE_CREATE',
100+
GUILD_ROLE_DELETE = 'GUILD_ROLE_DELETE',
101+
GUILD_ROLE_UPDATE = 'GUILD_ROLE_UPDATE',
102+
INVITE_CREATE = 'INVITE_CREATE',
103+
INVITE_DELETE = 'INVITE_DELETE',
104+
LIBRARY_APPLICATION_UPDATE = 'LIBRARY_APPLICATION_UPDATE',
105+
LOBBY_CREATE = 'LOBBY_CREATE',
106+
LOBBY_DELETE = 'LOBBY_DELETE',
107+
LOBBY_UPDATE = 'LOBBY_UPDATE',
108+
LOBBY_MEMBER_CONNECT = 'LOBBY_MEMBER_CONNECT',
109+
LOBBY_MEMBER_DISCONNECT = 'LOBBY_MEMBER_DISCONNECT',
110+
LOBBY_MEMBER_UPDATE = 'LOBBY_MEMBER_UPDATE',
111+
LOBBY_MESSAGE = 'LOBBY_MESSAGE',
112+
LOBBY_VOICE_SERVER_UPDATE = 'LOBBY_VOICE_SERVER_UPDATE',
113+
LOBBY_VOICE_STATE_UPDATE = 'LOBBY_VOICE_STATE_UPDATE',
114+
MESSAGE_ACK = 'MESSAGE_ACK',
115+
MESSAGE_CREATE = 'MESSAGE_CREATE',
116+
MESSAGE_DELETE = 'MESSAGE_DELETE',
117+
MESSAGE_DELETE_BULK = 'MESSAGE_DELETE_BULK',
118+
MESSAGE_REACTION_ADD = 'MESSAGE_REACTION_ADD',
119+
MESSAGE_REACTION_REMOVE = 'MESSAGE_REACTION_REMOVE',
120+
MESSAGE_REACTION_REMOVE_ALL = 'MESSAGE_REACTION_REMOVE_ALL',
121+
MESSAGE_REACTION_REMOVE_EMOJI = 'MESSAGE_REACTION_REMOVE_EMOJI',
122+
MESSAGE_UPDATE = 'MESSAGE_UPDATE',
123+
OAUTH2_TOKEN_REMOVE = 'OAUTH2_TOKEN_REMOVE',
124+
PRESENCES_REPLACE = 'PRESENCES_REPLACE',
125+
PRESENCE_UPDATE = 'PRESENCE_UPDATE',
126+
RECENT_MENTION_DELETE = 'RECENT_MENTION_DELETE',
127+
RELATIONSHIP_ADD = 'RELATIONSHIP_ADD',
128+
RELATIONSHIP_REMOVE = 'RELATIONSHIP_REMOVE',
129+
SESSIONS_REPLACE = 'SESSIONS_REPLACE',
130+
STREAM_CREATE = 'STREAM_CREATE',
131+
STREAM_DELETE = 'STREAM_DELETE',
132+
STREAM_SERVER_UPDATE = 'STREAM_SERVER_UPDATE',
133+
STREAM_UPDATE = 'STREAM_UPDATE',
134+
TYPING_START = 'TYPING_START',
135+
USER_ACHIEVEMENT_UPDATE = 'USER_ACHIEVEMENT_UPDATE',
136+
USER_CONNECTIONS_UPDATE = 'USER_CONNECTIONS_UPDATE',
137+
USER_FEED_SETTINGS_UPDATE = 'USER_FEED_SETTINGS_UPDATE',
138+
USER_GUILD_SETTINGS_UPDATE = 'USER_GUILD_SETTINGS_UPDATE',
139+
USER_NOTE_UPDATE = 'USER_NOTE_UPDATE',
140+
USER_PAYMENT_SOURCES_UPDATE = 'USER_PAYMENT_SOURCES_UPDATE',
141+
USER_PAYMENTS_UPDATE = 'USER_PAYMENTS_UPDATE',
142+
USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_CREATE = 'USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_CREATE',
143+
USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_UPDATE = 'USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_UPDATE',
144+
USER_REQUIRED_ACTION_UPDATE = 'USER_REQUIRED_ACTION_UPDATE',
145+
USER_SETTINGS_UPDATE = 'USER_SETTINGS_UPDATE',
146+
USER_SUBSCRIPTIONS_UPDATE = 'USER_SUBSCRIPTIONS_UPDATE',
147+
USER_STICKER_PACK_UPDATE = 'USER_STICKER_PACK_UPDATE',
148+
USER_UPDATE = 'USER_UPDATE',
149+
VOICE_SERVER_UPDATE = 'VOICE_SERVER_UPDATE',
150+
VOICE_STATE_UPDATE = 'VOICE_STATE_UPDATE',
151+
WEBHOOKS_UPDATE = 'WEBHOOKS_UPDATE'
152+
}
153153

154154
export enum GatewayIntents {
155155
GUILDS = 1 << 0,
@@ -169,6 +169,45 @@ export enum GatewayIntents {
169169
DIRECT_MESSAGE_TYPING = 1 << 14,
170170
}
171171

172+
export const GATEWAY_INTENTS_ALL = [
173+
GatewayIntents.GUILDS,
174+
GatewayIntents.GUILD_MEMBERS,
175+
GatewayIntents.GUILD_BANS,
176+
GatewayIntents.GUILD_EMOJIS,
177+
GatewayIntents.GUILD_INTEGRATIONS,
178+
GatewayIntents.GUILD_WEBHOOKS,
179+
GatewayIntents.GUILD_INVITES,
180+
GatewayIntents.GUILD_VOICE_STATES,
181+
GatewayIntents.GUILD_PRESENCES,
182+
GatewayIntents.GUILD_MESSAGES,
183+
GatewayIntents.GUILD_MESSAGE_REACTIONS,
184+
GatewayIntents.GUILD_MESSAGE_TYPING,
185+
GatewayIntents.DIRECT_MESSAGES,
186+
GatewayIntents.DIRECT_MESSAGE_REACTIONS,
187+
GatewayIntents.DIRECT_MESSAGE_TYPING,
188+
].reduce((x, total) => total | x);
189+
190+
export const GATEWAY_INTENTS_DIRECT_MESSAGES = [
191+
GatewayIntents.DIRECT_MESSAGES,
192+
GatewayIntents.DIRECT_MESSAGE_REACTIONS,
193+
GatewayIntents.DIRECT_MESSAGE_TYPING,
194+
].reduce((x, total) => total | x);
195+
196+
export const GATEWAY_INTENTS_ALL_GUILD = [
197+
GatewayIntents.GUILDS,
198+
GatewayIntents.GUILD_MEMBERS,
199+
GatewayIntents.GUILD_BANS,
200+
GatewayIntents.GUILD_EMOJIS,
201+
GatewayIntents.GUILD_INTEGRATIONS,
202+
GatewayIntents.GUILD_WEBHOOKS,
203+
GatewayIntents.GUILD_INVITES,
204+
GatewayIntents.GUILD_VOICE_STATES,
205+
GatewayIntents.GUILD_PRESENCES,
206+
GatewayIntents.GUILD_MESSAGES,
207+
GatewayIntents.GUILD_MESSAGE_REACTIONS,
208+
GatewayIntents.GUILD_MESSAGE_TYPING,
209+
].reduce((x, total) => total | x);
210+
172211
export enum GatewayOpCodes {
173212
DISPATCH = 0,
174213
HEARTBEAT = 1,
@@ -193,6 +232,7 @@ export enum GatewayOpCodes {
193232
STREAM_WATCH = 20,
194233
STREAM_PING = 21,
195234
STREAM_SET_PAUSED = 22,
235+
REQUEST_APPLICATION_COMMANDS = 24,
196236
}
197237

198238
export enum GatewayPresenceStatuses {
@@ -302,7 +342,7 @@ export enum SocketEvents {
302342
export enum SocketEventsBase {
303343
CLOSE = 'close',
304344
ERROR = 'error',
305-
MESSAGE = 'messsage',
345+
MESSAGE = 'message',
306346
OPEN = 'open',
307347
PING = 'ping',
308348
PONG = 'pong',
@@ -326,6 +366,8 @@ export enum SocketCloseCodes {
326366
}
327367

328368
export enum SocketInternalCloseCodes {
369+
CONNECTION_ERROR = -1,
370+
329371
INVALID_DATA = 4800,
330372
RECONNECTING = 4801,
331373
HEARTBEAT_ACK = 4802,
@@ -335,6 +377,7 @@ export enum SocketInternalCloseCodes {
335377
}
336378

337379
export const SocketInternalCloseReasons = Object.freeze({
380+
[SocketInternalCloseCodes.CONNECTION_ERROR]: 'Gateway Error, check `warn` listener',
338381
[SocketInternalCloseCodes.INVALID_DATA]: 'Invalid data received, reconnecting',
339382
[SocketInternalCloseCodes.RECONNECTING]: 'Reconnecting',
340383
[SocketInternalCloseCodes.HEARTBEAT_ACK]: 'Heartbeat ACK never arrived',

0 commit comments

Comments
 (0)