@nerimity/nerimity.js 1.15.2 → 1.16.0

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.
Files changed (121) hide show
  1. package/.vscode/settings.json +2 -1
  2. package/build/Attachment.d.ts +6 -6
  3. package/build/Client.d.ts +222 -202
  4. package/build/EventNames.d.ts +7 -2
  5. package/build/EventNames.d.ts.map +1 -1
  6. package/build/EventNames.js.map +1 -1
  7. package/build/bitwise.d.ts.map +1 -1
  8. package/build/classes/Attachment.d.ts +8 -0
  9. package/build/classes/Attachment.d.ts.map +1 -0
  10. package/{src/Attachment.ts → build/classes/Attachment.js} +41 -50
  11. package/build/classes/Attachment.js.map +1 -0
  12. package/build/classes/Button.d.ts +19 -0
  13. package/build/classes/Button.d.ts.map +1 -0
  14. package/build/classes/Button.js +29 -0
  15. package/build/classes/Button.js.map +1 -0
  16. package/build/classes/Channel.d.ts +30 -0
  17. package/build/classes/Channel.d.ts.map +1 -0
  18. package/build/classes/Channel.js +61 -0
  19. package/build/classes/Channel.js.map +1 -0
  20. package/build/classes/Client.d.ts +42 -0
  21. package/build/classes/Client.d.ts.map +1 -0
  22. package/build/classes/Client.js +220 -0
  23. package/build/classes/Client.js.map +1 -0
  24. package/build/classes/ClientUser.d.ts +18 -0
  25. package/build/classes/ClientUser.d.ts.map +1 -0
  26. package/build/classes/ClientUser.js +15 -0
  27. package/build/classes/ClientUser.js.map +1 -0
  28. package/build/classes/Collection.d.ts +4 -0
  29. package/build/classes/Collection.d.ts.map +1 -0
  30. package/build/classes/Collection.js +10 -0
  31. package/build/classes/Collection.js.map +1 -0
  32. package/build/classes/Message.d.ts +36 -0
  33. package/build/classes/Message.d.ts.map +1 -0
  34. package/build/classes/Message.js +72 -0
  35. package/build/classes/Message.js.map +1 -0
  36. package/build/classes/MessageButton.d.ts +19 -0
  37. package/build/classes/MessageButton.d.ts.map +1 -0
  38. package/build/classes/MessageButton.js +29 -0
  39. package/build/classes/MessageButton.js.map +1 -0
  40. package/build/classes/Post.d.ts +50 -0
  41. package/build/classes/Post.d.ts.map +1 -0
  42. package/build/classes/Post.js +64 -0
  43. package/build/classes/Post.js.map +1 -0
  44. package/build/classes/RPCClient.d.ts +24 -0
  45. package/build/classes/RPCClient.d.ts.map +1 -0
  46. package/build/classes/RPCClient.js +72 -0
  47. package/build/classes/RPCClient.js.map +1 -0
  48. package/build/classes/Server.d.ts +26 -0
  49. package/build/classes/Server.d.ts.map +1 -0
  50. package/build/classes/Server.js +42 -0
  51. package/build/classes/Server.js.map +1 -0
  52. package/build/classes/ServerChannel.d.ts +14 -0
  53. package/build/classes/ServerChannel.d.ts.map +1 -0
  54. package/build/classes/ServerChannel.js +17 -0
  55. package/build/classes/ServerChannel.js.map +1 -0
  56. package/build/classes/ServerMember.d.ts +29 -0
  57. package/build/classes/ServerMember.d.ts.map +1 -0
  58. package/build/classes/ServerMember.js +69 -0
  59. package/build/classes/ServerMember.js.map +1 -0
  60. package/build/classes/ServerRole.d.ts +22 -0
  61. package/build/classes/ServerRole.d.ts.map +1 -0
  62. package/build/classes/ServerRole.js +30 -0
  63. package/build/classes/ServerRole.js.map +1 -0
  64. package/build/classes/User.d.ts +24 -0
  65. package/build/classes/User.d.ts.map +1 -0
  66. package/build/classes/User.js +35 -0
  67. package/build/classes/User.js.map +1 -0
  68. package/build/classes/Webhooks.d.ts +73 -0
  69. package/build/classes/Webhooks.d.ts.map +1 -0
  70. package/{src/Webhooks.ts → build/classes/Webhooks.js} +122 -148
  71. package/build/classes/Webhooks.js.map +1 -0
  72. package/build/example.js +9 -9
  73. package/build/example.js.map +1 -1
  74. package/build/index.d.ts +4 -4
  75. package/build/index.d.ts.map +1 -1
  76. package/build/index.js +4 -4
  77. package/build/index.js.map +1 -1
  78. package/build/services/ApplicationService.js +1 -2
  79. package/build/services/ApplicationService.js.map +1 -1
  80. package/build/services/MessageService.d.ts +1 -1
  81. package/build/services/MessageService.d.ts.map +1 -1
  82. package/build/services/MessageService.js +6 -7
  83. package/build/services/MessageService.js.map +1 -1
  84. package/build/services/PostsService.d.ts +2 -2
  85. package/build/services/PostsService.d.ts.map +1 -1
  86. package/build/services/PostsService.js +17 -14
  87. package/build/services/PostsService.js.map +1 -1
  88. package/build/services/ServerService.d.ts +3 -1
  89. package/build/services/ServerService.d.ts.map +1 -1
  90. package/build/services/ServerService.js +23 -2
  91. package/build/services/ServerService.js.map +1 -1
  92. package/build/services/serviceEndpoints.d.ts +1 -0
  93. package/build/services/serviceEndpoints.d.ts.map +1 -1
  94. package/build/services/serviceEndpoints.js +2 -0
  95. package/build/services/serviceEndpoints.js.map +1 -1
  96. package/eslint.config.mjs +37 -0
  97. package/package.json +11 -10
  98. package/src/EventNames.ts +7 -10
  99. package/src/classes/Attachment.ts +50 -0
  100. package/src/classes/Channel.ts +74 -0
  101. package/src/classes/Client.ts +338 -0
  102. package/src/classes/ClientUser.ts +26 -0
  103. package/src/classes/Collection.ts +5 -0
  104. package/src/classes/Message.ts +102 -0
  105. package/src/classes/MessageButton.ts +48 -0
  106. package/src/classes/Post.ts +100 -0
  107. package/src/{RPCClient.ts → classes/RPCClient.ts} +4 -4
  108. package/src/classes/Server.ts +57 -0
  109. package/src/classes/ServerChannel.ts +24 -0
  110. package/src/classes/ServerMember.ts +95 -0
  111. package/src/classes/ServerRole.ts +40 -0
  112. package/src/classes/User.ts +46 -0
  113. package/src/classes/Webhooks.ts +144 -0
  114. package/src/example.ts +15 -17
  115. package/src/index.ts +4 -4
  116. package/src/services/MessageService.ts +2 -2
  117. package/src/services/PostsService.ts +55 -51
  118. package/src/services/ServerService.ts +30 -1
  119. package/src/services/serviceEndpoints.ts +4 -0
  120. package/.eslintrc.js +0 -21
  121. package/src/Client.ts +0 -875
