@velliajs/discord 1.0.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 (317) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +133 -0
  3. package/package.json +82 -0
  4. package/src/client/BaseClient.js +83 -0
  5. package/src/client/Client.js +591 -0
  6. package/src/client/WebhookClient.js +103 -0
  7. package/src/client/actions/Action.js +119 -0
  8. package/src/client/actions/ActionsManager.js +79 -0
  9. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  10. package/src/client/actions/AutoModerationActionExecution.js +26 -0
  11. package/src/client/actions/AutoModerationRuleCreate.js +27 -0
  12. package/src/client/actions/AutoModerationRuleDelete.js +31 -0
  13. package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
  14. package/src/client/actions/ChannelCreate.js +23 -0
  15. package/src/client/actions/ChannelDelete.js +23 -0
  16. package/src/client/actions/ChannelUpdate.js +33 -0
  17. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  18. package/src/client/actions/GuildBanAdd.js +20 -0
  19. package/src/client/actions/GuildBanRemove.js +25 -0
  20. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  21. package/src/client/actions/GuildDelete.js +44 -0
  22. package/src/client/actions/GuildEmojiCreate.js +20 -0
  23. package/src/client/actions/GuildEmojiDelete.js +19 -0
  24. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  25. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  26. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  27. package/src/client/actions/GuildMemberRemove.js +31 -0
  28. package/src/client/actions/GuildMemberUpdate.js +44 -0
  29. package/src/client/actions/GuildRoleCreate.js +25 -0
  30. package/src/client/actions/GuildRoleDelete.js +29 -0
  31. package/src/client/actions/GuildRoleUpdate.js +39 -0
  32. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  33. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  34. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  35. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  36. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  37. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  38. package/src/client/actions/GuildStickerCreate.js +20 -0
  39. package/src/client/actions/GuildStickerDelete.js +19 -0
  40. package/src/client/actions/GuildStickerUpdate.js +20 -0
  41. package/src/client/actions/GuildStickersUpdate.js +34 -0
  42. package/src/client/actions/GuildUpdate.js +33 -0
  43. package/src/client/actions/InteractionCreate.js +101 -0
  44. package/src/client/actions/InviteCreate.js +28 -0
  45. package/src/client/actions/InviteDelete.js +30 -0
  46. package/src/client/actions/MessageCreate.js +37 -0
  47. package/src/client/actions/MessageDelete.js +32 -0
  48. package/src/client/actions/MessageDeleteBulk.js +47 -0
  49. package/src/client/actions/MessageReactionAdd.js +55 -0
  50. package/src/client/actions/MessageReactionRemove.js +45 -0
  51. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  52. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  53. package/src/client/actions/MessageUpdate.js +26 -0
  54. package/src/client/actions/PresenceUpdate.js +42 -0
  55. package/src/client/actions/StageInstanceCreate.js +28 -0
  56. package/src/client/actions/StageInstanceDelete.js +31 -0
  57. package/src/client/actions/StageInstanceUpdate.js +30 -0
  58. package/src/client/actions/ThreadCreate.js +24 -0
  59. package/src/client/actions/ThreadDelete.js +26 -0
  60. package/src/client/actions/ThreadListSync.js +60 -0
  61. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  62. package/src/client/actions/ThreadMembersUpdate.js +47 -0
  63. package/src/client/actions/TypingStart.js +29 -0
  64. package/src/client/actions/UserUpdate.js +36 -0
  65. package/src/client/actions/VoiceStateUpdate.js +43 -0
  66. package/src/client/actions/WebhooksUpdate.js +20 -0
  67. package/src/client/voice/ClientVoiceManager.js +44 -0
  68. package/src/client/websocket/WebSocketManager.js +393 -0
  69. package/src/client/websocket/WebSocketShard.js +231 -0
  70. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  71. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  72. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  73. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  74. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  75. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  76. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  77. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  78. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  79. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  80. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  81. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  82. package/src/client/websocket/handlers/GUILD_CREATE.js +26 -0
  83. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  84. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  85. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  86. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  87. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  88. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  89. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  90. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  91. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  92. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  93. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  94. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  95. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  97. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  98. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  99. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  100. package/src/client/websocket/handlers/INTERACTION_CREATE.js +5 -0
  101. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  102. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  103. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  104. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  105. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  106. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  107. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  108. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  109. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  110. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  111. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/READY.js +27 -0
  113. package/src/client/websocket/handlers/RESUMED.js +14 -0
  114. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  115. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  116. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  118. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  119. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  120. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  121. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  122. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  123. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  124. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  125. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  126. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  128. package/src/client/websocket/handlers/index.js +64 -0
  129. package/src/errors/DJSError.js +48 -0
  130. package/src/errors/ErrorCodes.js +319 -0
  131. package/src/errors/Messages.js +170 -0
  132. package/src/errors/index.js +5 -0
  133. package/src/index.js +213 -0
  134. package/src/managers/ApplicationCommandManager.js +263 -0
  135. package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
  136. package/src/managers/AutoModerationRuleManager.js +288 -0
  137. package/src/managers/BaseGuildEmojiManager.js +80 -0
  138. package/src/managers/BaseManager.js +19 -0
  139. package/src/managers/CachedManager.js +57 -0
  140. package/src/managers/CategoryChannelChildManager.js +77 -0
  141. package/src/managers/ChannelManager.js +128 -0
  142. package/src/managers/DataManager.js +61 -0
  143. package/src/managers/GuildApplicationCommandManager.js +28 -0
  144. package/src/managers/GuildBanManager.js +204 -0
  145. package/src/managers/GuildChannelManager.js +494 -0
  146. package/src/managers/GuildEmojiManager.js +174 -0
  147. package/src/managers/GuildEmojiRoleManager.js +118 -0
  148. package/src/managers/GuildForumThreadManager.js +83 -0
  149. package/src/managers/GuildInviteManager.js +213 -0
  150. package/src/managers/GuildManager.js +283 -0
  151. package/src/managers/GuildMemberManager.js +540 -0
  152. package/src/managers/GuildMemberRoleManager.js +204 -0
  153. package/src/managers/GuildScheduledEventManager.js +297 -0
  154. package/src/managers/GuildStickerManager.js +182 -0
  155. package/src/managers/GuildTextThreadManager.js +91 -0
  156. package/src/managers/MessageManager.js +259 -0
  157. package/src/managers/PermissionOverwriteManager.js +168 -0
  158. package/src/managers/PresenceManager.js +58 -0
  159. package/src/managers/ReactionManager.js +68 -0
  160. package/src/managers/ReactionUserManager.js +77 -0
  161. package/src/managers/RoleManager.js +360 -0
  162. package/src/managers/StageInstanceManager.js +154 -0
  163. package/src/managers/ThreadManager.js +204 -0
  164. package/src/managers/ThreadMemberManager.js +182 -0
  165. package/src/managers/UserManager.js +139 -0
  166. package/src/managers/VoiceStateManager.js +37 -0
  167. package/src/sharding/Shard.js +457 -0
  168. package/src/sharding/ShardClientUtil.js +285 -0
  169. package/src/sharding/ShardingManager.js +326 -0
  170. package/src/structures/ActionRow.js +46 -0
  171. package/src/structures/ActionRowBuilder.js +35 -0
  172. package/src/structures/AnonymousGuild.js +97 -0
  173. package/src/structures/ApplicationCommand.js +606 -0
  174. package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
  175. package/src/structures/Attachment.js +140 -0
  176. package/src/structures/AttachmentBuilder.js +116 -0
  177. package/src/structures/AutoModerationActionExecution.js +116 -0
  178. package/src/structures/AutoModerationRule.js +284 -0
  179. package/src/structures/AutocompleteInteraction.js +97 -0
  180. package/src/structures/Base.js +43 -0
  181. package/src/structures/BaseChannel.js +160 -0
  182. package/src/structures/BaseGuild.js +119 -0
  183. package/src/structures/BaseGuildEmoji.js +56 -0
  184. package/src/structures/BaseGuildTextChannel.js +186 -0
  185. package/src/structures/BaseGuildVoiceChannel.js +234 -0
  186. package/src/structures/BaseInteraction.js +344 -0
  187. package/src/structures/BaseSelectMenuComponent.js +56 -0
  188. package/src/structures/ButtonBuilder.js +44 -0
  189. package/src/structures/ButtonComponent.js +65 -0
  190. package/src/structures/ButtonInteraction.js +11 -0
  191. package/src/structures/CategoryChannel.js +45 -0
  192. package/src/structures/ChannelSelectMenuBuilder.js +31 -0
  193. package/src/structures/ChannelSelectMenuComponent.js +20 -0
  194. package/src/structures/ChannelSelectMenuInteraction.js +33 -0
  195. package/src/structures/ChatInputCommandInteraction.js +41 -0
  196. package/src/structures/ClientApplication.js +193 -0
  197. package/src/structures/ClientPresence.js +82 -0
  198. package/src/structures/ClientUser.js +185 -0
  199. package/src/structures/CommandInteraction.js +224 -0
  200. package/src/structures/CommandInteractionOptionResolver.js +308 -0
  201. package/src/structures/Component.js +47 -0
  202. package/src/structures/ContextMenuCommandInteraction.js +64 -0
  203. package/src/structures/DMChannel.js +129 -0
  204. package/src/structures/DirectoryChannel.js +36 -0
  205. package/src/structures/Embed.js +220 -0
  206. package/src/structures/EmbedBuilder.js +41 -0
  207. package/src/structures/Emoji.js +108 -0
  208. package/src/structures/ForumChannel.js +264 -0
  209. package/src/structures/Guild.js +1361 -0
  210. package/src/structures/GuildAuditLogs.js +91 -0
  211. package/src/structures/GuildAuditLogsEntry.js +527 -0
  212. package/src/structures/GuildBan.js +59 -0
  213. package/src/structures/GuildChannel.js +457 -0
  214. package/src/structures/GuildEmoji.js +148 -0
  215. package/src/structures/GuildMember.js +518 -0
  216. package/src/structures/GuildPreview.js +193 -0
  217. package/src/structures/GuildPreviewEmoji.js +27 -0
  218. package/src/structures/GuildScheduledEvent.js +439 -0
  219. package/src/structures/GuildTemplate.js +241 -0
  220. package/src/structures/Integration.js +220 -0
  221. package/src/structures/IntegrationApplication.js +85 -0
  222. package/src/structures/InteractionCollector.js +263 -0
  223. package/src/structures/InteractionResponse.js +102 -0
  224. package/src/structures/InteractionWebhook.js +59 -0
  225. package/src/structures/Invite.js +322 -0
  226. package/src/structures/InviteGuild.js +22 -0
  227. package/src/structures/InviteStageInstance.js +87 -0
  228. package/src/structures/MentionableSelectMenuBuilder.js +32 -0
  229. package/src/structures/MentionableSelectMenuComponent.js +11 -0
  230. package/src/structures/MentionableSelectMenuInteraction.js +71 -0
  231. package/src/structures/Message.js +997 -0
  232. package/src/structures/MessageCollector.js +146 -0
  233. package/src/structures/MessageComponentInteraction.js +107 -0
  234. package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
  235. package/src/structures/MessageMentions.js +297 -0
  236. package/src/structures/MessagePayload.js +299 -0
  237. package/src/structures/MessageReaction.js +142 -0
  238. package/src/structures/ModalBuilder.js +34 -0
  239. package/src/structures/ModalSubmitFields.js +55 -0
  240. package/src/structures/ModalSubmitInteraction.js +121 -0
  241. package/src/structures/NewsChannel.js +32 -0
  242. package/src/structures/OAuth2Guild.js +28 -0
  243. package/src/structures/PartialGroupDMChannel.js +60 -0
  244. package/src/structures/PermissionOverwrites.js +196 -0
  245. package/src/structures/Presence.js +372 -0
  246. package/src/structures/ReactionCollector.js +229 -0
  247. package/src/structures/ReactionEmoji.js +31 -0
  248. package/src/structures/Role.js +458 -0
  249. package/src/structures/RoleSelectMenuBuilder.js +31 -0
  250. package/src/structures/RoleSelectMenuComponent.js +11 -0
  251. package/src/structures/RoleSelectMenuInteraction.js +33 -0
  252. package/src/structures/SelectMenuBuilder.js +26 -0
  253. package/src/structures/SelectMenuComponent.js +26 -0
  254. package/src/structures/SelectMenuInteraction.js +26 -0
  255. package/src/structures/SelectMenuOptionBuilder.js +26 -0
  256. package/src/structures/StageChannel.js +112 -0
  257. package/src/structures/StageInstance.js +167 -0
  258. package/src/structures/Sticker.js +272 -0
  259. package/src/structures/StickerPack.js +95 -0
  260. package/src/structures/StringSelectMenuBuilder.js +79 -0
  261. package/src/structures/StringSelectMenuComponent.js +20 -0
  262. package/src/structures/StringSelectMenuInteraction.js +21 -0
  263. package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
  264. package/src/structures/Team.js +117 -0
  265. package/src/structures/TeamMember.js +70 -0
  266. package/src/structures/TextChannel.js +33 -0
  267. package/src/structures/TextInputBuilder.js +31 -0
  268. package/src/structures/TextInputComponent.js +29 -0
  269. package/src/structures/ThreadChannel.js +606 -0
  270. package/src/structures/ThreadMember.js +113 -0
  271. package/src/structures/Typing.js +74 -0
  272. package/src/structures/User.js +331 -0
  273. package/src/structures/UserContextMenuCommandInteraction.js +29 -0
  274. package/src/structures/UserSelectMenuBuilder.js +31 -0
  275. package/src/structures/UserSelectMenuComponent.js +11 -0
  276. package/src/structures/UserSelectMenuInteraction.js +51 -0
  277. package/src/structures/VoiceChannel.js +96 -0
  278. package/src/structures/VoiceRegion.js +46 -0
  279. package/src/structures/VoiceState.js +303 -0
  280. package/src/structures/Webhook.js +481 -0
  281. package/src/structures/WelcomeChannel.js +60 -0
  282. package/src/structures/WelcomeScreen.js +49 -0
  283. package/src/structures/Widget.js +88 -0
  284. package/src/structures/WidgetMember.js +99 -0
  285. package/src/structures/interfaces/Application.js +108 -0
  286. package/src/structures/interfaces/Collector.js +335 -0
  287. package/src/structures/interfaces/InteractionResponses.js +320 -0
  288. package/src/structures/interfaces/TextBasedChannel.js +413 -0
  289. package/src/util/APITypes.js +456 -0
  290. package/src/util/ActivityFlagsBitField.js +26 -0
  291. package/src/util/ApplicationFlagsBitField.js +26 -0
  292. package/src/util/BitField.js +176 -0
  293. package/src/util/ChannelFlagsBitField.js +41 -0
  294. package/src/util/Channels.js +150 -0
  295. package/src/util/Colors.js +73 -0
  296. package/src/util/Components.js +152 -0
  297. package/src/util/Constants.js +230 -0
  298. package/src/util/DataResolver.js +140 -0
  299. package/src/util/Enums.js +13 -0
  300. package/src/util/Events.js +160 -0
  301. package/src/util/Formatters.js +413 -0
  302. package/src/util/GuildMemberFlagsBitField.js +41 -0
  303. package/src/util/IntentsBitField.js +34 -0
  304. package/src/util/LimitedCollection.js +68 -0
  305. package/src/util/MessageFlagsBitField.js +32 -0
  306. package/src/util/Options.js +216 -0
  307. package/src/util/Partials.js +44 -0
  308. package/src/util/PermissionsBitField.js +104 -0
  309. package/src/util/ShardEvents.js +27 -0
  310. package/src/util/Status.js +33 -0
  311. package/src/util/Sweepers.js +467 -0
  312. package/src/util/SystemChannelFlagsBitField.js +43 -0
  313. package/src/util/ThreadMemberFlagsBitField.js +31 -0
  314. package/src/util/Transformers.js +36 -0
  315. package/src/util/UserFlagsBitField.js +32 -0
  316. package/src/util/Util.js +394 -0
  317. package/src/util/WebSocketShardEvents.js +25 -0
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ const BaseManager = require('./BaseManager');
4
+ const { DiscordjsError, ErrorCodes } = require('../errors');
5
+
6
+ /**
7
+ * Manages the API methods of a data model along with a collection of instances.
8
+ * @extends {BaseManager}
9
+ * @abstract
10
+ */
11
+ class DataManager extends BaseManager {
12
+ constructor(client, holds) {
13
+ super(client);
14
+
15
+ /**
16
+ * The data structure belonging to this manager.
17
+ * @name DataManager#holds
18
+ * @type {Function}
19
+ * @private
20
+ * @readonly
21
+ */
22
+ Object.defineProperty(this, 'holds', { value: holds });
23
+ }
24
+
25
+ /**
26
+ * The cache of items for this manager.
27
+ * @type {Collection}
28
+ * @abstract
29
+ */
30
+ get cache() {
31
+ throw new DiscordjsError(ErrorCodes.NotImplemented, 'get cache', this.constructor.name);
32
+ }
33
+
34
+ /**
35
+ * Resolves a data entry to a data Object.
36
+ * @param {string|Object} idOrInstance The id or instance of something in this Manager
37
+ * @returns {?Object} An instance from this Manager
38
+ */
39
+ resolve(idOrInstance) {
40
+ if (idOrInstance instanceof this.holds) return idOrInstance;
41
+ if (typeof idOrInstance === 'string') return this.cache.get(idOrInstance) ?? null;
42
+ return null;
43
+ }
44
+
45
+ /**
46
+ * Resolves a data entry to an instance id.
47
+ * @param {string|Object} idOrInstance The id or instance of something in this Manager
48
+ * @returns {?Snowflake}
49
+ */
50
+ resolveId(idOrInstance) {
51
+ if (idOrInstance instanceof this.holds) return idOrInstance.id;
52
+ if (typeof idOrInstance === 'string') return idOrInstance;
53
+ return null;
54
+ }
55
+
56
+ valueOf() {
57
+ return this.cache;
58
+ }
59
+ }
60
+
61
+ module.exports = DataManager;
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const ApplicationCommandManager = require('./ApplicationCommandManager');
4
+ const ApplicationCommandPermissionsManager = require('./ApplicationCommandPermissionsManager');
5
+
6
+ /**
7
+ * An extension for guild-specific application commands.
8
+ * @extends {ApplicationCommandManager}
9
+ */
10
+ class GuildApplicationCommandManager extends ApplicationCommandManager {
11
+ constructor(guild, iterable) {
12
+ super(guild.client, iterable);
13
+
14
+ /**
15
+ * The guild that this manager belongs to
16
+ * @type {Guild}
17
+ */
18
+ this.guild = guild;
19
+
20
+ /**
21
+ * The manager for permissions of arbitrary commands on this guild
22
+ * @type {ApplicationCommandPermissionsManager}
23
+ */
24
+ this.permissions = new ApplicationCommandPermissionsManager(this);
25
+ }
26
+ }
27
+
28
+ module.exports = GuildApplicationCommandManager;
@@ -0,0 +1,204 @@
1
+ 'use strict';
2
+
3
+ const process = require('node:process');
4
+ const { Collection } = require('@discordjs/collection');
5
+ const { makeURLSearchParams } = require('@discordjs/rest');
6
+ const { Routes } = require('discord-api-types/v10');
7
+ const CachedManager = require('./CachedManager');
8
+ const { DiscordjsTypeError, DiscordjsError, ErrorCodes } = require('../errors');
9
+ const GuildBan = require('../structures/GuildBan');
10
+ const { GuildMember } = require('../structures/GuildMember');
11
+
12
+ let deprecationEmittedForDeleteMessageDays = false;
13
+
14
+ /**
15
+ * Manages API methods for guild bans and stores their cache.
16
+ * @extends {CachedManager}
17
+ */
18
+ class GuildBanManager extends CachedManager {
19
+ constructor(guild, iterable) {
20
+ super(guild.client, GuildBan, iterable);
21
+
22
+ /**
23
+ * The guild this Manager belongs to
24
+ * @type {Guild}
25
+ */
26
+ this.guild = guild;
27
+ }
28
+
29
+ /**
30
+ * The cache of this Manager
31
+ * @type {Collection<Snowflake, GuildBan>}
32
+ * @name GuildBanManager#cache
33
+ */
34
+
35
+ _add(data, cache) {
36
+ return super._add(data, cache, { id: data.user.id, extras: [this.guild] });
37
+ }
38
+
39
+ /**
40
+ * Data that resolves to give a GuildBan object. This can be:
41
+ * * A GuildBan object
42
+ * * A User resolvable
43
+ * @typedef {GuildBan|UserResolvable} GuildBanResolvable
44
+ */
45
+
46
+ /**
47
+ * Resolves a GuildBanResolvable to a GuildBan object.
48
+ * @param {GuildBanResolvable} ban The ban that is in the guild
49
+ * @returns {?GuildBan}
50
+ */
51
+ resolve(ban) {
52
+ return super.resolve(ban) ?? super.resolve(this.client.users.resolveId(ban));
53
+ }
54
+
55
+ /**
56
+ * Options used to fetch a single ban from a guild.
57
+ * @typedef {BaseFetchOptions} FetchBanOptions
58
+ * @property {UserResolvable} user The ban to fetch
59
+ */
60
+
61
+ /**
62
+ * Options used to fetch multiple bans from a guild.
63
+ * @typedef {Object} FetchBansOptions
64
+ * @property {number} [limit] The maximum number of bans to return
65
+ * @property {Snowflake} [before] Consider only bans before this id
66
+ * @property {Snowflake} [after] Consider only bans after this id
67
+ * @property {boolean} [cache] Whether to cache the fetched bans
68
+ */
69
+
70
+ /**
71
+ * Fetches ban(s) from Discord.
72
+ * @param {UserResolvable|FetchBanOptions|FetchBansOptions} [options] Options for fetching guild ban(s)
73
+ * @returns {Promise<GuildBan|Collection<Snowflake, GuildBan>>}
74
+ * @example
75
+ * // Fetch multiple bans from a guild
76
+ * guild.bans.fetch()
77
+ * .then(console.log)
78
+ * .catch(console.error);
79
+ * @example
80
+ * // Fetch a maximum of 5 bans from a guild without caching
81
+ * guild.bans.fetch({ limit: 5, cache: false })
82
+ * .then(console.log)
83
+ * .catch(console.error);
84
+ * @example
85
+ * // Fetch a single ban
86
+ * guild.bans.fetch('351871113346809860')
87
+ * .then(console.log)
88
+ * .catch(console.error);
89
+ * @example
90
+ * // Fetch a single ban without checking cache
91
+ * guild.bans.fetch({ user, force: true })
92
+ * .then(console.log)
93
+ * .catch(console.error)
94
+ * @example
95
+ * // Fetch a single ban without caching
96
+ * guild.bans.fetch({ user, cache: false })
97
+ * .then(console.log)
98
+ * .catch(console.error);
99
+ */
100
+ fetch(options) {
101
+ if (!options) return this._fetchMany();
102
+ const { user, cache, force, limit, before, after } = options;
103
+ const resolvedUser = this.client.users.resolveId(user ?? options);
104
+ if (resolvedUser) return this._fetchSingle({ user: resolvedUser, cache, force });
105
+
106
+ if (!before && !after && !limit && cache === undefined) {
107
+ return Promise.reject(new DiscordjsError(ErrorCodes.FetchBanResolveId));
108
+ }
109
+
110
+ return this._fetchMany(options);
111
+ }
112
+
113
+ async _fetchSingle({ user, cache, force = false }) {
114
+ if (!force) {
115
+ const existing = this.cache.get(user);
116
+ if (existing && !existing.partial) return existing;
117
+ }
118
+
119
+ const data = await this.client.rest.get(Routes.guildBan(this.guild.id, user));
120
+ return this._add(data, cache);
121
+ }
122
+
123
+ async _fetchMany(options = {}) {
124
+ const data = await this.client.rest.get(Routes.guildBans(this.guild.id), {
125
+ query: makeURLSearchParams(options),
126
+ });
127
+
128
+ return data.reduce((col, ban) => col.set(ban.user.id, this._add(ban, options.cache)), new Collection());
129
+ }
130
+
131
+ /**
132
+ * Options used to ban a user from a guild.
133
+ * @typedef {Object} BanOptions
134
+ * @property {number} [deleteMessageDays] Number of days of messages to delete, must be between 0 and 7, inclusive
135
+ * <warn>This property is deprecated. Use `deleteMessageSeconds` instead.</warn>
136
+ * @property {number} [deleteMessageSeconds] Number of seconds of messages to delete,
137
+ * must be between 0 and 604800 (7 days), inclusive
138
+ * @property {string} [reason] The reason for the ban
139
+ */
140
+
141
+ /**
142
+ * Bans a user from the guild.
143
+ * @param {UserResolvable} user The user to ban
144
+ * @param {BanOptions} [options] Options for the ban
145
+ * @returns {Promise<GuildMember|User|Snowflake>} Result object will be resolved as specifically as possible.
146
+ * If the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot
147
+ * be resolved, the user id will be the result.
148
+ * @example
149
+ * // Ban a user by id (or with a user/guild member object)
150
+ * guild.bans.create('84484653687267328')
151
+ * .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))
152
+ * .catch(console.error);
153
+ */
154
+ async create(user, options = {}) {
155
+ if (typeof options !== 'object') throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'options', 'object', true);
156
+ const id = this.client.users.resolveId(user);
157
+ if (!id) throw new DiscordjsError(ErrorCodes.BanResolveId, true);
158
+
159
+ if (options.deleteMessageDays !== undefined && !deprecationEmittedForDeleteMessageDays) {
160
+ process.emitWarning(
161
+ // eslint-disable-next-line max-len
162
+ 'The deleteMessageDays option for GuildBanManager#create() is deprecated. Use the deleteMessageSeconds option instead.',
163
+ 'DeprecationWarning',
164
+ );
165
+
166
+ deprecationEmittedForDeleteMessageDays = true;
167
+ }
168
+
169
+ await this.client.rest.put(Routes.guildBan(this.guild.id, id), {
170
+ body: {
171
+ delete_message_seconds:
172
+ options.deleteMessageSeconds ??
173
+ (options.deleteMessageDays ? options.deleteMessageDays * 24 * 60 * 60 : undefined),
174
+ },
175
+ reason: options.reason,
176
+ });
177
+ if (user instanceof GuildMember) return user;
178
+ const _user = this.client.users.resolve(id);
179
+ if (_user) {
180
+ return this.guild.members.resolve(_user) ?? _user;
181
+ }
182
+ return id;
183
+ }
184
+
185
+ /**
186
+ * Unbans a user from the guild.
187
+ * @param {UserResolvable} user The user to unban
188
+ * @param {string} [reason] Reason for unbanning user
189
+ * @returns {Promise<?User>}
190
+ * @example
191
+ * // Unban a user by id (or with a user/guild member object)
192
+ * guild.bans.remove('84484653687267328')
193
+ * .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))
194
+ * .catch(console.error);
195
+ */
196
+ async remove(user, reason) {
197
+ const id = this.client.users.resolveId(user);
198
+ if (!id) throw new DiscordjsError(ErrorCodes.BanResolveId);
199
+ await this.client.rest.delete(Routes.guildBan(this.guild.id, id), { reason });
200
+ return this.client.users.resolve(user);
201
+ }
202
+ }
203
+
204
+ module.exports = GuildBanManager;