1
1
import { ClusterClientEvents , EvalOptions , MessageTypes , Serialized , Awaitable , ValidIfSerializable , SerializableInput , ClusterClientData } from '../types' ;
2
2
import { BaseMessage , BaseMessageInput , DataType , ProcessMessage } from '../other/message' ;
3
+ import { ClientOptions , Client as DiscordClient , Guild , ClientEvents } from 'discord.js' ;
3
4
import { BrokerMessage , IPCBrokerClient } from '../handlers/broker' ;
4
- import { ShardingClient , ShardingClientSapphire } from './client' ;
5
5
import { ClusterClientHandler } from '../handlers/message' ;
6
6
import { ShardingUtils } from '../other/shardingUtils' ;
7
7
import { RefClusterManager } from './clusterManager' ;
@@ -10,10 +10,156 @@ import { WorkerClient } from '../classes/worker';
10
10
import { ChildClient } from '../classes/child' ;
11
11
import { Serializable } from 'child_process' ;
12
12
import { getInfo } from '../other/data' ;
13
- import { Guild } from 'discord.js' ;
14
13
import EventEmitter from 'events' ;
15
14
16
- export type RefShardingClient = ShardingClient | ShardingClientSapphire ;
15
+ /**
16
+ * Modified ClientEvents such that the ready event has the ShardingClient instead of the normal Client.
17
+ * @export
18
+ * @typedef {ClientEventsModifiable }
19
+ */
20
+ export type ClientEventsModifiable = Omit < ClientEvents , 'ready' > & { ready : [ client : ShardingClient ] } ;
21
+
22
+ /**
23
+ * Modified DiscordClient with bunch of new methods.
24
+ * @export
25
+ * @class ShardingClient
26
+ * @typedef {ShardingClient }
27
+ * @template {boolean} [Ready=boolean] - The ready state of the client.
28
+ * @template {RefClusterManager} [InternalManager=RefClusterManager] - The manager to use for the client.
29
+ * @extends {DiscordClient }
30
+ */
31
+ export class ShardingClient <
32
+ Ready extends boolean = boolean ,
33
+ InternalManager extends RefClusterManager = RefClusterManager ,
34
+ > extends DiscordClient < Ready > {
35
+ /**
36
+ * Cluster associated with this client.
37
+ * @type {ClusterClient<this, InternalManage> }
38
+ */
39
+ cluster : ClusterClient < this, InternalManager > ;
40
+
41
+ /**
42
+ * Creates an instance of ShardingClient.
43
+ * @constructor
44
+ * @param {ClientOptions } options - The options for the client.
45
+ */
46
+ constructor ( options : ClientOptions ) {
47
+ super ( {
48
+ ...options ,
49
+ shards : getInfo ( ) . ShardList ,
50
+ shardCount : getInfo ( ) . TotalShards ,
51
+ } ) ;
52
+
53
+ this . cluster = new ClusterClient < this, InternalManager > ( this ) ;
54
+ }
55
+
56
+ /**
57
+ * Listen for an event.
58
+ * @template {keyof ClientEventsModifiable} K - The type of the event.
59
+ * @param {K } event - The event to listen for.
60
+ * @param {(...args: ClientEventsModifiable[K]) => void } listener - The listener to execute.
61
+ * @returns {this } The client.
62
+ */
63
+ on < K extends keyof ClientEventsModifiable > ( event : K , listener : ( ...args : ClientEventsModifiable [ K ] ) => void ) : this;
64
+ /**
65
+ * Listen for an event.
66
+ * @template {string | symbol} S - The type of the event.
67
+ * @param {Exclude<S, keyof ClientEventsModifiable> } event - The event to listen for.
68
+ * @param {(...args: unknown[]) => void } listener - The listener to execute.
69
+ * @returns {this } The client.
70
+ */
71
+ on < S extends string | symbol > ( event : Exclude < S , keyof ClientEventsModifiable > , listener : ( ...args : unknown [ ] ) => void ) : this;
72
+ /**
73
+ * Listen for an event.
74
+ * @param {(string | symbol) } event - The event to listen for.
75
+ * @param {(...args: unknown[]) => void } listener - The listener to execute.
76
+ * @returns {this } The client.
77
+ */
78
+ on ( event : string | symbol , listener : ( ...args : unknown [ ] ) => void ) : this {
79
+ return super . on ( event , listener ) ;
80
+ }
81
+
82
+ /**
83
+ * Listen for an event once.
84
+ * @template {keyof ClientEventsModifiable} K - The type of the event.
85
+ * @param {K } event - The event to listen for.
86
+ * @param {(...args: ClientEventsModifiable[K]) => void } listener - The listener to execute.
87
+ * @returns {this } The client.
88
+ */
89
+ once < K extends keyof ClientEventsModifiable > ( event : K , listener : ( ...args : ClientEventsModifiable [ K ] ) => void ) : this;
90
+ /**
91
+ * Listen for an event once.
92
+ * @template {string | symbol} S - The type of the event.
93
+ * @param {Exclude<S, keyof ClientEventsModifiable> } event - The event to listen for.
94
+ * @param {(...args: unknown[]) => void } listener - The listener to execute.
95
+ * @returns {this } The client.
96
+ */
97
+ once < S extends string | symbol > ( event : Exclude < S , keyof ClientEventsModifiable > , listener : ( ...args : unknown [ ] ) => void ) : this;
98
+ /**
99
+ * Listen for an event once.
100
+ * @param {(string | symbol) } event - The event to listen for.
101
+ * @param {(...args: unknown[]) => void } listener - The listener to execute.
102
+ * @returns {this } The client.
103
+ */
104
+ once ( event : string | symbol , listener : ( ...args : unknown [ ] ) => void ) : this {
105
+ return super . once ( event , listener ) ;
106
+ }
107
+
108
+ /**
109
+ * Listen for an event.
110
+ * @template {keyof ClientEventsModifiable} K - The type of the event.
111
+ * @param {K } event - The event to listen for.
112
+ * @param {(...args: ClientEventsModifiable[K]) => void } listener - The listener to execute.
113
+ * @returns {this } The client.
114
+ */
115
+ off < K extends keyof ClientEventsModifiable > ( event : K , listener : ( ...args : ClientEventsModifiable [ K ] ) => void ) : this;
116
+ /**
117
+ * Listen for an event.
118
+ * @template {string | symbol} S - The type of the event.
119
+ * @param {Exclude<S, keyof ClientEventsModifiable> } event - The event to listen for.
120
+ * @param {(...args: unknown[]) => void } listener - The listener to execute.
121
+ * @returns {this } The client.
122
+ */
123
+ off < S extends string | symbol > ( event : Exclude < S , keyof ClientEventsModifiable > , listener : ( ...args : unknown [ ] ) => void ) : this;
124
+ /**
125
+ * Listen for an event.
126
+ * @param {(string | symbol) } event - The event to listen for.
127
+ * @param {(...args: unknown[]) => void } listener - The listener to execute.
128
+ * @returns {this } The client.
129
+ */
130
+ off ( event : string | symbol , listener : ( ...args : unknown [ ] ) => void ) : this {
131
+ return super . off ( event , listener ) ;
132
+ }
133
+
134
+ /**
135
+ * Emit an event.
136
+ * @template {keyof ClientEventsModifiable} K - The type of the event.
137
+ * @param {K } event - The event to emit.
138
+ * @param {...ClientEventsModifiable[K] } args - The arguments to pass to the listener.
139
+ * @returns {boolean } Whether the event was emitted.
140
+ */
141
+ emit < K extends keyof ClientEventsModifiable > ( event : K , ...args : ClientEventsModifiable [ K ] ) : boolean ;
142
+ /**
143
+ * Emit an event.
144
+ * @template {string | symbol} S - The type of the event.
145
+ * @param {Exclude<S, keyof ClientEventsModifiable> } event - The event to emit.
146
+ * @param {...unknown[] } args - The arguments to pass to the listener.
147
+ * @returns {boolean } Whether the event was emitted.
148
+ */
149
+ emit < S extends string | symbol > ( event : Exclude < S , keyof ClientEventsModifiable > , ...args : unknown [ ] ) : boolean ;
150
+ /**
151
+ * Emit an event.
152
+ * @param {(string | symbol) } event - The event to emit.
153
+ * @param {...unknown[] } args - The arguments to pass to the listener.
154
+ * @returns {boolean } Whether the event was emitted.
155
+ */
156
+ emit ( event : string | symbol , ...args : unknown [ ] ) : boolean {
157
+ return super . emit ( event , ...args ) ;
158
+ }
159
+ }
160
+
161
+ export type RefShardingClient = ShardingClient ;
162
+
17
163
18
164
/**
19
165
* Simplified Cluster instance available on the {@link ClusterClient}.
0 commit comments