@nerimity/nerimity.js 1.8.1 → 1.8.2

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/src/Client.ts CHANGED
@@ -1,507 +1,558 @@
1
- import EventEmitter from 'eventemitter3';
2
- import {Socket, io} from 'socket.io-client';
3
- import { ClientEventMap, ClientEvents, SocketClientEvents, SocketServerEvents } from './EventNames';
4
- import { AuthenticatedPayload, ChannelType, MessageButtonClickPayload, MessageType, RawChannel, RawMessage, RawMessageButton, RawServer, RawServerMember, RawUser } from './RawData';
5
- import { buttonClickCallback, deleteMessage, editMessage, postMessage } from './services/MessageService';
6
- import { path, updatePath } from './services/serviceEndpoints';
7
-
1
+ import EventEmitter from "eventemitter3";
2
+ import { Socket, io } from "socket.io-client";
3
+ import {
4
+ ClientEventMap,
5
+ ClientEvents,
6
+ SocketClientEvents,
7
+ SocketServerEvents,
8
+ } from "./EventNames";
9
+ import {
10
+ AuthenticatedPayload,
11
+ ChannelType,
12
+ MessageButtonClickPayload,
13
+ MessageType,
14
+ RawChannel,
15
+ RawMessage,
16
+ RawMessageButton,
17
+ RawServer,
18
+ RawServerMember,
19
+ RawUser,
20
+ } from "./RawData";
21
+ import {
22
+ buttonClickCallback,
23
+ deleteMessage,
24
+ editMessage,
25
+ postMessage,
26
+ } from "./services/MessageService";
27
+ import { path, updatePath } from "./services/serviceEndpoints";
8
28
 
9
29
  export const Events = ClientEvents;
10
30
 
11
31
  export class Client extends EventEmitter<ClientEventMap> {
12
- socket: Socket;
13
- token: string | undefined;
14
- user: ClientUser | undefined;
15
- users: Users;
16
- channels: Channels;
17
- servers: Servers;
18
-
19
- constructor(opts?: { urlOverride?: string; }) {
20
- super();
21
- if (opts?.urlOverride) {
22
- updatePath(opts.urlOverride);
23
- }
24
- this.socket = io( path, {
25
- transports: ['websocket'],
26
- autoConnect: false,
27
- });
28
- this.channels = new Channels(this);
29
- this.users = new Users(this);
30
- this.servers = new Servers(this);
31
- new EventHandlers(this);
32
- }
33
-
34
- public login(token: string) {
35
- this.token = token;
36
- this.socket.connect();
37
- }
32
+ socket: Socket;
33
+ token: string | undefined;
34
+ user: ClientUser | undefined;
35
+ users: Users;
36
+ channels: Channels;
37
+ servers: Servers;
38
+
39
+ constructor(opts?: { urlOverride?: string }) {
40
+ super();
41
+ if (opts?.urlOverride) {
42
+ updatePath(opts.urlOverride);
43
+ }
44
+ this.socket = io(path, {
45
+ transports: ["websocket"],
46
+ autoConnect: false,
47
+ });
48
+ this.channels = new Channels(this);
49
+ this.users = new Users(this);
50
+ this.servers = new Servers(this);
51
+ new EventHandlers(this);
52
+ }
53
+
54
+ public login(token: string) {
55
+ this.token = token;
56
+ this.socket.connect();
57
+ }
38
58
  }
39
59
 
