revbot.js 0.0.1 → 0.0.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.
Files changed (144) hide show
  1. package/dist/client/baseClient.js +66 -0
  2. package/dist/client/baseClient.js.map +1 -0
  3. package/dist/client/client.js +120 -0
  4. package/dist/client/client.js.map +1 -0
  5. package/dist/client/events/bulkMessageDelete.js +22 -0
  6. package/dist/client/events/bulkMessageDelete.js.map +1 -0
  7. package/dist/client/events/channelCreate.js +42 -0
  8. package/dist/client/events/channelCreate.js.map +1 -0
  9. package/dist/client/events/channelDelete.js +30 -0
  10. package/dist/client/events/channelDelete.js.map +1 -0
  11. package/dist/client/events/channelGroupJoin.js +39 -0
  12. package/dist/client/events/channelGroupJoin.js.map +1 -0
  13. package/dist/client/events/channelGroupLeave.js +39 -0
  14. package/dist/client/events/channelGroupLeave.js.map +1 -0
  15. package/dist/client/events/channelStarttyping.js +27 -0
  16. package/dist/client/events/channelStarttyping.js.map +1 -0
  17. package/dist/client/events/channelStopTyping.js +27 -0
  18. package/dist/client/events/channelStopTyping.js.map +1 -0
  19. package/dist/client/events/channelUpdate.js +26 -0
  20. package/dist/client/events/channelUpdate.js.map +1 -0
  21. package/dist/client/events/event.js +21 -0
  22. package/dist/client/events/event.js.map +1 -0
  23. package/dist/client/events/eventManager.js +82 -0
  24. package/dist/client/events/eventManager.js.map +1 -0
  25. package/dist/client/events/index.js +39 -0
  26. package/dist/client/events/index.js.map +1 -0
  27. package/dist/client/events/message.js +43 -0
  28. package/dist/client/events/message.js.map +1 -0
  29. package/dist/client/events/messageDelete.js +31 -0
  30. package/dist/client/events/messageDelete.js.map +1 -0
  31. package/dist/client/events/messageReact.js +47 -0
  32. package/dist/client/events/messageReact.js.map +1 -0
  33. package/dist/client/events/messageUnreact.js +52 -0
  34. package/dist/client/events/messageUnreact.js.map +1 -0
  35. package/dist/client/events/messageUpdate.js +29 -0
  36. package/dist/client/events/messageUpdate.js.map +1 -0
  37. package/dist/client/events/serverCreate.js +37 -0
  38. package/dist/client/events/serverCreate.js.map +1 -0
  39. package/dist/client/events/serverDelete.js +27 -0
  40. package/dist/client/events/serverDelete.js.map +1 -0
  41. package/dist/client/events/serverMemberJoin.js +41 -0
  42. package/dist/client/events/serverMemberJoin.js.map +1 -0
  43. package/dist/client/events/serverMemberLeave.js +31 -0
  44. package/dist/client/events/serverMemberLeave.js.map +1 -0
  45. package/dist/client/events/serverMemberUpdate.js +45 -0
  46. package/dist/client/events/serverMemberUpdate.js.map +1 -0
  47. package/dist/client/events/serverRoleDelete.js +31 -0
  48. package/dist/client/events/serverRoleDelete.js.map +1 -0
  49. package/dist/client/events/serverRoleUpdate.js +29 -0
  50. package/dist/client/events/serverRoleUpdate.js.map +1 -0
  51. package/dist/client/events/serverupdate.js +26 -0
  52. package/dist/client/events/serverupdate.js.map +1 -0
  53. package/dist/client/events/userUpdate.js +28 -0
  54. package/dist/client/events/userUpdate.js.map +1 -0
  55. package/dist/client/webSocket.js +285 -0
  56. package/dist/client/webSocket.js.map +1 -0
  57. package/dist/index.js +22 -4061
  58. package/dist/index.js.map +1 -0
  59. package/dist/managers/baseManager.js +44 -0
  60. package/dist/managers/baseManager.js.map +1 -0
  61. package/dist/managers/channelManager.js +113 -0
  62. package/dist/managers/channelManager.js.map +1 -0
  63. package/dist/managers/index.js +25 -0
  64. package/dist/managers/index.js.map +1 -0
  65. package/dist/managers/messageManager.js +218 -0
  66. package/dist/managers/messageManager.js.map +1 -0
  67. package/dist/managers/roleManager.js +52 -0
  68. package/dist/managers/roleManager.js.map +1 -0
  69. package/dist/managers/serverChannelManager.js +81 -0
  70. package/dist/managers/serverChannelManager.js.map +1 -0
  71. package/dist/managers/serverManager.js +72 -0
  72. package/dist/managers/serverManager.js.map +1 -0
  73. package/dist/managers/serverMemberManager.js +128 -0
  74. package/dist/managers/serverMemberManager.js.map +1 -0
  75. package/dist/managers/userManager.js +56 -0
  76. package/dist/managers/userManager.js.map +1 -0
  77. package/dist/rest/restClient.js +113 -0
  78. package/dist/rest/restClient.js.map +1 -0
  79. package/dist/rest/restUtils/queue.js +22 -0
  80. package/dist/rest/restUtils/queue.js.map +1 -0
  81. package/dist/struct/attachment.js +42 -0
  82. package/dist/struct/attachment.js.map +1 -0
  83. package/dist/struct/base.js +88 -0
  84. package/dist/struct/base.js.map +1 -0
  85. package/dist/struct/category.js +65 -0
  86. package/dist/struct/category.js.map +1 -0
  87. package/dist/struct/channel.js +111 -0
  88. package/dist/struct/channel.js.map +1 -0
  89. package/dist/struct/clientUser.js +69 -0
  90. package/dist/struct/clientUser.js.map +1 -0
  91. package/dist/struct/dmChannel.js +87 -0
  92. package/dist/struct/dmChannel.js.map +1 -0
  93. package/dist/struct/emoji.js +49 -0
  94. package/dist/struct/emoji.js.map +1 -0
  95. package/dist/struct/groupChannel.js +203 -0
  96. package/dist/struct/groupChannel.js.map +1 -0
  97. package/dist/struct/index.js +37 -0
  98. package/dist/struct/index.js.map +1 -0
  99. package/dist/struct/interfaces/baseChannel.js +3 -0
  100. package/dist/struct/interfaces/baseChannel.js.map +1 -0
  101. package/dist/struct/invite.js +67 -0
  102. package/dist/struct/invite.js.map +1 -0
  103. package/dist/struct/mentions.js +86 -0
  104. package/dist/struct/mentions.js.map +1 -0
  105. package/dist/struct/message.js +249 -0
  106. package/dist/struct/message.js.map +1 -0
  107. package/dist/struct/messageEmbed.js +106 -0
  108. package/dist/struct/messageEmbed.js.map +1 -0
  109. package/dist/struct/notesChannel.js +92 -0
  110. package/dist/struct/notesChannel.js.map +1 -0
  111. package/dist/struct/presence.js +30 -0
  112. package/dist/struct/presence.js.map +1 -0
  113. package/dist/struct/role.js +107 -0
  114. package/dist/struct/role.js.map +1 -0
  115. package/dist/struct/server.js +164 -0
  116. package/dist/struct/server.js.map +1 -0
  117. package/dist/struct/serverChannel.js +118 -0
  118. package/dist/struct/serverChannel.js.map +1 -0
  119. package/dist/struct/serverMember.js +205 -0
  120. package/dist/struct/serverMember.js.map +1 -0
  121. package/dist/struct/textChannel.js +83 -0
  122. package/dist/struct/textChannel.js.map +1 -0
  123. package/dist/struct/user.js +172 -0
  124. package/dist/struct/user.js.map +1 -0
  125. package/dist/struct/voiceChannels.js +54 -0
  126. package/dist/struct/voiceChannels.js.map +1 -0
  127. package/dist/test.js +42 -0
  128. package/dist/test.js.map +1 -0
  129. package/dist/utils/UUID.js +53 -0
  130. package/dist/utils/UUID.js.map +1 -0
  131. package/dist/utils/badges.js +22 -0
  132. package/dist/utils/badges.js.map +1 -0
  133. package/dist/utils/bitField.js +79 -0
  134. package/dist/utils/bitField.js.map +1 -0
  135. package/dist/utils/constants.js +105 -0
  136. package/dist/utils/constants.js.map +1 -0
  137. package/dist/utils/index.js +22 -0
  138. package/dist/utils/index.js.map +1 -0
  139. package/dist/utils/permissions.js +68 -0
  140. package/dist/utils/permissions.js.map +1 -0
  141. package/package.json +2 -2
  142. package/dist/index.d.mts +0 -2430
  143. package/dist/index.d.ts +0 -2430
  144. package/dist/index.mjs +0 -3989
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.WebSocketClient = void 0;
13
+ const clientUser_1 = require("../struct/clientUser");
14
+ const constants_1 = require("../utils/constants");
15
+ /**
16
+ * Represents the WebSocket client used for real-time communication with the API.
17
+ */
18
+ class WebSocketClient {
19
+ /**
20
+ * Creates a new WebSocketClient instance.
21
+ *
22
+ * @param {client} client - The client instance.
23
+ */
24
+ constructor(client) {
25
+ this.client = client;
26
+ /** Whether the last pong acknowledgment was received. */
27
+ this.lastPongAck = false;
28
+ /** Whether the WebSocket client is connected. */
29
+ this.connected = false;
30
+ /** A promise representing the reconnecting process, or `null` if not reconnecting. */
31
+ this.reconnecting = null;
32
+ /** Whether the WebSocket client is ready. */
33
+ this.ready = false;
34
+ }
35
+ /**
36
+ * Logs a debug message.
37
+ *
38
+ * @param {unknown} message - The message to log.
39
+ * @private
40
+ */
41
+ debug(message) {
42
+ this.client.debug(`[WS] ${message}`);
43
+ }
44
+ /**
45
+ * Sends data through the WebSocket connection.
46
+ *
47
+ * @param {unknown} data - The data to send.
48
+ * @returns {Promise<void>} A promise that resolves when the data is sent.
49
+ * @throws {Error} Throws an error if the WebSocket is not open.
50
+ */
51
+ send(data) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ var _a;
54
+ if (this.reconnecting) {
55
+ this.debug("Reconnecting, waiting to send message.");
56
+ yield this.reconnecting;
57
+ }
58
+ if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {
59
+ this.socket.send(JSON.stringify(data));
60
+ }
61
+ else {
62
+ this.debug("Socket is not open, cannot send message.");
63
+ throw new Error("Socket is not open");
64
+ }
65
+ });
66
+ }
67
+ /**
68
+ * Handles the WebSocket connection opening.
69
+ *
70
+ * @private
71
+ */
72
+ onOpen() {
73
+ if (!this.client.token)
74
+ throw new Error("Token is required");
75
+ this.send({
76
+ type: constants_1.WSEvents.AUTHENTICATE,
77
+ token: this.client.token,
78
+ });
79
+ }
80
+ /**
81
+ * Gets the current ping (latency) of the WebSocket connection.
82
+ *
83
+ * @returns {number} The ping in milliseconds, or `-0` if the WebSocket is not connected.
84
+ */
85
+ get ping() {
86
+ if (!this.socket)
87
+ return -0;
88
+ return Date.now() - this.lastPingTimestamp;
89
+ }
90
+ /**
91
+ * Sets the heartbeat interval for the WebSocket connection.
92
+ *
93
+ * @param {number} time - The interval time in milliseconds. Use `-1` to clear the interval.
94
+ */
95
+ setHeartbeatTimer(time) {
96
+ this.debug(`Setting a heartbeat interval for ${time}ms.`);
97
+ if (this.heartbeatInterval) {
98
+ clearInterval(this.heartbeatInterval);
99
+ }
100
+ if (time !== -1) {
101
+ this.heartbeatInterval = setInterval(() => this.sendHeartbeat(), time);
102
+ }
103
+ }
104
+ /**
105
+ * Sends a heartbeat to the server to keep the connection alive.
106
+ */
107
+ sendHeartbeat() {
108
+ var _a;
109
+ this.debug("Sending heartbeat.");
110
+ if (!this.lastPongAck) {
111
+ this.debug("Did not receive a pong ack.");
112
+ if ((_a = this.client.options.ws) === null || _a === void 0 ? void 0 : _a.reconnect) {
113
+ this.reconnecting = this.destroy()
114
+ .then(() => this.connect())
115
+ .then(() => (this.reconnecting = null));
116
+ }
117
+ }
118
+ const now = Date.now();
119
+ this.send({ type: constants_1.WSEvents.PING, data: now });
120
+ this.lastPongAck = false;
121
+ this.lastPingTimestamp = now;
122
+ }
123
+ /**
124
+ * Handles WebSocket errors.
125
+ *
126
+ * @param {unknown} event - The error event.
127
+ * @private
128
+ */
129
+ onError(event) {
130
+ this.client.emit(constants_1.Events.ERROR, event);
131
+ }
132
+ /**
133
+ * Handles incoming WebSocket messages.
134
+ *
135
+ * @param {{ data: unknown }} param0 - The message event containing the data.
136
+ * @private
137
+ */
138
+ onMessage({ data }) {
139
+ let packet;
140
+ try {
141
+ packet = JSON.parse(String(data));
142
+ }
143
+ catch (err) {
144
+ this.client.emit(constants_1.Events.ERROR, err);
145
+ return;
146
+ }
147
+ this.client.emit(constants_1.Events.RAW, packet);
148
+ this.onPacket(packet).catch((e) => this.client.emit(constants_1.Events.ERROR, e));
149
+ }
150
+ /**
151
+ * Handles the WebSocket connection closing.
152
+ *
153
+ * @param {{ code: number; reason: string }} event - The close event containing the code and reason.
154
+ * @private
155
+ */
156
+ onClose(event) {
157
+ this.debug(`Closed with reason: ${event.reason}, code: ${event.code}`);
158
+ this.destroy();
159
+ }
160
+ /**
161
+ * Handles incoming WebSocket packets.
162
+ *
163
+ * @param {any} packet - The packet data.
164
+ * @private
165
+ */
166
+ onPacket(packet) {
167
+ return __awaiter(this, void 0, void 0, function* () {
168
+ var _a, _b, _c, _d;
169
+ if (!packet) {
170
+ this.debug(`Received broken packet: '${packet}'.`);
171
+ return;
172
+ }
173
+ switch (packet.type) {
174
+ case constants_1.WSEvents.BULK:
175
+ yield Promise.all(packet.v.map((p) => this.onPacket(p)));
176
+ break;
177
+ case constants_1.WSEvents.AUTHENTICATED:
178
+ this.connected = true;
179
+ break;
180
+ case constants_1.WSEvents.PONG:
181
+ this.debug(`Received a heartbeat.`);
182
+ this.lastPongAck = true;
183
+ break;
184
+ case constants_1.WSEvents.ERROR:
185
+ this.client.emit(constants_1.Events.ERROR, packet.error);
186
+ break;
187
+ case constants_1.WSEvents.READY: {
188
+ this.lastPongAck = true;
189
+ const promises = [];
190
+ for (const user of packet.users) {
191
+ if (user.relationship === "User" && !this.client.user) {
192
+ this.client.user = new clientUser_1.ClientUser(this.client, user);
193
+ }
194
+ else {
195
+ this.client.users._add(user);
196
+ }
197
+ }
198
+ for (const server of packet.servers) {
199
+ const s = this.client.servers._add(server);
200
+ if (this.client.options.fetchMembers) {
201
+ promises.push(s.members.fetch());
202
+ }
203
+ }
204
+ for (const channel of packet.channels) {
205
+ this.client.channels._add(channel);
206
+ }
207
+ for (const member of packet.members) {
208
+ (_a = this.client.servers.cache
209
+ .get(member._id.server)) === null || _a === void 0 ? void 0 : _a.members._add(member);
210
+ }
211
+ for (const emoji of packet.emojis) {
212
+ (_b = this.client.servers.cache
213
+ .get(emoji.parent.id)) === null || _b === void 0 ? void 0 : _b.emojis.set(emoji._id, Object.assign(Object.assign({}, emoji), { _id: emoji._id }));
214
+ }
215
+ this.setHeartbeatTimer((_d = (_c = this.client.options.ws) === null || _c === void 0 ? void 0 : _c.heartbeatInterval) !== null && _d !== void 0 ? _d : 30000);
216
+ yield Promise.all(promises);
217
+ this.ready = true;
218
+ this.client.emit(constants_1.Events.READY, this.client);
219
+ break;
220
+ }
221
+ default: {
222
+ const action = this.client.events.get(packet.type);
223
+ if (action) {
224
+ yield action.handle(packet);
225
+ }
226
+ else {
227
+ this.debug(`Received unknown packet "${packet.type}"`);
228
+ }
229
+ break;
230
+ }
231
+ }
232
+ });
233
+ }
234
+ /**
235
+ * Connects to the WebSocket server.
236
+ *
237
+ * @returns {Promise<this>} A promise that resolves when the connection is established.
238
+ */
239
+ connect() {
240
+ return new Promise((resolve) => {
241
+ var _a, _b;
242
+ if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN && this.ready) {
243
+ return resolve(this);
244
+ }
245
+ if (typeof this.client.options === "undefined") {
246
+ throw new Error("MISSING_CONFIGURATION_SYNC");
247
+ }
248
+ if (typeof this.client.token !== "string") {
249
+ throw new Error("INVALID_TOKEN");
250
+ }
251
+ const ws = (this.socket = (_b = this.socket) !== null && _b !== void 0 ? _b : new WebSocket(`${constants_1.wsUrl}`));
252
+ ws.onopen = this.onOpen.bind(this);
253
+ ws.onmessage = this.onMessage.bind(this);
254
+ ws.onerror = this.onError.bind(this);
255
+ ws.onclose = this.onClose.bind(this);
256
+ ws.addEventListener("open", () => resolve(this));
257
+ });
258
+ }
259
+ /**
260
+ * Destroys the WebSocket connection and clears its state.
261
+ *
262
+ * @returns {Promise<void>} A promise that resolves when the connection is destroyed.
263
+ */
264
+ destroy() {
265
+ return new Promise((resolve) => {
266
+ var _a;
267
+ this.setHeartbeatTimer(-1);
268
+ this.connected = false;
269
+ this.ready = false;
270
+ if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {
271
+ this.socket.addEventListener("close", () => {
272
+ this.socket = null;
273
+ resolve();
274
+ });
275
+ this.socket.close();
276
+ }
277
+ else {
278
+ this.socket = null;
279
+ resolve();
280
+ }
281
+ });
282
+ }
283
+ }
284
+ exports.WebSocketClient = WebSocketClient;
285
+ //# sourceMappingURL=webSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webSocket.js","sourceRoot":"","sources":["../../src/client/webSocket.ts"],"names":[],"mappings":"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"}