@ovencord/discord.js 14.16.3

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 (332) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +148 -0
  3. package/package.json +73 -0
  4. package/src/client/Client.ts +967 -0
  5. package/src/client/actions/Action.ts +141 -0
  6. package/src/client/actions/ActionsManager.ts +138 -0
  7. package/src/client/actions/ChannelCreate.ts +21 -0
  8. package/src/client/actions/ChannelDelete.ts +20 -0
  9. package/src/client/actions/ChannelUpdate.ts +38 -0
  10. package/src/client/actions/GuildChannelsPositionUpdate.ts +17 -0
  11. package/src/client/actions/GuildEmojiCreate.ts +17 -0
  12. package/src/client/actions/GuildEmojiDelete.ts +16 -0
  13. package/src/client/actions/GuildEmojiUpdate.ts +17 -0
  14. package/src/client/actions/GuildEmojisUpdate.ts +30 -0
  15. package/src/client/actions/GuildMemberRemove.ts +29 -0
  16. package/src/client/actions/GuildMemberUpdate.ts +41 -0
  17. package/src/client/actions/GuildRoleCreate.ts +23 -0
  18. package/src/client/actions/GuildRoleDelete.ts +26 -0
  19. package/src/client/actions/GuildRolesPositionUpdate.ts +17 -0
  20. package/src/client/actions/GuildScheduledEventDelete.ts +28 -0
  21. package/src/client/actions/GuildScheduledEventUserAdd.ts +29 -0
  22. package/src/client/actions/GuildScheduledEventUserRemove.ts +29 -0
  23. package/src/client/actions/GuildSoundboardSoundDelete.ts +26 -0
  24. package/src/client/actions/GuildStickerCreate.ts +17 -0
  25. package/src/client/actions/GuildStickerDelete.ts +16 -0
  26. package/src/client/actions/GuildStickerUpdate.ts +17 -0
  27. package/src/client/actions/GuildStickersUpdate.ts +30 -0
  28. package/src/client/actions/GuildUpdate.ts +30 -0
  29. package/src/client/actions/InteractionCreate.ts +104 -0
  30. package/src/client/actions/MessageCreate.ts +38 -0
  31. package/src/client/actions/MessageDelete.ts +29 -0
  32. package/src/client/actions/MessageDeleteBulk.ts +45 -0
  33. package/src/client/actions/MessagePollVoteAdd.ts +37 -0
  34. package/src/client/actions/MessagePollVoteRemove.ts +35 -0
  35. package/src/client/actions/MessageReactionAdd.ts +68 -0
  36. package/src/client/actions/MessageReactionRemove.ts +47 -0
  37. package/src/client/actions/MessageReactionRemoveAll.ts +30 -0
  38. package/src/client/actions/MessageReactionRemoveEmoji.ts +25 -0
  39. package/src/client/actions/MessageUpdate.ts +22 -0
  40. package/src/client/actions/StageInstanceCreate.ts +25 -0
  41. package/src/client/actions/StageInstanceDelete.ts +28 -0
  42. package/src/client/actions/StageInstanceUpdate.ts +27 -0
  43. package/src/client/actions/ThreadCreate.ts +22 -0
  44. package/src/client/actions/ThreadMembersUpdate.ts +45 -0
  45. package/src/client/actions/TypingStart.ts +26 -0
  46. package/src/client/actions/UserUpdate.ts +33 -0
  47. package/src/client/voice/ClientVoiceManager.ts +46 -0
  48. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts +19 -0
  49. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.ts +17 -0
  50. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.ts +18 -0
  51. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.ts +21 -0
  52. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.ts +20 -0
  53. package/src/client/websocket/handlers/CHANNEL_CREATE.ts +4 -0
  54. package/src/client/websocket/handlers/CHANNEL_DELETE.ts +4 -0
  55. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.ts +22 -0
  56. package/src/client/websocket/handlers/CHANNEL_UPDATE.ts +16 -0
  57. package/src/client/websocket/handlers/ENTITLEMENT_CREATE.ts +14 -0
  58. package/src/client/websocket/handlers/ENTITLEMENT_DELETE.ts +18 -0
  59. package/src/client/websocket/handlers/ENTITLEMENT_UPDATE.ts +16 -0
  60. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.ts +19 -0
  61. package/src/client/websocket/handlers/GUILD_BAN_ADD.ts +15 -0
  62. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.ts +20 -0
  63. package/src/client/websocket/handlers/GUILD_CREATE.ts +34 -0
  64. package/src/client/websocket/handlers/GUILD_DELETE.ts +36 -0
  65. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.ts +4 -0
  66. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.ts +15 -0
  67. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.ts +40 -0
  68. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.ts +17 -0
  69. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.ts +4 -0
  70. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.ts +4 -0
  71. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.ts +4 -0
  72. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.ts +4 -0
  73. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.ts +21 -0
  74. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.ts +17 -0
  75. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.ts +4 -0
  76. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.ts +19 -0
  77. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.ts +4 -0
  78. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts +4 -0
  79. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.ts +24 -0
  80. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.ts +18 -0
  81. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.ts +4 -0
  82. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.ts +20 -0
  83. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.ts +4 -0
  84. package/src/client/websocket/handlers/GUILD_UPDATE.ts +4 -0
  85. package/src/client/websocket/handlers/INTERACTION_CREATE.ts +4 -0
  86. package/src/client/websocket/handlers/INVITE_CREATE.ts +20 -0
  87. package/src/client/websocket/handlers/INVITE_DELETE.ts +23 -0
  88. package/src/client/websocket/handlers/MESSAGE_CREATE.ts +4 -0
  89. package/src/client/websocket/handlers/MESSAGE_DELETE.ts +4 -0
  90. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.ts +4 -0
  91. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.ts +4 -0
  92. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.ts +4 -0
  93. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.ts +4 -0
  94. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.ts +4 -0
  95. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.ts +4 -0
  96. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.ts +4 -0
  97. package/src/client/websocket/handlers/MESSAGE_UPDATE.ts +16 -0
  98. package/src/client/websocket/handlers/PRESENCE_UPDATE.ts +42 -0
  99. package/src/client/websocket/handlers/RATE_LIMITED.ts +23 -0
  100. package/src/client/websocket/handlers/READY.ts +29 -0
  101. package/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.ts +24 -0
  102. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.ts +4 -0
  103. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.ts +4 -0
  104. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.ts +4 -0
  105. package/src/client/websocket/handlers/SUBSCRIPTION_CREATE.ts +14 -0
  106. package/src/client/websocket/handlers/SUBSCRIPTION_DELETE.ts +16 -0
  107. package/src/client/websocket/handlers/SUBSCRIPTION_UPDATE.ts +16 -0
  108. package/src/client/websocket/handlers/THREAD_CREATE.ts +4 -0
  109. package/src/client/websocket/handlers/THREAD_DELETE.ts +17 -0
  110. package/src/client/websocket/handlers/THREAD_LIST_SYNC.ts +50 -0
  111. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.ts +4 -0
  112. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.ts +25 -0
  113. package/src/client/websocket/handlers/THREAD_UPDATE.ts +16 -0
  114. package/src/client/websocket/handlers/TYPING_START.ts +4 -0
  115. package/src/client/websocket/handlers/USER_UPDATE.ts +4 -0
  116. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.ts +16 -0
  117. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.ts +5 -0
  118. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.ts +37 -0
  119. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.ts +16 -0
  120. package/src/client/websocket/handlers/index.ts +74 -0
  121. package/src/errors/DJSError.ts +50 -0
  122. package/src/errors/ErrorCodes.ts +277 -0
  123. package/src/errors/Messages.ts +155 -0
  124. package/src/errors/index.ts +6 -0
  125. package/src/index.ts +241 -0
  126. package/src/managers/ApplicationCommandManager.ts +303 -0
  127. package/src/managers/ApplicationCommandPermissionsManager.ts +453 -0
  128. package/src/managers/ApplicationEmojiManager.ts +149 -0
  129. package/src/managers/AutoModerationRuleManager.ts +307 -0
  130. package/src/managers/BaseManager.ts +13 -0
  131. package/src/managers/CachedManager.ts +56 -0
  132. package/src/managers/CategoryChannelChildManager.ts +81 -0
  133. package/src/managers/ChannelManager.ts +194 -0
  134. package/src/managers/DMMessageManager.ts +15 -0
  135. package/src/managers/DataManager.ts +38 -0
  136. package/src/managers/EntitlementManager.ts +182 -0
  137. package/src/managers/GuildApplicationCommandManager.ts +29 -0
  138. package/src/managers/GuildBanManager.ts +221 -0
  139. package/src/managers/GuildChannelManager.ts +552 -0
  140. package/src/managers/GuildEmojiManager.ts +262 -0
  141. package/src/managers/GuildEmojiRoleManager.ts +134 -0
  142. package/src/managers/GuildForumThreadManager.ts +84 -0
  143. package/src/managers/GuildInviteManager.ts +236 -0
  144. package/src/managers/GuildManager.ts +265 -0
  145. package/src/managers/GuildMemberManager.ts +619 -0
  146. package/src/managers/GuildMemberRoleManager.ts +230 -0
  147. package/src/managers/GuildMessageManager.ts +31 -0
  148. package/src/managers/GuildScheduledEventManager.ts +330 -0
  149. package/src/managers/GuildSoundboardSoundManager.ts +157 -0
  150. package/src/managers/GuildStickerManager.ts +192 -0
  151. package/src/managers/GuildTextThreadManager.ts +91 -0
  152. package/src/managers/MessageManager.ts +352 -0
  153. package/src/managers/PartialGroupDMMessageManager.ts +15 -0
  154. package/src/managers/PermissionOverwriteManager.ts +174 -0
  155. package/src/managers/PollAnswerVoterManager.ts +59 -0
  156. package/src/managers/PresenceManager.ts +60 -0
  157. package/src/managers/ReactionManager.ts +72 -0
  158. package/src/managers/ReactionUserManager.ts +82 -0
  159. package/src/managers/RoleManager.ts +432 -0
  160. package/src/managers/StageInstanceManager.ts +166 -0
  161. package/src/managers/SubscriptionManager.ts +83 -0
  162. package/src/managers/ThreadManager.ts +210 -0
  163. package/src/managers/ThreadMemberManager.ts +194 -0
  164. package/src/managers/UserManager.ts +139 -0
  165. package/src/managers/VoiceStateManager.ts +61 -0
  166. package/src/sharding/Shard.ts +513 -0
  167. package/src/sharding/ShardClientUtil.ts +293 -0
  168. package/src/sharding/ShardingManager.ts +374 -0
  169. package/src/structures/ActionRow.ts +31 -0
  170. package/src/structures/AnnouncementChannel.ts +25 -0
  171. package/src/structures/AnonymousGuild.ts +110 -0
  172. package/src/structures/ApplicationCommand.ts +675 -0
  173. package/src/structures/ApplicationEmoji.ts +189 -0
  174. package/src/structures/ApplicationRoleConnectionMetadata.ts +54 -0
  175. package/src/structures/Attachment.ts +189 -0
  176. package/src/structures/AuthorizingIntegrationOwners.ts +63 -0
  177. package/src/structures/AutoModerationActionExecution.ts +138 -0
  178. package/src/structures/AutoModerationRule.ts +325 -0
  179. package/src/structures/AutocompleteInteraction.ts +115 -0
  180. package/src/structures/Base.ts +37 -0
  181. package/src/structures/BaseChannel.ts +188 -0
  182. package/src/structures/BaseGuild.ts +134 -0
  183. package/src/structures/BaseGuildEmoji.ts +113 -0
  184. package/src/structures/BaseGuildTextChannel.ts +230 -0
  185. package/src/structures/BaseGuildVoiceChannel.ts +270 -0
  186. package/src/structures/BaseInteraction.ts +393 -0
  187. package/src/structures/BaseInvite.ts +192 -0
  188. package/src/structures/BaseSelectMenuComponent.ts +58 -0
  189. package/src/structures/ButtonComponent.ts +68 -0
  190. package/src/structures/ButtonInteraction.ts +8 -0
  191. package/src/structures/CategoryChannel.ts +46 -0
  192. package/src/structures/ChannelSelectMenuComponent.ts +18 -0
  193. package/src/structures/ChannelSelectMenuInteraction.ts +34 -0
  194. package/src/structures/ChatInputCommandInteraction.ts +43 -0
  195. package/src/structures/ClientApplication.ts +470 -0
  196. package/src/structures/ClientPresence.ts +87 -0
  197. package/src/structures/ClientUser.ts +219 -0
  198. package/src/structures/CommandInteraction.ts +193 -0
  199. package/src/structures/CommandInteractionOptionResolver.ts +336 -0
  200. package/src/structures/Component.ts +59 -0
  201. package/src/structures/ContainerComponent.ts +63 -0
  202. package/src/structures/ContextMenuCommandInteraction.ts +68 -0
  203. package/src/structures/DMChannel.ts +148 -0
  204. package/src/structures/DirectoryChannel.ts +40 -0
  205. package/src/structures/Embed.ts +251 -0
  206. package/src/structures/Emoji.ts +61 -0
  207. package/src/structures/Entitlement.ts +206 -0
  208. package/src/structures/FileComponent.ts +41 -0
  209. package/src/structures/ForumChannel.ts +31 -0
  210. package/src/structures/GroupDMInvite.ts +34 -0
  211. package/src/structures/Guild.ts +1605 -0
  212. package/src/structures/GuildAuditLogs.ts +99 -0
  213. package/src/structures/GuildAuditLogsEntry.ts +557 -0
  214. package/src/structures/GuildBan.ts +65 -0
  215. package/src/structures/GuildChannel.ts +515 -0
  216. package/src/structures/GuildEmoji.ts +159 -0
  217. package/src/structures/GuildInvite.ts +233 -0
  218. package/src/structures/GuildMember.ts +643 -0
  219. package/src/structures/GuildOnboarding.ts +73 -0
  220. package/src/structures/GuildOnboardingPrompt.ts +93 -0
  221. package/src/structures/GuildOnboardingPromptOption.ts +100 -0
  222. package/src/structures/GuildPreview.ts +218 -0
  223. package/src/structures/GuildPreviewEmoji.ts +28 -0
  224. package/src/structures/GuildScheduledEvent.ts +593 -0
  225. package/src/structures/GuildTemplate.ts +229 -0
  226. package/src/structures/Integration.ts +257 -0
  227. package/src/structures/IntegrationApplication.ts +84 -0
  228. package/src/structures/InteractionCallback.ts +86 -0
  229. package/src/structures/InteractionCallbackResource.ts +57 -0
  230. package/src/structures/InteractionCallbackResponse.ts +35 -0
  231. package/src/structures/InteractionCollector.ts +260 -0
  232. package/src/structures/InteractionWebhook.ts +65 -0
  233. package/src/structures/InviteGuild.ts +22 -0
  234. package/src/structures/LabelComponent.ts +51 -0
  235. package/src/structures/MediaChannel.ts +8 -0
  236. package/src/structures/MediaGalleryComponent.ts +31 -0
  237. package/src/structures/MediaGalleryItem.ts +54 -0
  238. package/src/structures/MentionableSelectMenuComponent.ts +8 -0
  239. package/src/structures/MentionableSelectMenuInteraction.ts +76 -0
  240. package/src/structures/Message.ts +1202 -0
  241. package/src/structures/MessageCollector.ts +155 -0
  242. package/src/structures/MessageComponentInteraction.ts +132 -0
  243. package/src/structures/MessageContextMenuCommandInteraction.ts +18 -0
  244. package/src/structures/MessageMentions.ts +327 -0
  245. package/src/structures/MessagePayload.ts +325 -0
  246. package/src/structures/MessageReaction.ts +219 -0
  247. package/src/structures/ModalComponentResolver.ts +237 -0
  248. package/src/structures/ModalSubmitInteraction.ts +260 -0
  249. package/src/structures/OAuth2Guild.ts +30 -0
  250. package/src/structures/PartialGroupDMChannel.ts +151 -0
  251. package/src/structures/PermissionOverwrites.ts +222 -0
  252. package/src/structures/Poll.ts +195 -0
  253. package/src/structures/PollAnswer.ts +100 -0
  254. package/src/structures/Presence.ts +448 -0
  255. package/src/structures/PrimaryEntryPointCommandInteraction.ts +8 -0
  256. package/src/structures/ReactionCollector.ts +245 -0
  257. package/src/structures/ReactionEmoji.ts +30 -0
  258. package/src/structures/Role.ts +543 -0
  259. package/src/structures/RoleSelectMenuComponent.ts +8 -0
  260. package/src/structures/RoleSelectMenuInteraction.ts +34 -0
  261. package/src/structures/SKU.ts +62 -0
  262. package/src/structures/SectionComponent.ts +44 -0
  263. package/src/structures/SeparatorComponent.ts +29 -0
  264. package/src/structures/SoundboardSound.ts +176 -0
  265. package/src/structures/StageChannel.ts +118 -0
  266. package/src/structures/StageInstance.ts +173 -0
  267. package/src/structures/Sticker.ts +300 -0
  268. package/src/structures/StickerPack.ts +111 -0
  269. package/src/structures/StringSelectMenuComponent.ts +18 -0
  270. package/src/structures/StringSelectMenuInteraction.ts +21 -0
  271. package/src/structures/Subscription.ts +138 -0
  272. package/src/structures/Team.ts +131 -0
  273. package/src/structures/TeamMember.ts +77 -0
  274. package/src/structures/TextChannel.ts +33 -0
  275. package/src/structures/TextDisplayComponent.ts +18 -0
  276. package/src/structures/TextInputComponent.ts +28 -0
  277. package/src/structures/ThreadChannel.ts +680 -0
  278. package/src/structures/ThreadMember.ts +125 -0
  279. package/src/structures/ThreadOnlyChannel.ts +276 -0
  280. package/src/structures/ThumbnailComponent.ts +51 -0
  281. package/src/structures/Typing.ts +81 -0
  282. package/src/structures/UnfurledMediaItem.ts +33 -0
  283. package/src/structures/User.ts +511 -0
  284. package/src/structures/UserContextMenuCommandInteraction.ts +28 -0
  285. package/src/structures/UserSelectMenuComponent.ts +8 -0
  286. package/src/structures/UserSelectMenuInteraction.ts +54 -0
  287. package/src/structures/VoiceChannel.ts +119 -0
  288. package/src/structures/VoiceChannelEffect.ts +92 -0
  289. package/src/structures/VoiceRegion.ts +52 -0
  290. package/src/structures/VoiceState.ts +346 -0
  291. package/src/structures/Webhook.ts +526 -0
  292. package/src/structures/WelcomeChannel.ts +67 -0
  293. package/src/structures/WelcomeScreen.ts +53 -0
  294. package/src/structures/Widget.ts +110 -0
  295. package/src/structures/WidgetMember.ts +124 -0
  296. package/src/structures/interfaces/Application.ts +179 -0
  297. package/src/structures/interfaces/Collector.ts +372 -0
  298. package/src/structures/interfaces/InteractionResponses.ts +384 -0
  299. package/src/structures/interfaces/TextBasedChannel.ts +430 -0
  300. package/src/util/APITypes.ts +690 -0
  301. package/src/util/ActivityFlagsBitField.ts +26 -0
  302. package/src/util/ApplicationFlagsBitField.ts +43 -0
  303. package/src/util/AttachmentFlagsBitField.ts +26 -0
  304. package/src/util/BitField.ts +178 -0
  305. package/src/util/ChannelFlagsBitField.ts +43 -0
  306. package/src/util/Channels.ts +165 -0
  307. package/src/util/Colors.ts +72 -0
  308. package/src/util/Components.ts +285 -0
  309. package/src/util/Constants.ts +251 -0
  310. package/src/util/DataResolver.ts +146 -0
  311. package/src/util/Enums.ts +10 -0
  312. package/src/util/Events.ts +178 -0
  313. package/src/util/GuildMemberFlagsBitField.ts +43 -0
  314. package/src/util/IntentsBitField.ts +35 -0
  315. package/src/util/InviteFlagsBitField.ts +26 -0
  316. package/src/util/Invites.ts +27 -0
  317. package/src/util/LimitedCollection.ts +73 -0
  318. package/src/util/MessageFlagsBitField.ts +43 -0
  319. package/src/util/Options.ts +215 -0
  320. package/src/util/Partials.ts +50 -0
  321. package/src/util/PermissionsBitField.ts +113 -0
  322. package/src/util/RoleFlagsBitField.ts +26 -0
  323. package/src/util/SKUFlagsBitField.ts +26 -0
  324. package/src/util/ShardEvents.ts +26 -0
  325. package/src/util/Status.ts +16 -0
  326. package/src/util/Sweepers.ts +532 -0
  327. package/src/util/Symbols.ts +1 -0
  328. package/src/util/SystemChannelFlagsBitField.ts +45 -0
  329. package/src/util/ThreadMemberFlagsBitField.ts +33 -0
  330. package/src/util/Transformers.ts +123 -0
  331. package/src/util/UserFlagsBitField.ts +33 -0
  332. package/src/util/Util.ts +519 -0