40
-
41
60
  class EventHandlers {
42
- client: Client;
43
- socket: Socket;
44
- constructor(client: Client) {
45
- this.client = client;
46
- this.socket = client.socket;
47
-
48
- client.socket.on(SocketServerEvents.CONNECT, this.onConnect.bind(this));
49
- client.socket.on(SocketServerEvents.USER_AUTHENTICATED, this.onAuthenticated.bind(this));
50
-
51
- client.socket.on(SocketServerEvents.SERVER_MEMBER_JOINED, this.onServerMemberJoined.bind(this));
52
- client.socket.on(SocketServerEvents.SERVER_MEMBER_LEFT, this.onServerMemberLeft.bind(this));
53
-
54
- client.socket.on(SocketServerEvents.SERVER_JOINED, this.onServerJoined.bind(this));
55
- client.socket.on(SocketServerEvents.SERVER_CHANNEL_CREATED, this.onServerChannelCreated.bind(this));
56
- client.socket.on(SocketServerEvents.SERVER_CHANNEL_UPDATED, this.onServerChannelUpdated.bind(this));
57
- client.socket.on(SocketServerEvents.SERVER_CHANNEL_DELETED, this.onServerChannelDeleted.bind(this));
58
-
59
-
60
- client.socket.on(SocketServerEvents.SERVER_LEFT, this.onServerLeft.bind(this));
61
-
62
- client.socket.on(SocketServerEvents.MESSAGE_CREATED, this.onMessageCreated.bind(this));
63
-
64
- client.socket.on(SocketServerEvents.MESSAGE_BUTTON_CLICKED, this.onMessageButtonClicked.bind(this));
65
- }
66
- onConnect() {
67
- this.socket.emit(SocketClientEvents.AUTHENTICATE, {token: this.client.token});
68
- }
69
- onAuthenticated(payload: AuthenticatedPayload) {
70
- this.client.user = new ClientUser(this.client, payload.user);
71
-
72
- for (let i = 0; i < payload.servers.length; i++) {
73
- const server = payload.servers[i];
74
- this.client.servers.setCache(server);
75
- }
76
-
77
- for (let i = 0; i < payload.channels.length; i++) {
78
- const rawChannel = payload.channels[i];
79
- this.client.channels.setCache(rawChannel);
80
- }
81
- for (let i = 0; i < payload.serverMembers.length; i++) {
82
- const member = payload.serverMembers[i];
83
- this.client.users.setCache(member.user);
84
- const server = this.client.servers.cache.get(member.serverId);
85
- server?.members.setCache(member);
86
- }
87
-
88
- this.client.emit(ClientEvents.Ready);
89
- }
90
-
91
- onServerMemberJoined(payload: {serverId: string; member: RawServerMember}) {
92
- const server = this.client.servers.cache.get(payload.serverId);
93
- this.client.users.setCache(payload.member.user);
94
- const member = server?.members.setCache(payload.member);
95
- if (!member) return;
96
- this.client.emit('serverMemberJoined', member);
97
- }
98
-
99
- onServerJoined(payload: {
100
- server: RawServer,
101
- members: RawServerMember[],
102
- channels: RawChannel[],
103
- // roles: any[];
104
- // memberPresences: any[]
105
- // voiceChannelUsers: any[];
106
- }) {
107
-
108
- const server = this.client.servers.setCache(payload.server);
109
-
110
- for (let i = 0; i < payload.members.length; i++) {
111
- const member = payload.members[i];
112
- this.client.users.setCache(member.user);
113
- server?.members.setCache(member);
114
- }
115
-
116
- for (let i = 0; i < payload.channels.length; i++) {
117
- const channel = payload.channels[i];
118
- this.client.channels.setCache(channel);
119
- }
120
- this.client.emit(ClientEvents.ServerJoined, server);
121
- }
122
- onServerChannelCreated(payload: {serverId: string; channel: RawChannel}) {
123
- const channel = this.client.channels.setCache(payload.channel);
124
- this.client.emit(ClientEvents.ServerChannelCreated, channel as ServerChannel);
125
- }
126
- onServerChannelUpdated(payload: {serverId: string; channelId: string, updated: Partial<RawChannel>}) {
127
- const channel = this.client.channels.cache.get(payload.channelId);
128
- const updated = payload.updated;
129
- if (channel) {
130
- updateClass<ServerChannel>(channel as ServerChannel, updated);
131
- this.client.emit(ClientEvents.ServerChannelUpdated, channel as ServerChannel);
132
- }
133
- }
134
- onServerChannelDeleted(payload: {serverId: string; channelId: string}) {
135
- const channel = this.client.channels.cache.has(payload.channelId);
136
- if (channel) {
137
- this.client.channels.cache.delete(payload.channelId);
138
- this.client.emit(ClientEvents.ServerChannelDeleted, {channelId: payload.channelId, serverId: payload.serverId});
139
- }
140
-
141
- }
142
- onServerLeft(payload: { serverId: string }) {
143
-
144
- const server = this.client.servers.cache.get(payload.serverId);
145
- if (!server) return;
146
- this.client.emit(ClientEvents.ServerLeft, server);
147
- this.client.servers.cache.delete(payload.serverId);
148
-
149
- this.client.channels.cache.forEach((channel) => {
150
- if (channel instanceof ServerChannel && channel.serverId === payload.serverId) {
151
- this.client.channels.cache.delete(channel.id);
152
- }
153
- });
154
- server.members.cache.clear();
155
- }
156
- onServerMemberLeft(payload: { userId: string, serverId: string }) {
157
- const server = this.client.servers.cache.get(payload.serverId);
158
- const member = server?.members.cache.get(payload.userId);
159
- if (!member) return;
160
- this.client.emit('serverMemberLeft', member);
161
- server?.members.cache.delete(payload.userId);
162
- }
163
- onMessageCreated(payload: {message: RawMessage}) {
164
- const message = new Message(this.client, payload.message);
165
- this.client.emit(ClientEvents.MessageCreate, message);
166
- }
167
- onMessageButtonClicked(payload: MessageButtonClickPayload) {
168
- const button = new Button(this.client, payload);
169
- this.client.emit('messageButtonClick', button);
170
- }
61
+ client: Client;
62
+ socket: Socket;
63
+ constructor(client: Client) {
64
+ this.client = client;
65
+ this.socket = client.socket;
66
+
67
+ client.socket.on(SocketServerEvents.CONNECT, this.onConnect.bind(this));
68
+ client.socket.on(
69
+ SocketServerEvents.USER_AUTHENTICATED,
70
+ this.onAuthenticated.bind(this)
71
+ );
72
+
73
+ client.socket.on(
74
+ SocketServerEvents.SERVER_MEMBER_JOINED,
75
+ this.onServerMemberJoined.bind(this)
76
+ );
77
+ client.socket.on(
78
+ SocketServerEvents.SERVER_MEMBER_LEFT,
79
+ this.onServerMemberLeft.bind(this)
80
+ );
81
+
82
+ client.socket.on(
83
+ SocketServerEvents.SERVER_JOINED,
84
+ this.onServerJoined.bind(this)
85
+ );
86
+ client.socket.on(
87
+ SocketServerEvents.SERVER_CHANNEL_CREATED,
88
+ this.onServerChannelCreated.bind(this)
89
+ );
90
+ client.socket.on(
91
+ SocketServerEvents.SERVER_CHANNEL_UPDATED,
92
+ this.onServerChannelUpdated.bind(this)
93
+ );
94
+ client.socket.on(
95
+ SocketServerEvents.SERVER_CHANNEL_DELETED,
96
+ this.onServerChannelDeleted.bind(this)
97
+ );
98
+
99
+ client.socket.on(
100
+ SocketServerEvents.SERVER_LEFT,
101
+ this.onServerLeft.bind(this)
102
+ );
103
+
104
+ client.socket.on(
105
+ SocketServerEvents.MESSAGE_CREATED,
106
+ this.onMessageCreated.bind(this)
107
+ );
108
+
109
+ client.socket.on(
110
+ SocketServerEvents.MESSAGE_BUTTON_CLICKED,
111
+ this.onMessageButtonClicked.bind(this)
112
+ );
113
+ }
114
+ onConnect() {
115
+ this.socket.emit(SocketClientEvents.AUTHENTICATE, {
116
+ token: this.client.token,
117
+ });
118
+ }
119
+ onAuthenticated(payload: AuthenticatedPayload) {
120
+ this.client.user = new ClientUser(this.client, payload.user);
121
+
122
+ for (let i = 0; i < payload.servers.length; i++) {
123
+ const server = payload.servers[i];
124
+ this.client.servers.setCache(server);
125
+ }
126
+
127
+ for (let i = 0; i < payload.channels.length; i++) {
128
+ const rawChannel = payload.channels[i];
129
+ this.client.channels.setCache(rawChannel);
130
+ }
131
+ for (let i = 0; i < payload.serverMembers.length; i++) {
132
+ const member = payload.serverMembers[i];
133
+ this.client.users.setCache(member.user);
134
+ const server = this.client.servers.cache.get(member.serverId);
135
+ server?.members.setCache(member);
136
+ }
137
+
138
+ this.client.emit(ClientEvents.Ready);
139
+ }
140
+
141
+ onServerMemberJoined(payload: { serverId: string; member: RawServerMember }) {
142
+ const server = this.client.servers.cache.get(payload.serverId);
143
+ this.client.users.setCache(payload.member.user);
144
+ const member = server?.members.setCache(payload.member);
145
+ if (!member) return;
146
+ this.client.emit("serverMemberJoined", member);
147
+ }
148
+
149
+ onServerJoined(payload: {
150
+ server: RawServer;
151
+ members: RawServerMember[];
152
+ channels: RawChannel[];
153
+ // roles: any[];
154
+ // memberPresences: any[]
155
+ // voiceChannelUsers: any[];
156
+ }) {
157
+ const server = this.client.servers.setCache(payload.server);
158
+
159
+ for (let i = 0; i < payload.members.length; i++) {
160
+ const member = payload.members[i];
161
+ this.client.users.setCache(member.user);
162
+ server?.members.setCache(member);
163
+ }
164
+
165
+ for (let i = 0; i < payload.channels.length; i++) {
166
+ const channel = payload.channels[i];
167
+ this.client.channels.setCache(channel);
168
+ }
169
+ this.client.emit(ClientEvents.ServerJoined, server);
170
+ }
171
+ onServerChannelCreated(payload: { serverId: string; channel: RawChannel }) {
172
+ const channel = this.client.channels.setCache(payload.channel);
173
+ this.client.emit(
174
+ ClientEvents.ServerChannelCreated,
175
+ channel as ServerChannel
176
+ );
177
+ }
178
+ onServerChannelUpdated(payload: {
179
+ serverId: string;
180
+ channelId: string;
181
+ updated: Partial<RawChannel>;
182
+ }) {
183
+ const channel = this.client.channels.cache.get(payload.channelId);
184
+ const updated = payload.updated;
185
+ if (channel) {
186
+ updateClass<ServerChannel>(channel as ServerChannel, updated);
187
+ this.client.emit(
188
+ ClientEvents.ServerChannelUpdated,
189
+ channel as ServerChannel
190
+ );
191
+ }
192
+ }
193
+ onServerChannelDeleted(payload: { serverId: string; channelId: string }) {
194
+ const channel = this.client.channels.cache.has(payload.channelId);
195
+ if (channel) {
196
+ this.client.channels.cache.delete(payload.channelId);
197
+ this.client.emit(ClientEvents.ServerChannelDeleted, {
198
+ channelId: payload.channelId,
199
+ serverId: payload.serverId,
200
+ });
201
+ }
202
+ }
203
+ onServerLeft(payload: { serverId: string }) {
204
+ const server = this.client.servers.cache.get(payload.serverId);
205
+ if (!server) return;
206
+ this.client.emit(ClientEvents.ServerLeft, server);
207
+ this.client.servers.cache.delete(payload.serverId);
208
+
209
+ this.client.channels.cache.forEach((channel) => {
210
+ if (
211
+ channel instanceof ServerChannel &&
212
+ channel.serverId === payload.serverId
213
+ ) {
214
+ this.client.channels.cache.delete(channel.id);
215
+ }
216
+ });
217
+ server.members.cache.clear();
218
+ }
219
+ onServerMemberLeft(payload: { userId: string; serverId: string }) {
220
+ const server = this.client.servers.cache.get(payload.serverId);
221
+ const member = server?.members.cache.get(payload.userId);
222
+ if (!member) return;
223
+ this.client.emit("serverMemberLeft", member);
224
+ server?.members.cache.delete(payload.userId);
225
+ }
226
+ onMessageCreated(payload: { message: RawMessage }) {
227
+ const message = new Message(this.client, payload.message);
228
+ this.client.emit(ClientEvents.MessageCreate, message);
229
+ }
230
+ onMessageButtonClicked(payload: MessageButtonClickPayload) {
231
+ const button = new Button(this.client, payload);
232
+ this.client.emit("messageButtonClick", button);
233
+ }
171
234
  }
