@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,288 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const { Routes } = require('discord-api-types/v10');
5
+ const CachedManager = require('./CachedManager');
6
+ const AutoModerationRule = require('../structures/AutoModerationRule');
7
+
8
+ /**
9
+ * Manages API methods for auto moderation rules and stores their cache.
10
+ * @extends {CachedManager}
11
+ */
12
+ class AutoModerationRuleManager extends CachedManager {
13
+ constructor(guild, iterable) {
14
+ super(guild.client, AutoModerationRule, iterable);
15
+
16
+ /**
17
+ * The guild this manager belongs to.
18
+ * @type {Guild}
19
+ */
20
+ this.guild = guild;
21
+ }
22
+
23
+ /**
24
+ * The cache of this manager
25
+ * @type {Collection<Snowflake, AutoModerationRule>}
26
+ * @name AutoModerationRuleManager#cache
27
+ */
28
+
29
+ /**
30
+ * Resolves an {@link AutoModerationRuleResolvable} to an {@link AutoModerationRule} object.
31
+ * @method resolve
32
+ * @memberof AutoModerationRuleManager
33
+ * @instance
34
+ * @param {AutoModerationRuleResolvable} autoModerationRule The AutoModerationRule resolvable to resolve
35
+ * @returns {?AutoModerationRule}
36
+ */
37
+
38
+ /**
39
+ * Resolves an {@link AutoModerationRuleResolvable} to a {@link AutoModerationRule} id.
40
+ * @method resolveId
41
+ * @memberof AutoModerationRuleManager
42
+ * @instance
43
+ * @param {AutoModerationRuleResolvable} autoModerationRule The AutoModerationRule resolvable to resolve
44
+ * @returns {?Snowflake}
45
+ */
46
+
47
+ _add(data, cache) {
48
+ return super._add(data, cache, { extras: [this.guild] });
49
+ }
50
+
51
+ /**
52
+ * Options used to set the trigger metadata of an auto moderation rule.
53
+ * @typedef {Object} AutoModerationTriggerMetadataOptions
54
+ * @property {string[]} [keywordFilter] The substrings that will be searched for in the content
55
+ * @property {string[]} [regexPatterns] The regular expression patterns which will be matched against the content
56
+ * <info>Only Rust-flavored regular expressions are supported.</info>
57
+ * @property {AutoModerationRuleKeywordPresetType[]} [presets]
58
+ * The internally pre-defined wordsets which will be searched for in the content
59
+ * @property {string[]} [allowList] The substrings that will be exempt from triggering
60
+ * {@link AutoModerationRuleTriggerType.Keyword} and {@link AutoModerationRuleTriggerType.KeywordPreset}
61
+ * @property {?number} [mentionTotalLimit] The total number of role & user mentions allowed per message
62
+ * @property {boolean} [mentionRaidProtectionEnabled] Whether to automatically detect mention raids
63
+ */
64
+
65
+ /**
66
+ * Options used to set the actions of an auto moderation rule.
67
+ * @typedef {Object} AutoModerationActionOptions
68
+ * @property {AutoModerationActionType} type The type of this auto moderation rule action
69
+ * @property {AutoModerationActionMetadataOptions} [metadata] Additional metadata needed during execution
70
+ * <info>This property is required if using a `type` of
71
+ * {@link AutoModerationActionType.SendAlertMessage} or {@link AutoModerationActionType.Timeout}.</info>
72
+ */
73
+
74
+ /**
75
+ * Options used to set the metadata of an auto moderation rule action.
76
+ * @typedef {Object} AutoModerationActionMetadataOptions
77
+ * @property {GuildTextChannelResolvable|ThreadChannel} [channel] The channel to which content will be logged
78
+ * @property {number} [durationSeconds] The timeout duration in seconds
79
+ * @property {string} [customMessage] The custom message that is shown whenever a message is blocked
80
+ */
81
+
82
+ /**
83
+ * Options used to create an auto moderation rule.
84
+ * @typedef {Object} AutoModerationRuleCreateOptions
85
+ * @property {string} name The name of the auto moderation rule
86
+ * @property {AutoModerationRuleEventType} eventType The event type of the auto moderation rule
87
+ * @property {AutoModerationRuleTriggerType} triggerType The trigger type of the auto moderation rule
88
+ * @property {AutoModerationTriggerMetadataOptions} [triggerMetadata] The trigger metadata of the auto moderation rule
89
+ * <info>This property is required if using a `triggerType` of
90
+ * {@link AutoModerationRuleTriggerType.Keyword}, {@link AutoModerationRuleTriggerType.KeywordPreset},
91
+ * or {@link AutoModerationRuleTriggerType.MentionSpam}.</info>
92
+ * @property {AutoModerationActionOptions[]} actions
93
+ * The actions that will execute when the auto moderation rule is triggered
94
+ * @property {boolean} [enabled] Whether the auto moderation rule should be enabled
95
+ * @property {Collection<Snowflake, Role>|RoleResolvable[]} [exemptRoles]
96
+ * The roles that should not be affected by the auto moderation rule
97
+ * @property {Collection<Snowflake, GuildChannel|ThreadChannel>|GuildChannelResolvable[]} [exemptChannels]
98
+ * The channels that should not be affected by the auto moderation rule
99
+ * @property {string} [reason] The reason for creating the auto moderation rule
100
+ */
101
+
102
+ /**
103
+ * Creates a new auto moderation rule.
104
+ * @param {AutoModerationRuleCreateOptions} options Options for creating the auto moderation rule
105
+ * @returns {Promise<AutoModerationRule>}
106
+ */
107
+ async create({
108
+ name,
109
+ eventType,
110
+ triggerType,
111
+ triggerMetadata,
112
+ actions,
113
+ enabled,
114
+ exemptRoles,
115
+ exemptChannels,
116
+ reason,
117
+ }) {
118
+ const data = await this.client.rest.post(Routes.guildAutoModerationRules(this.guild.id), {
119
+ body: {
120
+ name,
121
+ event_type: eventType,
122
+ trigger_type: triggerType,
123
+ trigger_metadata: triggerMetadata && {
124
+ keyword_filter: triggerMetadata.keywordFilter,
125
+ regex_patterns: triggerMetadata.regexPatterns,
126
+ presets: triggerMetadata.presets,
127
+ allow_list: triggerMetadata.allowList,
128
+ mention_total_limit: triggerMetadata.mentionTotalLimit,
129
+ mention_raid_protection_enabled: triggerMetadata.mentionRaidProtectionEnabled,
130
+ },
131
+ actions: actions.map(action => ({
132
+ type: action.type,
133
+ metadata: {
134
+ duration_seconds: action.metadata?.durationSeconds,
135
+ channel_id: action.metadata?.channel && this.guild.channels.resolveId(action.metadata.channel),
136
+ custom_message: action.metadata?.customMessage,
137
+ },
138
+ })),
139
+ enabled,
140
+ exempt_roles: exemptRoles?.map(exemptRole => this.guild.roles.resolveId(exemptRole)),
141
+ exempt_channels: exemptChannels?.map(exemptChannel => this.guild.channels.resolveId(exemptChannel)),
142
+ },
143
+ reason,
144
+ });
145
+
146
+ return this._add(data);
147
+ }
148
+
149
+ /**
150
+ * Options used to edit an auto moderation rule.
151
+ * @typedef {Object} AutoModerationRuleEditOptions
152
+ * @property {string} [name] The name of the auto moderation rule
153
+ * @property {AutoModerationRuleEventType} [eventType] The event type of the auto moderation rule
154
+ * @property {AutoModerationTriggerMetadataOptions} [triggerMetadata] The trigger metadata of the auto moderation rule
155
+ * @property {AutoModerationActionOptions[]} [actions]
156
+ * The actions that will execute when the auto moderation rule is triggered
157
+ * @property {boolean} [enabled] Whether the auto moderation rule should be enabled
158
+ * @property {Collection<Snowflake, Role>|RoleResolvable[]} [exemptRoles]
159
+ * The roles that should not be affected by the auto moderation rule
160
+ * @property {Collection<Snowflake, GuildChannel|ThreadChannel>|GuildChannelResolvable[]} [exemptChannels]
161
+ * The channels that should not be affected by the auto moderation rule
162
+ * @property {string} [reason] The reason for creating the auto moderation rule
163
+ */
164
+
165
+ /**
166
+ * Edits an auto moderation rule.
167
+ * @param {AutoModerationRuleResolvable} autoModerationRule The auto moderation rule to edit
168
+ * @param {AutoModerationRuleEditOptions} options Options for editing the auto moderation rule
169
+ * @returns {Promise<AutoModerationRule>}
170
+ */
171
+ async edit(
172
+ autoModerationRule,
173
+ { name, eventType, triggerMetadata, actions, enabled, exemptRoles, exemptChannels, reason },
174
+ ) {
175
+ const autoModerationRuleId = this.resolveId(autoModerationRule);
176
+
177
+ const data = await this.client.rest.patch(Routes.guildAutoModerationRule(this.guild.id, autoModerationRuleId), {
178
+ body: {
179
+ name,
180
+ event_type: eventType,
181
+ trigger_metadata: triggerMetadata && {
182
+ keyword_filter: triggerMetadata.keywordFilter,
183
+ regex_patterns: triggerMetadata.regexPatterns,
184
+ presets: triggerMetadata.presets,
185
+ allow_list: triggerMetadata.allowList,
186
+ mention_total_limit: triggerMetadata.mentionTotalLimit,
187
+ mention_raid_protection_enabled: triggerMetadata.mentionRaidProtectionEnabled,
188
+ },
189
+ actions: actions?.map(action => ({
190
+ type: action.type,
191
+ metadata: {
192
+ duration_seconds: action.metadata?.durationSeconds,
193
+ channel_id: action.metadata?.channel && this.guild.channels.resolveId(action.metadata.channel),
194
+ custom_message: action.metadata?.customMessage,
195
+ },
196
+ })),
197
+ enabled,
198
+ exempt_roles: exemptRoles?.map(exemptRole => this.guild.roles.resolveId(exemptRole)),
199
+ exempt_channels: exemptChannels?.map(exemptChannel => this.guild.channels.resolveId(exemptChannel)),
200
+ },
201
+ reason,
202
+ });
203
+
204
+ return this._add(data);
205
+ }
206
+
207
+ /**
208
+ * Data that can be resolved to give an AutoModerationRule object. This can be:
209
+ * * An AutoModerationRule
210
+ * * A Snowflake
211
+ * @typedef {AutoModerationRule|Snowflake} AutoModerationRuleResolvable
212
+ */
213
+
214
+ /**
215
+ * Options used to fetch a single auto moderation rule from a guild.
216
+ * @typedef {BaseFetchOptions} FetchAutoModerationRuleOptions
217
+ * @property {AutoModerationRuleResolvable} autoModerationRule The auto moderation rule to fetch
218
+ */
219
+
220
+ /**
221
+ * Options used to fetch all auto moderation rules from a guild.
222
+ * @typedef {Object} FetchAutoModerationRulesOptions
223
+ * @property {boolean} [cache] Whether to cache the fetched auto moderation rules
224
+ */
225
+
226
+ /**
227
+ * Fetches auto moderation rules from Discord.
228
+ * @param {AutoModerationRuleResolvable|FetchAutoModerationRuleOptions|FetchAutoModerationRulesOptions} [options]
229
+ * Options for fetching auto moderation rule(s)
230
+ * @returns {Promise<AutoModerationRule|Collection<Snowflake, AutoModerationRule>>}
231
+ * @example
232
+ * // Fetch all auto moderation rules from a guild without caching
233
+ * guild.autoModerationRules.fetch({ cache: false })
234
+ * .then(console.log)
235
+ * .catch(console.error);
236
+ * @example
237
+ * // Fetch a single auto moderation rule
238
+ * guild.autoModerationRules.fetch('979083472868098119')
239
+ * .then(console.log)
240
+ * .catch(console.error);
241
+ * @example
242
+ * // Fetch a single auto moderation rule without checking cache and without caching
243
+ * guild.autoModerationRules.fetch({ autoModerationRule: '979083472868098119', cache: false, force: true })
244
+ * .then(console.log)
245
+ * .catch(console.error)
246
+ */
247
+ fetch(options) {
248
+ if (!options) return this._fetchMany();
249
+ const { autoModerationRule, cache, force } = options;
250
+ const resolvedAutoModerationRule = this.resolveId(autoModerationRule ?? options);
251
+ if (resolvedAutoModerationRule) {
252
+ return this._fetchSingle({ autoModerationRule: resolvedAutoModerationRule, cache, force });
253
+ }
254
+ return this._fetchMany(options);
255
+ }
256
+
257
+ async _fetchSingle({ autoModerationRule, cache, force = false }) {
258
+ if (!force) {
259
+ const existing = this.cache.get(autoModerationRule);
260
+ if (existing) return existing;
261
+ }
262
+
263
+ const data = await this.client.rest.get(Routes.guildAutoModerationRule(this.guild.id, autoModerationRule));
264
+ return this._add(data, cache);
265
+ }
266
+
267
+ async _fetchMany(options = {}) {
268
+ const data = await this.client.rest.get(Routes.guildAutoModerationRules(this.guild.id));
269
+
270
+ return data.reduce(
271
+ (col, autoModerationRule) => col.set(autoModerationRule.id, this._add(autoModerationRule, options.cache)),
272
+ new Collection(),
273
+ );
274
+ }
275
+
276
+ /**
277
+ * Deletes an auto moderation rule.
278
+ * @param {AutoModerationRuleResolvable} autoModerationRule The auto moderation rule to delete
279
+ * @param {string} [reason] The reason for deleting the auto moderation rule
280
+ * @returns {Promise<void>}
281
+ */
282
+ async delete(autoModerationRule, reason) {
283
+ const autoModerationRuleId = this.resolveId(autoModerationRule);
284
+ await this.client.rest.delete(Routes.guildAutoModerationRule(this.guild.id, autoModerationRuleId), { reason });
285
+ }
286
+ }
287
+
288
+ module.exports = AutoModerationRuleManager;
@@ -0,0 +1,80 @@
1
+ 'use strict';
2
+
3
+ const CachedManager = require('./CachedManager');
4
+ const GuildEmoji = require('../structures/GuildEmoji');
5
+ const ReactionEmoji = require('../structures/ReactionEmoji');
6
+ const { parseEmoji } = require('../util/Util');
7
+
8
+ /**
9
+ * Holds methods to resolve GuildEmojis and stores their cache.
10
+ * @extends {CachedManager}
11
+ */
12
+ class BaseGuildEmojiManager extends CachedManager {
13
+ constructor(client, iterable) {
14
+ super(client, GuildEmoji, iterable);
15
+ }
16
+
17
+ /**
18
+ * The cache of GuildEmojis
19
+ * @type {Collection<Snowflake, GuildEmoji>}
20
+ * @name BaseGuildEmojiManager#cache
21
+ */
22
+
23
+ /**
24
+ * Data that can be resolved into a GuildEmoji object. This can be:
25
+ * * A Snowflake
26
+ * * A GuildEmoji object
27
+ * * A ReactionEmoji object
28
+ * @typedef {Snowflake|GuildEmoji|ReactionEmoji} EmojiResolvable
29
+ */
30
+
31
+ /**
32
+ * Resolves an EmojiResolvable to an Emoji object.
33
+ * @param {EmojiResolvable} emoji The Emoji resolvable to identify
34
+ * @returns {?GuildEmoji}
35
+ */
36
+ resolve(emoji) {
37
+ if (emoji instanceof ReactionEmoji) return super.resolve(emoji.id);
38
+ return super.resolve(emoji);
39
+ }
40
+
41
+ /**
42
+ * Resolves an EmojiResolvable to an Emoji id string.
43
+ * @param {EmojiResolvable} emoji The Emoji resolvable to identify
44
+ * @returns {?Snowflake}
45
+ */
46
+ resolveId(emoji) {
47
+ if (emoji instanceof ReactionEmoji) return emoji.id;
48
+ return super.resolveId(emoji);
49
+ }
50
+
51
+ /**
52
+ * Data that can be resolved to give an emoji identifier. This can be:
53
+ * * An EmojiResolvable
54
+ * * The `<a:name:id>`, `<:name:id>`, `a:name:id` or `name:id` emoji identifier string of an emoji
55
+ * * The Unicode representation of an emoji
56
+ * @typedef {string|EmojiResolvable} EmojiIdentifierResolvable
57
+ */
58
+
59
+ /**
60
+ * Resolves an EmojiResolvable to an emoji identifier.
61
+ * @param {EmojiIdentifierResolvable} emoji The emoji resolvable to resolve
62
+ * @returns {?string}
63
+ */
64
+ resolveIdentifier(emoji) {
65
+ const emojiResolvable = this.resolve(emoji);
66
+ if (emojiResolvable) return emojiResolvable.identifier;
67
+ if (emoji instanceof ReactionEmoji) return emoji.identifier;
68
+ if (typeof emoji === 'string') {
69
+ const res = parseEmoji(emoji);
70
+ if (res?.name.length) {
71
+ emoji = `${res.animated ? 'a:' : ''}${res.name}${res.id ? `:${res.id}` : ''}`;
72
+ }
73
+ if (!emoji.includes('%')) return encodeURIComponent(emoji);
74
+ return emoji;
75
+ }
76
+ return null;
77
+ }
78
+ }
79
+
80
+ module.exports = BaseGuildEmojiManager;
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Manages the API methods of a data model.
5
+ * @abstract
6
+ */
7
+ class BaseManager {
8
+ constructor(client) {
9
+ /**
10
+ * The client that instantiated this Manager
11
+ * @name BaseManager#client
12
+ * @type {Client}
13
+ * @readonly
14
+ */
15
+ Object.defineProperty(this, 'client', { value: client });
16
+ }
17
+ }
18
+
19
+ module.exports = BaseManager;
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ const DataManager = require('./DataManager');
4
+
5
+ /**
6
+ * Manages the API methods of a data model with a mutable cache of instances.
7
+ * @extends {DataManager}
8
+ * @abstract
9
+ */
10
+ class CachedManager extends DataManager {
11
+ constructor(client, holds, iterable) {
12
+ super(client, holds);
13
+
14
+ /**
15
+ * The private cache of items for this manager.
16
+ * @type {Collection}
17
+ * @private
18
+ * @readonly
19
+ * @name CachedManager#_cache
20
+ */
21
+ Object.defineProperty(this, '_cache', { value: this.client.options.makeCache(this.constructor, this.holds) });
22
+
23
+ if (iterable) {
24
+ for (const item of iterable) {
25
+ this._add(item);
26
+ }
27
+ }
28
+ }
29
+
30
+ /**
31
+ * The cache of items for this manager.
32
+ * @type {Collection}
33
+ * @abstract
34
+ */
35
+ get cache() {
36
+ return this._cache;
37
+ }
38
+
39
+ _add(data, cache = true, { id, extras = [] } = {}) {
40
+ const existing = this.cache.get(id ?? data.id);
41
+ if (existing) {
42
+ if (cache) {
43
+ existing._patch(data);
44
+ return existing;
45
+ }
46
+ const clone = existing._clone();
47
+ clone._patch(data);
48
+ return clone;
49
+ }
50
+
51
+ const entry = this.holds ? new this.holds(this.client, data, ...extras) : data;
52
+ if (cache) this.cache.set(id ?? entry.id, entry);
53
+ return entry;
54
+ }
55
+ }
56
+
57
+ module.exports = CachedManager;
@@ -0,0 +1,77 @@
1
+ 'use strict';
2
+
3
+ const DataManager = require('./DataManager');
4
+ const GuildChannel = require('../structures/GuildChannel');
5
+
6
+ /**
7
+ * Manages API methods for CategoryChannels' children.
8
+ * @extends {DataManager}
9
+ */
10
+ class CategoryChannelChildManager extends DataManager {
11
+ constructor(channel) {
12
+ super(channel.client, GuildChannel);
13
+ /**
14
+ * The category channel this manager belongs to
15
+ * @type {CategoryChannel}
16
+ */
17
+ this.channel = channel;
18
+ }
19
+
20
+ /**
21
+ * The channels that are a part of this category
22
+ * @type {Collection<Snowflake, GuildChannel>}
23
+ * @readonly
24
+ */
25
+ get cache() {
26
+ return this.guild.channels.cache.filter(c => c.parentId === this.channel.id);
27
+ }
28
+
29
+ /**
30
+ * The guild this manager belongs to
31
+ * @type {Guild}
32
+ * @readonly
33
+ */
34
+ get guild() {
35
+ return this.channel.guild;
36
+ }
37
+
38
+ /**
39
+ * Options for creating a channel using {@link CategoryChannel#createChannel}.
40
+ * @typedef {Object} CategoryCreateChannelOptions
41
+ * @property {string} name The name for the new channel
42
+ * @property {ChannelType} [type=ChannelType.GuildText] The type of the new channel.
43
+ * @property {string} [topic] The topic for the new channel
44
+ * @property {boolean} [nsfw] Whether the new channel is NSFW
45
+ * @property {number} [bitrate] Bitrate of the new channel in bits (only voice)
46
+ * @property {number} [userLimit] Maximum amount of users allowed in the new channel (only voice)
47
+ * @property {OverwriteResolvable[]|Collection<Snowflake, OverwriteResolvable>} [permissionOverwrites]
48
+ * Permission overwrites of the new channel
49
+ * @property {number} [position] Position of the new channel
50
+ * @property {number} [rateLimitPerUser] The rate limit per user (slowmode) for the new channel in seconds
51
+ * @property {string} [rtcRegion] The specific region of the new channel.
52
+ * @property {VideoQualityMode} [videoQualityMode] The camera video quality mode of the voice channel
53
+ * @property {GuildForumTagData[]} [availableTags] The tags that can be used in this channel (forum only).
54
+ * @property {DefaultReactionEmoji} [defaultReactionEmoji]
55
+ * The emoji to show in the add reaction button on a thread in a guild forum channel.
56
+ * @property {ThreadAutoArchiveDuration} [defaultAutoArchiveDuration]
57
+ * The default auto archive duration for all new threads in this channel
58
+ * @property {SortOrderType} [defaultSortOrder] The default sort order mode used to order posts (forum only).
59
+ * @property {ForumLayoutType} [defaultForumLayout] The default layout used to display posts (forum only).
60
+ * @property {string} [reason] Reason for creating the new channel
61
+ */
62
+
63
+ /**
64
+ * Creates a new channel within this category.
65
+ * <info>You cannot create a channel of type {@link ChannelType.GuildCategory} inside a CategoryChannel.</info>
66
+ * @param {CategoryCreateChannelOptions} options Options for creating the new channel
67
+ * @returns {Promise<GuildChannel>}
68
+ */
69
+ create(options) {
70
+ return this.guild.channels.create({
71
+ ...options,
72
+ parent: this.channel.id,
73
+ });
74
+ }
75
+ }
76
+
77
+ module.exports = CategoryChannelChildManager;
@@ -0,0 +1,128 @@
1
+ 'use strict';
2
+
3
+ const process = require('node:process');
4
+ const { Routes } = require('discord-api-types/v10');
5
+ const CachedManager = require('./CachedManager');
6
+ const { BaseChannel } = require('../structures/BaseChannel');
7
+ const { createChannel } = require('../util/Channels');
8
+ const { ThreadChannelTypes } = require('../util/Constants');
9
+ const Events = require('../util/Events');
10
+
11
+ let cacheWarningEmitted = false;
12
+
13
+ /**
14
+ * A manager of channels belonging to a client
15
+ * @extends {CachedManager}
16
+ */
17
+ class ChannelManager extends CachedManager {
18
+ constructor(client, iterable) {
19
+ super(client, BaseChannel, iterable);
20
+ const defaultCaching =
21
+ this._cache.constructor.name === 'Collection' ||
22
+ this._cache.maxSize === undefined ||
23
+ this._cache.maxSize === Infinity;
24
+ if (!cacheWarningEmitted && !defaultCaching) {
25
+ cacheWarningEmitted = true;
26
+ process.emitWarning(
27
+ `Overriding the cache handling for ${this.constructor.name} is unsupported and breaks functionality.`,
28
+ 'UnsupportedCacheOverwriteWarning',
29
+ );
30
+ }
31
+ }
32
+
33
+ /**
34
+ * The cache of Channels
35
+ * @type {Collection<Snowflake, BaseChannel>}
36
+ * @name ChannelManager#cache
37
+ */
38
+
39
+ _add(data, guild, { cache = true, allowUnknownGuild = false } = {}) {
40
+ const existing = this.cache.get(data.id);
41
+ if (existing) {
42
+ if (cache) existing._patch(data);
43
+ guild?.channels?._add(existing);
44
+ if (ThreadChannelTypes.includes(existing.type)) {
45
+ existing.parent?.threads?._add(existing);
46
+ }
47
+ return existing;
48
+ }
49
+
50
+ const channel = createChannel(this.client, data, guild, { allowUnknownGuild });
51
+
52
+ if (!channel) {
53
+ this.client.emit(Events.Debug, `Failed to find guild, or unknown type for channel ${data.id} ${data.type}`);
54
+ return null;
55
+ }
56
+
57
+ if (cache && !allowUnknownGuild) this.cache.set(channel.id, channel);
58
+
59
+ return channel;
60
+ }
61
+
62
+ _remove(id) {
63
+ const channel = this.cache.get(id);
64
+ channel?.guild?.channels.cache.delete(id);
65
+
66
+ for (const [code, invite] of channel?.guild?.invites.cache ?? []) {
67
+ if (invite.channelId === id) channel.guild.invites.cache.delete(code);
68
+ }
69
+
70
+ channel?.parent?.threads?.cache.delete(id);
71
+ this.cache.delete(id);
72
+ }
73
+
74
+ /**
75
+ * Data that can be resolved to give a Channel object. This can be:
76
+ * * A Channel object
77
+ * * A Snowflake
78
+ * @typedef {BaseChannel|Snowflake} ChannelResolvable
79
+ */
80
+
81
+ /**
82
+ * Resolves a ChannelResolvable to a Channel object.
83
+ * @method resolve
84
+ * @memberof ChannelManager
85
+ * @instance
86
+ * @param {ChannelResolvable} channel The channel resolvable to resolve
87
+ * @returns {?BaseChannel}
88
+ */
89
+
90
+ /**
91
+ * Resolves a ChannelResolvable to a channel id string.
92
+ * @method resolveId
93
+ * @memberof ChannelManager
94
+ * @instance
95
+ * @param {ChannelResolvable} channel The channel resolvable to resolve
96
+ * @returns {?Snowflake}
97
+ */
98
+
99
+ /**
100
+ * Options for fetching a channel from Discord
101
+ * @typedef {BaseFetchOptions} FetchChannelOptions
102
+ * @property {boolean} [allowUnknownGuild=false] Allows the channel to be returned even if the guild is not in cache,
103
+ * it will not be cached. <warn>Many of the properties and methods on the returned channel will throw errors</warn>
104
+ */
105
+
106
+ /**
107
+ * Obtains a channel from Discord, or the channel cache if it's already available.
108
+ * @param {Snowflake} id The channel's id
109
+ * @param {FetchChannelOptions} [options] Additional options for this fetch
110
+ * @returns {Promise<?BaseChannel>}
111
+ * @example
112
+ * // Fetch a channel by its id
113
+ * client.channels.fetch('222109930545610754')
114
+ * .then(channel => console.log(channel.name))
115
+ * .catch(console.error);
116
+ */
117
+ async fetch(id, { allowUnknownGuild = false, cache = true, force = false } = {}) {
118
+ if (!force) {
119
+ const existing = this.cache.get(id);
120
+ if (existing && !existing.partial) return existing;
121
+ }
122
+
123
+ const data = await this.client.rest.get(Routes.channel(id));
124
+ return this._add(data, null, { cache, allowUnknownGuild });
125
+ }
126
+ }
127
+
128
+ module.exports = ChannelManager;