@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,430 @@
1
+ import { Collection } from '@ovencord/collection';
2
+ import { lazy } from '@ovencord/util';
3
+ import { DiscordSnowflake } from '@sapphire/snowflake';
4
+ import { InteractionType, Routes } from 'discord-api-types/v10';
5
+ import { DiscordjsTypeError, DiscordjsError, ErrorCodes } from '../../errors/index.js';
6
+ import { MaxBulkDeletableMessageAge } from '../../util/Constants.js';
7
+ import { InteractionCollector } from '../InteractionCollector.js';
8
+ import { MessageCollector } from '../MessageCollector.js';
9
+
10
+ // Fixes circular dependencies.
11
+ const getGuildMessageManager = lazy(() => require('../../managers/GuildMessageManager.js').GuildMessageManager);
12
+
13
+ /**
14
+ * Interface for classes that have text-channel-like features.
15
+ *
16
+ * @interface
17
+ */
18
+ export class TextBasedChannel {
19
+ public messages: any;
20
+ public lastMessageId: any;
21
+ public lastPinTimestamp: any;
22
+ constructor() {
23
+ /**
24
+ * A manager of the messages sent to this channel
25
+ *
26
+ * @type {GuildMessageManager}
27
+ */
28
+ this.messages = new (getGuildMessageManager())(this);
29
+
30
+ /**
31
+ * The channel's last message id, if one was sent
32
+ *
33
+ * @type {?Snowflake}
34
+ */
35
+ this.lastMessageId = null;
36
+
37
+ /**
38
+ * The timestamp when the last pinned message was pinned, if there was one
39
+ *
40
+ * @type {?number}
41
+ */
42
+ this.lastPinTimestamp = null;
43
+ }
44
+
45
+ /**
46
+ * The Message object of the last message in the channel, if one was sent
47
+ *
48
+ * @type {?Message}
49
+ * @readonly
50
+ */
51
+ get lastMessage() {
52
+ return this.messages.resolve(this.lastMessageId);
53
+ }
54
+
55
+ /**
56
+ * The date when the last pinned message was pinned, if there was one
57
+ *
58
+ * @type {?Date}
59
+ * @readonly
60
+ */
61
+ get lastPinAt() {
62
+ return this.lastPinTimestamp && new Date(this.lastPinTimestamp);
63
+ }
64
+
65
+ /**
66
+ * Represents the data for a poll answer.
67
+ *
68
+ * @typedef {Object} PollAnswerData
69
+ * @property {string} text The text for the poll answer
70
+ * @property {EmojiIdentifierResolvable} [emoji] The emoji for the poll answer
71
+ */
72
+
73
+ /**
74
+ * Represents the data for a poll.
75
+ *
76
+ * @typedef {Object} PollData
77
+ * @property {PollQuestionMedia} question The question for the poll
78
+ * @property {PollAnswerData[]} answers The answers for the poll
79
+ * @property {number} duration The duration in hours for the poll
80
+ * @property {boolean} allowMultiselect Whether the poll allows multiple answers
81
+ * @property {PollLayoutType} [layoutType] The layout type for the poll
82
+ */
83
+
84
+ /**
85
+ * The base message options for messages.
86
+ *
87
+ * @typedef {Object} BaseMessageOptions
88
+ * @property {?string} [content=''] The content for the message. This can only be `null` when editing a message.
89
+ * @property {Array<(EmbedBuilder|Embed|APIEmbed)>} [embeds] The embeds for the message
90
+ * @property {MessageMentionOptions} [allowedMentions] Which mentions should be parsed from the message content
91
+ * (see {@link https://discord.com/developers/docs/resources/message#allowed-mentions-object here} for more details)
92
+ * @property {Array<(Attachment|AttachmentPayload|BufferResolvable|FileBodyEncodable<APIAttachment>|Stream)>} [files]
93
+ * The files to send with the message.
94
+ * @property {Array<(ActionRowBuilder|MessageTopLevelComponent|APIMessageTopLevelComponent)>} [components]
95
+ * Action rows containing interactive components for the message (buttons, select menus) and other
96
+ * top-level components.
97
+ * <info>When using components v2, the flag {@link MessageFlags.IsComponentsV2} needs to be set
98
+ * and `content`, `embeds`, `stickers`, and `poll` cannot be used.</info>
99
+ */
100
+
101
+ /**
102
+ * The base message options for messages including a poll.
103
+ *
104
+ * @typedef {BaseMessageOptions} BaseMessageOptionsWithPoll
105
+ * @property {PollData} [poll] The poll to send with the message
106
+ */
107
+
108
+ /**
109
+ * The options for sending a message.
110
+ *
111
+ * @typedef {BaseMessageOptionsWithPoll} BaseMessageCreateOptions
112
+ * @property {boolean} [tts=false] Whether the message should be spoken aloud
113
+ * @property {string} [nonce] The nonce for the message
114
+ * <info>This property is required if `enforceNonce` set to `true`.</info>
115
+ * @property {boolean} [enforceNonce] Whether the nonce should be checked for uniqueness in the past few minutes.
116
+ * If another message was created by the same author with the same nonce,
117
+ * that message will be returned and no new message will be created
118
+ * @property {StickerResolvable[]} [stickers=[]] The stickers to send in the message
119
+ * @property {MessageFlags} [flags] Which flags to set for the message.
120
+ * <info>Only {@link MessageFlags.SuppressEmbeds}, {@link MessageFlags.SuppressNotifications},
121
+ * {@link MessageFlags.IsComponentsV2}, and {@link MessageFlags.IsVoiceMessage} can be set.</info>
122
+ * <info>{@link MessageFlags.IsComponentsV2} is required if passing components that aren't action rows</info>
123
+ */
124
+
125
+ /**
126
+ * @typedef {MessageReference} MessageReferenceOptions
127
+ * @property {boolean} [failIfNotExists=this.client.options.failIfNotExists] Whether to error if the
128
+ * referenced message doesn't exist instead of sending as a normal (non-reply) message
129
+ */
130
+
131
+ /**
132
+ * The options for sending a message.
133
+ *
134
+ * @typedef {BaseMessageCreateOptions} MessageCreateOptions
135
+ * @property {MessageReferenceOptions} [messageReference] The options for a reference to a message
136
+ */
137
+
138
+ /**
139
+ * Options provided to control parsing of mentions by Discord
140
+ *
141
+ * @typedef {Object} MessageMentionOptions
142
+ * @property {MessageMentionTypes[]} [parse] Types of mentions to be parsed
143
+ * @property {Snowflake[]} [users] Snowflakes of Users to be parsed as mentions
144
+ * @property {Snowflake[]} [roles] Snowflakes of Roles to be parsed as mentions
145
+ * @property {boolean} [repliedUser=true] Whether the author of the Message being replied to should be pinged
146
+ */
147
+
148
+ /**
149
+ * Types of mentions to enable in MessageMentionOptions.
150
+ * - `roles`
151
+ * - `users`
152
+ * - `everyone`
153
+ *
154
+ * @typedef {string} MessageMentionTypes
155
+ */
156
+
157
+ /**
158
+ * Sends a message to this channel.
159
+ *
160
+ * @param {string|MessagePayload|MessageCreateOptions|JSONEncodable<RESTPostAPIChannelMessageJSONBody>|FileBodyEncodable<RESTPostAPIChannelMessageJSONBody>} options The options to provide
161
+ * @returns {Promise<Message>}
162
+ * @example
163
+ * // Send a basic message
164
+ * channel.send('hello!')
165
+ * .then(message => console.log(`Sent message: ${message.content}`))
166
+ * .catch(console.error);
167
+ * @example
168
+ * // Send a remote file
169
+ * channel.send({
170
+ * files: ['https://github.com/discordjs.png']
171
+ * })
172
+ * .then(console.log)
173
+ * .catch(console.error);
174
+ * @example
175
+ * // Send a local file
176
+ * channel.send({
177
+ * files: [{
178
+ * attachment: 'entire/path/to/file.jpg',
179
+ * name: 'file.jpg',
180
+ * description: 'A description of the file'
181
+ * }]
182
+ * })
183
+ * .then(console.log)
184
+ * .catch(console.error);
185
+ */
186
+ async send(options) {
187
+ return this.client.channels.createMessage(this, options);
188
+ }
189
+
190
+ /**
191
+ * Sends a typing indicator in the channel.
192
+ *
193
+ * @returns {Promise<void>} Resolves upon the typing status being sent
194
+ * @example
195
+ * // Start typing in a channel
196
+ * channel.sendTyping();
197
+ */
198
+ async sendTyping() {
199
+ await this.client.rest.post(Routes.channelTyping(this.id));
200
+ }
201
+
202
+ /**
203
+ * Creates a Message Collector.
204
+ *
205
+ * @param {MessageCollectorOptions} [options={}] The options to pass to the collector
206
+ * @returns {MessageCollector}
207
+ * @example
208
+ * // Create a message collector
209
+ * const filter = message => message.content.includes('discord');
210
+ * const collector = channel.createMessageCollector({ filter, time: 15_000 });
211
+ * collector.on('collect', message => console.log(`Collected ${message.content}`));
212
+ * collector.on('end', collected => console.log(`Collected ${collected.size} items`));
213
+ */
214
+ createMessageCollector(options = {}) {
215
+ return new MessageCollector(this, options);
216
+ }
217
+
218
+ /**
219
+ * An object containing the same properties as CollectorOptions, but a few more:
220
+ *
221
+ * @typedef {MessageCollectorOptions} AwaitMessagesOptions
222
+ * @property {string[]} [errors] Stop/end reasons that cause the promise to reject
223
+ */
224
+
225
+ /**
226
+ * Similar to createMessageCollector but in promise form.
227
+ * Resolves with a collection of messages that pass the specified filter.
228
+ *
229
+ * @param {AwaitMessagesOptions} [options={}] Optional options to pass to the internal collector
230
+ * @returns {Promise<Collection<Snowflake, Message>>}
231
+ * @example
232
+ * // Await !vote messages
233
+ * const filter = m => m.content.startsWith('!vote');
234
+ * // Errors: ['time'] treats ending because of the time limit as an error
235
+ * channel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })
236
+ * .then(collected => console.log(collected.size))
237
+ * .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));
238
+ */
239
+ async awaitMessages(options = {}) {
240
+ return new Promise((resolve, reject) => {
241
+ const collector = this.createMessageCollector(options);
242
+ collector.once('end', (collection, reason) => {
243
+ if (options.errors?.includes(reason)) {
244
+ reject(collection);
245
+ } else {
246
+ resolve(collection);
247
+ }
248
+ });
249
+ });
250
+ }
251
+
252
+ /**
253
+ * Creates a component interaction collector.
254
+ *
255
+ * @param {MessageComponentCollectorOptions} [options={}] Options to send to the collector
256
+ * @returns {InteractionCollector}
257
+ * @example
258
+ * // Create a button interaction collector
259
+ * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';
260
+ * const collector = channel.createMessageComponentCollector({ filter, time: 15_000 });
261
+ * collector.on('collect', interaction => console.log(`Collected ${interaction.customId}`));
262
+ * collector.on('end', collected => console.log(`Collected ${collected.size} items`));
263
+ */
264
+ createMessageComponentCollector(options = {}) {
265
+ return new InteractionCollector(this.client, {
266
+ ...options,
267
+ interactionType: InteractionType.MessageComponent,
268
+ channel: this,
269
+ });
270
+ }
271
+
272
+ /**
273
+ * Collects a single component interaction that passes the filter.
274
+ * The Promise will reject if the time expires.
275
+ *
276
+ * @param {AwaitMessageComponentOptions} [options={}] Options to pass to the internal collector
277
+ * @returns {Promise<MessageComponentInteraction>}
278
+ * @example
279
+ * // Collect a message component interaction
280
+ * const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';
281
+ * channel.awaitMessageComponent({ filter, time: 15_000 })
282
+ * .then(interaction => console.log(`${interaction.customId} was clicked!`))
283
+ * .catch(console.error);
284
+ */
285
+ async awaitMessageComponent(options = {}) {
286
+ const _options = { ...options, max: 1 };
287
+ return new Promise((resolve, reject) => {
288
+ const collector = this.createMessageComponentCollector(_options);
289
+ collector.once('end', (interactions, reason) => {
290
+ const interaction = interactions.first();
291
+ if (interaction) resolve(interaction);
292
+ else reject(new DiscordjsError(ErrorCodes.InteractionCollectorError, reason));
293
+ });
294
+ });
295
+ }
296
+
297
+ /**
298
+ * Bulk deletes given messages up to 2 weeks old.
299
+ *
300
+ * @param {Collection<Snowflake, Message>|MessageResolvable[]|number} messages
301
+ * Messages or number of messages to delete
302
+ * @param {boolean} [filterOld=false] Filter messages to remove those which are older than two weeks automatically
303
+ * @returns {Promise<Snowflake[]>} Returns the deleted messages ids
304
+ * @example
305
+ * // Bulk delete messages
306
+ * channel.bulkDelete(5)
307
+ * .then(messages => console.log(`Bulk deleted ${messages.length} messages`))
308
+ * .catch(console.error);
309
+ */
310
+ async bulkDelete(messages, filterOld = false) {
311
+ if (Array.isArray(messages) || messages instanceof Collection) {
312
+ let messageIds =
313
+ messages instanceof Collection ? [...messages.keys()] : messages.map(message => message.id ?? message);
314
+
315
+ if (filterOld) {
316
+ messageIds = messageIds.filter(
317
+ id => Date.now() - DiscordSnowflake.timestampFrom(id) < MaxBulkDeletableMessageAge,
318
+ );
319
+ }
320
+
321
+ if (messageIds.length === 0) return [];
322
+
323
+ if (messageIds.length === 1) {
324
+ await this.client.rest.delete(Routes.channelMessage(this.id, messageIds[0]));
325
+ return messageIds;
326
+ }
327
+
328
+ await this.client.rest.post(Routes.channelBulkDelete(this.id), { body: { messages: messageIds } });
329
+ return messageIds;
330
+ }
331
+
332
+ if (!Number.isNaN(messages)) {
333
+ const msgs = await this.messages.fetch({ limit: messages });
334
+ return this.bulkDelete(msgs, filterOld);
335
+ }
336
+
337
+ throw new DiscordjsTypeError(ErrorCodes.MessageBulkDeleteType);
338
+ }
339
+
340
+ /**
341
+ * Fetches all webhooks for the channel.
342
+ *
343
+ * @returns {Promise<Collection<Snowflake, Webhook>>}
344
+ * @example
345
+ * // Fetch webhooks
346
+ * channel.fetchWebhooks()
347
+ * .then(hooks => console.log(`This channel has ${hooks.size} hooks`))
348
+ * .catch(console.error);
349
+ */
350
+ async fetchWebhooks() {
351
+ return this.guild.channels.fetchWebhooks(this.id);
352
+ }
353
+
354
+ /**
355
+ * Options used to create a {@link Webhook}.
356
+ *
357
+ * @typedef {Object} ChannelWebhookCreateOptions
358
+ * @property {string} name The name of the webhook
359
+ * @property {?(BufferResolvable|Base64Resolvable)} [avatar] Avatar for the webhook
360
+ * @property {string} [reason] Reason for creating the webhook
361
+ */
362
+
363
+ /**
364
+ * Creates a webhook for the channel.
365
+ *
366
+ * @param {ChannelWebhookCreateOptions} [options] Options for creating the webhook
367
+ * @returns {Promise<Webhook>} Returns the created Webhook
368
+ * @example
369
+ * // Create a webhook for the current channel
370
+ * channel.createWebhook({
371
+ * name: 'Snek',
372
+ * avatar: 'https://i.imgur.com/mI8XcpG.jpg',
373
+ * reason: 'Needed a cool new Webhook'
374
+ * })
375
+ * .then(console.log)
376
+ * .catch(console.error)
377
+ */
378
+ async createWebhook(options) {
379
+ return this.guild.channels.createWebhook({ channel: this.id, ...options });
380
+ }
381
+
382
+ /**
383
+ * Sets the rate limit per user (slowmode) for this channel.
384
+ *
385
+ * @param {number} rateLimitPerUser The new rate limit in seconds
386
+ * @param {string} [reason] Reason for changing the channel's rate limit
387
+ * @returns {Promise<this>}
388
+ */
389
+ async setRateLimitPerUser(rateLimitPerUser, reason) {
390
+ return this.edit({ rateLimitPerUser, reason });
391
+ }
392
+
393
+ /**
394
+ * Sets whether this channel is flagged as NSFW.
395
+ *
396
+ * @param {boolean} [nsfw=true] Whether the channel should be considered NSFW
397
+ * @param {string} [reason] Reason for changing the channel's NSFW flag
398
+ * @returns {Promise<this>}
399
+ */
400
+ async setNSFW(nsfw = true, reason = undefined) {
401
+ return this.edit({ nsfw, reason });
402
+ }
403
+
404
+ static applyToClass(structure, ignore = []) {
405
+ const props = [
406
+ 'lastMessage',
407
+ 'lastPinAt',
408
+ 'bulkDelete',
409
+ 'sendTyping',
410
+ 'createMessageCollector',
411
+ 'awaitMessages',
412
+ 'createMessageComponentCollector',
413
+ 'awaitMessageComponent',
414
+ 'fetchWebhooks',
415
+ 'createWebhook',
416
+ 'setRateLimitPerUser',
417
+ 'setNSFW',
418
+ 'send',
419
+ ];
420
+
421
+ for (const prop of props) {
422
+ if (ignore.includes(prop)) continue;
423
+ Object.defineProperty(
424
+ structure.prototype,
425
+ prop,
426
+ Object.getOwnPropertyDescriptor(TextBasedChannel.prototype, prop),
427
+ );
428
+ }
429
+ }
430
+ }