172
235
 
173
-
174
-
175
236
  export class Users {
176
- client: Client;
177
- cache: Collection<string, User>;
178
- constructor(client: Client) {
179
- this.client = client;
180
- this.cache = new Collection();
181
- }
182
- setCache(rawUser: RawUser) {
183
- const user = new User(this.client, rawUser);
184
- this.cache.set(rawUser.id, user);
185
- return user;
186
- }
237
+ client: Client;
238
+ cache: Collection<string, User>;
239
+ constructor(client: Client) {
240
+ this.client = client;
241
+ this.cache = new Collection();
242
+ }
243
+ setCache(rawUser: RawUser) {
244
+ const user = new User(this.client, rawUser);
245
+ this.cache.set(rawUser.id, user);
246
+ return user;
247
+ }
187
248
  }
188
249
 
189
-
190
250
  export class Servers {
191
- client: Client;
192
- cache: Collection<string, Server>;
193
- constructor(client: Client) {
194
- this.client = client;
195
- this.cache = new Collection();
196
- }
197
- setCache(rawServer: RawServer) {
198
- const server = new Server(this.client, rawServer);
199
- this.cache.set(server.id, server);
200
- return server;
201
- }
251
+ client: Client;
252
+ cache: Collection<string, Server>;
253
+ constructor(client: Client) {
254
+ this.client = client;
255
+ this.cache = new Collection();
256
+ }
257
+ setCache(rawServer: RawServer) {
258
+ const server = new Server(this.client, rawServer);
259
+ this.cache.set(server.id, server);
260
+ return server;
261
+ }
202
262
  }
