discord-sb.js 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 (366) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +2 -0
  3. package/package.json +91 -0
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +86 -0
  6. package/src/client/Client.js +978 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +116 -0
  9. package/src/client/actions/ActionsManager.js +80 -0
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  11. package/src/client/actions/AutoModerationActionExecution.js +27 -0
  12. package/src/client/actions/AutoModerationRuleCreate.js +28 -0
  13. package/src/client/actions/AutoModerationRuleDelete.js +32 -0
  14. package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
  15. package/src/client/actions/ChannelCreate.js +23 -0
  16. package/src/client/actions/ChannelDelete.js +39 -0
  17. package/src/client/actions/ChannelUpdate.js +43 -0
  18. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  19. package/src/client/actions/GuildBanAdd.js +20 -0
  20. package/src/client/actions/GuildBanRemove.js +25 -0
  21. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  22. package/src/client/actions/GuildDelete.js +65 -0
  23. package/src/client/actions/GuildEmojiCreate.js +20 -0
  24. package/src/client/actions/GuildEmojiDelete.js +21 -0
  25. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  26. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  27. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  28. package/src/client/actions/GuildMemberRemove.js +33 -0
  29. package/src/client/actions/GuildMemberUpdate.js +44 -0
  30. package/src/client/actions/GuildRoleCreate.js +25 -0
  31. package/src/client/actions/GuildRoleDelete.js +31 -0
  32. package/src/client/actions/GuildRoleUpdate.js +39 -0
  33. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  34. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  35. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  36. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  37. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  38. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  39. package/src/client/actions/GuildStickerCreate.js +20 -0
  40. package/src/client/actions/GuildStickerDelete.js +21 -0
  41. package/src/client/actions/GuildStickerUpdate.js +20 -0
  42. package/src/client/actions/GuildStickersUpdate.js +34 -0
  43. package/src/client/actions/GuildUpdate.js +33 -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 +50 -0
  47. package/src/client/actions/MessageDelete.js +32 -0
  48. package/src/client/actions/MessageDeleteBulk.js +46 -0
  49. package/src/client/actions/MessagePollVoteAdd.js +33 -0
  50. package/src/client/actions/MessagePollVoteRemove.js +33 -0
  51. package/src/client/actions/MessageReactionAdd.js +68 -0
  52. package/src/client/actions/MessageReactionRemove.js +50 -0
  53. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  54. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  55. package/src/client/actions/MessageUpdate.js +26 -0
  56. package/src/client/actions/PresenceUpdate.js +50 -0
  57. package/src/client/actions/StageInstanceCreate.js +28 -0
  58. package/src/client/actions/StageInstanceDelete.js +33 -0
  59. package/src/client/actions/StageInstanceUpdate.js +30 -0
  60. package/src/client/actions/ThreadCreate.js +24 -0
  61. package/src/client/actions/ThreadDelete.js +32 -0
  62. package/src/client/actions/ThreadListSync.js +59 -0
  63. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  64. package/src/client/actions/ThreadMembersUpdate.js +34 -0
  65. package/src/client/actions/TypingStart.js +29 -0
  66. package/src/client/actions/UserUpdate.js +35 -0
  67. package/src/client/actions/VoiceStateUpdate.js +50 -0
  68. package/src/client/actions/WebhooksUpdate.js +20 -0
  69. package/src/client/voice/ClientVoiceManager.js +151 -0
  70. package/src/client/voice/VoiceConnection.js +1249 -0
  71. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  72. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  73. package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
  74. package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
  75. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  76. package/src/client/voice/networking/VoiceUDPClient.js +173 -0
  77. package/src/client/voice/networking/VoiceWebSocket.js +286 -0
  78. package/src/client/voice/player/MediaPlayer.js +321 -0
  79. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  80. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  81. package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
  82. package/src/client/voice/receiver/PacketHandler.js +260 -0
  83. package/src/client/voice/receiver/Receiver.js +96 -0
  84. package/src/client/voice/receiver/Recorder.js +173 -0
  85. package/src/client/voice/util/Function.js +116 -0
  86. package/src/client/voice/util/PlayInterface.js +122 -0
  87. package/src/client/voice/util/Secretbox.js +64 -0
  88. package/src/client/voice/util/Silence.js +16 -0
  89. package/src/client/voice/util/Socket.js +62 -0
  90. package/src/client/voice/util/VolumeInterface.js +104 -0
  91. package/src/client/websocket/WebSocketManager.js +392 -0
  92. package/src/client/websocket/WebSocketShard.js +907 -0
  93. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  94. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  95. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  97. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  98. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  99. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  100. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  101. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  102. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  103. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  104. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  105. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  106. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  107. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  108. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  109. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  110. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  112. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  113. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -0
  114. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  115. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  116. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  118. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  119. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  120. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  121. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  122. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  128. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  129. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  130. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  131. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  132. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  133. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  134. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  135. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  136. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  140. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  141. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  142. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  143. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  144. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  145. package/src/client/websocket/handlers/READY.js +121 -0
  146. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  147. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  148. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  149. package/src/client/websocket/handlers/RESUMED.js +14 -0
  150. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  151. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  152. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  153. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  154. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  155. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  156. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  157. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  158. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  159. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  160. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  161. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  162. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
  163. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  164. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  165. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  166. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  167. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  168. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  169. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  170. package/src/client/websocket/handlers/index.js +84 -0
  171. package/src/errors/DJSError.js +61 -0
  172. package/src/errors/Messages.js +217 -0
  173. package/src/errors/index.js +4 -0
  174. package/src/index.js +172 -0
  175. package/src/managers/ApplicationCommandManager.js +264 -0
  176. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  177. package/src/managers/AutoModerationRuleManager.js +296 -0
  178. package/src/managers/BaseGuildEmojiManager.js +80 -0
  179. package/src/managers/BaseManager.js +19 -0
  180. package/src/managers/BillingManager.js +66 -0
  181. package/src/managers/CachedManager.js +71 -0
  182. package/src/managers/ChannelManager.js +148 -0
  183. package/src/managers/ClientUserSettingManager.js +372 -0
  184. package/src/managers/DataManager.js +61 -0
  185. package/src/managers/DeveloperManager.js +254 -0
  186. package/src/managers/GuildBanManager.js +250 -0
  187. package/src/managers/GuildChannelManager.js +488 -0
  188. package/src/managers/GuildEmojiManager.js +171 -0
  189. package/src/managers/GuildEmojiRoleManager.js +118 -0
  190. package/src/managers/GuildForumThreadManager.js +108 -0
  191. package/src/managers/GuildInviteManager.js +213 -0
  192. package/src/managers/GuildManager.js +338 -0
  193. package/src/managers/GuildMemberManager.js +599 -0
  194. package/src/managers/GuildMemberRoleManager.js +195 -0
  195. package/src/managers/GuildScheduledEventManager.js +314 -0
  196. package/src/managers/GuildSettingManager.js +155 -0
  197. package/src/managers/GuildStickerManager.js +179 -0
  198. package/src/managers/GuildTextThreadManager.js +98 -0
  199. package/src/managers/InteractionManager.js +39 -0
  200. package/src/managers/MessageManager.js +423 -0
  201. package/src/managers/PermissionOverwriteManager.js +164 -0
  202. package/src/managers/PresenceManager.js +71 -0
  203. package/src/managers/QuestManager.js +353 -0
  204. package/src/managers/ReactionManager.js +67 -0
  205. package/src/managers/ReactionUserManager.js +73 -0
  206. package/src/managers/RelationshipManager.js +278 -0
  207. package/src/managers/RoleManager.js +448 -0
  208. package/src/managers/SessionManager.js +66 -0
  209. package/src/managers/StageInstanceManager.js +162 -0
  210. package/src/managers/ThreadManager.js +175 -0
  211. package/src/managers/ThreadMemberManager.js +186 -0
  212. package/src/managers/UserManager.js +136 -0
  213. package/src/managers/UserNoteManager.js +53 -0
  214. package/src/managers/VoiceStateManager.js +59 -0
  215. package/src/rest/APIRequest.js +154 -0
  216. package/src/rest/APIRouter.js +53 -0
  217. package/src/rest/DiscordAPIError.js +119 -0
  218. package/src/rest/HTTPError.js +62 -0
  219. package/src/rest/RESTManager.js +67 -0
  220. package/src/rest/RateLimitError.js +55 -0
  221. package/src/rest/RequestHandler.js +466 -0
  222. package/src/sharding/Shard.js +444 -0
  223. package/src/sharding/ShardClientUtil.js +279 -0
  224. package/src/sharding/ShardingManager.js +319 -0
  225. package/src/structures/AnonymousGuild.js +98 -0
  226. package/src/structures/ApplicationCommand.js +593 -0
  227. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
  228. package/src/structures/AutoModerationActionExecution.js +89 -0
  229. package/src/structures/AutoModerationRule.js +294 -0
  230. package/src/structures/AutocompleteInteraction.js +107 -0
  231. package/src/structures/Base.js +43 -0
  232. package/src/structures/BaseCommandInteraction.js +211 -0
  233. package/src/structures/BaseGuild.js +116 -0
  234. package/src/structures/BaseGuildEmoji.js +56 -0
  235. package/src/structures/BaseGuildTextChannel.js +191 -0
  236. package/src/structures/BaseGuildVoiceChannel.js +241 -0
  237. package/src/structures/BaseMessageComponent.js +181 -0
  238. package/src/structures/ButtonInteraction.js +11 -0
  239. package/src/structures/CallState.js +63 -0
  240. package/src/structures/CategoryChannel.js +85 -0
  241. package/src/structures/Channel.js +284 -0
  242. package/src/structures/ClientPresence.js +77 -0
  243. package/src/structures/ClientUser.js +655 -0
  244. package/src/structures/CommandInteraction.js +41 -0
  245. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  246. package/src/structures/ContainerComponent.js +68 -0
  247. package/src/structures/ContextMenuInteraction.js +65 -0
  248. package/src/structures/DMChannel.js +219 -0
  249. package/src/structures/DirectoryChannel.js +20 -0
  250. package/src/structures/Emoji.js +148 -0
  251. package/src/structures/FileComponent.js +49 -0
  252. package/src/structures/ForumChannel.js +31 -0
  253. package/src/structures/GroupDMChannel.js +394 -0
  254. package/src/structures/Guild.js +1791 -0
  255. package/src/structures/GuildAuditLogs.js +746 -0
  256. package/src/structures/GuildBan.js +59 -0
  257. package/src/structures/GuildBoost.js +108 -0
  258. package/src/structures/GuildChannel.js +470 -0
  259. package/src/structures/GuildEmoji.js +161 -0
  260. package/src/structures/GuildMember.js +636 -0
  261. package/src/structures/GuildPreview.js +191 -0
  262. package/src/structures/GuildPreviewEmoji.js +27 -0
  263. package/src/structures/GuildScheduledEvent.js +536 -0
  264. package/src/structures/GuildTemplate.js +236 -0
  265. package/src/structures/Integration.js +188 -0
  266. package/src/structures/IntegrationApplication.js +96 -0
  267. package/src/structures/Interaction.js +290 -0
  268. package/src/structures/InteractionCollector.js +248 -0
  269. package/src/structures/InteractionWebhook.js +43 -0
  270. package/src/structures/Invite.js +358 -0
  271. package/src/structures/InviteGuild.js +23 -0
  272. package/src/structures/InviteStageInstance.js +86 -0
  273. package/src/structures/MediaChannel.js +11 -0
  274. package/src/structures/MediaGalleryComponent.js +41 -0
  275. package/src/structures/MediaGalleryItem.js +47 -0
  276. package/src/structures/Message.js +1252 -0
  277. package/src/structures/MessageActionRow.js +105 -0
  278. package/src/structures/MessageAttachment.js +216 -0
  279. package/src/structures/MessageButton.js +166 -0
  280. package/src/structures/MessageCollector.js +146 -0
  281. package/src/structures/MessageComponentInteraction.js +120 -0
  282. package/src/structures/MessageContextMenuInteraction.js +20 -0
  283. package/src/structures/MessageEmbed.js +596 -0
  284. package/src/structures/MessageMentions.js +273 -0
  285. package/src/structures/MessagePayload.js +354 -0
  286. package/src/structures/MessageReaction.js +181 -0
  287. package/src/structures/MessageSelectMenu.js +141 -0
  288. package/src/structures/Modal.js +161 -0
  289. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  290. package/src/structures/ModalSubmitInteraction.js +119 -0
  291. package/src/structures/NewsChannel.js +32 -0
  292. package/src/structures/OAuth2Guild.js +28 -0
  293. package/src/structures/PermissionOverwrites.js +198 -0
  294. package/src/structures/Poll.js +108 -0
  295. package/src/structures/PollAnswer.js +88 -0
  296. package/src/structures/Presence.js +1157 -0
  297. package/src/structures/ReactionCollector.js +229 -0
  298. package/src/structures/ReactionEmoji.js +31 -0
  299. package/src/structures/Role.js +590 -0
  300. package/src/structures/SectionComponent.js +48 -0
  301. package/src/structures/SelectMenuInteraction.js +21 -0
  302. package/src/structures/SeparatorComponent.js +48 -0
  303. package/src/structures/Session.js +81 -0
  304. package/src/structures/StageChannel.js +104 -0
  305. package/src/structures/StageInstance.js +208 -0
  306. package/src/structures/Sticker.js +310 -0
  307. package/src/structures/StickerPack.js +95 -0
  308. package/src/structures/StoreChannel.js +56 -0
  309. package/src/structures/Team.js +118 -0
  310. package/src/structures/TeamMember.js +80 -0
  311. package/src/structures/TextChannel.js +33 -0
  312. package/src/structures/TextDisplayComponent.js +40 -0
  313. package/src/structures/TextInputComponent.js +132 -0
  314. package/src/structures/ThreadChannel.js +605 -0
  315. package/src/structures/ThreadMember.js +105 -0
  316. package/src/structures/ThreadOnlyChannel.js +249 -0
  317. package/src/structures/ThumbnailComponent.js +57 -0
  318. package/src/structures/Typing.js +74 -0
  319. package/src/structures/UnfurledMediaItem.js +29 -0
  320. package/src/structures/User.js +640 -0
  321. package/src/structures/UserContextMenuInteraction.js +29 -0
  322. package/src/structures/VoiceChannel.js +110 -0
  323. package/src/structures/VoiceChannelEffect.js +69 -0
  324. package/src/structures/VoiceRegion.js +53 -0
  325. package/src/structures/VoiceState.js +354 -0
  326. package/src/structures/WebEmbed.js +373 -0
  327. package/src/structures/Webhook.js +478 -0
  328. package/src/structures/WelcomeChannel.js +60 -0
  329. package/src/structures/WelcomeScreen.js +48 -0
  330. package/src/structures/Widget.js +87 -0
  331. package/src/structures/WidgetMember.js +99 -0
  332. package/src/structures/interfaces/Application.js +953 -0
  333. package/src/structures/interfaces/Collector.js +300 -0
  334. package/src/structures/interfaces/InteractionResponses.js +313 -0
  335. package/src/structures/interfaces/TextBasedChannel.js +821 -0
  336. package/src/util/APITypes.js +59 -0
  337. package/src/util/ActivityFlags.js +44 -0
  338. package/src/util/ApplicationFlags.js +76 -0
  339. package/src/util/AttachmentFlags.js +38 -0
  340. package/src/util/BitField.js +170 -0
  341. package/src/util/ChannelFlags.js +45 -0
  342. package/src/util/Constants.js +1914 -0
  343. package/src/util/DataResolver.js +146 -0
  344. package/src/util/Formatters.js +228 -0
  345. package/src/util/GuildMemberFlags.js +43 -0
  346. package/src/util/Intents.js +74 -0
  347. package/src/util/InviteFlags.js +34 -0
  348. package/src/util/LimitedCollection.js +131 -0
  349. package/src/util/MessageFlags.js +63 -0
  350. package/src/util/Options.js +358 -0
  351. package/src/util/Permissions.js +202 -0
  352. package/src/util/PremiumUsageFlags.js +31 -0
  353. package/src/util/PurchasedFlags.js +33 -0
  354. package/src/util/RemoteAuth.js +415 -0
  355. package/src/util/RoleFlags.js +37 -0
  356. package/src/util/SnowflakeUtil.js +92 -0
  357. package/src/util/Speaking.js +33 -0
  358. package/src/util/Sweepers.js +466 -0
  359. package/src/util/SystemChannelFlags.js +55 -0
  360. package/src/util/ThreadMemberFlags.js +30 -0
  361. package/src/util/UserFlags.js +104 -0
  362. package/src/util/Util.js +1048 -0
  363. package/typings/enums.d.ts +439 -0
  364. package/typings/index.d.ts +8505 -0
  365. package/typings/index.test-d.ts +0 -0
  366. package/typings/rawDataTypes.d.ts +403 -0
