seyfert 0.1.0 → 1.0.1

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 (198) hide show
  1. package/README.md +19 -30
  2. package/lib/api/CDN.d.ts +0 -8
  3. package/lib/api/CDN.js +7 -13
  4. package/lib/api/Router.d.ts +2 -2
  5. package/lib/api/Router.js +1 -1
  6. package/lib/api/Routes/applications.d.ts +1 -1
  7. package/lib/api/Routes/channels.d.ts +1 -1
  8. package/lib/api/Routes/gateway.d.ts +1 -1
  9. package/lib/api/Routes/guilds.d.ts +1 -1
  10. package/lib/api/Routes/interactions.d.ts +1 -1
  11. package/lib/api/Routes/invites.d.ts +1 -1
  12. package/lib/api/Routes/stage-instances.d.ts +1 -1
  13. package/lib/api/Routes/stickers.d.ts +1 -1
  14. package/lib/api/Routes/users.d.ts +1 -1
  15. package/lib/api/Routes/voice.d.ts +1 -1
  16. package/lib/api/Routes/webhooks.d.ts +1 -1
  17. package/lib/api/api.d.ts +44 -0
  18. package/lib/api/api.js +354 -0
  19. package/lib/api/bucket.d.ts +19 -0
  20. package/lib/api/bucket.js +71 -0
  21. package/lib/api/index.d.ts +1 -1
  22. package/lib/api/index.js +1 -1
  23. package/lib/api/shared.d.ts +33 -5
  24. package/lib/api/shared.js +2 -7
  25. package/lib/api/utils/constants.d.ts +1 -30
  26. package/lib/api/utils/constants.js +2 -41
  27. package/lib/api/utils/types.d.ts +1 -320
  28. package/lib/api/utils/utils.d.ts +0 -38
  29. package/lib/api/utils/utils.js +1 -139
  30. package/lib/builders/ActionRow.js +1 -1
  31. package/lib/builders/Attachment.d.ts +14 -6
  32. package/lib/builders/Attachment.js +30 -7
  33. package/lib/builders/Button.d.ts +5 -14
  34. package/lib/builders/Button.js +0 -11
  35. package/lib/builders/{MessageEmbed.d.ts → Embed.d.ts} +15 -15
  36. package/lib/builders/{MessageEmbed.js → Embed.js} +16 -16
  37. package/lib/builders/Modal.js +1 -1
  38. package/lib/builders/SelectMenu.d.ts +14 -15
  39. package/lib/builders/SelectMenu.js +19 -18
  40. package/lib/builders/index.d.ts +1 -1
  41. package/lib/builders/index.js +1 -1
  42. package/lib/builders/types.d.ts +2 -2
  43. package/lib/cache/adapters/default.d.ts +1 -0
  44. package/lib/cache/adapters/default.js +3 -2
  45. package/lib/cache/adapters/redis.d.ts +3 -3
  46. package/lib/cache/adapters/redis.js +14 -5
  47. package/lib/cache/adapters/types.d.ts +1 -0
  48. package/lib/cache/adapters/workeradapter.d.ts +10 -1
  49. package/lib/cache/adapters/workeradapter.js +8 -3
  50. package/lib/cache/index.d.ts +18 -5
  51. package/lib/cache/index.js +23 -9
  52. package/lib/cache/resources/channels.d.ts +6 -2
  53. package/lib/cache/resources/channels.js +12 -6
  54. package/lib/cache/resources/default/base.d.ts +17 -16
  55. package/lib/cache/resources/default/base.js +25 -24
  56. package/lib/cache/resources/default/guild-based.d.ts +22 -19
  57. package/lib/cache/resources/default/guild-based.js +32 -31
  58. package/lib/cache/resources/default/guild-related.d.ts +22 -19
  59. package/lib/cache/resources/default/guild-related.js +37 -43
  60. package/lib/cache/resources/emojis.d.ts +4 -2
  61. package/lib/cache/resources/emojis.js +8 -6
  62. package/lib/cache/resources/guilds.d.ts +4 -2
  63. package/lib/cache/resources/guilds.js +15 -8
  64. package/lib/cache/resources/members.d.ts +4 -2
  65. package/lib/cache/resources/members.js +16 -13
  66. package/lib/cache/resources/overwrites.d.ts +25 -0
  67. package/lib/cache/resources/overwrites.js +39 -0
  68. package/lib/cache/resources/presence.js +3 -4
  69. package/lib/cache/resources/roles.d.ts +4 -2
  70. package/lib/cache/resources/roles.js +8 -6
  71. package/lib/cache/resources/stickers.d.ts +4 -2
  72. package/lib/cache/resources/stickers.js +8 -6
  73. package/lib/cache/resources/threads.d.ts +4 -2
  74. package/lib/cache/resources/threads.js +8 -6
  75. package/lib/cache/resources/users.d.ts +4 -2
  76. package/lib/cache/resources/users.js +8 -6
  77. package/lib/cache/resources/voice-states.d.ts +3 -3
  78. package/lib/cache/resources/voice-states.js +6 -7
  79. package/lib/client/base.d.ts +48 -16
  80. package/lib/client/base.js +19 -15
  81. package/lib/client/client.d.ts +15 -4
  82. package/lib/client/client.js +26 -28
  83. package/lib/client/httpclient.d.ts +3 -5
  84. package/lib/client/httpclient.js +29 -16
  85. package/lib/client/{oninteraction.d.ts → oninteractioncreate.d.ts} +1 -1
  86. package/lib/client/{oninteraction.js → oninteractioncreate.js} +34 -23
  87. package/lib/client/onmessagecreate.d.ts +3 -0
  88. package/lib/client/onmessagecreate.js +337 -0
  89. package/lib/client/workerclient.d.ts +19 -2
  90. package/lib/client/workerclient.js +156 -46
  91. package/lib/collection.d.ts +1 -1
  92. package/lib/collection.js +9 -6
  93. package/lib/commands/applications/chat.d.ts +32 -25
  94. package/lib/commands/applications/chat.js +51 -34
  95. package/lib/commands/applications/chatcontext.d.ts +34 -16
  96. package/lib/commands/applications/chatcontext.js +99 -20
  97. package/lib/commands/applications/menu.d.ts +9 -8
  98. package/lib/commands/applications/menu.js +14 -5
  99. package/lib/commands/applications/menucontext.d.ts +27 -10
  100. package/lib/commands/applications/menucontext.js +51 -7
  101. package/lib/commands/applications/options.d.ts +13 -13
  102. package/lib/commands/applications/shared.d.ts +7 -2
  103. package/lib/commands/decorators.d.ts +14 -14
  104. package/lib/commands/decorators.js +9 -5
  105. package/lib/commands/handler.d.ts +2 -1
  106. package/lib/commands/handler.js +60 -14
  107. package/lib/commands/index.d.ts +1 -1
  108. package/lib/commands/index.js +2 -1
  109. package/lib/commands/optionresolver.d.ts +6 -5
  110. package/lib/commands/optionresolver.js +10 -6
  111. package/lib/common/bot/watcher.d.ts +3 -3
  112. package/lib/common/bot/watcher.js +3 -1
  113. package/lib/common/index.d.ts +1 -1
  114. package/lib/common/index.js +2 -1
  115. package/lib/common/it/logger.d.ts +11 -0
  116. package/lib/common/it/logger.js +51 -2
  117. package/lib/common/it/utils.d.ts +3 -13
  118. package/lib/common/it/utils.js +9 -30
  119. package/lib/common/shorters/channels.d.ts +55 -5
  120. package/lib/common/shorters/channels.js +59 -0
  121. package/lib/common/shorters/guilds.d.ts +5 -2
  122. package/lib/common/shorters/guilds.js +18 -0
  123. package/lib/common/shorters/messages.js +0 -2
  124. package/lib/common/shorters/overwrites.d.ts +29 -0
  125. package/lib/common/shorters/overwrites.js +63 -0
  126. package/lib/common/shorters/roles.js +3 -3
  127. package/lib/common/shorters/webhook.d.ts +2 -2
  128. package/lib/common/types/util.d.ts +3 -2
  129. package/lib/common/types/write.d.ts +3 -7
  130. package/lib/components/handler.d.ts +11 -17
  131. package/lib/components/handler.js +45 -93
  132. package/lib/components/index.d.ts +0 -1
  133. package/lib/components/index.js +0 -1
  134. package/lib/components/listener.d.ts +2 -2
  135. package/lib/components/listener.js +2 -3
  136. package/lib/events/event.d.ts +2 -2
  137. package/lib/events/handler.d.ts +3 -2
  138. package/lib/events/handler.js +14 -6
  139. package/lib/events/hooks/dispatch.d.ts +2 -1
  140. package/lib/events/hooks/dispatch.js +5 -1
  141. package/lib/events/hooks/thread.d.ts +63 -63
  142. package/lib/index.d.ts +8 -5
  143. package/lib/index.js +20 -10
  144. package/lib/langs/handler.d.ts +6 -4
  145. package/lib/langs/handler.js +10 -8
  146. package/lib/langs/router.d.ts +8 -9
  147. package/lib/langs/router.js +5 -5
  148. package/lib/structures/ClientUser.d.ts +1 -16
  149. package/lib/structures/ClientUser.js +0 -31
  150. package/lib/structures/Guild.d.ts +1 -1
  151. package/lib/structures/GuildMember.d.ts +12 -0
  152. package/lib/structures/GuildMember.js +14 -0
  153. package/lib/structures/GuildRole.d.ts +4 -2
  154. package/lib/structures/GuildRole.js +4 -1
  155. package/lib/structures/GuildTemplate.js +1 -1
  156. package/lib/structures/Interaction.d.ts +2 -0
  157. package/lib/structures/Interaction.js +12 -13
  158. package/lib/structures/Message.d.ts +7 -2
  159. package/lib/structures/Message.js +6 -3
  160. package/lib/structures/Sticker.d.ts +1 -1
  161. package/lib/structures/Sticker.js +1 -1
  162. package/lib/structures/User.d.ts +5 -0
  163. package/lib/structures/User.js +3 -0
  164. package/lib/structures/Webhook.d.ts +1 -1
  165. package/lib/structures/Webhook.js +1 -1
  166. package/lib/structures/channels.d.ts +45 -6
  167. package/lib/structures/channels.js +23 -7
  168. package/lib/structures/extra/BitField.d.ts +9 -6
  169. package/lib/structures/extra/BitField.js +27 -3
  170. package/lib/structures/extra/Permissions.d.ts +6 -1
  171. package/lib/structures/extra/Permissions.js +7 -0
  172. package/lib/websocket/constants/index.js +1 -3
  173. package/lib/websocket/discord/basesocket.js +0 -1
  174. package/lib/websocket/discord/shared.d.ts +2 -0
  175. package/lib/websocket/discord/worker.d.ts +23 -7
  176. package/lib/websocket/discord/workermanager.d.ts +32 -5
  177. package/lib/websocket/discord/workermanager.js +98 -29
  178. package/package.json +23 -21
  179. package/lib/api/REST.d.ts +0 -127
  180. package/lib/api/REST.js +0 -424
  181. package/lib/api/errors/DiscordAPIError.d.ts +0 -51
  182. package/lib/api/errors/DiscordAPIError.js +0 -81
  183. package/lib/api/errors/HTTPError.d.ts +0 -20
  184. package/lib/api/errors/HTTPError.js +0 -28
  185. package/lib/api/errors/RateLimitError.d.ts +0 -19
  186. package/lib/api/errors/RateLimitError.js +0 -37
  187. package/lib/api/handlers/BurstHandler.d.ts +0 -51
  188. package/lib/api/handlers/BurstHandler.js +0 -124
  189. package/lib/api/handlers/SequentialHandler.d.ts +0 -81
  190. package/lib/api/handlers/SequentialHandler.js +0 -365
  191. package/lib/api/handlers/Shared.d.ts +0 -14
  192. package/lib/api/handlers/Shared.js +0 -125
  193. package/lib/api/interfaces/Handler.d.ts +0 -21
  194. package/lib/api/interfaces/Handler.js +0 -2
  195. package/lib/websocket/discord/handlemessage.d.ts +0 -0
  196. package/lib/websocket/discord/handlemessage.js +0 -1
  197. package/lib/websocket/discord/memberUpdate.d.ts +0 -16
  198. package/lib/websocket/discord/memberUpdate.js +0 -47