203
263
 
204
-
205
-
206
264
  export class Server {
207
- client: Client;
208
- id: string;
209
- name: string;
210
- avatar?: string;
211
-
212
- members: ServerMembers;
213
- constructor(client: Client, server: RawServer) {
214
- this.client = client;
215
-
216
- this.id = server.id;
217
- this.name = server.name;
218
- this.avatar = server.avatar;
219
- this.members = new ServerMembers(this.client);
220
- }
265
+ client: Client;
266
+ id: string;
267
+ name: string;
268
+ avatar?: string;
269
+
270
+ members: ServerMembers;
271
+ constructor(client: Client, server: RawServer) {
272
+ this.client = client;
273
+
274
+ this.id = server.id;
275
+ this.name = server.name;
276
+ this.avatar = server.avatar;
277
+ this.members = new ServerMembers(this.client);
278
+ }
221
279
  }
222
280
 
223
281
  export class ServerMembers {
224
- client: Client;
225
- cache: Collection<string, ServerMember>;
226
- constructor(client: Client) {
227
- this.client = client;
228
- this.cache = new Collection();
229
- }
230
- setCache(rawMember: RawServerMember) {
231
- const member = new ServerMember(this.client, rawMember);
232
- this.cache.set(member.user.id, member);
233
- return member;
234
- }
282
+ client: Client;
283
+ cache: Collection<string, ServerMember>;
284
+ constructor(client: Client) {
285
+ this.client = client;
286
+ this.cache = new Collection();
287
+ }
288
+ setCache(rawMember: RawServerMember) {
289
+ const member = new ServerMember(this.client, rawMember);
290
+ this.cache.set(member.user.id, member);
291
+ return member;
292
+ }
235
293
  }