@@ -0,0 +1,181 @@
1
+ 'use strict';
2
+
3
+ const GuildEmoji = require('./GuildEmoji');
4
+ const ReactionEmoji = require('./ReactionEmoji');
5
+ const ReactionUserManager = require('../managers/ReactionUserManager');
6
+ const Util = require('../util/Util');
7
+
8
+ /**
9
+ * Represents a reaction to a message.
10
+ */
11
+ class MessageReaction {
12
+ constructor(client, data, message) {
13
+ /**
14
+ * The client that instantiated this message reaction
15
+ * @name MessageReaction#client
16
+ * @type {Client}
17
+ * @readonly
18
+ */
19
+ Object.defineProperty(this, 'client', { value: client });
20
+
21
+ /**
22
+ * The message that this reaction refers to
23
+ * @type {Message}
24
+ */
25
+ this.message = message;
26
+
27
+ /**
28
+ * Whether the client has given this reaction
29
+ * @type {boolean}
30
+ */
31
+ this.me = data.me;
32
+
33
+ /**
34
+ * Whether the client has super-reacted using this emoji
35
+ * @type {boolean}
36
+ */
37
+ this.meBurst = Boolean(data.me_burst);
38
+
39
+ /**
40
+ * A manager of the users that have given this reaction
41
+ * @type {ReactionUserManager}
42
+ */
43
+ this.users = new ReactionUserManager(this, this.me ? [client.user] : []);
44
+
45
+ this._emoji = new ReactionEmoji(this, data.emoji);
46
+
47
+ this.burstColors = null;
48
+
49
+ this._patch(data);
50
+ }
51
+
52
+ _patch(data) {
53
+ if (data.burst_colors) {
54
+ /**
55
+ * Hexadecimal colors used for this super reaction
56
+ * @type {?string[]}
57
+ */
58
+ this.burstColors = data.burst_colors;
59
+ }
60
+
61
+ if ('count' in data) {
62
+ /**
63
+ * The number of people that have given the same reaction
64
+ * @type {?number}
65
+ */
66
+ this.count ??= data.count;
67
+ }
68
+
69
+ if ('count_details' in data) {
70
+ /**
71
+ * The reaction count details object contains information about super and normal reaction counts.
72
+ * @typedef {Object} ReactionCountDetailsData
73
+ * @property {number} burst Count of super reactions
74
+ * @property {number} normal Count of normal reactions
75
+ */
76
+
77
+ /**
78
+ * The reaction count details object contains information about super and normal reaction counts.
79
+ * @type {ReactionCountDetailsData}
80
+ */
81
+ this.countDetails = {
82
+ burst: data.count_details.burst,
83
+ normal: data.count_details.normal,
84
+ };
85
+ } else {
86
+ this.countDetails ??= { burst: 0, normal: 0 };
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Removes all users from this reaction.
92
+ * @returns {Promise<MessageReaction>}
93
+ */
94
+ async remove() {
95
+ await this.client.api
96
+ .channels(this.message.channelId)
97
+ .messages(this.message.id)
98
+ .reactions(this._emoji.identifier)
99
+ .delete();
100
+ return this;
101
+ }
102
+
103
+ /**
104
+ * The emoji of this reaction. Either a {@link GuildEmoji} object for known custom emojis, or a {@link ReactionEmoji}
105
+ * object which has fewer properties. Whatever the prototype of the emoji, it will still have
106
+ * `name`, `id`, `identifier` and `toString()`
107
+ * @type {GuildEmoji|ReactionEmoji}
108
+ * @readonly
109
+ */
110
+ get emoji() {
111
+ if (this._emoji instanceof GuildEmoji) return this._emoji;
112
+ // Check to see if the emoji has become known to the client
113
+ if (this._emoji.id) {
114
+ const emojis = this.message.client.emojis.cache;
115
+ if (emojis.has(this._emoji.id)) {
116
+ const emoji = emojis.get(this._emoji.id);
117
+ this._emoji = emoji;
118
+ return emoji;
119
+ }
120
+ }
121
+ return this._emoji;
122
+ }
123
+
124
+ /**
125
+ * Whether or not this reaction is a partial
126
+ * @type {boolean}
127
+ * @readonly
128
+ */
129
+ get partial() {
130
+ return this.count === null;
131
+ }
132
+
133
+ /**
134
+ * Fetch this reaction.
135
+ * @returns {Promise<MessageReaction>}
136
+ */
137
+ async fetch() {
138
+ const message = await this.message.fetch();
139
+ const existing = message.reactions.cache.get(this.emoji.id ?? this.emoji.name);
140
+ // The reaction won't get set when it has been completely removed
141
+ this._patch(existing ?? { count: 0 });
142
+ return this;
143
+ }
144
+
145
+ toJSON() {
146
+ return Util.flatten(this, { emoji: 'emojiId', message: 'messageId' });
147
+ }
148
+
149
+ _add(user, burst) {
150
+ if (this.partial) return;
151
+ this.users.cache.set(user.id, user);
152
+ if (!this.me || user.id !== this.message.client.user.id || this.count === 0) {
153
+ this.count++;
154
+ if (burst) this.countDetails.burst++;
155
+ else this.countDetails.normal++;
156
+ }
157
+ if (user.id === this.message.client.user.id) {
158
+ if (burst) this.meBurst = true;
159
+ else this.me = true;
160
+ }
161
+ }
162
+
163
+ _remove(user, burst) {
164
+ if (this.partial) return;
165
+ this.users.cache.delete(user.id);
166
+ if (!this.me || user.id !== this.message.client.user.id) {
167
+ this.count--;
168
+ if (burst) this.countDetails.burst--;
169
+ else this.countDetails.normal--;
170
+ }
171
+ if (user.id === this.message.client.user.id) {
172
+ if (burst) this.meBurst = false;
173
+ else this.me = false;
174
+ }
175
+ if (this.count <= 0 && this.users.cache.size === 0) {
176
+ this.message.reactions.cache.delete(this.emoji.id ?? this.emoji.name);
177
+ }
178
+ }
179
+ }
180
+
181
+ module.exports = MessageReaction;
@@ -0,0 +1,141 @@
1
+ 'use strict';
2
+
3
+ const BaseMessageComponent = require('./BaseMessageComponent');
4
+ const { ChannelTypes, MessageComponentTypes } = require('../util/Constants');
5
+ const Util = require('../util/Util');
6
+
7
+ /**
8
+ * Represents a select menu message component
9
+ * @extends {BaseMessageComponent}
10
+ */
11
+ class MessageSelectMenu extends BaseMessageComponent {
12
+ /**
13
+ * @typedef {BaseMessageComponentOptions} MessageSelectMenuOptions
14
+ * @property {string} [customId] A unique string to be sent in the interaction when clicked
15
+ * @property {string} [placeholder] Custom placeholder text to display when nothing is selected
16
+ * @property {number} [minValues] The minimum number of selections required
17
+ * @property {number} [maxValues] The maximum number of selections allowed
18
+ * @property {MessageSelectOption[]} [options] Options for the select menu
19
+ * @property {boolean} [disabled=false] Disables the select menu to prevent interactions
20
+ * @property {ChannelType[]} [channelTypes] List of channel types to include in the ChannelSelect component
21
+ */
22
+
23
+ /**
24
+ * @typedef {Object} MessageSelectOption
25
+ * @property {string} label The text to be displayed on this option
26
+ * @property {string} value The value to be sent for this option
27
+ * @property {?string} description Optional description to show for this option
28
+ * @property {?RawEmoji} emoji Emoji to display for this option
29
+ * @property {boolean} default Render this option as the default selection
30
+ */
31
+
32
+ /**
33
+ * @typedef {Object} MessageSelectOptionData
34
+ * @property {string} label The text to be displayed on this option
35
+ * @property {string} value The value to be sent for this option
36
+ * @property {string} [description] Optional description to show for this option
37
+ * @property {EmojiIdentifierResolvable} [emoji] Emoji to display for this option
38
+ * @property {boolean} [default] Render this option as the default selection
39
+ */
40
+
41
+ /**
42
+ * @param {MessageSelectMenu|MessageSelectMenuOptions} [data={}] MessageSelectMenu to clone or raw data
43
+ */
44
+ constructor(data = {}) {
45
+ super({ type: BaseMessageComponent.resolveType(data.type) ?? 'STRING_SELECT' });
46
+
47
+ this.setup(data);
48
+ }
49
+
50
+ setup(data) {
51
+ super.setup(data);
52
+ /**
53
+ * A unique string to be sent in the interaction when clicked
54
+ * @type {?string}
55
+ */
56
+ this.customId = data.custom_id ?? data.customId ?? null;
57
+
58
+ /**
59
+ * Custom placeholder text to display when nothing is selected
60
+ * @type {?string}
61
+ */
62
+ this.placeholder = data.placeholder ?? null;
63
+
64
+ /**
65
+ * The minimum number of selections required
66
+ * @type {?number}
67
+ */
68
+ this.minValues = data.min_values ?? data.minValues ?? null;
69
+
70
+ /**
71
+ * The maximum number of selections allowed
72
+ * @type {?number}
73
+ */
74
+ this.maxValues = data.max_values ?? data.maxValues ?? null;
75
+
76
+ /**
77
+ * Options for the STRING_SELECT menu
78
+ * @type {MessageSelectOption[]}
79
+ */
80
+ this.options = this.constructor.normalizeOptions(data.options ?? []);
81
+
82
+ /**
83
+ * Whether this select menu is currently disabled
84
+ * @type {boolean}
85
+ */
86
+ this.disabled = data.disabled ?? false;
87
+
88
+ /**
89
+ * Channels that are possible to select in CHANNEL_SELECT menu
90
+ * @type {ChannelType[]}
91
+ */
92
+ this.channelTypes =
93
+ data.channel_types?.map(channelType =>
94
+ typeof channelType === 'string' ? channelType : ChannelTypes[channelType],
95
+ ) ?? [];
96
+ }
97
+
98
+ /**
99
+ * Transforms the select menu into a plain object
100
+ * @returns {APIMessageSelectMenu} The raw data of this select menu
101
+ */
102
+ toJSON() {
103
+ return {
104
+ channel_types: this.channelTypes.map(type => (typeof type === 'string' ? ChannelTypes[type] : type)),
105
+ custom_id: this.customId,
106
+ disabled: this.disabled,
107
+ placeholder: this.placeholder,
108
+ min_values: this.minValues,
109
+ max_values: this.maxValues ?? (this.minValues ? this.options.length : undefined),
110
+ options: this.options,
111
+ type: typeof this.type === 'string' ? MessageComponentTypes[this.type] : this.type,
112
+ };
113
+ }
114
+
115
+ /**
116
+ * Normalizes option input and resolves strings and emojis.
117
+ * @param {MessageSelectOptionData} option The select menu option to normalize
118
+ * @returns {MessageSelectOption}
119
+ */
120
+ static normalizeOption(option) {
121
+ let { label, value, description, emoji } = option;
122
+
123
+ label = Util.verifyString(label, RangeError, 'SELECT_OPTION_LABEL');
124
+ value = Util.verifyString(value, RangeError, 'SELECT_OPTION_VALUE');
125
+ emoji = emoji ? Util.resolvePartialEmoji(emoji) : null;
126
+ description = description ? Util.verifyString(description, RangeError, 'SELECT_OPTION_DESCRIPTION', true) : null;
127
+
128
+ return { label, value, description, emoji, default: option.default ?? false };
129
+ }
130
+
131
+ /**
132
+ * Normalizes option input and resolves strings and emojis.
133
+ * @param {...MessageSelectOptionData|MessageSelectOptionData[]} options The select menu options to normalize
134
+ * @returns {MessageSelectOption[]}
135
+ */
136
+ static normalizeOptions(...options) {
137
+ return options.flat(Infinity).map(option => this.normalizeOption(option));
138
+ }
139
+ }
140
+
141
+ module.exports = MessageSelectMenu;
@@ -0,0 +1,161 @@
1
+ 'use strict';
2
+
3
+ const BaseMessageComponent = require('./BaseMessageComponent');
4
+ const { InteractionTypes } = require('../util/Constants');
5
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
6
+ const Util = require('../util/Util');
7
+
8
+ /**
9
+ * Represents a modal (form) to be shown in response to an interaction
10
+ */
11
+ class Modal {
12
+ /**
13
+ * @param {Object} data Modal to clone or raw data
14
+ * @param {Client} client The client constructing this Modal, if provided
15
+ */
16
+ constructor(data = {}, client = null) {
17
+ /**
18
+ * A list of MessageActionRows in the modal
19
+ * @type {MessageActionRow[]}
20
+ */
21
+ this.components = data.components?.map(c => BaseMessageComponent.create(c, client)) ?? [];
22
+
23
+ /**
24
+ * A unique string to be sent in the interaction when submitted
25
+ * @type {?string}
26
+ */
27
+ this.customId = data.custom_id;
28
+
29
+ /**
30
+ * The title to be displayed on this modal
31
+ * @type {?string}
32
+ */
33
+ this.title = data.title;
34
+
35
+ /**
36
+ * Timestamp (Discord epoch) of when this modal was created
37
+ * @type {Snowflake}
38
+ */
39
+ this.nonce = data.nonce;
40
+
41
+ /**
42
+ * ID slash / button / menu when modal is displayed
43
+ * @type {Snowflake}
44
+ */
45
+ this.id = data.id;
46
+
47
+ /**
48
+ * Application sending the modal
49
+ * @type {Snowflake}
50
+ */
51
+ this.applicationId = data.application.id;
52
+
53
+ /**
54
+ * The id of the channel the message was sent in
55
+ * @type {Snowflake}
56
+ */
57
+ this.channelId = data.channel_id;
58
+
59
+ /**
60
+ * Whether this interaction has already been replied to
61
+ * @type {boolean}
62
+ */
63
+ this.replied = false;
64
+
65
+ Object.defineProperty(this, 'client', {
66
+ value: client,
67
+ writable: false,
68
+ });
69
+ }
70
+
71
+ /**
72
+ * The id of the guild the message was sent in, if any
73
+ * @type {?Snowflake}
74
+ * @readonly
75
+ */
76
+ get guildId() {
77
+ return this.client.channels.cache.get(this.channelId)?.guildId || null;
78
+ }
79
+
80
+ /**
81
+ * The channel that the message was sent in
82
+ * @type {TextBasedChannels}
83
+ * @readonly
84
+ */
85
+ get channel() {
86
+ return this.client.channels.resolve(this.channelId);
87
+ }
88
+
89
+ /**
90
+ * The guild the message was sent in (if in a guild channel)
91
+ * @type {?Guild}
92
+ * @readonly
93
+ */
94
+ get guild() {
95
+ return this.client.guilds.resolve(this.guildId) ?? this.channel?.guild ?? null;
96
+ }
97
+
98
+ toJSON() {
99
+ return {
100
+ components: this.components.map(c => c.toJSON()),
101
+ custom_id: this.customId,
102
+ title: this.title,
103
+ id: this.id,
104
+ };
105
+ }
106
+
107
+ /**
108
+ * Reply to this modal with data. (Event only)
109
+ * @returns {Promise<Message|Modal>}
110
+ * @example
111
+ * client.on('interactionModalCreate', modal => {
112
+ * // Modal > ActionRow > TextInput
113
+ * modal.components[0].components[0].setValue('1+1');
114
+ * modal.components[1].components[0].setValue('hello');
115
+ * modal.reply();
116
+ * })
117
+ */
118
+ reply() {
119
+ if (!this.applicationId || !this.client || !this.channelId || this.replied) throw new Error('Modal cannot reply');
120
+ // Get Object
121
+ const dataFinal = this.toJSON();
122
+ dataFinal.components = dataFinal.components
123
+ .map(c => {
124
+ c.components[0] = {
125
+ type: c.components[0].type,
126
+ value: c.components[0].value,
127
+ custom_id: c.components[0].custom_id,
128
+ };
129
+ return c;
130
+ })
131
+ .filter(c => typeof c.components[0].value == 'string');
132
+ delete dataFinal.title;
133
+ const nonce = SnowflakeUtil.generate();
134
+ const postData = {
135
+ type: InteractionTypes.MODAL_SUBMIT, // Modal
136
+ application_id: this.applicationId,
137
+ guild_id: this.guildId,
138
+ channel_id: this.channelId,
139
+ data: dataFinal,
140
+ nonce,
141
+ session_id: this.client.sessionId,
142
+ };
143
+ this.client.api.interactions.post({
144
+ data: postData,
145
+ });
146
+ this.replied = true;
147
+ return Util.createPromiseInteraction(this.client, nonce, 5_000, true, this);
148
+ }
149
+
150
+ // TypeScript
151
+ /**
152
+ * Check data
153
+ * @type {boolean}
154
+ * @readonly
155
+ */
156
+ get isMessage() {
157
+ return false;
158
+ }
159
+ }
160
+
161
+ module.exports = Modal;
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ const { TypeError } = require('../errors');
4
+ const { MessageComponentTypes } = require('../util/Constants');
5
+
6
+ /**
7
+ * A resolver for modal submit interaction text inputs.
8
+ */
9
+ class ModalSubmitFieldsResolver {
10
+ constructor(components) {
11
+ /**
12
+ * The components within the modal
13
+ * @type {PartialModalActionRow[]} The components in the modal
14
+ */
15
+ this.components = components;
16
+ }
17
+
18
+ /**
19
+ * The extracted fields from the modal
20
+ * @type {PartialInputTextData[]} The fields in the modal
21
+ * @private
22
+ */
23
+ get _fields() {
24
+ return this.components.reduce((previous, next) => previous.concat(next.components), []);
25
+ }
26
+
27
+ /**
28
+ * Gets a field given a custom id from a component
29
+ * @param {string} customId The custom id of the component
30
+ * @returns {?PartialInputTextData}
31
+ */
32
+ getField(customId) {
33
+ const field = this._fields.find(f => f.customId === customId);
34
+ if (!field) throw new TypeError('MODAL_SUBMIT_INTERACTION_FIELD_NOT_FOUND', customId);
35
+ return field;
36
+ }
37
+
38
+ /**
39
+ * Gets the value of a text input component given a custom id
40
+ * @param {string} customId The custom id of the text input component
41
+ * @returns {?string}
42
+ */
43
+ getTextInputValue(customId) {
44
+ const field = this.getField(customId);
45
+ const expectedType = MessageComponentTypes[MessageComponentTypes.TEXT_INPUT];
46
+ if (field.type !== expectedType) {
47
+ throw new TypeError('MODAL_SUBMIT_INTERACTION_FIELD_TYPE', customId, field.type, expectedType);
48
+ }
49
+ return field.value;
50
+ }
51
+ }
52
+
53
+ module.exports = ModalSubmitFieldsResolver;
@@ -0,0 +1,119 @@
1
+ 'use strict';
2
+
3
+ const Interaction = require('./Interaction');
4
+ const InteractionWebhook = require('./InteractionWebhook');
5
+ const ModalSubmitFieldsResolver = require('./ModalSubmitFieldsResolver');
6
+ const InteractionResponses = require('./interfaces/InteractionResponses');
7
+ const { MessageComponentTypes } = require('../util/Constants');
8
+
9
+ /**
10
+ * Represents a modal submit interaction.
11
+ * @extends {Interaction}
12
+ * @implements {InteractionResponses}
13
+ */
14
+ class ModalSubmitInteraction extends Interaction {
15
+ constructor(client, data) {
16
+ super(client, data);
17
+
18
+ /**
19
+ * The custom id of the modal.
20
+ * @type {string}
21
+ */
22
+ this.customId = data.data.custom_id;
23
+
24
+ /**
25
+ * @typedef {Object} PartialTextInputData
26
+ * @property {string} [customId] A unique string to be sent in the interaction when submitted
27
+ * @property {MessageComponentType} [type] The type of this component
28
+ * @property {string} [value] Value of this text input component
29
+ */
30
+
31
+ /**
32
+ * @typedef {Object} PartialModalActionRow
33
+ * @property {MessageComponentType} [type] The type of this component
34
+ * @property {PartialTextInputData[]} [components] Partial text input components
35
+ */
36
+
37
+ /**
38
+ * The inputs within the modal
39
+ * @type {PartialModalActionRow[]}
40
+ */
41
+ this.components =
42
+ data.data.components?.map(c => ({
43
+ type: MessageComponentTypes[c.type],
44
+ components: ModalSubmitInteraction.transformComponent(c),
45
+ })) ?? [];
46
+
47
+ /**
48
+ * The message associated with this interaction
49
+ * @type {Message|APIMessage|null}
50
+ */
51
+ this.message = data.message ? this.channel?.messages._add(data.message) ?? data.message : null;
52
+
53
+ /**
54
+ * The fields within the modal
55
+ * @type {ModalSubmitFieldsResolver}
56
+ */
57
+ this.fields = new ModalSubmitFieldsResolver(this.components);
58
+
59
+ /**
60
+ * Whether the reply to this interaction has been deferred
61
+ * @type {boolean}
62
+ */
63
+ this.deferred = false;
64
+
65
+ /**
66
+ * Whether the reply to this interaction is ephemeral
67
+ * @type {?boolean}
68
+ */
69
+ this.ephemeral = null;
70
+
71
+ /**
72
+ * Whether this interaction has already been replied to
73
+ * @type {boolean}
74
+ */
75
+ this.replied = false;
76
+
77
+ /**
78
+ * An associated interaction webhook, can be used to further interact with this interaction
79
+ * @type {InteractionWebhook}
80
+ */
81
+ this.webhook = new InteractionWebhook(this.client, this.applicationId, this.token);
82
+ }
83
+
84
+ /**
85
+ * Transforms component data to discord.js-compatible data
86
+ * @param {*} rawComponent The data to transform
87
+ * @returns {PartialTextInputData[]}
88
+ */
89
+ static transformComponent(rawComponent) {
90
+ return rawComponent.components.map(c => ({
91
+ value: c.value,
92
+ type: MessageComponentTypes[c.type],
93
+ customId: c.custom_id,
94
+ }));
95
+ }
96
+
97
+ /**
98
+ * Whether this is from a {@link MessageComponentInteraction}.
99
+ * @returns {boolean}
100
+ */
101
+ isFromMessage() {
102
+ return Boolean(this.message);
103
+ }
104
+
105
+ // These are here only for documentation purposes - they are implemented by InteractionResponses
106
+ /* eslint-disable no-empty-function */
107
+ deferReply() {}
108
+ reply() {}
109
+ fetchReply() {}
110
+ editReply() {}
111
+ deleteReply() {}
112
+ followUp() {}
113
+ update() {}
114
+ deferUpdate() {}
115
+ }
116
+
117
+ InteractionResponses.applyToClass(ModalSubmitInteraction, ['showModal', 'awaitModalSubmit']);
118
+
119
+ module.exports = ModalSubmitInteraction;
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ const BaseGuildTextChannel = require('./BaseGuildTextChannel');
4
+ const { Error } = require('../errors');
5
+
6
+ /**
7
+ * Represents a guild news channel on Discord.
8
+ * @extends {BaseGuildTextChannel}
9
+ */
10
+ class NewsChannel extends BaseGuildTextChannel {
11
+ /**
12
+ * Adds the target to this channel's followers.
13
+ * <info>If you need the created webhook id, use {@link GuildChannelManager#addFollower}.</info>
14
+ * @param {TextChannelResolvable} channel The channel where the webhook should be created
15
+ * @param {string} [reason] Reason for creating the webhook
16
+ * @returns {Promise<NewsChannel>}
17
+ * @example
18
+ * if (channel.type === 'GUILD_NEWS') {
19
+ * channel.addFollower('222197033908436994', 'Important announcements')
20
+ * .then(() => console.log('Added follower'))
21
+ * .catch(console.error);
22
+ * }
23
+ */
24
+ async addFollower(channel, reason) {
25
+ const channelId = this.guild.channels.resolveId(channel);
26
+ if (!channelId) throw new Error('GUILD_CHANNEL_RESOLVE');
27
+ await this.client.api.channels(this.id).followers.post({ data: { webhook_channel_id: channelId }, reason });
28
+ return this;
29
+ }
30
+ }
31
+
32
+ module.exports = NewsChannel;