@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,234 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const { PermissionFlagsBits } = require('discord-api-types/v10');
5
+ const GuildChannel = require('./GuildChannel');
6
+ const TextBasedChannel = require('./interfaces/TextBasedChannel');
7
+ const MessageManager = require('../managers/MessageManager');
8
+
9
+ /**
10
+ * Represents a voice-based guild channel on Discord.
11
+ * @extends {GuildChannel}
12
+ * @implements {TextBasedChannel}
13
+ */
14
+ class BaseGuildVoiceChannel extends GuildChannel {
15
+ constructor(guild, data, client) {
16
+ super(guild, data, client, false);
17
+ /**
18
+ * A manager of the messages sent to this channel
19
+ * @type {MessageManager}
20
+ */
21
+ this.messages = new MessageManager(this);
22
+
23
+ /**
24
+ * If the guild considers this channel NSFW
25
+ * @type {boolean}
26
+ */
27
+ this.nsfw = Boolean(data.nsfw);
28
+
29
+ this._patch(data);
30
+ }
31
+
32
+ _patch(data) {
33
+ super._patch(data);
34
+
35
+ if ('rtc_region' in data) {
36
+ /**
37
+ * The RTC region for this voice-based channel. This region is automatically selected if `null`.
38
+ * @type {?string}
39
+ */
40
+ this.rtcRegion = data.rtc_region;
41
+ }
42
+
43
+ if ('bitrate' in data) {
44
+ /**
45
+ * The bitrate of this voice-based channel
46
+ * @type {number}
47
+ */
48
+ this.bitrate = data.bitrate;
49
+ }
50
+
51
+ if ('user_limit' in data) {
52
+ /**
53
+ * The maximum amount of users allowed in this channel.
54
+ * @type {number}
55
+ */
56
+ this.userLimit = data.user_limit;
57
+ }
58
+
59
+ if ('video_quality_mode' in data) {
60
+ /**
61
+ * The camera video quality mode of the channel.
62
+ * @type {?VideoQualityMode}
63
+ */
64
+ this.videoQualityMode = data.video_quality_mode;
65
+ } else {
66
+ this.videoQualityMode ??= null;
67
+ }
68
+
69
+ if ('last_message_id' in data) {
70
+ /**
71
+ * The last message id sent in the channel, if one was sent
72
+ * @type {?Snowflake}
73
+ */
74
+ this.lastMessageId = data.last_message_id;
75
+ }
76
+
77
+ if ('messages' in data) {
78
+ for (const message of data.messages) this.messages._add(message);
79
+ }
80
+
81
+ if ('rate_limit_per_user' in data) {
82
+ /**
83
+ * The rate limit per user (slowmode) for this channel in seconds
84
+ * @type {number}
85
+ */
86
+ this.rateLimitPerUser = data.rate_limit_per_user;
87
+ }
88
+
89
+ if ('nsfw' in data) {
90
+ this.nsfw = data.nsfw;
91
+ }
92
+ }
93
+
94
+ /**
95
+ * The members in this voice-based channel
96
+ * @type {Collection<Snowflake, GuildMember>}
97
+ * @readonly
98
+ */
99
+ get members() {
100
+ const coll = new Collection();
101
+ for (const state of this.guild.voiceStates.cache.values()) {
102
+ if (state.channelId === this.id && state.member) {
103
+ coll.set(state.id, state.member);
104
+ }
105
+ }
106
+ return coll;
107
+ }
108
+
109
+ /**
110
+ * Checks if the voice-based channel is full
111
+ * @type {boolean}
112
+ * @readonly
113
+ */
114
+ get full() {
115
+ return this.userLimit > 0 && this.members.size >= this.userLimit;
116
+ }
117
+
118
+ /**
119
+ * Whether the channel is joinable by the client user
120
+ * @type {boolean}
121
+ * @readonly
122
+ */
123
+ get joinable() {
124
+ if (!this.viewable) return false;
125
+ const permissions = this.permissionsFor(this.client.user);
126
+ if (!permissions) return false;
127
+
128
+ // This flag allows joining even if timed out
129
+ if (permissions.has(PermissionFlagsBits.Administrator, false)) return true;
130
+
131
+ return (
132
+ this.guild.members.me.communicationDisabledUntilTimestamp < Date.now() &&
133
+ permissions.has(PermissionFlagsBits.Connect, false)
134
+ );
135
+ }
136
+
137
+ /**
138
+ * Creates an invite to this guild channel.
139
+ * @param {InviteCreateOptions} [options={}] The options for creating the invite
140
+ * @returns {Promise<Invite>}
141
+ * @example
142
+ * // Create an invite to a channel
143
+ * channel.createInvite()
144
+ * .then(invite => console.log(`Created an invite with a code of ${invite.code}`))
145
+ * .catch(console.error);
146
+ */
147
+ createInvite(options) {
148
+ return this.guild.invites.create(this.id, options);
149
+ }
150
+
151
+ /**
152
+ * Fetches a collection of invites to this guild channel.
153
+ * @param {boolean} [cache=true] Whether to cache the fetched invites
154
+ * @returns {Promise<Collection<string, Invite>>}
155
+ */
156
+ fetchInvites(cache = true) {
157
+ return this.guild.invites.fetch({ channelId: this.id, cache });
158
+ }
159
+
160
+ /**
161
+ * Sets the bitrate of the channel.
162
+ * @param {number} bitrate The new bitrate
163
+ * @param {string} [reason] Reason for changing the channel's bitrate
164
+ * @returns {Promise<BaseGuildVoiceChannel>}
165
+ * @example
166
+ * // Set the bitrate of a voice channel
167
+ * channel.setBitrate(48_000)
168
+ * .then(channel => console.log(`Set bitrate to ${channel.bitrate}bps for ${channel.name}`))
169
+ * .catch(console.error);
170
+ */
171
+ setBitrate(bitrate, reason) {
172
+ return this.edit({ bitrate, reason });
173
+ }
174
+
175
+ /**
176
+ * Sets the RTC region of the channel.
177
+ * @param {?string} rtcRegion The new region of the channel. Set to `null` to remove a specific region for the channel
178
+ * @param {string} [reason] The reason for modifying this region.
179
+ * @returns {Promise<BaseGuildVoiceChannel>}
180
+ * @example
181
+ * // Set the RTC region to sydney
182
+ * channel.setRTCRegion('sydney');
183
+ * @example
184
+ * // Remove a fixed region for this channel - let Discord decide automatically
185
+ * channel.setRTCRegion(null, 'We want to let Discord decide.');
186
+ */
187
+ setRTCRegion(rtcRegion, reason) {
188
+ return this.edit({ rtcRegion, reason });
189
+ }
190
+
191
+ /**
192
+ * Sets the user limit of the channel.
193
+ * @param {number} userLimit The new user limit
194
+ * @param {string} [reason] Reason for changing the user limit
195
+ * @returns {Promise<BaseGuildVoiceChannel>}
196
+ * @example
197
+ * // Set the user limit of a voice channel
198
+ * channel.setUserLimit(42)
199
+ * .then(channel => console.log(`Set user limit to ${channel.userLimit} for ${channel.name}`))
200
+ * .catch(console.error);
201
+ */
202
+ setUserLimit(userLimit, reason) {
203
+ return this.edit({ userLimit, reason });
204
+ }
205
+
206
+ /**
207
+ * Sets the camera video quality mode of the channel.
208
+ * @param {VideoQualityMode} videoQualityMode The new camera video quality mode.
209
+ * @param {string} [reason] Reason for changing the camera video quality mode.
210
+ * @returns {Promise<BaseGuildVoiceChannel>}
211
+ */
212
+ setVideoQualityMode(videoQualityMode, reason) {
213
+ return this.edit({ videoQualityMode, reason });
214
+ }
215
+
216
+ // These are here only for documentation purposes - they are implemented by TextBasedChannel
217
+ /* eslint-disable no-empty-function */
218
+ get lastMessage() {}
219
+ send() {}
220
+ sendTyping() {}
221
+ createMessageCollector() {}
222
+ awaitMessages() {}
223
+ createMessageComponentCollector() {}
224
+ awaitMessageComponent() {}
225
+ bulkDelete() {}
226
+ fetchWebhooks() {}
227
+ createWebhook() {}
228
+ setRateLimitPerUser() {}
229
+ setNSFW() {}
230
+ }
231
+
232
+ TextBasedChannel.applyToClass(BaseGuildVoiceChannel, true, ['lastPinAt']);
233
+
234
+ module.exports = BaseGuildVoiceChannel;
@@ -0,0 +1,344 @@
1
+ 'use strict';
2
+
3
+ const { deprecate } = require('node:util');
4
+ const { DiscordSnowflake } = require('@sapphire/snowflake');
5
+ const { InteractionType, ApplicationCommandType, ComponentType } = require('discord-api-types/v10');
6
+ const Base = require('./Base');
7
+ const { SelectMenuTypes } = require('../util/Constants');
8
+ const PermissionsBitField = require('../util/PermissionsBitField');
9
+
10
+ /**
11
+ * Represents an interaction.
12
+ * @extends {Base}
13
+ * @abstract
14
+ */
15
+ class BaseInteraction extends Base {
16
+ constructor(client, data) {
17
+ super(client);
18
+
19
+ /**
20
+ * The interaction's type
21
+ * @type {InteractionType}
22
+ */
23
+ this.type = data.type;
24
+
25
+ /**
26
+ * The interaction's id
27
+ * @type {Snowflake}
28
+ */
29
+ this.id = data.id;
30
+
31
+ /**
32
+ * The interaction's token
33
+ * @type {string}
34
+ * @name BaseInteraction#token
35
+ * @readonly
36
+ */
37
+ Object.defineProperty(this, 'token', { value: data.token });
38
+
39
+ /**
40
+ * The application's id
41
+ * @type {Snowflake}
42
+ */
43
+ this.applicationId = data.application_id;
44
+
45
+ /**
46
+ * The id of the channel this interaction was sent in
47
+ * @type {?Snowflake}
48
+ */
49
+ this.channelId = data.channel?.id ?? null;
50
+
51
+ /**
52
+ * The id of the guild this interaction was sent in
53
+ * @type {?Snowflake}
54
+ */
55
+ this.guildId = data.guild_id ?? null;
56
+
57
+ /**
58
+ * The user who created this interaction
59
+ * @type {User}
60
+ */
61
+ this.user = this.client.users._add(data.user ?? data.member.user);
62
+
63
+ /**
64
+ * If this interaction was sent in a guild, the member which sent it
65
+ * @type {?(GuildMember|APIGuildMember)}
66
+ */
67
+ this.member = data.member ? this.guild?.members._add(data.member) ?? data.member : null;
68
+
69
+ /**
70
+ * The version
71
+ * @type {number}
72
+ */
73
+ this.version = data.version;
74
+
75
+ /**
76
+ * Set of permissions the application or bot has within the channel the interaction was sent from
77
+ * @type {?Readonly<PermissionsBitField>}
78
+ */
79
+ this.appPermissions = data.app_permissions ? new PermissionsBitField(data.app_permissions).freeze() : null;
80
+
81
+ /**
82
+ * The permissions of the member, if one exists, in the channel this interaction was executed in
83
+ * @type {?Readonly<PermissionsBitField>}
84
+ */
85
+ this.memberPermissions = data.member?.permissions
86
+ ? new PermissionsBitField(data.member.permissions).freeze()
87
+ : null;
88
+
89
+ /**
90
+ * A Discord locale string, possible values are:
91
+ * * en-US (English, US)
92
+ * * en-GB (English, UK)
93
+ * * bg (Bulgarian)
94
+ * * zh-CN (Chinese, China)
95
+ * * zh-TW (Chinese, Taiwan)
96
+ * * hr (Croatian)
97
+ * * cs (Czech)
98
+ * * da (Danish)
99
+ * * nl (Dutch)
100
+ * * fi (Finnish)
101
+ * * fr (French)
102
+ * * de (German)
103
+ * * el (Greek)
104
+ * * hi (Hindi)
105
+ * * hu (Hungarian)
106
+ * * it (Italian)
107
+ * * ja (Japanese)
108
+ * * ko (Korean)
109
+ * * lt (Lithuanian)
110
+ * * no (Norwegian)
111
+ * * pl (Polish)
112
+ * * pt-BR (Portuguese, Brazilian)
113
+ * * ro (Romanian, Romania)
114
+ * * ru (Russian)
115
+ * * es-ES (Spanish)
116
+ * * sv-SE (Swedish)
117
+ * * th (Thai)
118
+ * * tr (Turkish)
119
+ * * uk (Ukrainian)
120
+ * * vi (Vietnamese)
121
+ * @see {@link https://discord.com/developers/docs/reference#locales}
122
+ * @typedef {string} Locale
123
+ */
124
+
125
+ /**
126
+ * The locale of the user who invoked this interaction
127
+ * @type {Locale}
128
+ */
129
+ this.locale = data.locale;
130
+
131
+ /**
132
+ * The preferred locale from the guild this interaction was sent in
133
+ * @type {?Locale}
134
+ */
135
+ this.guildLocale = data.guild_locale ?? null;
136
+ }
137
+
138
+ /**
139
+ * The timestamp the interaction was created at
140
+ * @type {number}
141
+ * @readonly
142
+ */
143
+ get createdTimestamp() {
144
+ return DiscordSnowflake.timestampFrom(this.id);
145
+ }
146
+
147
+ /**
148
+ * The time the interaction was created at
149
+ * @type {Date}
150
+ * @readonly
151
+ */
152
+ get createdAt() {
153
+ return new Date(this.createdTimestamp);
154
+ }
155
+
156
+ /**
157
+ * The channel this interaction was sent in
158
+ * @type {?TextBasedChannels}
159
+ * @readonly
160
+ */
161
+ get channel() {
162
+ return this.client.channels.cache.get(this.channelId) ?? null;
163
+ }
164
+
165
+ /**
166
+ * The guild this interaction was sent in
167
+ * @type {?Guild}
168
+ * @readonly
169
+ */
170
+ get guild() {
171
+ return this.client.guilds.cache.get(this.guildId) ?? null;
172
+ }
173
+
174
+ /**
175
+ * Indicates whether this interaction is received from a guild.
176
+ * @returns {boolean}
177
+ */
178
+ inGuild() {
179
+ return Boolean(this.guildId && this.member);
180
+ }
181
+
182
+ /**
183
+ * Indicates whether or not this interaction is both cached and received from a guild.
184
+ * @returns {boolean}
185
+ */
186
+ inCachedGuild() {
187
+ return Boolean(this.guild && this.member);
188
+ }
189
+
190
+ /**
191
+ * Indicates whether or not this interaction is received from an uncached guild.
192
+ * @returns {boolean}
193
+ */
194
+ inRawGuild() {
195
+ return Boolean(this.guildId && !this.guild && this.member);
196
+ }
197
+
198
+ /**
199
+ * Indicates whether this interaction is an {@link AutocompleteInteraction}
200
+ * @returns {boolean}
201
+ */
202
+ isAutocomplete() {
203
+ return this.type === InteractionType.ApplicationCommandAutocomplete;
204
+ }
205
+
206
+ /**
207
+ * Indicates whether this interaction is a {@link CommandInteraction}
208
+ * @returns {boolean}
209
+ */
210
+ isCommand() {
211
+ return this.type === InteractionType.ApplicationCommand;
212
+ }
213
+
214
+ /**
215
+ * Indicates whether this interaction is a {@link ChatInputCommandInteraction}.
216
+ * @returns {boolean}
217
+ */
218
+ isChatInputCommand() {
219
+ return this.type === InteractionType.ApplicationCommand && this.commandType === ApplicationCommandType.ChatInput;
220
+ }
221
+
222
+ /**
223
+ * Indicates whether this interaction is a {@link ContextMenuCommandInteraction}
224
+ * @returns {boolean}
225
+ */
226
+ isContextMenuCommand() {
227
+ return (
228
+ this.type === InteractionType.ApplicationCommand &&
229
+ [ApplicationCommandType.User, ApplicationCommandType.Message].includes(this.commandType)
230
+ );
231
+ }
232
+
233
+ /**
234
+ * Indicates whether this interaction is a {@link MessageComponentInteraction}
235
+ * @returns {boolean}
236
+ */
237
+ isMessageComponent() {
238
+ return this.type === InteractionType.MessageComponent;
239
+ }
240
+
241
+ /**
242
+ * Indicates whether this interaction is a {@link ModalSubmitInteraction}
243
+ * @returns {boolean}
244
+ */
245
+ isModalSubmit() {
246
+ return this.type === InteractionType.ModalSubmit;
247
+ }
248
+
249
+ /**
250
+ * Indicates whether this interaction is a {@link UserContextMenuCommandInteraction}
251
+ * @returns {boolean}
252
+ */
253
+ isUserContextMenuCommand() {
254
+ return this.isContextMenuCommand() && this.commandType === ApplicationCommandType.User;
255
+ }
256
+
257
+ /**
258
+ * Indicates whether this interaction is a {@link MessageContextMenuCommandInteraction}
259
+ * @returns {boolean}
260
+ */
261
+ isMessageContextMenuCommand() {
262
+ return this.isContextMenuCommand() && this.commandType === ApplicationCommandType.Message;
263
+ }
264
+
265
+ /**
266
+ * Indicates whether this interaction is a {@link ButtonInteraction}.
267
+ * @returns {boolean}
268
+ */
269
+ isButton() {
270
+ return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.Button;
271
+ }
272
+
273
+ /**
274
+ * Indicates whether this interaction is a {@link StringSelectMenuInteraction}.
275
+ * @returns {boolean}
276
+ * @deprecated Use {@link BaseInteraction#isStringSelectMenu} instead.
277
+ */
278
+ isSelectMenu() {
279
+ return this.isStringSelectMenu();
280
+ }
281
+
282
+ /**
283
+ * Indicates whether this interaction is a select menu of any known type.
284
+ * @returns {boolean}
285
+ */
286
+ isAnySelectMenu() {
287
+ return this.type === InteractionType.MessageComponent && SelectMenuTypes.includes(this.componentType);
288
+ }
289
+
290
+ /**
291
+ * Indicates whether this interaction is a {@link StringSelectMenuInteraction}.
292
+ * @returns {boolean}
293
+ */
294
+ isStringSelectMenu() {
295
+ return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.StringSelect;
296
+ }
297
+
298
+ /**
299
+ * Indicates whether this interaction is a {@link UserSelectMenuInteraction}
300
+ * @returns {boolean}
301
+ */
302
+ isUserSelectMenu() {
303
+ return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.UserSelect;
304
+ }
305
+
306
+ /**
307
+ * Indicates whether this interaction is a {@link RoleSelectMenuInteraction}
308
+ * @returns {boolean}
309
+ */
310
+ isRoleSelectMenu() {
311
+ return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.RoleSelect;
312
+ }
313
+
314
+ /**
315
+ * Indicates whether this interaction is a {@link ChannelSelectMenuInteraction}
316
+ * @returns {boolean}
317
+ */
318
+ isChannelSelectMenu() {
319
+ return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.ChannelSelect;
320
+ }
321
+
322
+ /**
323
+ * Indicates whether this interaction is a {@link MentionableSelectMenuInteraction}
324
+ * @returns {boolean}
325
+ */
326
+ isMentionableSelectMenu() {
327
+ return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.MentionableSelect;
328
+ }
329
+
330
+ /**
331
+ * Indicates whether this interaction can be replied to.
332
+ * @returns {boolean}
333
+ */
334
+ isRepliable() {
335
+ return ![InteractionType.Ping, InteractionType.ApplicationCommandAutocomplete].includes(this.type);
336
+ }
337
+ }
338
+
339
+ BaseInteraction.prototype.isSelectMenu = deprecate(
340
+ BaseInteraction.prototype.isSelectMenu,
341
+ 'BaseInteraction#isSelectMenu() is deprecated. Use BaseInteraction#isStringSelectMenu() instead.',
342
+ );
343
+
344
+ module.exports = BaseInteraction;
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ const Component = require('./Component');
4
+
5
+ /**
6
+ * Represents a select menu component
7
+ * @extends {Component}
8
+ */
9
+ class BaseSelectMenuComponent extends Component {
10
+ /**
11
+ * The placeholder for this select menu
12
+ * @type {?string}
13
+ * @readonly
14
+ */
15
+ get placeholder() {
16
+ return this.data.placeholder ?? null;
17
+ }
18
+
19
+ /**
20
+ * The maximum amount of options that can be selected
21
+ * @type {?number}
22
+ * @readonly
23
+ */
24
+ get maxValues() {
25
+ return this.data.max_values ?? null;
26
+ }
27
+
28
+ /**
29
+ * The minimum amount of options that must be selected
30
+ * @type {?number}
31
+ * @readonly
32
+ */
33
+ get minValues() {
34
+ return this.data.min_values ?? null;
35
+ }
36
+
37
+ /**
38
+ * The custom id of this select menu
39
+ * @type {string}
40
+ * @readonly
41
+ */
42
+ get customId() {
43
+ return this.data.custom_id;
44
+ }
45
+
46
+ /**
47
+ * Whether this select menu is disabled
48
+ * @type {boolean}
49
+ * @readonly
50
+ */
51
+ get disabled() {
52
+ return this.data.disabled ?? false;
53
+ }
54
+ }
55
+
56
+ module.exports = BaseSelectMenuComponent;
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ const { ButtonBuilder: BuildersButton } = require('@discordjs/builders');
4
+ const { isJSONEncodable } = require('@discordjs/util');
5
+ const { toSnakeCase } = require('../util/Transformers');
6
+ const { resolvePartialEmoji } = require('../util/Util');
7
+
8
+ /**
9
+ * Represents a button builder.
10
+ * @extends {BuildersButton}
11
+ */
12
+ class ButtonBuilder extends BuildersButton {
13
+ constructor({ emoji, ...data } = {}) {
14
+ super(toSnakeCase({ ...data, emoji: emoji && typeof emoji === 'string' ? resolvePartialEmoji(emoji) : emoji }));
15
+ }
16
+
17
+ /**
18
+ * Sets the emoji to display on this button
19
+ * @param {string|APIMessageComponentEmoji} emoji The emoji to display on this button
20
+ * @returns {ButtonBuilder}
21
+ */
22
+ setEmoji(emoji) {
23
+ if (typeof emoji === 'string') {
24
+ return super.setEmoji(resolvePartialEmoji(emoji));
25
+ }
26
+ return super.setEmoji(emoji);
27
+ }
28
+
29
+ /**
30
+ * Creates a new button builder from JSON data
31
+ * @param {ButtonBuilder|ButtonComponent|APIButtonComponent} other The other data
32
+ * @returns {ButtonBuilder}
33
+ */
34
+ static from(other) {
35
+ return new this(isJSONEncodable(other) ? other.toJSON() : other);
36
+ }
37
+ }
38
+
39
+ module.exports = ButtonBuilder;
40
+
41
+ /**
42
+ * @external BuildersButton
43
+ * @see {@link https://discord.js.org/docs/packages/builders/stable/ButtonBuilder:Class}
44
+ */