236
294
  export class ServerMember {
237
- client: Client;
238
- id: string;
239
- user: User;
240
- server: Server;
241
-
242
- constructor(client: Client, member: RawServerMember) {
243
- this.client = client;
244
- this.id = member.user.id;
245
-
246
- this.user = this.client.users.cache.get(member.user.id)!;
247
- this.server = this.client.servers.cache.get(member.serverId)!;
248
- }
249
- toString() {
250
- return `[@:${this.id}]`;
251
- }
295
+ client: Client;
296
+ id: string;
297
+ user: User;
298
+ server: Server;
299
+
300
+ constructor(client: Client, member: RawServerMember) {
301
+ this.client = client;
302
+ this.id = member.user.id;
303
+
304
+ this.user = this.client.users.cache.get(member.user.id)!;
305
+ this.server = this.client.servers.cache.get(member.serverId)!;
306
+ }
307
+ toString() {
308
+ return `[@:${this.id}]`;
309
+ }
252
310
  }
253
311
 
254
-
255
-
256
-
257
-
258
312
  export class Channels {
259
- client: Client;
260
- cache: Collection<string, AllChannel>;
261
- constructor(client: Client) {
262
- this.client = client;
263
- this.cache = new Collection();
264
- }
265
- setCache(rawChannel: {id: string} & Omit<Partial<RawChannel>, 'id'>) {
266
- let channel: AllChannel;
267
- if (rawChannel.serverId) channel = new ServerChannel(this.client, rawChannel as any);
268
- else channel = new Channel(this.client, rawChannel as any);
269
- this.cache.set(channel.id, channel);
270
- return channel;
271
- }
313
+ client: Client;
314
+ cache: Collection<string, AllChannel>;
315
+ constructor(client: Client) {
316
+ this.client = client;
317
+ this.cache = new Collection();
318
+ }
319
+ setCache(rawChannel: { id: string } & Omit<Partial<RawChannel>, "id">) {
320
+ let channel: AllChannel;
321
+ if (rawChannel.serverId)
322
+ channel = new ServerChannel(this.client, rawChannel as any);
323
+ else channel = new Channel(this.client, rawChannel as any);
324
+ this.cache.set(channel.id, channel);
325
+ return channel;
326
+ }
272
327
  }
273
328
 
274
-
275
- export type AllChannel = ServerChannel | Channel
329
+ export type AllChannel = ServerChannel | Channel;
276
330
 
