@velliajs/discord 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +133 -0
  3. package/package.json +82 -0
  4. package/src/client/BaseClient.js +83 -0
  5. package/src/client/Client.js +591 -0
  6. package/src/client/WebhookClient.js +103 -0
  7. package/src/client/actions/Action.js +119 -0
  8. package/src/client/actions/ActionsManager.js +79 -0
  9. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  10. package/src/client/actions/AutoModerationActionExecution.js +26 -0
  11. package/src/client/actions/AutoModerationRuleCreate.js +27 -0
  12. package/src/client/actions/AutoModerationRuleDelete.js +31 -0
  13. package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
  14. package/src/client/actions/ChannelCreate.js +23 -0
  15. package/src/client/actions/ChannelDelete.js +23 -0
  16. package/src/client/actions/ChannelUpdate.js +33 -0
  17. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  18. package/src/client/actions/GuildBanAdd.js +20 -0
  19. package/src/client/actions/GuildBanRemove.js +25 -0
  20. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  21. package/src/client/actions/GuildDelete.js +44 -0
  22. package/src/client/actions/GuildEmojiCreate.js +20 -0
  23. package/src/client/actions/GuildEmojiDelete.js +19 -0
  24. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  25. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  26. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  27. package/src/client/actions/GuildMemberRemove.js +31 -0
  28. package/src/client/actions/GuildMemberUpdate.js +44 -0
  29. package/src/client/actions/GuildRoleCreate.js +25 -0
  30. package/src/client/actions/GuildRoleDelete.js +29 -0
  31. package/src/client/actions/GuildRoleUpdate.js +39 -0
  32. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  33. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  34. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  35. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  36. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  37. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  38. package/src/client/actions/GuildStickerCreate.js +20 -0
  39. package/src/client/actions/GuildStickerDelete.js +19 -0
  40. package/src/client/actions/GuildStickerUpdate.js +20 -0
  41. package/src/client/actions/GuildStickersUpdate.js +34 -0
  42. package/src/client/actions/GuildUpdate.js +33 -0
  43. package/src/client/actions/InteractionCreate.js +101 -0
  44. package/src/client/actions/InviteCreate.js +28 -0
  45. package/src/client/actions/InviteDelete.js +30 -0
  46. package/src/client/actions/MessageCreate.js +37 -0
  47. package/src/client/actions/MessageDelete.js +32 -0
  48. package/src/client/actions/MessageDeleteBulk.js +47 -0
  49. package/src/client/actions/MessageReactionAdd.js +55 -0
  50. package/src/client/actions/MessageReactionRemove.js +45 -0
  51. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  52. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  53. package/src/client/actions/MessageUpdate.js +26 -0
  54. package/src/client/actions/PresenceUpdate.js +42 -0
  55. package/src/client/actions/StageInstanceCreate.js +28 -0
  56. package/src/client/actions/StageInstanceDelete.js +31 -0
  57. package/src/client/actions/StageInstanceUpdate.js +30 -0
  58. package/src/client/actions/ThreadCreate.js +24 -0
  59. package/src/client/actions/ThreadDelete.js +26 -0
  60. package/src/client/actions/ThreadListSync.js +60 -0
  61. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  62. package/src/client/actions/ThreadMembersUpdate.js +47 -0
  63. package/src/client/actions/TypingStart.js +29 -0
  64. package/src/client/actions/UserUpdate.js +36 -0
  65. package/src/client/actions/VoiceStateUpdate.js +43 -0
  66. package/src/client/actions/WebhooksUpdate.js +20 -0
  67. package/src/client/voice/ClientVoiceManager.js +44 -0
  68. package/src/client/websocket/WebSocketManager.js +393 -0
  69. package/src/client/websocket/WebSocketShard.js +231 -0
  70. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  71. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  72. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  73. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  74. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  75. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  76. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  77. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  78. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  79. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  80. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  81. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  82. package/src/client/websocket/handlers/GUILD_CREATE.js +26 -0
  83. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  84. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  85. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  86. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  87. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  88. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  89. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  90. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  91. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  92. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  93. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  94. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  95. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  97. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  98. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  99. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  100. package/src/client/websocket/handlers/INTERACTION_CREATE.js +5 -0
  101. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  102. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  103. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  104. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  105. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  106. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  107. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  108. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  109. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  110. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  111. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/READY.js +27 -0
  113. package/src/client/websocket/handlers/RESUMED.js +14 -0
  114. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  115. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  116. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  118. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  119. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  120. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  121. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  122. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  123. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  124. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  125. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  126. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  128. package/src/client/websocket/handlers/index.js +64 -0
  129. package/src/errors/DJSError.js +48 -0
  130. package/src/errors/ErrorCodes.js +319 -0
  131. package/src/errors/Messages.js +170 -0
  132. package/src/errors/index.js +5 -0
  133. package/src/index.js +213 -0
  134. package/src/managers/ApplicationCommandManager.js +263 -0
  135. package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
  136. package/src/managers/AutoModerationRuleManager.js +288 -0
  137. package/src/managers/BaseGuildEmojiManager.js +80 -0
  138. package/src/managers/BaseManager.js +19 -0
  139. package/src/managers/CachedManager.js +57 -0
  140. package/src/managers/CategoryChannelChildManager.js +77 -0
  141. package/src/managers/ChannelManager.js +128 -0
  142. package/src/managers/DataManager.js +61 -0
  143. package/src/managers/GuildApplicationCommandManager.js +28 -0
  144. package/src/managers/GuildBanManager.js +204 -0
  145. package/src/managers/GuildChannelManager.js +494 -0
  146. package/src/managers/GuildEmojiManager.js +174 -0
  147. package/src/managers/GuildEmojiRoleManager.js +118 -0
  148. package/src/managers/GuildForumThreadManager.js +83 -0
  149. package/src/managers/GuildInviteManager.js +213 -0
  150. package/src/managers/GuildManager.js +283 -0
  151. package/src/managers/GuildMemberManager.js +540 -0
  152. package/src/managers/GuildMemberRoleManager.js +204 -0
  153. package/src/managers/GuildScheduledEventManager.js +297 -0
  154. package/src/managers/GuildStickerManager.js +182 -0
  155. package/src/managers/GuildTextThreadManager.js +91 -0
  156. package/src/managers/MessageManager.js +259 -0
  157. package/src/managers/PermissionOverwriteManager.js +168 -0
  158. package/src/managers/PresenceManager.js +58 -0
  159. package/src/managers/ReactionManager.js +68 -0
  160. package/src/managers/ReactionUserManager.js +77 -0
  161. package/src/managers/RoleManager.js +360 -0
  162. package/src/managers/StageInstanceManager.js +154 -0
  163. package/src/managers/ThreadManager.js +204 -0
  164. package/src/managers/ThreadMemberManager.js +182 -0
  165. package/src/managers/UserManager.js +139 -0
  166. package/src/managers/VoiceStateManager.js +37 -0
  167. package/src/sharding/Shard.js +457 -0
  168. package/src/sharding/ShardClientUtil.js +285 -0
  169. package/src/sharding/ShardingManager.js +326 -0
  170. package/src/structures/ActionRow.js +46 -0
  171. package/src/structures/ActionRowBuilder.js +35 -0
  172. package/src/structures/AnonymousGuild.js +97 -0
  173. package/src/structures/ApplicationCommand.js +606 -0
  174. package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
  175. package/src/structures/Attachment.js +140 -0
  176. package/src/structures/AttachmentBuilder.js +116 -0
  177. package/src/structures/AutoModerationActionExecution.js +116 -0
  178. package/src/structures/AutoModerationRule.js +284 -0
  179. package/src/structures/AutocompleteInteraction.js +97 -0
  180. package/src/structures/Base.js +43 -0
  181. package/src/structures/BaseChannel.js +160 -0
  182. package/src/structures/BaseGuild.js +119 -0
  183. package/src/structures/BaseGuildEmoji.js +56 -0
  184. package/src/structures/BaseGuildTextChannel.js +186 -0
  185. package/src/structures/BaseGuildVoiceChannel.js +234 -0
  186. package/src/structures/BaseInteraction.js +344 -0
  187. package/src/structures/BaseSelectMenuComponent.js +56 -0
  188. package/src/structures/ButtonBuilder.js +44 -0
  189. package/src/structures/ButtonComponent.js +65 -0
  190. package/src/structures/ButtonInteraction.js +11 -0
  191. package/src/structures/CategoryChannel.js +45 -0
  192. package/src/structures/ChannelSelectMenuBuilder.js +31 -0
  193. package/src/structures/ChannelSelectMenuComponent.js +20 -0
  194. package/src/structures/ChannelSelectMenuInteraction.js +33 -0
  195. package/src/structures/ChatInputCommandInteraction.js +41 -0
  196. package/src/structures/ClientApplication.js +193 -0
  197. package/src/structures/ClientPresence.js +82 -0
  198. package/src/structures/ClientUser.js +185 -0
  199. package/src/structures/CommandInteraction.js +224 -0
  200. package/src/structures/CommandInteractionOptionResolver.js +308 -0
  201. package/src/structures/Component.js +47 -0
  202. package/src/structures/ContextMenuCommandInteraction.js +64 -0
  203. package/src/structures/DMChannel.js +129 -0
  204. package/src/structures/DirectoryChannel.js +36 -0
  205. package/src/structures/Embed.js +220 -0
  206. package/src/structures/EmbedBuilder.js +41 -0
  207. package/src/structures/Emoji.js +108 -0
  208. package/src/structures/ForumChannel.js +264 -0
  209. package/src/structures/Guild.js +1361 -0
  210. package/src/structures/GuildAuditLogs.js +91 -0
  211. package/src/structures/GuildAuditLogsEntry.js +527 -0
  212. package/src/structures/GuildBan.js +59 -0
  213. package/src/structures/GuildChannel.js +457 -0
  214. package/src/structures/GuildEmoji.js +148 -0
  215. package/src/structures/GuildMember.js +518 -0
  216. package/src/structures/GuildPreview.js +193 -0
  217. package/src/structures/GuildPreviewEmoji.js +27 -0
  218. package/src/structures/GuildScheduledEvent.js +439 -0
  219. package/src/structures/GuildTemplate.js +241 -0
  220. package/src/structures/Integration.js +220 -0
  221. package/src/structures/IntegrationApplication.js +85 -0
  222. package/src/structures/InteractionCollector.js +263 -0
  223. package/src/structures/InteractionResponse.js +102 -0
  224. package/src/structures/InteractionWebhook.js +59 -0
  225. package/src/structures/Invite.js +322 -0
  226. package/src/structures/InviteGuild.js +22 -0
  227. package/src/structures/InviteStageInstance.js +87 -0
  228. package/src/structures/MentionableSelectMenuBuilder.js +32 -0
  229. package/src/structures/MentionableSelectMenuComponent.js +11 -0
  230. package/src/structures/MentionableSelectMenuInteraction.js +71 -0
  231. package/src/structures/Message.js +997 -0
  232. package/src/structures/MessageCollector.js +146 -0
  233. package/src/structures/MessageComponentInteraction.js +107 -0
  234. package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
  235. package/src/structures/MessageMentions.js +297 -0
  236. package/src/structures/MessagePayload.js +299 -0
  237. package/src/structures/MessageReaction.js +142 -0
  238. package/src/structures/ModalBuilder.js +34 -0
  239. package/src/structures/ModalSubmitFields.js +55 -0
  240. package/src/structures/ModalSubmitInteraction.js +121 -0
  241. package/src/structures/NewsChannel.js +32 -0
  242. package/src/structures/OAuth2Guild.js +28 -0
  243. package/src/structures/PartialGroupDMChannel.js +60 -0
  244. package/src/structures/PermissionOverwrites.js +196 -0
  245. package/src/structures/Presence.js +372 -0
  246. package/src/structures/ReactionCollector.js +229 -0
  247. package/src/structures/ReactionEmoji.js +31 -0
  248. package/src/structures/Role.js +458 -0
  249. package/src/structures/RoleSelectMenuBuilder.js +31 -0
  250. package/src/structures/RoleSelectMenuComponent.js +11 -0
  251. package/src/structures/RoleSelectMenuInteraction.js +33 -0
  252. package/src/structures/SelectMenuBuilder.js +26 -0
  253. package/src/structures/SelectMenuComponent.js +26 -0
  254. package/src/structures/SelectMenuInteraction.js +26 -0
  255. package/src/structures/SelectMenuOptionBuilder.js +26 -0
  256. package/src/structures/StageChannel.js +112 -0
  257. package/src/structures/StageInstance.js +167 -0
  258. package/src/structures/Sticker.js +272 -0
  259. package/src/structures/StickerPack.js +95 -0
  260. package/src/structures/StringSelectMenuBuilder.js +79 -0
  261. package/src/structures/StringSelectMenuComponent.js +20 -0
  262. package/src/structures/StringSelectMenuInteraction.js +21 -0
  263. package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
  264. package/src/structures/Team.js +117 -0
  265. package/src/structures/TeamMember.js +70 -0
  266. package/src/structures/TextChannel.js +33 -0
  267. package/src/structures/TextInputBuilder.js +31 -0
  268. package/src/structures/TextInputComponent.js +29 -0
  269. package/src/structures/ThreadChannel.js +606 -0
  270. package/src/structures/ThreadMember.js +113 -0
  271. package/src/structures/Typing.js +74 -0
  272. package/src/structures/User.js +331 -0
  273. package/src/structures/UserContextMenuCommandInteraction.js +29 -0
  274. package/src/structures/UserSelectMenuBuilder.js +31 -0
  275. package/src/structures/UserSelectMenuComponent.js +11 -0
  276. package/src/structures/UserSelectMenuInteraction.js +51 -0
  277. package/src/structures/VoiceChannel.js +96 -0
  278. package/src/structures/VoiceRegion.js +46 -0
  279. package/src/structures/VoiceState.js +303 -0
  280. package/src/structures/Webhook.js +481 -0
  281. package/src/structures/WelcomeChannel.js +60 -0
  282. package/src/structures/WelcomeScreen.js +49 -0
  283. package/src/structures/Widget.js +88 -0
  284. package/src/structures/WidgetMember.js +99 -0
  285. package/src/structures/interfaces/Application.js +108 -0
  286. package/src/structures/interfaces/Collector.js +335 -0
  287. package/src/structures/interfaces/InteractionResponses.js +320 -0
  288. package/src/structures/interfaces/TextBasedChannel.js +413 -0
  289. package/src/util/APITypes.js +456 -0
  290. package/src/util/ActivityFlagsBitField.js +26 -0
  291. package/src/util/ApplicationFlagsBitField.js +26 -0
  292. package/src/util/BitField.js +176 -0
  293. package/src/util/ChannelFlagsBitField.js +41 -0
  294. package/src/util/Channels.js +150 -0
  295. package/src/util/Colors.js +73 -0
  296. package/src/util/Components.js +152 -0
  297. package/src/util/Constants.js +230 -0
  298. package/src/util/DataResolver.js +140 -0
  299. package/src/util/Enums.js +13 -0
  300. package/src/util/Events.js +160 -0
  301. package/src/util/Formatters.js +413 -0
  302. package/src/util/GuildMemberFlagsBitField.js +41 -0
  303. package/src/util/IntentsBitField.js +34 -0
  304. package/src/util/LimitedCollection.js +68 -0
  305. package/src/util/MessageFlagsBitField.js +32 -0
  306. package/src/util/Options.js +216 -0
  307. package/src/util/Partials.js +44 -0
  308. package/src/util/PermissionsBitField.js +104 -0
  309. package/src/util/ShardEvents.js +27 -0
  310. package/src/util/Status.js +33 -0
  311. package/src/util/Sweepers.js +467 -0
  312. package/src/util/SystemChannelFlagsBitField.js +43 -0
  313. package/src/util/ThreadMemberFlagsBitField.js +31 -0
  314. package/src/util/Transformers.js +36 -0
  315. package/src/util/UserFlagsBitField.js +32 -0
  316. package/src/util/Util.js +394 -0
  317. package/src/util/WebSocketShardEvents.js +25 -0