@@ -18,7 +18,6 @@ __exportStar(require("./it/constants"), exports);
18
18
  __exportStar(require("./it/utils"), exports);
19
19
  //
20
20
  __exportStar(require("discord-api-types/v10"), exports);
21
- __exportStar(require("./bot/watcher"), exports);
22
21
  __exportStar(require("./it/colors"), exports);
23
22
  __exportStar(require("./it/logger"), exports);
24
23
  __exportStar(require("./shorters/channels"), exports);
@@ -28,3 +27,5 @@ __exportStar(require("./types/options"), exports);
28
27
  __exportStar(require("./types/resolvables"), exports);
29
28
  __exportStar(require("./types/util"), exports);
30
29
  __exportStar(require("./types/write"), exports);
30
+ //
31
+ __exportStar(require("./bot/watcher"), exports);
@@ -1,3 +1,5 @@
1
+ /// <reference types="node" />
2
+ import { type WriteStream } from 'node:fs';
1
3
  export declare enum LogLevels {
2
4
  Debug = 0,
3
5
  Info = 1,
@@ -9,6 +11,7 @@ export type LoggerOptions = {
9
11
  logLevel?: LogLevels;
10
12
  name?: string;
11
13
  active?: boolean;
14
+ saveOnFile?: boolean;
12
15
  };
13
16
  export type CustomCallback = (self: Logger, level: LogLevels, args: unknown[]) => unknown[];
14
17
  /**
@@ -19,6 +22,10 @@ export declare class Logger {
19
22
  * The options for configuring the logger.
20
23
  */
21
24
  readonly options: Required<LoggerOptions>;
25
+ static streams: Partial<Record<string, WriteStream>>;
26
+ static saveOnFile?: string[] | 'all';
27
+ static dirname: string;
28
+ private static createdDir?;
22
29
  /**
23
30
  * The custom callback function for logging.
24
31
  */
@@ -32,6 +39,7 @@ export declare class Logger {
32
39
  * });