277
331
  export interface MessageOpts {
278
- htmlEmbed?: string;
279
- buttons?: RawMessageButton[]
280
- silent?: boolean;
332
+ htmlEmbed?: string;
333
+ buttons?: RawMessageButton[];
334
+ silent?: boolean;
281
335
  }
282
336
 
283
337
  export class Channel {
284
- client: Client;
285
- id: string;
286
-
287
- type: ChannelType;
288
- createdAt?: number;
289
- lastMessagedAt?: number;
290
- constructor(client: Client, channel: RawChannel) {
291
- this.client = client;
292
- this.id = channel.id;
293
- this.type = channel.type;
294
- this.createdAt = channel.createdAt;
295
- this.lastMessagedAt = channel.lastMessagedAt;
296
- }
297
-
298
- async send(content: string, opts?: MessageOpts) {
299
- const RawMessage = await postMessage({
300
- client: this.client,
301
- channelId: this.id,
302
- content: content,
303
- silent: opts?.silent,
304
- htmlEmbed: opts?.htmlEmbed,
305
- buttons: opts?.buttons
306
- });
307
- const message = new Message(this.client, RawMessage);
308
- return message;
309
- }
310
- toString() {
311
- return `[#:${this.id}]`;
312
- }
338
+ client: Client;
339
+ id: string;
340
+
341
+ type: ChannelType;
342
+ createdAt?: number;
343
+ lastMessagedAt?: number;
344
+ constructor(client: Client, channel: RawChannel) {
345
+ this.client = client;
346
+ this.id = channel.id;
347
+ this.type = channel.type;
348
+ this.createdAt = channel.createdAt;
349
+ this.lastMessagedAt = channel.lastMessagedAt;
350
+ }
351
+
352
+ async send(content: string, opts?: MessageOpts) {
353
+ const RawMessage = await postMessage({
354
+ client: this.client,
355
+ channelId: this.id,
356
+ content: content,
357
+ silent: opts?.silent,
358
+ htmlEmbed: opts?.htmlEmbed,
359
+ buttons: opts?.buttons,
360
+ });
361
+ const message = new Message(this.client, RawMessage);
362
+ return message;
363
+ }
364
+ toString() {
365
+ return `[#:${this.id}]`;
366
+ }
313
367
  }
314
368
 
315
369
  function updateClass<T extends object>(classInstance: T, update: Partial<T>) {
316
- for (const [key, value] of Object.entries(update) as [keyof T, T[keyof T]][]) {
317
- classInstance[key] = value;
318
- }
370
+ for (const [key, value] of Object.entries(update) as [
371
+ keyof T,
372
+ T[keyof T]
373
+ ][]) {
374
+ classInstance[key] = value;
375
+ }
319
376
  }
320
377
 
321
378
  export class ServerChannel extends Channel {
322
- createdById: string;
323
- name: string;
324
- serverId: string;
325
- permissions: number;
326
- categoryId?: string;
327
- server: Server;
328
-
329
- constructor(client: Client, channel: RawChannel) {
330
- super(client, channel);
331
- this.name = channel.name;
332
- this.permissions = channel.permissions!;
333
- this.createdById = channel.createdById!;
334
- this.serverId = channel.serverId!;
335
- this.categoryId = channel.categoryId!;
336
-
337
- this.server = this.client.servers.cache.get(this.serverId)!;
338
- }
379
+ createdById: string;
380
+ name: string;
381
+ serverId: string;
382
+ permissions: number;
383
+ categoryId?: string;
384
+ server: Server;
385
+
386
+ constructor(client: Client, channel: RawChannel) {
387
+ super(client, channel);
388
+ this.name = channel.name;
389
+ this.permissions = channel.permissions!;
390
+ this.createdById = channel.createdById!;
391
+ this.serverId = channel.serverId!;
392
+ this.categoryId = channel.categoryId!;
393
+
394
+ this.server = this.client.servers.cache.get(this.serverId)!;
395
+ }
339
396
  }
340
397
 
341
398
  const UserMentionRegex = /\[@:([0-9]+)\]/gm;
342
399
 