@@ -0,0 +1,552 @@
1
+ import process from 'node:process';
2
+ import { Collection } from '@ovencord/collection';
3
+ import { ChannelType, Routes } from 'discord-api-types/v10';
4
+ import { DiscordjsError, DiscordjsTypeError, ErrorCodes } from '../errors/index.js';
5
+ import { GuildChannel } from '../structures/GuildChannel.js';
6
+ import { PermissionOverwrites } from '../structures/PermissionOverwrites.js';
7
+ import { ThreadChannel } from '../structures/ThreadChannel.js';
8
+ import { Webhook } from '../structures/Webhook.js';
9
+ import { ChannelFlagsBitField } from '../util/ChannelFlagsBitField.js';
10
+ import { transformGuildForumTag, transformGuildDefaultReaction } from '../util/Channels.js';
11
+ import { ThreadChannelTypes } from '../util/Constants.js';
12
+ import { resolveImage } from '../util/DataResolver.js';
13
+ import { setPosition } from '../util/Util.js';
14
+ import { CachedManager } from './CachedManager.js';
15
+ import { GuildTextThreadManager } from './GuildTextThreadManager.js';
16
+
17
+ let cacheWarningEmitted = false;
18
+
19
+ /**
20
+ * Manages API methods for GuildChannels and stores their cache.
21
+ *
22
+ * @extends {CachedManager}
23
+ */
24
+ export class GuildChannelManager extends CachedManager {
25
+ constructor(guild, iterable) {
26
+ super(guild.client, GuildChannel, iterable);
27
+ const defaultCaching =
28
+ this._cache.constructor.name === 'Collection' ||
29
+ this._cache.maxSize === undefined ||
30
+ this._cache.maxSize === Infinity;
31
+ if (!cacheWarningEmitted && !defaultCaching) {
32
+ cacheWarningEmitted = true;
33
+ process.emitWarning(
34
+ `Overriding the cache handling for ${this.constructor.name} is unsupported and breaks functionality.`,
35
+ 'UnsupportedCacheOverwriteWarning',
36
+ );
37
+ }
38
+
39
+ /**
40
+ * The guild this Manager belongs to
41
+ *
42
+ * @type {Guild}
43
+ */
44
+ this.guild = guild;
45
+ }
46
+
47
+ /**
48
+ * The number of channels in this managers cache excluding thread channels
49
+ * that do not count towards a guild's maximum channels restriction.
50
+ *
51
+ * @type {number}
52
+ * @readonly
53
+ */
54
+ get channelCountWithoutThreads() {
55
+ return this.cache.reduce((acc, channel) => {
56
+ if (ThreadChannelTypes.includes(channel.type)) return acc;
57
+ return acc + 1;
58
+ }, 0);
59
+ }
60
+
61
+ /**
62
+ * The cache of this Manager
63
+ *
64
+ * @type {Collection<Snowflake, GuildChannel|ThreadChannel>}
65
+ * @name GuildChannelManager#cache
66
+ */
67
+
68
+ _add(channel) {
69
+ const existing = this.cache.get(channel.id);
70
+ if (existing) return existing;
71
+ this.cache.set(channel.id, channel);
72
+ return channel;
73
+ }
74
+
75
+ /**
76
+ * Data that can be resolved to give a Guild Channel object. This can be:
77
+ * - A GuildChannel object
78
+ * - A ThreadChannel object
79
+ * - A Snowflake
80
+ *
81
+ * @typedef {GuildChannel|ThreadChannel|Snowflake} GuildChannelResolvable
82
+ */
83
+
84
+ /**
85
+ * Resolves a GuildChannelResolvable to a Channel object.
86
+ *
87
+ * @param {GuildChannelResolvable} channel The GuildChannel resolvable to resolve
88
+ * @returns {?(GuildChannel|ThreadChannel)}
89
+ */
90
+ resolve(channel) {
91
+ if (channel instanceof ThreadChannel) return super.cache.get(channel.id) ?? null;
92
+ return super.resolve(channel);
93
+ }
94
+
95
+ /**
96
+ * Resolves a GuildChannelResolvable to a channel id.
97
+ *
98
+ * @param {GuildChannelResolvable} channel The GuildChannel resolvable to resolve
99
+ * @returns {?Snowflake}
100
+ */
101
+ resolveId(channel) {
102
+ if (channel instanceof ThreadChannel) return super.resolveId(channel.id);
103
+ return super.resolveId(channel);
104
+ }
105
+
106
+ /**
107
+ * Data that can be resolved to an Announcement Channel object. This can be:
108
+ * - An Announcement Channel object
109
+ * - A Snowflake
110
+ *
111
+ * @typedef {AnnouncementChannel|Snowflake} AnnouncementChannelResolvable
112
+ */
113
+
114
+ /**
115
+ * Represents the followed channel data.
116
+ *
117
+ * @typedef {Object} FollowedChannelData
118
+ * @property {Snowflake} channelId Source channel id
119
+ * @property {Snowflake} webhookId Created webhook id in the target channel
120
+ */
121
+
122
+ /**
123
+ * Adds the target channel to a channel's followers.
124
+ *
125
+ * @param {AnnouncementChannelResolvable} channel The channel to follow
126
+ * @param {TextChannelResolvable} targetChannel The channel where published announcements will be posted at
127
+ * @param {string} [reason] Reason for creating the webhook
128
+ * @returns {Promise<FollowedChannelData>} Returns the data for the followed channel
129
+ */
130
+ async addFollower(channel, targetChannel, reason) {
131
+ const channelId = this.resolveId(channel);
132
+ if (!channelId) {
133
+ throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'channel', 'AnnouncementChannelResolvable');
134
+ }
135
+
136
+ const targetChannelId = this.resolveId(targetChannel);
137
+ if (!targetChannelId) {
138
+ throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'targetChannel', 'TextChannelResolvable');
139
+ }
140
+
141
+ const data = await this.client.rest.post(Routes.channelFollowers(channelId), {
142
+ body: { webhook_channel_id: targetChannelId },
143
+ reason,
144
+ });
145
+ return { channelId: data.channel_id, webhookId: data.webhook_id };
146
+ }
147
+
148
+ /**
149
+ * Options used to create a new channel in a guild.
150
+ *
151
+ * @typedef {CategoryCreateChannelOptions} GuildChannelCreateOptions
152
+ * @property {?CategoryChannelResolvable} [parent] Parent of the new channel
153
+ */
154
+
155
+ /**
156
+ * Creates a new channel in the guild.
157
+ *
158
+ * @param {GuildChannelCreateOptions} options Options for creating the new channel
159
+ * @returns {Promise<GuildChannel>}
160
+ * @example
161
+ * // Create a new text channel
162
+ * guild.channels.create({ name: 'new-general', reason: 'Needed a cool new channel' })
163
+ * .then(console.log)
164
+ * .catch(console.error);
165
+ * @example
166
+ * // Create a new channel with permission overwrites
167
+ * guild.channels.create({
168
+ * name: 'new-general',
169
+ * type: ChannelType.GuildVoice,
170
+ * permissionOverwrites: [
171
+ * {
172
+ * id: message.author.id,
173
+ * deny: [PermissionFlagsBits.ViewChannel],
174
+ * },
175
+ * ],
176
+ * })
177
+ */
178
+ async create({
179
+ name,
180
+ type,
181
+ topic,
182
+ nsfw,
183
+ bitrate,
184
+ userLimit,
185
+ parent,
186
+ permissionOverwrites,
187
+ position,
188
+ rateLimitPerUser,
189
+ rtcRegion,
190
+ videoQualityMode,
191
+ defaultThreadRateLimitPerUser,
192
+ availableTags,
193
+ defaultReactionEmoji,
194
+ defaultAutoArchiveDuration,
195
+ defaultSortOrder,
196
+ defaultForumLayout,
197
+ reason,
198
+ }) {
199
+ const data = await this.client.rest.post(Routes.guildChannels(this.guild.id), {
200
+ body: {
201
+ name,
202
+ topic,
203
+ type,
204
+ nsfw,
205
+ bitrate,
206
+ user_limit: userLimit,
207
+ parent_id: parent && this.client.channels.resolveId(parent),
208
+ position,
209
+ permission_overwrites: permissionOverwrites?.map(overwrite =>
210
+ PermissionOverwrites.resolve(overwrite, this.guild),
211
+ ),
212
+ rate_limit_per_user: rateLimitPerUser,
213
+ rtc_region: rtcRegion,
214
+ video_quality_mode: videoQualityMode,
215
+ default_thread_rate_limit_per_user: defaultThreadRateLimitPerUser,
216
+ available_tags: availableTags?.map(availableTag => transformGuildForumTag(availableTag)),
217
+ default_reaction_emoji: defaultReactionEmoji && transformGuildDefaultReaction(defaultReactionEmoji),
218
+ default_auto_archive_duration: defaultAutoArchiveDuration,
219
+ default_sort_order: defaultSortOrder,
220
+ default_forum_layout: defaultForumLayout,
221
+ },
222
+ reason,
223
+ });
224
+ return this.client.actions.ChannelCreate.handle(data).channel;
225
+ }
226
+
227
+ /**
228
+ * @typedef {ChannelWebhookCreateOptions} WebhookCreateOptions
229
+ * @property {TextChannel|AnnouncementChannel|VoiceChannel|StageChannel|ForumChannel|MediaChannel|Snowflake} channel
230
+ * The channel to create the webhook for
231
+ */
232
+
233
+ /**
234
+ * Creates a webhook for the channel.
235
+ *
236
+ * @param {WebhookCreateOptions} options Options for creating the webhook
237
+ * @returns {Promise<Webhook>} Returns the created Webhook
238
+ * @example
239
+ * // Create a webhook for the current channel
240
+ * guild.channels.createWebhook({
241
+ * channel: '222197033908436994',
242
+ * name: 'Snek',
243
+ * avatar: 'https://i.imgur.com/mI8XcpG.jpg',
244
+ * reason: 'Needed a cool new Webhook'
245
+ * })
246
+ * .then(console.log)
247
+ * .catch(console.error)
248
+ */
249
+ async createWebhook({ channel, name, avatar, reason }) {
250
+ const channelId = this.resolveId(channel);
251
+ if (!channelId) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'channel', 'GuildChannelResolvable');
252
+
253
+ const resolvedAvatar = await resolveImage(avatar);
254
+
255
+ const data = await this.client.rest.post(Routes.channelWebhooks(channelId), {
256
+ body: {
257
+ name,
258
+ avatar: resolvedAvatar,
259
+ },
260
+ reason,
261
+ });
262
+
263
+ return new Webhook(this.client, data);
264
+ }
265
+
266
+ /**
267
+ * Options used to edit a guild channel.
268
+ *
269
+ * @typedef {Object} GuildChannelEditOptions
270
+ * @property {string} [name] The name of the channel
271
+ * @property {ChannelType} [type] The type of the channel (only conversion between text and announcement is supported)
272
+ * @property {number} [position] The position of the channel
273
+ * @property {?string} [topic] The topic of the text channel
274
+ * @property {boolean} [nsfw] Whether the channel is NSFW
275
+ * @property {number} [bitrate] The bitrate of the voice channel
276
+ * @property {number} [userLimit] The user limit of the voice channel
277
+ * @property {?CategoryChannelResolvable} [parent] The parent of the channel
278
+ * @property {boolean} [lockPermissions]
279
+ * Lock the permissions of the channel to what the parent's permissions are
280
+ * @property {OverwriteResolvable[]|Collection<Snowflake, OverwriteResolvable>} [permissionOverwrites]
281
+ * Permission overwrites for the channel
282
+ * @property {number} [rateLimitPerUser] The rate limit per user (slowmode) for the channel in seconds
283
+ * @property {ThreadAutoArchiveDuration} [defaultAutoArchiveDuration]
284
+ * The default auto archive duration for all new threads in this channel
285
+ * @property {?string} [rtcRegion] The RTC region of the channel
286
+ * @property {?VideoQualityMode} [videoQualityMode] The camera video quality mode of the channel
287
+ * @property {GuildForumTagData[]} [availableTags] The tags to set as available in a forum channel
288
+ * @property {?DefaultReactionEmoji} [defaultReactionEmoji] The emoji to set as the default reaction emoji
289
+ * @property {number} [defaultThreadRateLimitPerUser] The rate limit per user (slowmode) to set on forum posts
290
+ * @property {ChannelFlagsResolvable} [flags] The flags to set on the channel
291
+ * @property {?SortOrderType} [defaultSortOrder] The default sort order mode to set on the channel
292
+ * @property {ForumLayoutType} [defaultForumLayout] The default forum layout to set on the channel
293
+ * @property {string} [reason] Reason for editing this channel
294
+ */
295
+
296
+ /**
297
+ * Edits the channel.
298
+ *
299
+ * @param {GuildChannelResolvable} channel The channel to edit
300
+ * @param {GuildChannelEditOptions} options Options for editing the channel
301
+ * @returns {Promise<GuildChannel>}
302
+ * @example
303
+ * // Edit a channel
304
+ * guild.channels.edit('222197033908436994', { name: 'new-channel' })
305
+ * .then(console.log)
306
+ * .catch(console.error);
307
+ */
308
+ async edit(channel, options) {
309
+ const resolvedChannel = this.resolve(channel);
310
+ if (!resolvedChannel) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'channel', 'GuildChannelResolvable');
311
+
312
+ const parentId = options.parent && this.client.channels.resolveId(options.parent);
313
+
314
+ if (options.position !== undefined) {
315
+ await this.setPosition(resolvedChannel, options.position, { position: options.position, reason: options.reason });
316
+ }
317
+
318
+ let permission_overwrites = options.permissionOverwrites?.map(overwrite =>
319
+ PermissionOverwrites.resolve(overwrite, this.guild),
320
+ );
321
+
322
+ if (options.lockPermissions) {
323
+ if (parentId) {
324
+ const newParent = this.cache.get(parentId);
325
+ if (newParent?.type === ChannelType.GuildCategory) {
326
+ permission_overwrites = newParent.permissionOverwrites.cache.map(overwrite =>
327
+ PermissionOverwrites.resolve(overwrite, this.guild),
328
+ );
329
+ }
330
+ } else if (resolvedChannel.parent) {
331
+ permission_overwrites = resolvedChannel.parent.permissionOverwrites.cache.map(overwrite =>
332
+ PermissionOverwrites.resolve(overwrite, this.guild),
333
+ );
334
+ }
335
+ }
336
+
337
+ const newData = await this.client.rest.patch(Routes.channel(resolvedChannel.id), {
338
+ body: {
339
+ name: options.name,
340
+ type: options.type,
341
+ topic: options.topic,
342
+ nsfw: options.nsfw,
343
+ bitrate: options.bitrate,
344
+ user_limit: options.userLimit,
345
+ rtc_region: options.rtcRegion,
346
+ video_quality_mode: options.videoQualityMode,
347
+ parent_id: parentId,
348
+ lock_permissions: options.lockPermissions,
349
+ rate_limit_per_user: options.rateLimitPerUser,
350
+ default_auto_archive_duration: options.defaultAutoArchiveDuration,
351
+ permission_overwrites,
352
+ available_tags: options.availableTags?.map(availableTag => transformGuildForumTag(availableTag)),
353
+ default_reaction_emoji:
354
+ options.defaultReactionEmoji && transformGuildDefaultReaction(options.defaultReactionEmoji),
355
+ default_thread_rate_limit_per_user: options.defaultThreadRateLimitPerUser,
356
+ flags: 'flags' in options ? ChannelFlagsBitField.resolve(options.flags) : undefined,
357
+ default_sort_order: options.defaultSortOrder,
358
+ default_forum_layout: options.defaultForumLayout,
359
+ },
360
+ reason: options.reason,
361
+ });
362
+
363
+ return this.client.actions.ChannelUpdate.handle(newData).updated;
364
+ }
365
+
366
+ /**
367
+ * Sets a new position for the guild channel.
368
+ *
369
+ * @param {GuildChannelResolvable} channel The channel to set the position for
370
+ * @param {number} position The new position for the guild channel
371
+ * @param {SetChannelPositionOptions} options Options for setting position
372
+ * @returns {Promise<GuildChannel>}
373
+ * @example
374
+ * // Set a new channel position
375
+ * guild.channels.setPosition('222078374472843266', 2)
376
+ * .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))
377
+ * .catch(console.error);
378
+ */
379
+ async setPosition(channel, position, { relative, reason } = {}) {
380
+ const resolvedChannel = this.resolve(channel);
381
+ if (!resolvedChannel) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'channel', 'GuildChannelResolvable');
382
+
383
+ const updatedChannels = await setPosition(
384
+ resolvedChannel,
385
+ position,
386
+ relative,
387
+ this.guild._sortedChannels(resolvedChannel),
388
+ this.client,
389
+ Routes.guildChannels(this.guild.id),
390
+ reason,
391
+ );
392
+
393
+ this.client.actions.GuildChannelsPositionUpdate.handle({
394
+ guild_id: this.guild.id,
395
+ channels: updatedChannels,
396
+ });
397
+
398
+ return resolvedChannel;
399
+ }
400
+
401
+ /**
402
+ * Obtains one or more guild channels from Discord, or the channel cache if they're already available.
403
+ *
404
+ * @param {Snowflake} [id] The channel's id
405
+ * @param {BaseFetchOptions} [options] Additional options for this fetch
406
+ * @returns {Promise<?GuildChannel|ThreadChannel|Collection<Snowflake, ?GuildChannel>>}
407
+ * @example
408
+ * // Fetch all channels from the guild (excluding threads)
409
+ * message.guild.channels.fetch()
410
+ * .then(channels => console.log(`There are ${channels.size} channels.`))
411
+ * .catch(console.error);
412
+ * @example
413
+ * // Fetch a single channel
414
+ * message.guild.channels.fetch('222197033908436994')
415
+ * .then(channel => console.log(`The channel name is: ${channel.name}`))
416
+ * .catch(console.error);
417
+ */
418
+ async fetch(id, { cache = true, force = false } = {}) {
419
+ if (id && !force) {
420
+ const existing = this.cache.get(id);
421
+ if (existing) return existing;
422
+ }
423
+
424
+ if (id) {
425
+ const innerData = await this.client.rest.get(Routes.channel(id));
426
+ // Since this is the guild manager, throw if on a different guild
427
+ if (this.guild.id !== innerData.guild_id) throw new DiscordjsError(ErrorCodes.GuildChannelUnowned);
428
+ return this.client.channels._add(innerData, this.guild, { cache });
429
+ }
430
+
431
+ const data = await this.client.rest.get(Routes.guildChannels(this.guild.id));
432
+ const channels = new Collection();
433
+ for (const channel of data) channels.set(channel.id, this.client.channels._add(channel, this.guild, { cache }));
434
+ return channels;
435
+ }
436
+
437
+ /**
438
+ * Fetches all webhooks for the channel.
439
+ *
440
+ * @param {GuildChannelResolvable} channel The channel to fetch webhooks for
441
+ * @returns {Promise<Collection<Snowflake, Webhook>>}
442
+ * @example
443
+ * // Fetch webhooks
444
+ * guild.channels.fetchWebhooks('769862166131245066')
445
+ * .then(hooks => console.log(`This channel has ${hooks.size} hooks`))
446
+ * .catch(console.error);
447
+ */
448
+ async fetchWebhooks(channel) {
449
+ const id = this.resolveId(channel);
450
+ if (!id) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'channel', 'GuildChannelResolvable');
451
+ const data = await this.client.rest.get(Routes.channelWebhooks(id));
452
+ return data.reduce((hooks, hook) => hooks.set(hook.id, new Webhook(this.client, hook)), new Collection());
453
+ }
454
+
455
+ /**
456
+ * Data that can be resolved to give a Category Channel object. This can be:
457
+ * - A CategoryChannel object
458
+ * - A Snowflake
459
+ *
460
+ * @typedef {CategoryChannel|Snowflake} CategoryChannelResolvable
461
+ */
462
+
463
+ /**
464
+ * The data needed for updating a channel's position.
465
+ *
466
+ * @typedef {Object} ChannelPosition
467
+ * @property {GuildChannel|Snowflake} channel Channel to update
468
+ * @property {number} [position] New position for the channel
469
+ * @property {CategoryChannelResolvable} [parent] Parent channel for this channel
470
+ * @property {boolean} [lockPermissions] If the overwrites should be locked to the parents overwrites
471
+ */
472
+
473
+ /**
474
+ * Batch-updates the guild's channels' positions.
475
+ * <info>Only one channel's parent can be changed at a time</info>
476
+ *
477
+ * @param {ChannelPosition[]} channelPositions Channel positions to update
478
+ * @returns {Promise<Guild>}
479
+ * @example
480
+ * guild.channels.setPositions([{ channel: channelId, position: newChannelIndex }])
481
+ * .then(guild => console.log(`Updated channel positions for ${guild}`))
482
+ * .catch(console.error);
483
+ */
484
+ async setPositions(channelPositions) {
485
+ const resolvedChannelPositions = channelPositions.map(channelPosition => ({
486
+ id: this.client.channels.resolveId(channelPosition.channel),
487
+ position: channelPosition.position,
488
+ lock_permissions: channelPosition.lockPermissions,
489
+ parent_id: channelPosition.parent === undefined ? undefined : this.resolveId(channelPosition.parent),
490
+ }));
491
+
492
+ await this.client.rest.patch(Routes.guildChannels(this.guild.id), { body: resolvedChannelPositions });
493
+
494
+ return this.client.actions.GuildChannelsPositionUpdate.handle({
495
+ guild_id: this.guild.id,
496
+ channels: resolvedChannelPositions,
497
+ }).guild;
498
+ }
499
+
500
+ /**
501
+ * Data returned from fetching threads.
502
+ *
503
+ * @typedef {Object} FetchedThreads
504
+ * @property {Collection<Snowflake, ThreadChannel>} threads The threads that were fetched
505
+ * @property {Collection<Snowflake, ThreadMember>} members The thread members in the received threads
506
+ */
507
+
508
+ /**
509
+ * Obtains all active thread channels in the guild.
510
+ *
511
+ * @param {boolean} [cache=true] Whether to cache the fetched data
512
+ * @returns {Promise<FetchedThreads>}
513
+ * @example
514
+ * // Fetch all threads from the guild
515
+ * message.guild.channels.fetchActiveThreads()
516
+ * .then(fetched => console.log(`There are ${fetched.threads.size} threads.`))
517
+ * .catch(console.error);
518
+ */
519
+ async fetchActiveThreads(cache = true) {
520
+ const data = await this.rawFetchGuildActiveThreads();
521
+ return GuildTextThreadManager._mapThreads(data, this.client, { guild: this.guild, cache });
522
+ }
523
+
524
+ /**
525
+ * `GET /guilds/{guild.id}/threads/active`
526
+ *
527
+ * @private
528
+ * @returns {Promise<RESTGetAPIGuildThreadsResult>}
529
+ */
530
+ async rawFetchGuildActiveThreads() {
531
+ return this.client.rest.get(Routes.guildActiveThreads(this.guild.id));
532
+ }
533
+
534
+ /**
535
+ * Deletes the channel.
536
+ *
537
+ * @param {GuildChannelResolvable} channel The channel to delete
538
+ * @param {string} [reason] Reason for deleting this channel
539
+ * @returns {Promise<void>}
540
+ * @example
541
+ * // Delete the channel
542
+ * guild.channels.delete('858850993013260338', 'making room for new channels')
543
+ * .then(console.log)
544
+ * .catch(console.error);
545
+ */
546
+ async delete(channel, reason) {
547
+ const id = this.resolveId(channel);
548
+ if (!id) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'channel', 'GuildChannelResolvable');
549
+ await this.client.rest.delete(Routes.channel(id), { reason });
550
+ this.client.actions.ChannelDelete.handle({ id });
551
+ }
552
+ }