@@ -4,75 +4,16 @@ import { calculateShardId } from '@discordjs/util';
4
4
import { WebSocketShardEvents } from '@discordjs/ws' ;
5
5
import { DiscordSnowflake } from '@sapphire/snowflake' ;
6
6
import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter' ;
7
- import {
8
- GatewayDispatchEvents ,
9
- GatewayOpcodes ,
10
- type APIGuildMember ,
11
- type GatewayAutoModerationActionExecutionDispatchData ,
12
- type GatewayAutoModerationRuleCreateDispatchData ,
13
- type GatewayAutoModerationRuleDeleteDispatchData ,
14
- type GatewayAutoModerationRuleUpdateDispatchData ,
15
- type GatewayChannelCreateDispatchData ,
16
- type GatewayChannelDeleteDispatchData ,
17
- type GatewayChannelPinsUpdateDispatchData ,
18
- type GatewayChannelUpdateDispatchData ,
19
- type GatewayGuildAuditLogEntryCreateDispatchData ,
20
- type GatewayGuildBanAddDispatchData ,
21
- type GatewayGuildBanRemoveDispatchData ,
22
- type GatewayGuildCreateDispatchData ,
23
- type GatewayGuildDeleteDispatchData ,
24
- type GatewayGuildEmojisUpdateDispatchData ,
25
- type GatewayGuildIntegrationsUpdateDispatchData ,
26
- type GatewayGuildMemberAddDispatchData ,
27
- type GatewayGuildMemberRemoveDispatchData ,
28
- type GatewayGuildMemberUpdateDispatchData ,
29
- type GatewayGuildMembersChunkDispatchData ,
30
- type GatewayGuildRoleCreateDispatchData ,
31
- type GatewayGuildRoleDeleteDispatchData ,
32
- type GatewayGuildRoleUpdateDispatchData ,
33
- type GatewayGuildScheduledEventCreateDispatchData ,
34
- type GatewayGuildScheduledEventDeleteDispatchData ,
35
- type GatewayGuildScheduledEventUpdateDispatchData ,
36
- type GatewayGuildScheduledEventUserAddDispatchData ,
37
- type GatewayGuildScheduledEventUserRemoveDispatchData ,
38
- type GatewayGuildStickersUpdateDispatchData ,
39
- type GatewayGuildUpdateDispatchData ,
40
- type GatewayIntegrationCreateDispatchData ,
41
- type GatewayIntegrationDeleteDispatchData ,
42
- type GatewayIntegrationUpdateDispatchData ,
43
- type GatewayInteractionCreateDispatchData ,
44
- type GatewayInviteCreateDispatchData ,
45
- type GatewayInviteDeleteDispatchData ,
46
- type GatewayMessageCreateDispatchData ,
47
- type GatewayMessageDeleteBulkDispatchData ,
48
- type GatewayMessageDeleteDispatchData ,
49
- type GatewayMessageReactionAddDispatchData ,
50
- type GatewayMessageReactionRemoveAllDispatchData ,
51
- type GatewayMessageReactionRemoveDispatchData ,
52
- type GatewayMessageReactionRemoveEmojiDispatchData ,
53
- type GatewayMessageUpdateDispatchData ,
54
- type GatewayPresenceUpdateData ,
55
- type GatewayPresenceUpdateDispatchData ,
56
- type GatewayReadyDispatchData ,
57
- type GatewayRequestGuildMembersData ,
58
- type GatewayStageInstanceCreateDispatchData ,
59
- type GatewayStageInstanceDeleteDispatchData ,
60
- type GatewayStageInstanceUpdateDispatchData ,
61
- type GatewayThreadCreateDispatchData ,
62
- type GatewayThreadDeleteDispatchData ,
63
- type GatewayThreadListSyncDispatchData ,
64
- type GatewayThreadMemberUpdateDispatchData ,
65
- type GatewayThreadMembersUpdateDispatchData ,
66
- type GatewayThreadUpdateDispatchData ,
67
- type GatewayTypingStartDispatchData ,
68
- type GatewayUserUpdateDispatchData ,
69
- type GatewayVoiceServerUpdateDispatchData ,
70
- type GatewayVoiceStateUpdateData ,
71
- type GatewayVoiceStateUpdateDispatchData ,
72
- type GatewayWebhooksUpdateDispatchData ,
7
+ import { GatewayDispatchEvents , GatewayOpcodes } from 'discord-api-types/v10' ;
8
+ import type {
9
+ GatewayDispatchPayload ,
10
+ APIGuildMember ,
11
+ GatewayRequestGuildMembersData ,
12
+ GatewayPresenceUpdateData ,
13
+ GatewayVoiceStateUpdateData ,
73
14
} from 'discord-api-types/v10' ;
74
- import type { Gateway } from './Gateway.js' ;
75
15
import { API } from './api/index.js' ;
16
+ import type { Gateway } from './gateway/Gateway.js' ;
76
17
77
18
export interface IntrinsicProps {
78
19
/**
@@ -89,98 +30,43 @@ export interface WithIntrinsicProps<T> extends IntrinsicProps {
89
30
data : T ;
90
31
}
91
32
92
- export interface MappedEvents {
93
- [ GatewayDispatchEvents . AutoModerationActionExecution ] : [
94
- WithIntrinsicProps < GatewayAutoModerationActionExecutionDispatchData > ,
95
- ] ;
96
- [ GatewayDispatchEvents . AutoModerationRuleCreate ] : [ WithIntrinsicProps < GatewayAutoModerationRuleCreateDispatchData > ] ;
97
- [ GatewayDispatchEvents . AutoModerationRuleDelete ] : [ WithIntrinsicProps < GatewayAutoModerationRuleDeleteDispatchData > ] ;
98
- [ GatewayDispatchEvents . AutoModerationRuleUpdate ] : [ WithIntrinsicProps < GatewayAutoModerationRuleUpdateDispatchData > ] ;
99
- [ GatewayDispatchEvents . ChannelCreate ] : [ WithIntrinsicProps < GatewayChannelCreateDispatchData > ] ;
100
- [ GatewayDispatchEvents . ChannelDelete ] : [ WithIntrinsicProps < GatewayChannelDeleteDispatchData > ] ;
101
- [ GatewayDispatchEvents . ChannelPinsUpdate ] : [ WithIntrinsicProps < GatewayChannelPinsUpdateDispatchData > ] ;
102
- [ GatewayDispatchEvents . ChannelUpdate ] : [ WithIntrinsicProps < GatewayChannelUpdateDispatchData > ] ;
103
- [ GatewayDispatchEvents . GuildAuditLogEntryCreate ] : [ WithIntrinsicProps < GatewayGuildAuditLogEntryCreateDispatchData > ] ;
104
- [ GatewayDispatchEvents . GuildBanAdd ] : [ WithIntrinsicProps < GatewayGuildBanAddDispatchData > ] ;
105
- [ GatewayDispatchEvents . GuildBanRemove ] : [ WithIntrinsicProps < GatewayGuildBanRemoveDispatchData > ] ;
106
- [ GatewayDispatchEvents . GuildCreate ] : [ WithIntrinsicProps < GatewayGuildCreateDispatchData > ] ;
107
- [ GatewayDispatchEvents . GuildDelete ] : [ WithIntrinsicProps < GatewayGuildDeleteDispatchData > ] ;
108
- [ GatewayDispatchEvents . GuildEmojisUpdate ] : [ WithIntrinsicProps < GatewayGuildEmojisUpdateDispatchData > ] ;
109
- [ GatewayDispatchEvents . GuildIntegrationsUpdate ] : [ WithIntrinsicProps < GatewayGuildIntegrationsUpdateDispatchData > ] ;
110
- [ GatewayDispatchEvents . GuildMemberAdd ] : [ WithIntrinsicProps < GatewayGuildMemberAddDispatchData > ] ;
111
- [ GatewayDispatchEvents . GuildMemberRemove ] : [ WithIntrinsicProps < GatewayGuildMemberRemoveDispatchData > ] ;
112
- [ GatewayDispatchEvents . GuildMemberUpdate ] : [ WithIntrinsicProps < GatewayGuildMemberUpdateDispatchData > ] ;
113
- [ GatewayDispatchEvents . GuildMembersChunk ] : [ WithIntrinsicProps < GatewayGuildMembersChunkDispatchData > ] ;
114
- [ GatewayDispatchEvents . GuildRoleCreate ] : [ WithIntrinsicProps < GatewayGuildRoleCreateDispatchData > ] ;
115
- [ GatewayDispatchEvents . GuildRoleDelete ] : [ WithIntrinsicProps < GatewayGuildRoleDeleteDispatchData > ] ;
116
- [ GatewayDispatchEvents . GuildRoleUpdate ] : [ WithIntrinsicProps < GatewayGuildRoleUpdateDispatchData > ] ;
117
- [ GatewayDispatchEvents . GuildScheduledEventCreate ] : [ WithIntrinsicProps < GatewayGuildScheduledEventCreateDispatchData > ] ;
118
- [ GatewayDispatchEvents . GuildScheduledEventDelete ] : [ WithIntrinsicProps < GatewayGuildScheduledEventDeleteDispatchData > ] ;
119
- [ GatewayDispatchEvents . GuildScheduledEventUpdate ] : [ WithIntrinsicProps < GatewayGuildScheduledEventUpdateDispatchData > ] ;
120
- [ GatewayDispatchEvents . GuildScheduledEventUserAdd ] : [
121
- WithIntrinsicProps < GatewayGuildScheduledEventUserAddDispatchData > ,
122
- ] ;
123
- [ GatewayDispatchEvents . GuildScheduledEventUserRemove ] : [
124
- WithIntrinsicProps < GatewayGuildScheduledEventUserRemoveDispatchData > ,
125
- ] ;
126
- [ GatewayDispatchEvents . GuildStickersUpdate ] : [ WithIntrinsicProps < GatewayGuildStickersUpdateDispatchData > ] ;
127
- [ GatewayDispatchEvents . GuildUpdate ] : [ WithIntrinsicProps < GatewayGuildUpdateDispatchData > ] ;
128
- [ GatewayDispatchEvents . IntegrationCreate ] : [ WithIntrinsicProps < GatewayIntegrationCreateDispatchData > ] ;
129
- [ GatewayDispatchEvents . IntegrationDelete ] : [ WithIntrinsicProps < GatewayIntegrationDeleteDispatchData > ] ;
130
- [ GatewayDispatchEvents . IntegrationUpdate ] : [ WithIntrinsicProps < GatewayIntegrationUpdateDispatchData > ] ;
131
- [ GatewayDispatchEvents . InteractionCreate ] : [ WithIntrinsicProps < GatewayInteractionCreateDispatchData > ] ;
132
- [ GatewayDispatchEvents . InviteCreate ] : [ WithIntrinsicProps < GatewayInviteCreateDispatchData > ] ;
133
- [ GatewayDispatchEvents . InviteDelete ] : [ WithIntrinsicProps < GatewayInviteDeleteDispatchData > ] ;
134
- [ GatewayDispatchEvents . MessageCreate ] : [ WithIntrinsicProps < GatewayMessageCreateDispatchData > ] ;
135
- [ GatewayDispatchEvents . MessageDelete ] : [ WithIntrinsicProps < GatewayMessageDeleteDispatchData > ] ;
136
- [ GatewayDispatchEvents . MessageDeleteBulk ] : [ WithIntrinsicProps < GatewayMessageDeleteBulkDispatchData > ] ;
137
- [ GatewayDispatchEvents . MessageReactionAdd ] : [ WithIntrinsicProps < GatewayMessageReactionAddDispatchData > ] ;
138
- [ GatewayDispatchEvents . MessageReactionRemove ] : [ WithIntrinsicProps < GatewayMessageReactionRemoveDispatchData > ] ;
139
- [ GatewayDispatchEvents . MessageReactionRemoveAll ] : [ WithIntrinsicProps < GatewayMessageReactionRemoveAllDispatchData > ] ;
140
- [ GatewayDispatchEvents . MessageReactionRemoveEmoji ] : [
141
- WithIntrinsicProps < GatewayMessageReactionRemoveEmojiDispatchData > ,
142
- ] ;
143
- [ GatewayDispatchEvents . MessageUpdate ] : [ WithIntrinsicProps < GatewayMessageUpdateDispatchData > ] ;
144
- [ GatewayDispatchEvents . PresenceUpdate ] : [ WithIntrinsicProps < GatewayPresenceUpdateDispatchData > ] ;
145
- [ GatewayDispatchEvents . Ready ] : [ WithIntrinsicProps < GatewayReadyDispatchData > ] ;
146
- [ GatewayDispatchEvents . Resumed ] : [ WithIntrinsicProps < never > ] ;
147
- [ GatewayDispatchEvents . StageInstanceCreate ] : [ WithIntrinsicProps < GatewayStageInstanceCreateDispatchData > ] ;
148
- [ GatewayDispatchEvents . StageInstanceDelete ] : [ WithIntrinsicProps < GatewayStageInstanceDeleteDispatchData > ] ;
149
- [ GatewayDispatchEvents . StageInstanceUpdate ] : [ WithIntrinsicProps < GatewayStageInstanceUpdateDispatchData > ] ;
150
- [ GatewayDispatchEvents . ThreadCreate ] : [ WithIntrinsicProps < GatewayThreadCreateDispatchData > ] ;
151
- [ GatewayDispatchEvents . ThreadDelete ] : [ WithIntrinsicProps < GatewayThreadDeleteDispatchData > ] ;
152
- [ GatewayDispatchEvents . ThreadListSync ] : [ WithIntrinsicProps < GatewayThreadListSyncDispatchData > ] ;
153
- [ GatewayDispatchEvents . ThreadMemberUpdate ] : [ WithIntrinsicProps < GatewayThreadMemberUpdateDispatchData > ] ;
154
- [ GatewayDispatchEvents . ThreadMembersUpdate ] : [ WithIntrinsicProps < GatewayThreadMembersUpdateDispatchData > ] ;
155
- [ GatewayDispatchEvents . ThreadUpdate ] : [ WithIntrinsicProps < GatewayThreadUpdateDispatchData > ] ;
156
- [ GatewayDispatchEvents . TypingStart ] : [ WithIntrinsicProps < GatewayTypingStartDispatchData > ] ;
157
- [ GatewayDispatchEvents . UserUpdate ] : [ WithIntrinsicProps < GatewayUserUpdateDispatchData > ] ;
158
- [ GatewayDispatchEvents . VoiceServerUpdate ] : [ WithIntrinsicProps < GatewayVoiceServerUpdateDispatchData > ] ;
159
- [ GatewayDispatchEvents . VoiceStateUpdate ] : [ WithIntrinsicProps < GatewayVoiceStateUpdateDispatchData > ] ;
160
- [ GatewayDispatchEvents . WebhooksUpdate ] : [ WithIntrinsicProps < GatewayWebhooksUpdateDispatchData > ] ;
161
- }
33
+ // need this to be its own type for some reason, the compiler doesn't behave the same way if we in-line it
34
+ type _DiscordEvents = {
35
+ [ K in GatewayDispatchEvents ] : GatewayDispatchPayload & {
36
+ t : K ;
37
+ } ;
38
+ } ;
162
39
163
- export type ManagerShardEventsMap = {
164
- [ K in keyof MappedEvents ] : MappedEvents [ K ] ;
40
+ export type DiscordEvents = {
41
+ // @ts -expect-error - unclear why this is an error, this behaves as expected
42
+ [ K in keyof _DiscordEvents ] : _DiscordEvents [ K ] [ 'd' ] ;
43
+ } ;
44
+
45
+ export type MappedEvents = {
46
+ [ K in keyof DiscordEvents ] : [ WithIntrinsicProps < DiscordEvents [ K ] > ] ;
165
47
} ;
166
48
167
49
export interface ClientOptions {
168
50
gateway : Gateway ;
169
51
rest : REST ;
52
+ shardCount : number ;
170
53
}
171
54
172
- export class Client extends AsyncEventEmitter < ManagerShardEventsMap > {
55
+ export class Client extends AsyncEventEmitter < MappedEvents > {
173
56
public readonly rest : REST ;
174
57
175
58
public readonly gateway : Gateway ;
176
59
177
60
public readonly api : API ;
178
61
179
- public constructor ( { rest, gateway } : ClientOptions ) {
62
+ public readonly shardCount : number ;
63
+
64
+ public constructor ( { rest, gateway, shardCount } : ClientOptions ) {
180
65
super ( ) ;
181
66
this . rest = rest ;
182
67
this . gateway = gateway ;
183
68
this . api = new API ( rest ) ;
69
+ this . shardCount = shardCount ;
184
70
185
71
this . gateway . on ( WebSocketShardEvents . Dispatch , ( { data : dispatch , shardId } ) => {
186
72
// @ts -expect-error event props can't be resolved properly, but they are correct
@@ -196,7 +82,7 @@ export class Client extends AsyncEventEmitter<ManagerShardEventsMap> {
196
82
* @param timeout - The timeout for waiting for each guild members chunk event
197
83
*/
198
84
public async requestGuildMembers ( options : GatewayRequestGuildMembersData , timeout = 10_000 ) {
199
- const shardId = calculateShardId ( options . guild_id , await this . gateway . getShardCount ( ) ) ;
85
+ const shardId = calculateShardId ( options . guild_id , this . shardCount ) ;
200
86
const nonce = options . nonce ?? DiscordSnowflake . generate ( ) . toString ( ) ;
201
87
202
88
const promise = new Promise < APIGuildMember [ ] > ( ( resolve , reject ) => {
@@ -241,7 +127,7 @@ export class Client extends AsyncEventEmitter<ManagerShardEventsMap> {
241
127
* @param options - The options for updating the voice state
242
128
*/
243
129
public async updateVoiceState ( options : GatewayVoiceStateUpdateData ) {
244
- const shardId = calculateShardId ( options . guild_id , await this . gateway . getShardCount ( ) ) ;
130
+ const shardId = calculateShardId ( options . guild_id , this . shardCount ) ;
245
131
246
132
await this . gateway . send ( shardId , {
247
133
op : GatewayOpcodes . VoiceStateUpdate ,
0 commit comments