33
40
  */
34
41
  static customize(cb: CustomCallback): void;
42
+ static clearLogs(): Promise<void>;
35
43
  /**
36
44
  * Constructs a new Logger instance with the provided options.
37
45
  * @param options The options for configuring the logger.
@@ -45,6 +53,8 @@ export declare class Logger {
45
53
  * Gets the log level of the logger.
46
54
  */
47
55
  get level(): LogLevels;
56
+ set saveOnFile(saveOnFile: boolean);
57
+ get saveOnFile(): boolean;
48
58
  /**
49
59
  * Sets whether the logger is active or not.
50
60
  */
@@ -93,6 +103,7 @@ export declare class Logger {
93
103
  * @param args The arguments to log.
94
104
  */
95
105
  fatal(...args: any[]): void;
106
+ private __write;
96
107
  /**
97
108
  * The default options for the logger.
98
109
  */
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Logger = exports.LogLevels = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const promises_1 = require("node:fs/promises");
6
+ const node_path_1 = require("node:path");
4
7
  const colors_1 = require("./colors");
5
8
  const utils_1 = require("./utils");
6
9
  var LogLevels;
@@ -19,6 +22,10 @@ class Logger {
19
22
  * The options for configuring the logger.
20
23
  */
21
24
  options;
25
+ static streams = {};
26
+ static saveOnFile;
27
+ static dirname = 'seyfert-logs';
28
+ static createdDir;
22
29
  /**
23
30
  * The custom callback function for logging.
24
31
  */
@@ -34,6 +41,14 @@ class Logger {
34
41
  static customize(cb) {
35
42
  Logger.__callback = cb;
36
43
  }
44
+ static async clearLogs() {
45
+ for (const i of await (0, promises_1.readdir)((0, node_path_1.join)(process.cwd(), Logger.dirname))) {
46
+ if (this.streams[i])
47
+ await new Promise(res => this.streams[i].close(res));
48
+ await (0, promises_1.unlink)((0, node_path_1.join)(process.cwd(), Logger.dirname, i)).catch(() => { });
49
+ delete this.streams[i];
50
+ }
51
+ }
37
52
  /**
38
53
  * Constructs a new Logger instance with the provided options.
39
54
  * @param options The options for configuring the logger.
@@ -53,6 +68,12 @@ class Logger {
53
68
  get level() {
54
69
  return this.options.logLevel;
55
70
  }
71
+ set saveOnFile(saveOnFile) {
72
+ this.options.saveOnFile = saveOnFile;
73
+ }
74
+ get saveOnFile() {
75
+ return this.options.saveOnFile;
76
+ }
56
77
  /**
57
78
  * Sets whether the logger is active or not.
58
79
  */
@@ -104,6 +125,7 @@ class Logger {
104
125
  else {
105
126
  log = Logger.__callback(this, level, args);
106
127
  }
128
+ this.__write(log);
107
129
  return console.log(...log);
108
130
  }
109
131
  /**
@@ -141,6 +163,20 @@ class Logger {
141
163
  fatal(...args) {
142
164
  this.rawLog(LogLevels.Fatal, ...args);
143
165
  }
166
+ __write(log) {
167
+ if (this.saveOnFile || Logger.saveOnFile === 'all' || Logger.saveOnFile?.includes(this.name)) {
168
+ if (!Logger.createdDir && !(0, node_fs_1.existsSync)((0, node_path_1.join)(process.cwd(), Logger.dirname))) {
169
+ Logger.createdDir = true;
170
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)(process.cwd(), Logger.dirname), { recursive: true });
171
+ }
172
+ const date = new Date();
173
+ const name = `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}${this.name}.log`;
174
+ if (!Logger.streams[name]) {
175
+ Logger.streams[name] = (0, node_fs_1.createWriteStream)((0, node_path_1.join)(process.cwd(), Logger.dirname, name));
176
+ }
177
+ Logger.streams[name].write(`${Buffer.from((0, colors_1.stripColor)(log.join(' ')))}\n`);
178
+ }
179
+ }
144
180
  /**
145
181
  * The default options for the logger.
146
182
  */
@@ -148,6 +184,7 @@ class Logger {
148
184
  logLevel: LogLevels.Debug,
149
185
  name: 'seyfert',
150
186
  active: true,
187
+ saveOnFile: false,
151
188
  };
152
189
  /**
153
190
  * A function that returns the input string as is, without any color modification.
@@ -184,6 +221,18 @@ exports.Logger = Logger;
184
221
  * @param data The memory usage data.
185
222
  * @returns The formatted string representing memory usage.
186
223
  */
187
- function formatMemoryUsage(data) {
188
- return `[RAM Usage ${Math.round((data / 1024 / 1024) * 100) / 100} MB]`;
224
+ function formatMemoryUsage(bytes) {
225
+ const gigaBytes = bytes / 1024 ** 3;
226
+ if (gigaBytes >= 1) {
227
+ return `[RAM Usage ${gigaBytes.toFixed(3)} GB]`;
228
+ }
229
+ const megaBytes = bytes / 1024 ** 2;
230
+ if (megaBytes >= 1) {
231
+ return `[RAM Usage ${megaBytes.toFixed(2)} MB]`;
232
+ }
233
+ const kiloBytes = bytes / 1024;
234
+ if (kiloBytes >= 1) {
235
+ return `[RAM Usage ${kiloBytes.toFixed(2)} KB]`;
236
+ }
237
+ return `[RAM Usage ${bytes.toFixed(2)} B]`;
189
238
  }
@@ -5,19 +5,6 @@ import { type ColorResolvable, type Logger, type ObjectToLower, type ObjectToSna
5
5
  * @returns The numeric representation of the color.
6
6
  */
7
7
  export declare function resolveColor(color: ColorResolvable): number;
8
- /**
9
- * Flattens an array to a certain depth.
10
- * @param arr The array to flatten.
11
- * @returns The flattened array.
12
- */
13
- export declare function fastFlat<A extends any[]>(arr: A): FlatArray<A, 1>[];
14
- /**
15
- * Creates a new array with the results of calling a provided function on every element in the array.
16
- * @param arr The array to iterate over.
17
- * @param fn The function that produces an element of the new array.
18
- * @returns A new array with the results of calling the provided function on every element in the array.
19
- */
20
- export declare function fastMap<U, T extends any[]>(arr: T, fn: (value: T[number], index: number, array: T) => U): U[];
21
8
  /**
22
9
  * Delays the resolution of a Promise by the specified time.
23
10
  * @param time The time in milliseconds to delay the resolution.
@@ -105,3 +92,6 @@ export declare const ReplaceRegex: {
105
92
  };
106
93
  export declare function magicImport(path: string): Promise<any>;
107
94
  export type OnFailCallback = (error: unknown) => any;
95
+ export declare function fakePromise<T = unknown | Promise<unknown>>(value: T): {
96
+ then<R>(callback: (arg: Awaited<T>) => R): R;
97
+ };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.magicImport = exports.ReplaceRegex = exports.toCamelCase = exports.toSnakeCase = exports.BaseHandler = exports.filterSplit = exports.MergeOptions = exports.isObject = exports.delay = exports.fastMap = exports.fastFlat = exports.resolveColor = void 0;
3
+ exports.fakePromise = exports.magicImport = exports.ReplaceRegex = exports.toCamelCase = exports.toSnakeCase = exports.BaseHandler = exports.filterSplit = exports.MergeOptions = exports.isObject = exports.delay = exports.resolveColor = void 0;
4
4
  const promises_1 = require("node:fs/promises");
5
5
  const node_path_1 = require("node:path");
6
6
  const promises_2 = require("node:timers/promises");
@@ -32,35 +32,6 @@ function resolveColor(color) {
32
32
  return color;
33
33
  }
34
34
  exports.resolveColor = resolveColor;
35
- /**
36
- * Flattens an array to a certain depth.
37
- * @param arr The array to flatten.
38
- * @returns The flattened array.
39
- */
40
- function fastFlat(arr) {
41
- let newArr = [];
42
- for (const element of arr) {
43
- newArr = newArr.concat(element);
44
- }
45
- return newArr;
46
- }
47
- exports.fastFlat = fastFlat;
48
- /**
49
- * Creates a new array with the results of calling a provided function on every element in the array.
50
- * @param arr The array to iterate over.
51
- * @param fn The function that produces an element of the new array.
52
- * @returns A new array with the results of calling the provided function on every element in the array.
53
- */
54
- function fastMap(arr, fn) {
55
- const newArr = [];
56
- let key = 0;
57
- for (const value of arr) {
58
- newArr.push(fn(value, key, arr));
59
- key++;
60
- }
61
- return newArr;
62
- }
63
- exports.fastMap = fastMap;
64
35
  /**
65
36
  * Delays the resolution of a Promise by the specified time.
66
37
  * @param time The time in milliseconds to delay the resolution.
@@ -273,3 +244,11 @@ async function magicImport(path) {
273
244
  }
274
245
  }
275
246
  exports.magicImport = magicImport;
247
+ function fakePromise(value) {
248
+ if (value instanceof Promise)
249
+ return value;
250
+ return {
251
+ then: callback => callback(value),
252
+ };
253
+ }
254
+ exports.fakePromise = fakePromise;
@@ -1,5 +1,7 @@
1
- import type { RESTPatchAPIChannelJSONBody } from '..';
2
- import { Message } from '../../structures';
1
+ import { type RESTPatchAPIChannelJSONBody } from '..';
2
+ import { Message, type GuildMember, type GuildRole } from '../../structures';
3
+ import { type AllChannels } from '../../structures/channels';
4
+ import { PermissionsBitField } from '../../structures/extra/Permissions';
3
5
  import { BaseShorter } from './base';
4
6
  export declare class ChannelShorter extends BaseShorter {
5
7
  get channels(): {
@@ -9,14 +11,14 @@ export declare class ChannelShorter extends BaseShorter {
9
11
  * @param force Whether to force fetching the channel from the API even if it exists in the cache.
10
12
  * @returns A Promise that resolves to the fetched channel.
11
13
  */
12
- fetch: (id: string, force?: boolean) => Promise<import("../../structures").AllChannels>;
14
+ fetch: (id: string, force?: boolean) => Promise<AllChannels>;
13
15
  /**
14
16
  * Deletes a channel by its ID.
15
17
  * @param id The ID of the channel to delete.
16
18
  * @param optional Optional parameters for the deletion.
17
19
  * @returns A Promise that resolves to the deleted channel.
18
20
  */
19
- delete: (id: string, optional?: ChannelShorterOptionalParams) => Promise<import("../../structures").AllChannels>;
21
+ delete: (id: string, optional?: ChannelShorterOptionalParams) => Promise<AllChannels>;
20
22
  /**
21
23
  * Edits a channel by its ID.
22
24
  * @param id The ID of the channel to edit.
@@ -24,7 +26,7 @@ export declare class ChannelShorter extends BaseShorter {
24
26
  * @param optional Optional parameters for the editing.
25
27
  * @returns A Promise that resolves to the edited channel.
26
28
  */
27
- edit: (id: string, body: RESTPatchAPIChannelJSONBody, optional?: ChannelShorterOptionalParams) => Promise<import("../../structures").AllChannels>;
29
+ edit: (id: string, body: RESTPatchAPIChannelJSONBody, optional?: ChannelShorterOptionalParams) => Promise<AllChannels>;
28
30
  /**
29
31
  * Sends a typing indicator to the channel.
30
32
  * @param id The ID of the channel.
@@ -58,6 +60,30 @@ export declare class ChannelShorter extends BaseShorter {
58
60
  */
59
61
  delete: (messageId: string, channelId: string, reason?: string | undefined) => Promise<never>;
60
62
  };
63
+ overwrites: {
64
+ memberPermissions: (channelId: string, member: GuildMember, checkAdmin?: boolean) => Promise<PermissionsBitField>;
65
+ overwritesFor: (channelId: string, member: GuildMember) => Promise<{
66
+ everyone: {
67
+ type: number;
68
+ id: string;
69
+ deny: PermissionsBitField;
70
+ allow: PermissionsBitField;
71
+ } | undefined;
72
+ roles: {
73
+ type: number;
74
+ id: string;
75
+ deny: PermissionsBitField;
76
+ allow: PermissionsBitField;
77
+ }[];
78
+ member: {
79
+ type: number;
80
+ id: string;
81
+ deny: PermissionsBitField;
82
+ allow: PermissionsBitField;
83
+ } | undefined;
84
+ }>;
85
+ rolePermissions: (channelId: string, role: GuildRole, checkAdmin?: boolean) => Promise<PermissionsBitField>;
86
+ };
61
87
  };
62
88
  get pins(): {
63
89
  /**
@@ -83,6 +109,30 @@ export declare class ChannelShorter extends BaseShorter {
83
109
  */
84
110
  delete: (messageId: string, channelId: string, reason?: string) => Promise<never>;
85
111
  };
112
+ get overwrites(): {
113
+ memberPermissions: (channelId: string, member: GuildMember, checkAdmin?: boolean) => Promise<PermissionsBitField>;
114
+ overwritesFor: (channelId: string, member: GuildMember) => Promise<{
115
+ everyone: {
116
+ type: number;
117
+ id: string;
118
+ deny: PermissionsBitField;
119
+ allow: PermissionsBitField;
120
+ } | undefined;
121
+ roles: {
122
+ type: number;
123
+ id: string;
124
+ deny: PermissionsBitField;
125
+ allow: PermissionsBitField;
126
+ }[];
127
+ member: {
128
+ type: number;
129
+ id: string;
130
+ deny: PermissionsBitField;
131
+ allow: PermissionsBitField;
132
+ } | undefined;
133
+ }>;
134
+ rolePermissions: (channelId: string, role: GuildRole, checkAdmin?: boolean) => Promise<PermissionsBitField>;
135
+ };
86
136
  }
87
137
  export type ChannelShorterOptionalParams = Partial<{
88
138
  guildId: string;
@@ -4,8 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ChannelShorter = void 0;
7
+ const __1 = require("..");
7
8
  const structures_1 = require("../../structures");
8
9
  const channels_1 = __importDefault(require("../../structures/channels"));
10
+ const Permissions_1 = require("../../structures/extra/Permissions");
9
11
  const base_1 = require("./base");
10
12
  class ChannelShorter extends base_1.BaseShorter {
11
13
  get channels() {
@@ -48,6 +50,8 @@ class ChannelShorter extends base_1.BaseShorter {
48
50
  edit: async (id, body, optional = { guildId: '@me' }) => {
49
51
  const res = await this.client.proxy.channels(id).patch({ body, reason: optional.reason });
50
52
  await this.client.cache.channels?.setIfNI(structures_1.BaseChannel.__intent__(optional.guildId), res.id, optional.guildId, res);
53
+ if (body.permission_overwrites && 'permission_overwrites' in res)
54
+ await this.client.cache.overwrites?.setIfNI(structures_1.BaseChannel.__intent__(optional.guildId), res.id, optional.guildId, res.permission_overwrites);
51
55
  return (0, channels_1.default)(res, this.client);
52
56
  },
53
57
  /**
@@ -60,6 +64,7 @@ class ChannelShorter extends base_1.BaseShorter {
60
64
  * Provides access to pinned messages in the channel.
61
65
  */
62
66
  pins: this.pins,
67
+ overwrites: this.overwrites,
63
68
  };
64
69
  }
65
70
  get pins() {
@@ -91,5 +96,59 @@ class ChannelShorter extends base_1.BaseShorter {
91
96
  delete: (messageId, channelId, reason) => this.client.proxy.channels(channelId).pins(messageId).delete({ reason }),
92
97
  };
93
98
  }
99
+ get overwrites() {
100
+ return {
101
+ memberPermissions: async (channelId, member, checkAdmin = true) => {
102
+ const permissions = await member.fetchPermissions();
103
+ if (checkAdmin && permissions.has(__1.PermissionFlagsBits.Administrator)) {
104
+ return new Permissions_1.PermissionsBitField(Permissions_1.PermissionsBitField.All);
105
+ }
106
+ const overwrites = await this.overwrites.overwritesFor(channelId, member);
107
+ permissions.remove(overwrites.everyone?.deny.bits ?? 0n);
108
+ permissions.add(overwrites.everyone?.allow.bits ?? 0n);
109
+ permissions.remove(overwrites.roles.length > 0 ? overwrites.roles.map(role => role.deny.bits) : 0n);
110
+ permissions.add(overwrites.roles.length > 0 ? overwrites.roles.map(role => role.allow.bits) : 0n);
111
+ permissions.remove(overwrites.member?.deny.bits ?? 0n);
112
+ permissions.add(overwrites.member?.allow.bits ?? 0n);
113
+ return permissions;
114
+ },
115
+ overwritesFor: async (channelId, member) => {
116
+ const roleOverwrites = [];
117
+ let memberOverwrites;
118
+ let everyoneOverwrites;
119
+ const channelOverwrites = (await this.client.cache.overwrites?.get(channelId)) ?? [];
120
+ for (const overwrite of channelOverwrites) {
121
+ if (overwrite.id === member.guildId) {
122
+ everyoneOverwrites = overwrite;
123
+ }
124
+ else if (member.roles.values.includes(overwrite.id)) {
125
+ roleOverwrites.push(overwrite);
126
+ }
127
+ else if (overwrite.id === member.id) {
128
+ memberOverwrites = overwrite;
129
+ }
130
+ }
131
+ return {
132
+ everyone: everyoneOverwrites,
133
+ roles: roleOverwrites,
134
+ member: memberOverwrites,
135
+ };
136
+ },
137
+ rolePermissions: async (channelId, role, checkAdmin = true) => {
138
+ if (checkAdmin && role.permissions.has(__1.PermissionFlagsBits.Administrator)) {
139
+ return new Permissions_1.PermissionsBitField(Permissions_1.PermissionsBitField.All);
140
+ }
141
+ const channelOverwrites = (await this.client.cache.overwrites?.get(channelId)) ?? [];
142
+ const everyoneOverwrites = channelOverwrites.find(x => x.id === role.guildId);
143
+ const roleOverwrites = channelOverwrites.find(x => x.id === role.id);
144
+ const permissions = new Permissions_1.PermissionsBitField(role.permissions.bits);
145
+ permissions.remove(everyoneOverwrites?.deny.bits ?? 0n);
146
+ permissions.add(everyoneOverwrites?.allow.bits ?? 0n);
147
+ permissions.remove(roleOverwrites?.deny.bits ?? 0n);
148
+ permissions.add(roleOverwrites?.allow.bits ?? 0n);
149
+ return permissions;
150
+ },
151
+ };
152
+ }
94
153
  }
95
154
  exports.ChannelShorter = ChannelShorter;
@@ -1,6 +1,6 @@
1
- import type { GuildWidgetStyle, RESTPatchAPIAutoModerationRuleJSONBody, RESTPatchAPIChannelJSONBody, RESTPatchAPIGuildChannelPositionsJSONBody, RESTPatchAPIGuildEmojiJSONBody, RESTPatchAPIGuildStickerJSONBody, RESTPostAPIAutoModerationRuleJSONBody, RESTPostAPIGuildChannelJSONBody, RESTPostAPIGuildEmojiJSONBody, RESTPostAPIGuildsJSONBody } from 'discord-api-types/v10';
1
+ import type { GuildWidgetStyle, RESTGetAPICurrentUserGuildsQuery, RESTPatchAPIAutoModerationRuleJSONBody, RESTPatchAPIChannelJSONBody, RESTPatchAPIGuildChannelPositionsJSONBody, RESTPatchAPIGuildEmojiJSONBody, RESTPatchAPIGuildStickerJSONBody, RESTPostAPIAutoModerationRuleJSONBody, RESTPostAPIGuildChannelJSONBody, RESTPostAPIGuildEmojiJSONBody, RESTPostAPIGuildsJSONBody } from 'discord-api-types/v10';
2
2
  import type { ImageResolvable, ObjectToLower, OmitInsert } from '..';
3
- import { Guild, GuildEmoji, Sticker, type CreateStickerBodyRequest } from '../../structures';
3
+ import { AnonymousGuild, Guild, GuildEmoji, GuildMember, Sticker, type CreateStickerBodyRequest } from '../../structures';
4
4
  import { BaseShorter } from './base';
5
5
  export declare class GuildShorter extends BaseShorter {
6
6
  /**
@@ -27,6 +27,9 @@ export declare class GuildShorter extends BaseShorter {
27
27
  * @returns The generated widget URL.
28
28
  */
29
29
  widgetURL: (id: string, style?: GuildWidgetStyle) => Promise<import("discord-api-types/v10").APIGuildWidgetSettings>;
30
+ list: (query?: RESTGetAPICurrentUserGuildsQuery) => Promise<AnonymousGuild[]>;
31
+ fetchSelf: (id: string) => Promise<GuildMember>;
32
+ leave: (id: string) => Promise<void | undefined>;
30
33
  channels: {
31
34
  /**
32
35
  * Retrieves a list of channels in the guild.
@@ -53,6 +53,24 @@ class GuildShorter extends base_1.BaseShorter {
53
53
  }
54
54
  return this.client.proxy.guilds(id).widget.get({ query });
55
55
  },
56
+ list: (query) => {
57
+ return this.client.proxy
58
+ .users('@me')
59
+ .guilds.get({ query })
60
+ .then(guilds => guilds.map(guild => new structures_1.AnonymousGuild(this.client, { ...guild, splash: null })));
61
+ },
62
+ fetchSelf: async (id) => {
63
+ const self = await this.client.proxy.guilds(id).members(this.client.botId).get();
64
+ await this.client.cache.members?.patch(self.user.id, id, self);
65
+ return new structures_1.GuildMember(this.client, self, self.user, id);
66
+ },
67
+ leave: (id) => {
68
+ return this.client.proxy
69
+ .users('@me')
70
+ .guilds(id)
71
+ .delete()
72
+ .then(() => this.client.cache.guilds?.removeIfNI('Guilds', id));
73
+ },
56
74
  channels: this.channels,
57
75
  moderation: this.moderation,
58
76
  stickers: this.stickers,
@@ -18,7 +18,6 @@ class MessageShorter extends base_1.BaseShorter {
18
18
  files: parsedFiles,
19
19
  })
20
20
  .then(message => {
21
- this.client.components.onRequestMessage(body, message);
22
21
  return new structures_1.Message(this.client, message);
23
22
  });
24
23
  },
@@ -32,7 +31,6 @@ class MessageShorter extends base_1.BaseShorter {
32
31
  files: parsedFiles,
33
32
  })
34
33
  .then(message => {
35
- this.client.components.onRequestUpdateMessage(body, message);
36
34
  return new structures_1.Message(this.client, message);
37
35
  });
38
36
  },
@@ -0,0 +1,29 @@
1
+ import type { GuildMember, GuildRole } from '../../structures';
2
+ import { PermissionsBitField } from '../../structures/extra/Permissions';
3
+ import { BaseShorter } from './base';
4
+ export declare class OverwritesShorter extends BaseShorter {
5
+ get overwrites(): {
6
+ memberPermissions: (channelId: string, member: GuildMember, checkAdmin?: boolean) => Promise<PermissionsBitField>;
7
+ overwritesFor: (channelId: string, member: GuildMember) => Promise<{
8
+ everyone: {
9
+ type: number;
10
+ id: string;
11
+ deny: PermissionsBitField;
12
+ allow: PermissionsBitField;
13
+ } | undefined;
14
+ roles: {
15
+ type: number;
16
+ id: string;
17
+ deny: PermissionsBitField;
18
+ allow: PermissionsBitField;
19
+ }[];
20
+ member: {
21
+ type: number;
22
+ id: string;
23
+ deny: PermissionsBitField;
24
+ allow: PermissionsBitField;
25
+ } | undefined;
26
+ }>;
27
+ rolePermissions: (channelId: string, role: GuildRole, checkAdmin?: boolean) => Promise<PermissionsBitField>;
28
+ };
29
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OverwritesShorter = void 0;
4
+ const v10_1 = require("discord-api-types/v10");
5
+ const Permissions_1 = require("../../structures/extra/Permissions");
6
+ const base_1 = require("./base");
7
+ class OverwritesShorter extends base_1.BaseShorter {
8
+ get overwrites() {
9
+ return {
10
+ memberPermissions: async (channelId, member, checkAdmin = true) => {
11
+ const permissions = await member.fetchPermissions();
12
+ if (checkAdmin && permissions.has(v10_1.PermissionFlagsBits.Administrator)) {
13
+ return new Permissions_1.PermissionsBitField(Permissions_1.PermissionsBitField.All);
14
+ }
15
+ const overwrites = await this.overwrites.overwritesFor(channelId, member);
16
+ permissions.remove(overwrites.everyone?.deny.bits ?? 0n);
17
+ permissions.add(overwrites.everyone?.allow.bits ?? 0n);
18
+ permissions.remove(overwrites.roles.length > 0 ? overwrites.roles.map(role => role.deny.bits) : 0n);
19
+ permissions.add(overwrites.roles.length > 0 ? overwrites.roles.map(role => role.allow.bits) : 0n);
20
+ permissions.remove(overwrites.member?.deny.bits ?? 0n);
21
+ permissions.add(overwrites.member?.allow.bits ?? 0n);
22
+ return permissions;
23
+ },
24
+ overwritesFor: async (channelId, member) => {
25
+ const roleOverwrites = [];
26
+ let memberOverwrites;
27
+ let everyoneOverwrites;
28
+ const channelOverwrites = await this.client.cache.overwrites?.get(channelId) ?? [];
29
+ for (const overwrite of channelOverwrites) {
30
+ if (overwrite.id === member.guildId) {
31
+ everyoneOverwrites = overwrite;
32
+ }
33
+ else if (member.roles.values.includes(overwrite.id)) {
34
+ roleOverwrites.push(overwrite);
35
+ }
36
+ else if (overwrite.id === member.id) {
37
+ memberOverwrites = overwrite;
38
+ }
39
+ }
40
+ return {
41
+ everyone: everyoneOverwrites,
42
+ roles: roleOverwrites,
43
+ member: memberOverwrites,
44
+ };
45
+ },
46
+ rolePermissions: async (channelId, role, checkAdmin = true) => {
47
+ if (checkAdmin && role.permissions.has(v10_1.PermissionFlagsBits.Administrator)) {
48
+ return new Permissions_1.PermissionsBitField(Permissions_1.PermissionsBitField.All);
49
+ }
50
+ const channelOverwrites = await this.client.cache.overwrites?.get(channelId) ?? [];
51
+ const everyoneOverwrites = channelOverwrites.find(x => x.id === role.guildId);
52
+ const roleOverwrites = channelOverwrites.find(x => x.id === role.id);
53
+ const permissions = new Permissions_1.PermissionsBitField(role.permissions.bits);
54
+ permissions.remove(everyoneOverwrites?.deny.bits ?? 0n);
55
+ permissions.add(everyoneOverwrites?.allow.bits ?? 0n);
56
+ permissions.remove(roleOverwrites?.deny.bits ?? 0n);
57
+ permissions.add(roleOverwrites?.allow.bits ?? 0n);
58
+ return permissions;
59
+ },
60
+ };
61
+ }
62
+ }
63
+ exports.OverwritesShorter = OverwritesShorter;
@@ -13,9 +13,9 @@ class RoleShorter extends base_1.BaseShorter {
13
13
  list: async (guildId, force = false) => {
14
14
  let roles = [];
15
15
  if (!force) {
16
- roles = (await this.client.cache.roles?.values(guildId)) ?? [];
17
- if (roles.length) {
18
- return roles.map(r => new structures_1.GuildRole(this.client, r, guildId));
16
+ const cachedRoles = (await this.client.cache.roles?.values(guildId)) ?? [];
17
+ if (cachedRoles.length) {
18
+ return cachedRoles;
19
19
  }
20
20
  }
21
21
  roles = await this.client.proxy.guilds(guildId).roles.get();
@@ -8,11 +8,11 @@ export declare class WebhookShorter extends BaseShorter {
8
8
  fetch: (webhookId: string, token?: string) => Promise<Webhook>;
9
9
  messages: {
10
10
  write: (webhookId: string, token: string, { body: data, ...payload }: {
11
- body: Omit<RESTPostAPIWebhookWithTokenJSONBody, "embeds" | "components"> & import("..").ResolverProps;
11
+ body: Omit<RESTPostAPIWebhookWithTokenJSONBody, "components" | "embeds"> & import("..").ResolverProps;
12
12
  query?: import("discord-api-types/rest/v10/webhook").RESTPostAPIWebhookWithTokenQuery | undefined;
13
13
  }) => Promise<WebhookMessage | null>;
14
14
  edit: (webhookId: string, token: string, { messageId, body: data, ...json }: {
15
- body: Omit<import("discord-api-types/rest/v10/webhook").RESTPatchAPIWebhookWithTokenMessageJSONBody, "embeds" | "components"> & import("..").ResolverProps;
15
+ body: Omit<import("discord-api-types/rest/v10/webhook").RESTPatchAPIWebhookWithTokenMessageJSONBody, "components" | "embeds"> & import("..").ResolverProps;
16
16
  messageId: string;
17
17
  query?: import("discord-api-types/rest/v10/webhook").RESTGetAPIWebhookWithTokenMessageQuery | undefined;
18
18
  }) => Promise<WebhookMessage>;
@@ -3,7 +3,7 @@ export type ToClass<T, This> = new (...args: any[]) => {
3
3
  [K in keyof T]: T[K] extends (...args: any[]) => any ? ReturnType<T[K]> extends Promise<T> ? (...args: Parameters<T[K]>) => Promise<This> : ReturnType<T[K]> extends T ? (...args: Parameters<T[K]>) => This : T[K] : T[K];
4
4
  };
5
5
  export type StringToNumber<T extends string> = T extends `${infer N extends number}` ? N : never;
6
- export type MakePartial<T, K extends keyof T> = T & {
6
+ export type MakePartial<T, K extends keyof T> = Omit<T, K> & {
7
7
  [P in K]?: T[P];
8
8
  };
9
9
  export type DeepPartial<T> = {
@@ -40,7 +40,7 @@ export type PickPartial<T, K extends keyof T> = {
40
40
  } & {
41
41
  [P in K]: T[P];
42
42
  };
43
- export type MakeRequired<T, K extends keyof T> = T & {
43
+ export type MakeRequired<T, K extends keyof T = keyof T> = T & {
44
44
  [P in K]-?: NonFalsy<T[P]>;
45
45
  };
46
46
  export type NonFalsy<T> = T extends false | 0 | '' | null | undefined | 0n ? never : T;
@@ -87,4 +87,5 @@ export type PartialClass<T> = PartialAvoid<Function, T>;
87
87
  export type AtLeastOne<T, U = {
88
88
  [K in keyof T]: Pick<T, K>;
89
89
  }> = Partial<T> & U[keyof U];
90
+ export type FlatObjectKeys<T extends Record<string, any>, Key = keyof T> = Key extends string ? T[Key] extends Record<string, unknown> ? `${Key}.${FlatObjectKeys<T[Key]>}` : T[Key] extends string ? `${Key}` : never : never;
90
91
  export {};