343
-
344
-
345
400
  export class Message {
346
- client: Client;
347
- id: string;
348
- content?: string;
349
- type: MessageType;
350
- createdAt: number;
351
- channelId: string;
352
- channel: AllChannel;
353
- user: User;
354
- mentions: User[] = [];
355
- constructor(client: Client, message: RawMessage) {
356
- this.client = client;
357
-
358
- this.id = message.id;
359
- this.channelId = message.channelId;
360
- this.channel = client.channels.cache.get(this.channelId)!;
361
- this.content = message.content;
362
- this.type = message.type;
363
- this.createdAt = message.createdAt;
364
- this.user = this.client.users.cache.get(message.createdBy.id)!;
365
-
366
- if (!this.user) {
367
- this.user = this.client.users.setCache(message.createdBy);
368
- }
369
-
370
- if (!this.channel) {
371
- this.channel = this.client.channels.setCache({id: this.channelId, type: ChannelType.DM_TEXT});
372
- }
373
-
374
- if (this.content) {
375
- const mentionIds = [...this.content.matchAll(UserMentionRegex)].map(exp => exp[1]);
376
- this.mentions = mentionIds.map(id => this.client.users.cache.get(id)!).filter(u => u);
377
- }
378
-
379
-
380
- }
381
- reply(content: string, opts?: MessageOpts) {
382
- return this.channel.send(`${this.user} ${content}`, opts);
383
- }
384
- async edit(content: string) {
385
- const RawMessage = await editMessage({
386
- client: this.client,
387
- channelId: this.channel.id,
388
- messageId: this.id,
389
- content: content
390
- });
391
- const message = new Message(this.client, RawMessage);
392
- return message;
393
- }
394
- async delete() {
395
- return deleteMessage({
396
- channelId: this.channel.id,
397
- client: this.client,
398
- messageId: this.id
399
- });
400
- }
401
- toString() {
402
- return `[q:${this.id}]`;
403
- }
401
+ client: Client;
402
+ id: string;
403
+ content?: string;
404
+ type: MessageType;
405
+ createdAt: number;
406
+ channelId: string;
407
+ channel: AllChannel;
408
+ user: User;
409
+ mentions: User[] = [];
410
+ constructor(client: Client, message: RawMessage) {
411
+ this.client = client;
412
+
413
+ this.id = message.id;
414
+ this.channelId = message.channelId;
415
+ this.channel = client.channels.cache.get(this.channelId)!;
416
+ this.content = message.content;
417
+ this.type = message.type;
418
+ this.createdAt = message.createdAt;
419
+ this.user = this.client.users.cache.get(message.createdBy.id)!;
420
+
421
+ if (!this.user) {
422
+ this.user = this.client.users.setCache(message.createdBy);
423
+ }
424
+
425
+ if (!this.channel) {
426
+ this.channel = this.client.channels.setCache({
427
+ id: this.channelId,
428
+ type: ChannelType.DM_TEXT,
429
+ });
430
+ }
431
+
432
+ if (this.content) {
433
+ const mentionIds = [...this.content.matchAll(UserMentionRegex)].map(
434
+ (exp) => exp[1]
435
+ );
436
+ this.mentions = mentionIds
437
+ .map((id) => this.client.users.cache.get(id)!)
438
+ .filter((u) => u);
439
+ }
440
+ }
441
+ reply(content: string, opts?: MessageOpts) {
442
+ return this.channel.send(`${this.user} ${content}`, opts);
443
+ }
444
+ async edit(content: string) {
445
+ const RawMessage = await editMessage({
446
+ client: this.client,
447
+ channelId: this.channel.id,
448
+ messageId: this.id,
449
+ content: content,
450
+ });
451
+ const message = new Message(this.client, RawMessage);
452
+ return message;
453
+ }
454
+ async delete() {
455
+ return deleteMessage({
456
+ channelId: this.channel.id,
457
+ client: this.client,
458
+ messageId: this.id,
459
+ });
460
+ }
461
+ toString() {
462
+ return `[q:${this.id}]`;
463
+ }
404
464
  }
405
465
 