@@ -0,0 +1,97 @@
1
+ 'use strict';
2
+
3
+ const { InteractionResponseType, Routes } = require('discord-api-types/v10');
4
+ const BaseInteraction = require('./BaseInteraction');
5
+ const CommandInteractionOptionResolver = require('./CommandInteractionOptionResolver');
6
+ const { DiscordjsError, ErrorCodes } = require('../errors');
7
+
8
+ /**
9
+ * Represents an autocomplete interaction.
10
+ * @extends {BaseInteraction}
11
+ */
12
+ class AutocompleteInteraction extends BaseInteraction {
13
+ constructor(client, data) {
14
+ super(client, data);
15
+
16
+ /**
17
+ * The id of the channel this interaction was sent in
18
+ * @type {Snowflake}
19
+ * @name AutocompleteInteraction#channelId
20
+ */
21
+
22
+ /**
23
+ * The invoked application command's id
24
+ * @type {Snowflake}
25
+ */
26
+ this.commandId = data.data.id;
27
+
28
+ /**
29
+ * The invoked application command's name
30
+ * @type {string}
31
+ */
32
+ this.commandName = data.data.name;
33
+
34
+ /**
35
+ * The invoked application command's type
36
+ * @type {ApplicationCommandType}
37
+ */
38
+ this.commandType = data.data.type;
39
+
40
+ /**
41
+ * The id of the guild the invoked application command is registered to
42
+ * @type {?Snowflake}
43
+ */
44
+ this.commandGuildId = data.data.guild_id ?? null;
45
+
46
+ /**
47
+ * Whether this interaction has already received a response
48
+ * @type {boolean}
49
+ */
50
+ this.responded = false;
51
+
52
+ /**
53
+ * The options passed to the command
54
+ * @type {CommandInteractionOptionResolver}
55
+ */
56
+ this.options = new CommandInteractionOptionResolver(this.client, data.data.options ?? []);
57
+ }
58
+
59
+ /**
60
+ * The invoked application command, if it was fetched before
61
+ * @type {?ApplicationCommand}
62
+ */
63
+ get command() {
64
+ const id = this.commandId;
65
+ return this.guild?.commands.cache.get(id) ?? this.client.application.commands.cache.get(id) ?? null;
66
+ }
67
+
68
+ /**
69
+ * Sends results for the autocomplete of this interaction.
70
+ * @param {ApplicationCommandOptionChoiceData[]} options The options for the autocomplete
71
+ * @returns {Promise<void>}
72
+ * @example
73
+ * // respond to autocomplete interaction
74
+ * interaction.respond([
75
+ * {
76
+ * name: 'Option 1',
77
+ * value: 'option1',
78
+ * },
79
+ * ])
80
+ * .then(() => console.log('Successfully responded to the autocomplete interaction'))
81
+ * .catch(console.error);
82
+ */
83
+ async respond(options) {
84
+ if (this.responded) throw new DiscordjsError(ErrorCodes.InteractionAlreadyReplied);
85
+
86
+ await this.client.rest.post(Routes.interactionCallback(this.id, this.token), {
87
+ body: {
88
+ type: InteractionResponseType.ApplicationCommandAutocompleteResult,
89
+ data: { choices: this.client.options.jsonTransformer(options) },
90
+ },
91
+ auth: false,
92
+ });
93
+ this.responded = true;
94
+ }
95
+ }
96
+
97
+ module.exports = AutocompleteInteraction;
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ const { flatten } = require('../util/Util');
4
+
5
+ /**
6
+ * Represents a data model that is identifiable by a Snowflake (i.e. Discord API data models).
7
+ * @abstract
8
+ */
9
+ class Base {
10
+ constructor(client) {
11
+ /**
12
+ * The client that instantiated this
13
+ * @name Base#client
14
+ * @type {Client}
15
+ * @readonly
16
+ */
17
+ Object.defineProperty(this, 'client', { value: client });
18
+ }
19
+
20
+ _clone() {
21
+ return Object.assign(Object.create(this), this);
22
+ }
23
+
24
+ _patch(data) {
25
+ return data;
26
+ }
27
+
28
+ _update(data) {
29
+ const clone = this._clone();
30
+ this._patch(data);
31
+ return clone;
32
+ }
33
+
34
+ toJSON(...props) {
35
+ return flatten(this, ...props);
36
+ }
37
+
38
+ valueOf() {
39
+ return this.id;
40
+ }
41
+ }
42
+
43
+ module.exports = Base;
@@ -0,0 +1,160 @@
1
+ 'use strict';
2
+
3
+ const { channelLink } = require('@discordjs/builders');
4
+ const { DiscordSnowflake } = require('@sapphire/snowflake');
5
+ const { ChannelType, Routes } = require('discord-api-types/v10');
6
+ const Base = require('./Base');
7
+ const ChannelFlagsBitField = require('../util/ChannelFlagsBitField');
8
+ const { ThreadChannelTypes } = require('../util/Constants');
9
+
10
+ /**
11
+ * Represents any channel on Discord.
12
+ * @extends {Base}
13
+ * @abstract
14
+ */
15
+ class BaseChannel extends Base {
16
+ constructor(client, data, immediatePatch = true) {
17
+ super(client);
18
+
19
+ /**
20
+ * The type of the channel
21
+ * @type {ChannelType}
22
+ */
23
+ this.type = data.type;
24
+
25
+ if (data && immediatePatch) this._patch(data);
26
+ }
27
+
28
+ _patch(data) {
29
+ if ('flags' in data) {
30
+ /**
31
+ * The flags that are applied to the channel.
32
+ * <info>This is only `null` in a {@link PartialGroupDMChannel}. In all other cases, it is not `null`.</info>
33
+ * @type {?Readonly<ChannelFlagsBitField>}
34
+ */
35
+ this.flags = new ChannelFlagsBitField(data.flags).freeze();
36
+ } else {
37
+ this.flags ??= new ChannelFlagsBitField().freeze();
38
+ }
39
+
40
+ /**
41
+ * The channel's id
42
+ * @type {Snowflake}
43
+ */
44
+ this.id = data.id;
45
+ }
46
+
47
+ /**
48
+ * The timestamp the channel was created at
49
+ * @type {number}
50
+ * @readonly
51
+ */
52
+ get createdTimestamp() {
53
+ return DiscordSnowflake.timestampFrom(this.id);
54
+ }
55
+
56
+ /**
57
+ * The time the channel was created at
58
+ * @type {Date}
59
+ * @readonly
60
+ */
61
+ get createdAt() {
62
+ return new Date(this.createdTimestamp);
63
+ }
64
+
65
+ /**
66
+ * The URL to the channel
67
+ * @type {string}
68
+ * @readonly
69
+ */
70
+ get url() {
71
+ return this.isDMBased() ? channelLink(this.id) : channelLink(this.id, this.guildId);
72
+ }
73
+
74
+ /**
75
+ * Whether this Channel is a partial
76
+ * <info>This is always false outside of DM channels.</info>
77
+ * @type {boolean}
78
+ * @readonly
79
+ */
80
+ get partial() {
81
+ return false;
82
+ }
83
+
84
+ /**
85
+ * When concatenated with a string, this automatically returns the channel's mention instead of the Channel object.
86
+ * @returns {string}
87
+ * @example
88
+ * // Logs: Hello from <#123456789012345678>!
89
+ * console.log(`Hello from ${channel}!`);
90
+ */
91
+ toString() {
92
+ return `<#${this.id}>`;
93
+ }
94
+
95
+ /**
96
+ * Deletes this channel.
97
+ * @returns {Promise<BaseChannel>}
98
+ * @example
99
+ * // Delete the channel
100
+ * channel.delete()
101
+ * .then(console.log)
102
+ * .catch(console.error);
103
+ */
104
+ async delete() {
105
+ await this.client.rest.delete(Routes.channel(this.id));
106
+ return this;
107
+ }
108
+
109
+ /**
110
+ * Fetches this channel.
111
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
112
+ * @returns {Promise<BaseChannel>}
113
+ */
114
+ fetch(force = true) {
115
+ return this.client.channels.fetch(this.id, { force });
116
+ }
117
+
118
+ /**
119
+ * Indicates whether this channel is a {@link ThreadChannel}.
120
+ * @returns {boolean}
121
+ */
122
+ isThread() {
123
+ return ThreadChannelTypes.includes(this.type);
124
+ }
125
+
126
+ /**
127
+ * Indicates whether this channel is {@link TextBasedChannels text-based}.
128
+ * @returns {boolean}
129
+ */
130
+ isTextBased() {
131
+ return 'messages' in this;
132
+ }
133
+
134
+ /**
135
+ * Indicates whether this channel is DM-based (either a {@link DMChannel} or a {@link PartialGroupDMChannel}).
136
+ * @returns {boolean}
137
+ */
138
+ isDMBased() {
139
+ return [ChannelType.DM, ChannelType.GroupDM].includes(this.type);
140
+ }
141
+
142
+ /**
143
+ * Indicates whether this channel is {@link BaseGuildVoiceChannel voice-based}.
144
+ * @returns {boolean}
145
+ */
146
+ isVoiceBased() {
147
+ return 'bitrate' in this;
148
+ }
149
+
150
+ toJSON(...props) {
151
+ return super.toJSON({ createdTimestamp: true }, ...props);
152
+ }
153
+ }
154
+
155
+ exports.BaseChannel = BaseChannel;
156
+
157
+ /**
158
+ * @external APIChannel
159
+ * @see {@link https://discord.com/developers/docs/resources/channel#channel-object}
160
+ */
@@ -0,0 +1,119 @@
1
+ 'use strict';
2
+
3
+ const { makeURLSearchParams } = require('@discordjs/rest');
4
+ const { DiscordSnowflake } = require('@sapphire/snowflake');
5
+ const { Routes, GuildFeature } = require('discord-api-types/v10');
6
+ const Base = require('./Base');
7
+
8
+ /**
9
+ * The base class for {@link Guild}, {@link OAuth2Guild} and {@link InviteGuild}.
10
+ * @extends {Base}
11
+ * @abstract
12
+ */
13
+ class BaseGuild extends Base {
14
+ constructor(client, data) {
15
+ super(client);
16
+
17
+ /**
18
+ * The guild's id
19
+ * @type {Snowflake}
20
+ */
21
+ this.id = data.id;
22
+
23
+ /**
24
+ * The name of this guild
25
+ * @type {string}
26
+ */
27
+ this.name = data.name;
28
+
29
+ /**
30
+ * The icon hash of this guild
31
+ * @type {?string}
32
+ */
33
+ this.icon = data.icon;
34
+
35
+ /**
36
+ * An array of features available to this guild
37
+ * @type {GuildFeature[]}
38
+ */
39
+ this.features = data.features;
40
+ }
41
+
42
+ /**
43
+ * The timestamp this guild was created at
44
+ * @type {number}
45
+ * @readonly
46
+ */
47
+ get createdTimestamp() {
48
+ return DiscordSnowflake.timestampFrom(this.id);
49
+ }
50
+
51
+ /**
52
+ * The time this guild was created at
53
+ * @type {Date}
54
+ * @readonly
55
+ */
56
+ get createdAt() {
57
+ return new Date(this.createdTimestamp);
58
+ }
59
+
60
+ /**
61
+ * The acronym that shows up in place of a guild icon
62
+ * @type {string}
63
+ * @readonly
64
+ */
65
+ get nameAcronym() {
66
+ return this.name
67
+ .replace(/'s /g, ' ')
68
+ .replace(/\w+/g, e => e[0])
69
+ .replace(/\s/g, '');
70
+ }
71
+
72
+ /**
73
+ * Whether this guild is partnered
74
+ * @type {boolean}
75
+ * @readonly
76
+ */
77
+ get partnered() {
78
+ return this.features.includes(GuildFeature.Partnered);
79
+ }
80
+
81
+ /**
82
+ * Whether this guild is verified
83
+ * @type {boolean}
84
+ * @readonly
85
+ */
86
+ get verified() {
87
+ return this.features.includes(GuildFeature.Verified);
88
+ }
89
+
90
+ /**
91
+ * The URL to this guild's icon.
92
+ * @param {ImageURLOptions} [options={}] Options for the image URL
93
+ * @returns {?string}
94
+ */
95
+ iconURL(options = {}) {
96
+ return this.icon && this.client.rest.cdn.icon(this.id, this.icon, options);
97
+ }
98
+
99
+ /**
100
+ * Fetches this guild.
101
+ * @returns {Promise<Guild>}
102
+ */
103
+ async fetch() {
104
+ const data = await this.client.rest.get(Routes.guild(this.id), {
105
+ query: makeURLSearchParams({ with_counts: true }),
106
+ });
107
+ return this.client.guilds._add(data);
108
+ }
109
+
110
+ /**
111
+ * When concatenated with a string, this automatically returns the guild's name instead of the Guild object.
112
+ * @returns {string}
113
+ */
114
+ toString() {
115
+ return this.name;
116
+ }
117
+ }
118
+
119
+ module.exports = BaseGuild;
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ const { Emoji } = require('./Emoji');
4
+
5
+ /**
6
+ * Parent class for {@link GuildEmoji} and {@link GuildPreviewEmoji}.
7
+ * @extends {Emoji}
8
+ * @abstract
9
+ */
10
+ class BaseGuildEmoji extends Emoji {
11
+ constructor(client, data, guild) {
12
+ super(client, data);
13
+
14
+ /**
15
+ * The guild this emoji is a part of
16
+ * @type {Guild|GuildPreview}
17
+ */
18
+ this.guild = guild;
19
+
20
+ this.requiresColons = null;
21
+ this.managed = null;
22
+ this.available = null;
23
+
24
+ this._patch(data);
25
+ }
26
+
27
+ _patch(data) {
28
+ if ('name' in data) this.name = data.name;
29
+
30
+ if ('require_colons' in data) {
31
+ /**
32
+ * Whether or not this emoji requires colons surrounding it
33
+ * @type {?boolean}
34
+ */
35
+ this.requiresColons = data.require_colons;
36
+ }
37
+
38
+ if ('managed' in data) {
39
+ /**
40
+ * Whether this emoji is managed by an external service
41
+ * @type {?boolean}
42
+ */
43
+ this.managed = data.managed;
44
+ }
45
+
46
+ if ('available' in data) {
47
+ /**
48
+ * Whether this emoji is available
49
+ * @type {?boolean}
50
+ */
51
+ this.available = data.available;
52
+ }
53
+ }
54
+ }
55
+
56
+ module.exports = BaseGuildEmoji;
@@ -0,0 +1,186 @@
1
+ 'use strict';
2
+
3
+ const GuildChannel = require('./GuildChannel');
4
+ const TextBasedChannel = require('./interfaces/TextBasedChannel');
5
+ const GuildTextThreadManager = require('../managers/GuildTextThreadManager');
6
+ const MessageManager = require('../managers/MessageManager');
7
+
8
+ /**
9
+ * Represents a text-based guild channel on Discord.
10
+ * @extends {GuildChannel}
11
+ * @implements {TextBasedChannel}
12
+ */
13
+ class BaseGuildTextChannel extends GuildChannel {
14
+ constructor(guild, data, client) {
15
+ super(guild, data, client, false);
16
+
17
+ /**
18
+ * A manager of the messages sent to this channel
19
+ * @type {MessageManager}
20
+ */
21
+ this.messages = new MessageManager(this);
22
+
23
+ /**
24
+ * A manager of the threads belonging to this channel
25
+ * @type {GuildTextThreadManager}
26
+ */
27
+ this.threads = new GuildTextThreadManager(this);
28
+
29
+ /**
30
+ * If the guild considers this channel NSFW
31
+ * @type {boolean}
32
+ */
33
+ this.nsfw = Boolean(data.nsfw);
34
+
35
+ this._patch(data);
36
+ }
37
+
38
+ _patch(data) {
39
+ super._patch(data);
40
+
41
+ if ('topic' in data) {
42
+ /**
43
+ * The topic of the text channel
44
+ * @type {?string}
45
+ */
46
+ this.topic = data.topic;
47
+ }
48
+
49
+ if ('nsfw' in data) {
50
+ this.nsfw = Boolean(data.nsfw);
51
+ }
52
+
53
+ if ('last_message_id' in data) {
54
+ /**
55
+ * The last message id sent in the channel, if one was sent
56
+ * @type {?Snowflake}
57
+ */
58
+ this.lastMessageId = data.last_message_id;
59
+ }
60
+
61
+ if ('last_pin_timestamp' in data) {
62
+ /**
63
+ * The timestamp when the last pinned message was pinned, if there was one
64
+ * @type {?number}
65
+ */
66
+ this.lastPinTimestamp = data.last_pin_timestamp ? Date.parse(data.last_pin_timestamp) : null;
67
+ }
68
+
69
+ if ('default_auto_archive_duration' in data) {
70
+ /**
71
+ * The default auto archive duration for newly created threads in this channel
72
+ * @type {?ThreadAutoArchiveDuration}
73
+ */
74
+ this.defaultAutoArchiveDuration = data.default_auto_archive_duration;
75
+ }
76
+
77
+ if ('messages' in data) {
78
+ for (const message of data.messages) this.messages._add(message);
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Sets the default auto archive duration for all newly created threads in this channel.
84
+ * @param {ThreadAutoArchiveDuration} defaultAutoArchiveDuration The new default auto archive duration
85
+ * @param {string} [reason] Reason for changing the channel's default auto archive duration
86
+ * @returns {Promise<TextChannel>}
87
+ */
88
+ setDefaultAutoArchiveDuration(defaultAutoArchiveDuration, reason) {
89
+ return this.edit({ defaultAutoArchiveDuration, reason });
90
+ }
91
+
92
+ /**
93
+ * Sets the type of this channel.
94
+ * <info>Only conversion between {@link TextChannel} and {@link NewsChannel} is supported.</info>
95
+ * @param {ChannelType.GuildText|ChannelType.GuildAnnouncement} type The new channel type
96
+ * @param {string} [reason] Reason for changing the channel's type
97
+ * @returns {Promise<GuildChannel>}
98
+ */
99
+ setType(type, reason) {
100
+ return this.edit({ type, reason });
101
+ }
102
+
103
+ /**
104
+ * Sets a new topic for the guild channel.
105
+ * @param {?string} topic The new topic for the guild channel
106
+ * @param {string} [reason] Reason for changing the guild channel's topic
107
+ * @returns {Promise<GuildChannel>}
108
+ * @example
109
+ * // Set a new channel topic
110
+ * channel.setTopic('needs more rate limiting')
111
+ * .then(newChannel => console.log(`Channel's new topic is ${newChannel.topic}`))
112
+ * .catch(console.error);
113
+ */
114
+ setTopic(topic, reason) {
115
+ return this.edit({ topic, reason });
116
+ }
117
+
118
+ /**
119
+ * Data that can be resolved to an Application. This can be:
120
+ * * An Application
121
+ * * An Activity with associated Application
122
+ * * A Snowflake
123
+ * @typedef {Application|Snowflake} ApplicationResolvable
124
+ */
125
+
126
+ /**
127
+ * Options used to create an invite to a guild channel.
128
+ * @typedef {Object} InviteCreateOptions
129
+ * @property {boolean} [temporary] Whether members that joined via the invite should be automatically
130
+ * kicked after 24 hours if they have not yet received a role
131
+ * @property {number} [maxAge] How long the invite should last (in seconds, 0 for forever)
132
+ * @property {number} [maxUses] Maximum number of uses
133
+ * @property {boolean} [unique] Create a unique invite, or use an existing one with similar settings
134
+ * @property {UserResolvable} [targetUser] The user whose stream to display for this invite,
135
+ * required if `targetType` is {@link InviteTargetType.Stream}, the user must be streaming in the channel
136
+ * @property {ApplicationResolvable} [targetApplication] The embedded application to open for this invite,
137
+ * required if `targetType` is {@link InviteTargetType.Stream}, the application must have the
138
+ * {@link InviteTargetType.EmbeddedApplication} flag
139
+ * @property {InviteTargetType} [targetType] The type of the target for this voice channel invite
140
+ * @property {string} [reason] The reason for creating the invite
141
+ */
142
+
143
+ /**
144
+ * Creates an invite to this guild channel.
145
+ * @param {InviteCreateOptions} [options={}] The options for creating the invite
146
+ * @returns {Promise<Invite>}
147
+ * @example
148
+ * // Create an invite to a channel
149
+ * channel.createInvite()
150
+ * .then(invite => console.log(`Created an invite with a code of ${invite.code}`))
151
+ * .catch(console.error);
152
+ */
153
+ createInvite(options) {
154
+ return this.guild.invites.create(this.id, options);
155
+ }
156
+
157
+ /**
158
+ * Fetches a collection of invites to this guild channel.
159
+ * Resolves with a collection mapping invites by their codes.
160
+ * @param {boolean} [cache=true] Whether or not to cache the fetched invites
161
+ * @returns {Promise<Collection<string, Invite>>}
162
+ */
163
+ fetchInvites(cache = true) {
164
+ return this.guild.invites.fetch({ channelId: this.id, cache });
165
+ }
166
+
167
+ // These are here only for documentation purposes - they are implemented by TextBasedChannel
168
+ /* eslint-disable no-empty-function */
169
+ get lastMessage() {}
170
+ get lastPinAt() {}
171
+ send() {}
172
+ sendTyping() {}
173
+ createMessageCollector() {}
174
+ awaitMessages() {}
175
+ createMessageComponentCollector() {}
176
+ awaitMessageComponent() {}
177
+ bulkDelete() {}
178
+ fetchWebhooks() {}
179
+ createWebhook() {}
180
+ setRateLimitPerUser() {}
181
+ setNSFW() {}
182
+ }
183
+
184
+ TextBasedChannel.applyToClass(BaseGuildTextChannel, true);
185
+
186
+ module.exports = BaseGuildTextChannel;