package/src/Client.ts DELETED
@@ -1,875 +0,0 @@
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
- RawBotCommand,
15
- RawChannel,
16
- RawMessage,
17
- RawMessageButton,
18
- RawPost,
19
- RawServer,
20
- RawServerMember,
21
- RawServerRole,
22
- RawUser,
23
- } from "./RawData";
24
- import {
25
- ButtonCallback,
26
- buttonClickCallback,
27
- ButtonClickCallbackOpts,
28
- deleteMessage,
29
- editMessage,
30
- postMessage,
31
- } from "./services/MessageService";
32
- import { path, updatePath } from "./services/serviceEndpoints";
33
- import {
34
- deletePost,
35
- editPost,
36
- getPosts,
37
- postPost,
38
- } from "./services/PostsService";
39
- import { updateCommands as postUpdateCommands } from "./services/ApplicationService";
40
- import { banServerMember } from "./services/ServerService";
41
- import {
42
- addBit,
43
- AvailablePermissions,
44
- hasBit,
45
- RolePermissions,
46
- } from "./bitwise";
47
-
48
- export const Events = ClientEvents;
49
-
50
- export class Client extends EventEmitter<ClientEventMap> {
51
- socket: Socket;
52
- token: string | undefined;
53
- user: ClientUser | undefined;
54
- users: Users;
55
- channels: Channels;
56
- servers: Servers;
57
- posts: Posts;
58
-
59
- constructor(opts?: { urlOverride?: string }) {
60
- super();
61
- if (opts?.urlOverride) {
62
- updatePath(opts.urlOverride);
63
- }
64
- this.socket = io(path, {
65
- transports: ["websocket"],
66
- autoConnect: false,
67
- });
68
- this.channels = new Channels(this);
69
- this.users = new Users(this);
70
- this.servers = new Servers(this);
71
- this.posts = new Posts(this);
72
- new EventHandlers(this);
73
- }
74
-
75
- updateCommands(token: string, commands: Omit<RawBotCommand, "botUserId">[]) {
76
- return postUpdateCommands(token, commands);
77
- }
78
- public login(token: string) {
79
- this.token = token;
80
- this.socket.connect();
81
- }
82
- }
83
-
84
- class EventHandlers {
85
- client: Client;
86
- socket: Socket;
87
- constructor(client: Client) {
88
- this.client = client;
89
- this.socket = client.socket;
90
-
91
- client.socket.on(SocketServerEvents.CONNECT, this.onConnect.bind(this));
92
- client.socket.on(
93
- SocketServerEvents.USER_AUTHENTICATED,
94
- this.onAuthenticated.bind(this)
95
- );
96
-
97
- client.socket.on(
98
- SocketServerEvents.SERVER_MEMBER_JOINED,
99
- this.onServerMemberJoined.bind(this)
100
- );
101
- client.socket.on(
102
- SocketServerEvents.SERVER_MEMBER_UPDATED,
103
- this.onServerMemberUpdated.bind(this)
104
- );
105
- client.socket.on(
106
- SocketServerEvents.SERVER_MEMBER_LEFT,
107
- this.onServerMemberLeft.bind(this)
108
- );
109
-
110
- client.socket.on(
111
- SocketServerEvents.SERVER_JOINED,
112
- this.onServerJoined.bind(this)
113
- );
114
- client.socket.on(
115
- SocketServerEvents.SERVER_CHANNEL_CREATED,
116
- this.onServerChannelCreated.bind(this)
117
- );
118
- client.socket.on(
119
- SocketServerEvents.SERVER_CHANNEL_UPDATED,
120
- this.onServerChannelUpdated.bind(this)
121
- );
122
- client.socket.on(
123
- SocketServerEvents.SERVER_CHANNEL_DELETED,
124
- this.onServerChannelDeleted.bind(this)
125
- );
126
-
127
- client.socket.on(
128
- SocketServerEvents.SERVER_LEFT,
129
- this.onServerLeft.bind(this)
130
- );
131
-
132
- client.socket.on(
133
- SocketServerEvents.MESSAGE_CREATED,
134
- this.onMessageCreated.bind(this)
135
- );
136
-
137
- client.socket.on(
138
- SocketServerEvents.MESSAGE_BUTTON_CLICKED,
139
- this.onMessageButtonClicked.bind(this)
140
- );
141
- client.socket.on(
142
- SocketServerEvents.SERVER_ROLE_CREATED,
143
- this.onServerRoleCreated.bind(this)
144
- );
145
- client.socket.on(
146
- SocketServerEvents.SERVER_ROLE_DELETED,
147
- this.onServerRoleDeleted.bind(this)
148
- );
149
- client.socket.on(
150
- SocketServerEvents.SERVER_ROLE_UPDATED,
151
- this.onServerRoleUpdated.bind(this)
152
- );
153
- client.socket.on(
154
- SocketServerEvents.SERVER_ROLE_ORDER_UPDATED,
155
- this.onServerRoleOrderUpdated.bind(this)
156
- );
157
- }
158
- onConnect() {
159
- this.socket.emit(SocketClientEvents.AUTHENTICATE, {
160
- token: this.client.token,
161
- });
162
- }
163
- onAuthenticated(payload: AuthenticatedPayload) {
164
- this.client.user = new ClientUser(this.client, payload.user);
165
-
166
- for (let i = 0; i < payload.servers.length; i++) {
167
- const server = payload.servers[i];
168
- this.client.servers.setCache(server);
169
- }
170
-
171
- for (let i = 0; i < payload.channels.length; i++) {
172
- const rawChannel = payload.channels[i];
173
- this.client.channels.setCache(rawChannel);
174
- }
175
- for (let i = 0; i < payload.serverMembers.length; i++) {
176
- const member = payload.serverMembers[i];
177
- this.client.users.setCache(member.user);
178
- const server = this.client.servers.cache.get(member.serverId);
179
- server?.members.setCache(member);
180
- }
181
-
182
- for (let i = 0; i < payload.serverRoles.length; i++) {
183
- const role = payload.serverRoles[i];
184
- const server = this.client.servers.cache.get(role.serverId);
185
- server?.roles.setCache(role);
186
- }
187
-
188
- this.client.emit(ClientEvents.Ready);
189
- }
190
-
191
- onServerMemberJoined(payload: { serverId: string; member: RawServerMember }) {
192
- const server = this.client.servers.cache.get(payload.serverId);
193
- this.client.users.setCache(payload.member.user);
194
- const member = server?.members.setCache(payload.member);
195
- if (!member) return;
196
- this.client.emit(ClientEvents.ServerMemberJoined, member);
197
- }
198
-
199
- onServerMemberUpdated(payload: {
200
- serverId: string;
201
- userId: string;
202
- updated: {
203
- roleIds: string[];
204
- };
205
- }) {
206
- const server = this.client.servers.cache.get(payload.serverId);
207
- const member = server?.members.cache.get(payload.userId);
208
- if (!member) return;
209
-
210
- updateClass<ServerMember>(member, payload.updated);
211
-
212
- this.client.emit(ClientEvents.ServerMemberUpdated, member);
213
- }
214
-
215
- onServerJoined(payload: {
216
- server: RawServer;
217
- members: RawServerMember[];
218
- channels: RawChannel[];
219
- roles: RawServerRole[];
220
- // memberPresences: any[]
221
- // voiceChannelUsers: any[];
222
- }) {
223
- const server = this.client.servers.setCache(payload.server);
224
-
225
- for (let i = 0; i < payload.members.length; i++) {
226
- const member = payload.members[i];
227
- this.client.users.setCache(member.user);
228
- server?.members.setCache(member);
229
- }
230
- for (let i = 0; i < payload.roles.length; i++) {
231
- const role = payload.roles[i];
232
- server?.roles.setCache(role);
233
- }
234
-
235
- for (let i = 0; i < payload.channels.length; i++) {
236
- const channel = payload.channels[i];
237
- this.client.channels.setCache(channel);
238
- }
239
- this.client.emit(ClientEvents.ServerJoined, server);
240
- }
241
- onServerChannelCreated(payload: { serverId: string; channel: RawChannel }) {
242
- const channel = this.client.channels.setCache(payload.channel);
243
- this.client.emit(
244
- ClientEvents.ServerChannelCreated,
245
- channel as ServerChannel
246
- );
247
- }
248
- onServerChannelUpdated(payload: {
249
- serverId: string;
250
- channelId: string;
251
- updated: Partial<RawChannel>;
252
- }) {
253
- const channel = this.client.channels.cache.get(payload.channelId);
254
- const updated = payload.updated;
255
- if (channel) {
256
- updateClass<ServerChannel>(channel as ServerChannel, updated);
257
- this.client.emit(
258
- ClientEvents.ServerChannelUpdated,
259
- channel as ServerChannel
260
- );
261
- }
262
- }
263
- onServerChannelDeleted(payload: { serverId: string; channelId: string }) {
264
- const channel = this.client.channels.cache.has(payload.channelId);
265
- if (channel) {
266
- this.client.channels.cache.delete(payload.channelId);
267
- this.client.emit(ClientEvents.ServerChannelDeleted, {
268
- channelId: payload.channelId,
269
- serverId: payload.serverId,
270
- });
271
- }
272
- }
273
- onServerLeft(payload: { serverId: string }) {
274
- const server = this.client.servers.cache.get(payload.serverId);
275
- if (!server) return;
276
- this.client.emit(ClientEvents.ServerLeft, server);
277
- this.client.servers.cache.delete(payload.serverId);
278
-
279
- this.client.channels.cache.forEach((channel) => {
280
- if (
281
- channel instanceof ServerChannel &&
282
- channel.serverId === payload.serverId
283
- ) {
284
- this.client.channels.cache.delete(channel.id);
285
- }
286
- });
287
- server.members.cache.clear();
288
- }
289
- onServerMemberLeft(payload: { userId: string; serverId: string }) {
290
- const server = this.client.servers.cache.get(payload.serverId);
291
- const member = server?.members.cache.get(payload.userId);
292
- if (!member) return;
293
- this.client.emit(ClientEvents.ServerMemberLeft, member);
294
- server?.members.cache.delete(payload.userId);
295
- }
296
- onMessageCreated(payload: { message: RawMessage }) {
297
- const message = new Message(this.client, payload.message);
298
- this.client.emit(ClientEvents.MessageCreate, message);
299
- }
300
- onMessageButtonClicked(payload: MessageButtonClickPayload) {
301
- const button = new Button(this.client, payload);
302
- this.client.emit(ClientEvents.MessageButtonClick, button);
303
- }
304
- onServerRoleCreated(payload: RawServerRole) {
305
- const server = this.client.servers.cache.get(payload.serverId);
306
- const role = server?.roles.setCache(payload);
307
- if (!role) return;
308
- this.client.emit(ClientEvents.ServerRoleCreated, role);
309
- }
310
- onServerRoleDeleted(payload: { serverId: string; roleId: string }) {
311
- const server = this.client.servers.cache.get(payload.serverId);
312
- const role = server?.roles.cache.get(payload.roleId);
313
- if (!role) return;
314
- server?.roles.cache.delete(payload.roleId);
315
-
316
- this.client.emit(ClientEvents.ServerRoleDeleted, role);
317
- }
318
- onServerRoleUpdated(payload: {
319
- serverId: string;
320
- roleId: string;
321
- updated: Partial<RawServerRole>;
322
- }) {
323
- const server = this.client.servers.cache.get(payload.serverId);
324
- const role = server?.roles.cache.get(payload.roleId);
325
- if (!role) return;
326
-
327
- updateClass<ServerRole>(role, payload.updated);
328
-
329
- this.client.emit(ClientEvents.ServerRoleUpdated, role);
330
- }
331
- onServerRoleOrderUpdated(payload: { serverId: string; roleIds: string[] }) {
332
- const server = this.client.servers.cache.get(payload.serverId);
333
-
334
- for (let i = 0; i < payload.roleIds.length; i++) {
335
- const roleId = payload.roleIds[i];
336
- const role = server?.roles.cache.get(roleId);
337
- if (!role) continue;
338
- role.order = i + 1;
339
- }
340
-
341
- this.client.emit(ClientEvents.ServerRoleOrderUpdated, server?.roles!);
342
- }
343
- }
344
-
345
- export class Users {
346
- client: Client;
347
- cache: Collection<string, User>;
348
- constructor(client: Client) {
349
- this.client = client;
350
- this.cache = new Collection();
351
- }
352
- setCache(rawUser: RawUser) {
353
- const user = new User(this.client, rawUser);
354
- this.cache.set(rawUser.id, user);
355
- return user;
356
- }
357
- }
358
-
359
- export class Servers {
360
- client: Client;
361
- cache: Collection<string, Server>;
362
- constructor(client: Client) {
363
- this.client = client;
364
- this.cache = new Collection();
365
- }
366
- setCache(rawServer: RawServer) {
367
- const server = new Server(this.client, rawServer);
368
- this.cache.set(server.id, server);
369
- return server;
370
- }
371
- }
372
-
373
- export class Server {
374
- client: Client;
375
- id: string;
376
- name: string;
377
- avatar?: string;
378
- defaultRoleId: string;
379
- createdById: string;
380
-
381
- members: ServerMembers;
382
- roles: ServerRoles;
383
- constructor(client: Client, server: RawServer) {
384
- this.client = client;
385
-
386
- this.id = server.id;
387
- this.name = server.name;
388
- this.avatar = server.avatar;
389
- this.members = new ServerMembers(this.client);
390
- this.roles = new ServerRoles(this.client);
391
- this.defaultRoleId = server.defaultRoleId;
392
- this.createdById = server.createdById;
393
- }
394
-
395
- async banMember(userId: string) {
396
- return banServerMember(this.client, this.id, userId);
397
- }
398
- }
399
-
400
- export class ServerRoles {
401
- client: Client;
402
- cache: Collection<string, ServerRole>;
403
- constructor(client: Client) {
404
- this.client = client;
405
- this.cache = new Collection();
406
- }
407
- setCache(rawServerRole: RawServerRole) {
408
- const server = new ServerRole(this.client, rawServerRole);
409
- this.cache.set(server.id, server);
410
- return server;
411
- }
412
- }
413
-
414
- export class ServerRole {
415
- client: Client;
416
- id: string;
417
- name: string;
418
- permissions: number;
419
- hexColor: string;
420
- server: Server;
421
- order: number;
422
- isDefaultRole?: boolean;
423
- constructor(client: Client, role: RawServerRole) {
424
- this.client = client;
425
- this.server = this.client.servers.cache.get(role.serverId)!;
426
-
427
- this.id = role.id;
428
- this.name = role.name;
429
- this.permissions = role.permissions;
430
- this.hexColor = role.hexColor;
431
- this.order = role.order;
432
- this.isDefaultRole = this.server.defaultRoleId === this.id;
433
- }
434
- }
435
-
436
- export class ServerMembers {
437
- client: Client;
438
- cache: Collection<string, ServerMember>;
439
- constructor(client: Client) {
440
- this.client = client;
441
- this.cache = new Collection();
442
- }
443
- setCache(rawMember: RawServerMember) {
444
- const member = new ServerMember(this.client, rawMember);
445
- this.cache.set(member.user.id, member);
446
- return member;
447
- }
448
- }
449
- export class ServerMember {
450
- client: Client;
451
- id: string;
452
- user: User;
453
- server: Server;
454
- roleIds: string[];
455
- nickname?: string | null;
456
-
457
- constructor(client: Client, member: RawServerMember) {
458
- this.client = client;
459
- this.id = member.user.id;
460
- this.roleIds = member.roleIds;
461
- this.nickname = member.nickname;
462
-
463
- this.user = this.client.users.cache.get(member.user.id)!;
464
- this.server = this.client.servers.cache.get(member.serverId)!;
465
- }
466
- toString() {
467
- return `[@:${this.id}]`;
468
- }
469
- async ban() {
470
- return banServerMember(this.client, this.server.id, this.user.id);
471
- }
472
- get roles() {
473
- return this.roleIds
474
- .map((id) => this.server.roles.cache.get(id)!)
475
- .filter(Boolean);
476
- }
477
-
478
- permissions(this: ServerMember) {
479
- const defaultRoleId = this.server?.defaultRoleId;
480
- const defaultRole = this.server.roles.cache.get(defaultRoleId!);
481
-
482
- let currentPermissions = defaultRole?.permissions || 0;
483
-
484
- const memberRoles = this.roles;
485
- for (let i = 0; i < memberRoles.length; i++) {
486
- const role = memberRoles[i];
487
- currentPermissions = addBit(currentPermissions, role?.permissions || 0);
488
- }
489
-
490
- return currentPermissions;
491
- }
492
-
493
- hasPermission(
494
- permission: AvailablePermissions,
495
- ignoreAdmin = false,
496
- ignoreCreator = false
497
- ) {
498
- if (!ignoreCreator) {
499
- if (this.server.createdById === this.user.id) return true;
500
- }
501
- if (!ignoreAdmin) {
502
- if (hasBit(this.permissions(), RolePermissions.ADMIN)) return true;
503
- }
504
- return hasBit(this.permissions(), permission);
505
- }
506
- }
507
-
508
- export class Channels {
509
- client: Client;
510
- cache: Collection<string, AllChannel>;
511
- constructor(client: Client) {
512
- this.client = client;
513
- this.cache = new Collection();
514
- }
515
- setCache(rawChannel: { id: string } & Omit<Partial<RawChannel>, "id">) {
516
- let channel: AllChannel;
517
- if (rawChannel.serverId)
518
- channel = new ServerChannel(this.client, rawChannel as any);
519
- else channel = new Channel(this.client, rawChannel as any);
520
- this.cache.set(channel.id, channel);
521
- return channel;
522
- }
523
- }
524
-
525
- export type AllChannel = ServerChannel | Channel;
526
-
527
- export interface MessageOpts {
528
- htmlEmbed?: string;
529
- nerimityCdnFileId?: string;
530
- buttons?: RawMessageButton[];
531
- silent?: boolean;
532
- replyToMessageIds?: string[];
533
- mentionReplies?: boolean;
534
- }
535
-
536
- export interface PostOpts {
537
- nerimityCdnFileId?: string;
538
- poll?: {
539
- choices: string[];
540
- };
541
- }
542
-
543
- export class Channel {
544
- client: Client;
545
- id: string;
546
-
547
- type: ChannelType;
548
- createdAt?: number;
549
- lastMessagedAt?: number;
550
- server?: Server;
551
- constructor(client: Client, channel: RawChannel) {
552
- this.client = client;
553
- this.id = channel.id;
554
- this.type = channel.type;
555
- this.createdAt = channel.createdAt;
556
- this.lastMessagedAt = channel.lastMessagedAt;
557
- if (channel.serverId)
558
- this.server = this.client.servers.cache.get(channel.serverId)!;
559
- }
560
-
561
- async send(content: string, opts?: MessageOpts) {
562
- const RawMessage = await postMessage({
563
- client: this.client,
564
- channelId: this.id,
565
- content: content,
566
- silent: opts?.silent,
567
- nerimityCdnFileId: opts?.nerimityCdnFileId,
568
- htmlEmbed: opts?.htmlEmbed,
569
- buttons: opts?.buttons,
570
- replyToMessageIds: opts?.replyToMessageIds,
571
- mentionReplies: opts?.mentionReplies,
572
- });
573
- const message = new Message(this.client, RawMessage);
574
- return message;
575
- }
576
- toString() {
577
- return `[#:${this.id}]`;
578
- }
579
- }
580
-
581
- function updateClass<T extends object>(classInstance: T, update: Partial<T>) {
582
- for (const [key, value] of Object.entries(update) as [
583
- keyof T,
584
- T[keyof T]
585
- ][]) {
586
- classInstance[key] = value;
587
- }
588
- }
589
-
590
- export class ServerChannel extends Channel {
591
- createdById: string;
592
- name: string;
593
- serverId: string;
594
- permissions: number;
595
- categoryId?: string;
596
- server: Server;
597
-
598
- constructor(client: Client, channel: RawChannel) {
599
- super(client, channel);
600
- this.name = channel.name;
601
- this.permissions = channel.permissions!;
602
- this.createdById = channel.createdById!;
603
- this.serverId = channel.serverId!;
604
- this.categoryId = channel.categoryId!;
605
-
606
- this.server = this.client.servers.cache.get(this.serverId)!;
607
- }
608
- }
609
-
610
- const UserMentionRegex = /\[@:([0-9]+)\]/gm;
611
- const CommandRegex = /^(\/[^:\s]*):(\d+)( .*)?$/m;
612
-
613
- export class Message {
614
- client: Client;
615
- id: string;
616
- content?: string;
617
- type: MessageType;
618
- createdAt: number;
619
- channelId: string;
620
- channel: AllChannel;
621
- user: User;
622
- mentions: User[] = [];
623
- command?: { name: string; args: string[] };
624
- constructor(client: Client, message: RawMessage) {
625
- this.client = client;
626
-
627
- this.id = message.id;
628
- this.channelId = message.channelId;
629
- this.channel = client.channels.cache.get(this.channelId)!;
630
- this.content = message.content;
631
- this.type = message.type;
632
- this.createdAt = message.createdAt;
633
- this.user = this.client.users.cache.get(message.createdBy.id)!;
634
-
635
- const cmd = message.content?.match(CommandRegex);
636
- if (cmd?.[2] === this.client.user?.id) {
637
- this.command = {
638
- name: cmd?.[1]!.substring(1)!,
639
- args: message.content!.split(" ").slice(1),
640
- };
641
- }
642
-
643
- if (!this.user) {
644
- this.user = this.client.users.setCache(message.createdBy);
645
- }
646
-
647
- if (!this.channel) {
648
- this.channel = this.client.channels.setCache({
649
- id: this.channelId,
650
- type: ChannelType.DM_TEXT,
651
- });
652
- }
653
-
654
- if (this.content) {
655
- const mentionIds = [...this.content.matchAll(UserMentionRegex)].map(
656
- (exp) => exp[1]
657
- );
658
- this.mentions = mentionIds
659
- .map((id) => this.client.users.cache.get(id)!)
660
- .filter((u) => u);
661
- }
662
- }
663
- get member() {
664
- return this.channel.server?.members.cache.get(this.user.id);
665
- }
666
- reply(content: string, opts?: MessageOpts) {
667
- let fOpts: MessageOpts = opts || {};
668
- fOpts.replyToMessageIds = [this.id];
669
- return this.channel.send(content, opts);
670
- }
671
- async edit(content: string) {
672
- const RawMessage = await editMessage({
673
- client: this.client,
674
- channelId: this.channel.id,
675
- messageId: this.id,
676
- content: content,
677
- });
678
- const message = new Message(this.client, RawMessage);
679
- return message;
680
- }
681
- async delete() {
682
- return deleteMessage({
683
- channelId: this.channel.id,
684
- client: this.client,
685
- messageId: this.id,
686
- });
687
- }
688
- toString() {
689
- return `[q:${this.id}]`;
690
- }
691
- }
692
-
693
- class Posts {
694
- client: Client;
695
- constructor(client: Client) {
696
- this.client = client;
697
- }
698
-
699
- async get(id?: string) {
700
- const RawPosts = await getPosts(this.client);
701
- const posts = RawPosts.map((post) => new Post(this.client, post));
702
- return id ? posts.find((p) => p.id === id) : posts;
703
- }
704
-
705
- async create(content: string, opts?: PostOpts) {
706
- const RawPost = await postPost({
707
- client: this.client,
708
- content: content,
709
- nerimityCdnFileId: opts?.nerimityCdnFileId,
710
- poll: opts?.poll,
711
- });
712
-
713
- const post = new Post(this.client, RawPost);
714
-
715
- return post;
716
- }
717
- }
718
-
719
- export class Post {
720
- client: Client;
721
- id: string;
722
- content?: string;
723
- attachments?: Array<any>;
724
- deleted: boolean;
725
- block?: boolean;
726
- commentToId: string;
727
- commentTo?: RawPost;
728
- createdBy: RawUser;
729
- createdAt: number;
730
- editedAt: number;
731
- likedBy: { id: string }[]; // if you liked this post, array will not be empty
732
- reposts: { id: string; createdBy: { id: string; username: string } }[];
733
- repost?: RawPost;
734
- _count: { likedBy: number; comments: number; reposts: number };
735
- views: number;
736
- announcement: any;
737
- poll?: any;
738
-
739
- constructor(client: Client, post: RawPost) {
740
- this.client = client;
741
- this.id = post.id;
742
- this.content = post.content;
743
- this.attachments = post.attachments;
744
- this.deleted = post.deleted;
745
- this.block = post.block;
746
- this.commentToId = post.commentToId;
747
- this.commentTo = post.commentTo;
748
- this.createdBy = post.createdBy;
749
- this.createdAt = post.createdAt;
750
- this.editedAt = post.editedAt;
751
- this.likedBy = post.likedBy;
752
- this.reposts = post.reposts;
753
- this.repost = post.repost;
754
- this._count = post._count;
755
- this.views = post.views;
756
- this.announcement = post.announcement;
757
- this.poll = post.poll;
758
- }
759
-
760
- async edit(content: string) {
761
- const RawPost = await editPost({
762
- client: this.client,
763
- content: content,
764
- postId: this.id,
765
- });
766
-
767
- const post = new Post(this.client, RawPost);
768
- return post;
769
- }
770
-
771
- async delete() {
772
- await deletePost({
773
- client: this.client,
774
- postId: this.id,
775
- });
776
- }
777
- }
778
-
779
- class User {
780
- client: Client;
781
- id: string;
782
- avatar?: string;
783
- banner?: string;
784
- username: string;
785
- hexColor: string;
786
- tag: string;
787
- badges: number;
788
- joinedAt?: number;
789
- bot?: boolean;
790
- constructor(client: Client, user: RawUser) {
791
- this.client = client;
792
-
793
- this.id = user.id;
794
- this.username = user.username;
795
- this.tag = user.tag;
796
-
797
- this.hexColor = user.hexColor;
798
- this.badges = user.badges;
799
- this.joinedAt = user.joinedAt;
800
- this.avatar = user.avatar;
801
- this.banner = user.banner;
802
- this.bot = user.bot;
803
- }
804
- toString() {
805
- return `[@:${this.id}]`;
806
- }
807
- }
808
-
809
- export interface ActivityOpts {
810
- action: string;
811
- name: string;
812
- startedAt: number;
813
- endsAt?: number;
814
-
815
- imgSrc?: string;
816
- title?: string;
817
- subtitle?: string;
818
- link?: string;
819
- }
820
-
821
- class ClientUser extends User {
822
- setActivity(activity?: ActivityOpts | null) {
823
- this.client.socket.emit(SocketClientEvents.UPDATE_ACTIVITY, activity);
824
- }
825
-
826
- constructor(client: Client, user: RawUser) {
827
- super(client, user);
828
- }
829
- }
830
-
831
- class Collection<K, V> extends Map<K, V> {
832
- constructor() {
833
- super();
834
- }
835
- }
836
-
837
- export class Button {
838
- client: Client;
839
- id: string;
840
-
841
- userId: string;
842
- messageId: string;
843
- channelId: string;
844
-
845
- user?: User;
846
- channel: Channel;
847
-
848
- data?: Record<string, string>;
849
- type: "modal_click" | "button_click";
850
-
851
- constructor(client: Client, payload: MessageButtonClickPayload) {
852
- this.client = client;
853
-
854
- this.id = payload.buttonId;
855
- this.userId = payload.userId;
856
- this.channelId = payload.channelId;
857
- this.messageId = payload.messageId;
858
- this.user = this.client.users.cache.get(this.userId);
859
-
860
- this.channel = client.channels.cache.get(this.channelId)!;
861
- this.data = payload.data;
862
- this.type = payload.type;
863
- }
864
-
865
- async respond(opts?: ButtonCallback) {
866
- await buttonClickCallback({
867
- client: this.client,
868
- buttonId: this.id,
869
- channelId: this.channelId,
870
- messageId: this.messageId,
871
- userId: this.userId,
872
- data: opts,
873
- });
874
- }
875
- }