406
-
407
466
  class User {
408
- client: Client;
409
- id: string;
410
- avatar?: string;
411
- banner?: string;
412
- username: string;
413
- hexColor: string;
414
- tag: string;
415
- badges: number;
416
- joinedAt?: number;
417
- bot?: boolean;
418
- constructor(client: Client, user: RawUser) {
419
- this.client = client;
420
-
421
- this.id = user.id;
422
- this.username = user.username;
423
- this.tag = user.tag;
424
-
425
- this.hexColor = user.hexColor;
426
- this.badges = user.badges;
427
- this.joinedAt = user.joinedAt;
428
- this.avatar = user.avatar;
429
- this.banner = user.banner;
430
- this.bot = user.bot;
431
- }
432
- toString() {
433
- return `[@:${this.id}]`;
434
- }
467
+ client: Client;
468
+ id: string;
469
+ avatar?: string;
470
+ banner?: string;
471
+ username: string;
472
+ hexColor: string;
473
+ tag: string;
474
+ badges: number;
475
+ joinedAt?: number;
476
+ bot?: boolean;
477
+ constructor(client: Client, user: RawUser) {
478
+ this.client = client;
479
+
480
+ this.id = user.id;
481
+ this.username = user.username;
482
+ this.tag = user.tag;
483
+
484
+ this.hexColor = user.hexColor;
485
+ this.badges = user.badges;
486
+ this.joinedAt = user.joinedAt;
487
+ this.avatar = user.avatar;
488
+ this.banner = user.banner;
489
+ this.bot = user.bot;
490
+ }
491
+ toString() {
492
+ return `[@:${this.id}]`;
493
+ }
435
494
  }
436
495
 
437
496
  export interface ActivityOpts {
438
- action: string;
439
- name: string;
440
- startedAt: number;
441
- endsAt?: number;
442
-
443
- imgSrc?: string
444
- title?: string
445
- subtitle?: string;
446
- link?: string;
497
+ action: string;
498
+ name: string;
499
+ startedAt: number;
500
+ endsAt?: number;
501
+
502
+ imgSrc?: string;
503
+ title?: string;
504
+ subtitle?: string;
505
+ link?: string;
447
506
  }
448
507
 
449
508
  class ClientUser extends User {
509
+ setActivity(activity?: ActivityOpts | null) {
510
+ this.client.socket.emit(SocketClientEvents.UPDATE_ACTIVITY, activity);
511
+ }
450
512
 
451
- setActivity(activity?: ActivityOpts | null) {
452
- this.client.socket.emit(SocketClientEvents.UPDATE_ACTIVITY, activity);
453
- }
454
-
455
- constructor(client: Client, user: RawUser) {
456
- super(client, user);
457
- }
513
+ constructor(client: Client, user: RawUser) {
514
+ super(client, user);
515
+ }
458
516
  }
459
517
 
460
-
461
518
  class Collection<K, V> extends Map<K, V> {
462
- constructor() {
463
- super();
464
- }
519
+ constructor() {
520
+ super();
521
+ }
465
522
  }
466
523
 
467
-
468
-
469
-
470
524
  export class Button {
471
- client: Client;
472
- id: string;
473
-
474
- userId: string;
475
- messageId: string;
476
- channelId: string;
477
-
478
- user?: User;
479
- channel: Channel;
480
-
481
-
482
- constructor(client: Client, payload: MessageButtonClickPayload) {
483
- this.client = client;
484
-
485
- this.id = payload.buttonId;
486
- this.userId = payload.userId;
487
- this.channelId = payload.channelId;
488
- this.messageId = payload.messageId;
489
- this.user = this.client.users.cache.get(this.userId);
490
-
491
- this.channel = client.channels.cache.get(this.channelId)!;
492
- }
493
-
494
- async respond(opts?: {title?: string, content?: string}) {
495
- await buttonClickCallback({
496
- client: this.client,
497
- buttonId: this.id,
498
- channelId: this.channelId,
499
- messageId: this.messageId,
500
- userId: this.userId,
501
- title: opts?.title,
502
- content: opts?.content
503
- });
504
- }
505
-
506
-
507
- }
525
+ client: Client;
526
+ id: string;
527
+
528
+ userId: string;
529
+ messageId: string;
530
+ channelId: string;
531
+
532
+ user?: User;
533
+ channel: Channel;
534
+
535
+ constructor(client: Client, payload: MessageButtonClickPayload) {
536
+ this.client = client;
537
+
538
+ this.id = payload.buttonId;
539
+ this.userId = payload.userId;
540
+ this.channelId = payload.channelId;
541
+ this.messageId = payload.messageId;
542
+ this.user = this.client.users.cache.get(this.userId);
543
+
544
+ this.channel = client.channels.cache.get(this.channelId)!;
545
+ }
546
+
547
+ async respond(opts?: { title?: string; content?: string }) {
548
+ await buttonClickCallback({
549
+ client: this.client,
550
+ buttonId: this.id,
551
+ channelId: this.channelId,
552
+ messageId: this.messageId,
553
+ userId: this.userId,
554
+ title: opts?.title,
555
+ content: opts?.content,
556
+ });
557
+ }
558
+ }