@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,303 @@
1
+ 'use strict';
2
+
3
+ const { ChannelType, Routes } = require('discord-api-types/v10');
4
+ const Base = require('./Base');
5
+ const { DiscordjsError, DiscordjsTypeError, ErrorCodes } = require('../errors');
6
+
7
+ /**
8
+ * Represents the voice state for a Guild Member.
9
+ * @extends {Base}
10
+ */
11
+ class VoiceState extends Base {
12
+ constructor(guild, data) {
13
+ super(guild.client);
14
+ /**
15
+ * The guild of this voice state
16
+ * @type {Guild}
17
+ */
18
+ this.guild = guild;
19
+ /**
20
+ * The id of the member of this voice state
21
+ * @type {Snowflake}
22
+ */
23
+ this.id = data.user_id;
24
+ this._patch(data);
25
+ }
26
+
27
+ _patch(data) {
28
+ if ('deaf' in data) {
29
+ /**
30
+ * Whether this member is deafened server-wide
31
+ * @type {?boolean}
32
+ */
33
+ this.serverDeaf = data.deaf;
34
+ } else {
35
+ this.serverDeaf ??= null;
36
+ }
37
+
38
+ if ('mute' in data) {
39
+ /**
40
+ * Whether this member is muted server-wide
41
+ * @type {?boolean}
42
+ */
43
+ this.serverMute = data.mute;
44
+ } else {
45
+ this.serverMute ??= null;
46
+ }
47
+
48
+ if ('self_deaf' in data) {
49
+ /**
50
+ * Whether this member is self-deafened
51
+ * @type {?boolean}
52
+ */
53
+ this.selfDeaf = data.self_deaf;
54
+ } else {
55
+ this.selfDeaf ??= null;
56
+ }
57
+
58
+ if ('self_mute' in data) {
59
+ /**
60
+ * Whether this member is self-muted
61
+ * @type {?boolean}
62
+ */
63
+ this.selfMute = data.self_mute;
64
+ } else {
65
+ this.selfMute ??= null;
66
+ }
67
+
68
+ if ('self_video' in data) {
69
+ /**
70
+ * Whether this member's camera is enabled
71
+ * @type {?boolean}
72
+ */
73
+ this.selfVideo = data.self_video;
74
+ } else {
75
+ this.selfVideo ??= null;
76
+ }
77
+
78
+ if ('session_id' in data) {
79
+ /**
80
+ * The session id for this member's connection
81
+ * @type {?string}
82
+ */
83
+ this.sessionId = data.session_id;
84
+ } else {
85
+ this.sessionId ??= null;
86
+ }
87
+
88
+ // The self_stream is property is omitted if false, check for another property
89
+ // here to avoid incorrectly clearing this when partial data is specified
90
+ if ('self_video' in data) {
91
+ /**
92
+ * Whether this member is streaming using "Screen Share"
93
+ * @type {?boolean}
94
+ */
95
+ this.streaming = data.self_stream ?? false;
96
+ } else {
97
+ this.streaming ??= null;
98
+ }
99
+
100
+ if ('channel_id' in data) {
101
+ /**
102
+ * The {@link VoiceChannel} or {@link StageChannel} id the member is in
103
+ * @type {?Snowflake}
104
+ */
105
+ this.channelId = data.channel_id;
106
+ } else {
107
+ this.channelId ??= null;
108
+ }
109
+
110
+ if ('suppress' in data) {
111
+ /**
112
+ * Whether this member is suppressed from speaking. This property is specific to stage channels only.
113
+ * @type {?boolean}
114
+ */
115
+ this.suppress = data.suppress;
116
+ } else {
117
+ this.suppress ??= null;
118
+ }
119
+
120
+ if ('request_to_speak_timestamp' in data) {
121
+ /**
122
+ * The time at which the member requested to speak. This property is specific to stage channels only.
123
+ * @type {?number}
124
+ */
125
+ this.requestToSpeakTimestamp = data.request_to_speak_timestamp && Date.parse(data.request_to_speak_timestamp);
126
+ } else {
127
+ this.requestToSpeakTimestamp ??= null;
128
+ }
129
+
130
+ return this;
131
+ }
132
+
133
+ /**
134
+ * The member that this voice state belongs to
135
+ * @type {?GuildMember}
136
+ * @readonly
137
+ */
138
+ get member() {
139
+ return this.guild.members.cache.get(this.id) ?? null;
140
+ }
141
+
142
+ /**
143
+ * The channel that the member is connected to
144
+ * @type {?(VoiceChannel|StageChannel)}
145
+ * @readonly
146
+ */
147
+ get channel() {
148
+ return this.guild.channels.cache.get(this.channelId) ?? null;
149
+ }
150
+
151
+ /**
152
+ * Whether this member is either self-deafened or server-deafened
153
+ * @type {?boolean}
154
+ * @readonly
155
+ */
156
+ get deaf() {
157
+ return this.serverDeaf || this.selfDeaf;
158
+ }
159
+
160
+ /**
161
+ * Whether this member is either self-muted or server-muted
162
+ * @type {?boolean}
163
+ * @readonly
164
+ */
165
+ get mute() {
166
+ return this.serverMute || this.selfMute;
167
+ }
168
+
169
+ /**
170
+ * Mutes/unmutes the member of this voice state.
171
+ * @param {boolean} [mute=true] Whether or not the member should be muted
172
+ * @param {string} [reason] Reason for muting or unmuting
173
+ * @returns {Promise<GuildMember>}
174
+ */
175
+ setMute(mute = true, reason) {
176
+ return this.guild.members.edit(this.id, { mute, reason });
177
+ }
178
+
179
+ /**
180
+ * Deafens/undeafens the member of this voice state.
181
+ * @param {boolean} [deaf=true] Whether or not the member should be deafened
182
+ * @param {string} [reason] Reason for deafening or undeafening
183
+ * @returns {Promise<GuildMember>}
184
+ */
185
+ setDeaf(deaf = true, reason) {
186
+ return this.guild.members.edit(this.id, { deaf, reason });
187
+ }
188
+
189
+ /**
190
+ * Disconnects the member from the channel.
191
+ * @param {string} [reason] Reason for disconnecting the member from the channel
192
+ * @returns {Promise<GuildMember>}
193
+ */
194
+ disconnect(reason) {
195
+ return this.setChannel(null, reason);
196
+ }
197
+
198
+ /**
199
+ * Moves the member to a different channel, or disconnects them from the one they're in.
200
+ * @param {GuildVoiceChannelResolvable|null} channel Channel to move the member to, or `null` if you want to
201
+ * disconnect them from voice.
202
+ * @param {string} [reason] Reason for moving member to another channel or disconnecting
203
+ * @returns {Promise<GuildMember>}
204
+ */
205
+ setChannel(channel, reason) {
206
+ return this.guild.members.edit(this.id, { channel, reason });
207
+ }
208
+
209
+ /**
210
+ * Data to edit the logged in user's own voice state with, when in a stage channel
211
+ * @typedef {Object} VoiceStateEditOptions
212
+ * @property {boolean} [requestToSpeak] Whether or not the client is requesting to become a speaker.
213
+ * <info>Only available to the logged in user's own voice state.</info>
214
+ * @property {boolean} [suppressed] Whether or not the user should be suppressed.
215
+ */
216
+
217
+ /**
218
+ * Edits this voice state. Currently only available when in a stage channel
219
+ * @param {VoiceStateEditOptions} options The options to provide
220
+ * @returns {Promise<VoiceState>}
221
+ */
222
+ async edit(options) {
223
+ if (this.channel?.type !== ChannelType.GuildStageVoice) throw new DiscordjsError(ErrorCodes.VoiceNotStageChannel);
224
+
225
+ const target = this.client.user.id === this.id ? '@me' : this.id;
226
+
227
+ if (target !== '@me' && options.requestToSpeak !== undefined) {
228
+ throw new DiscordjsError(ErrorCodes.VoiceStateNotOwn);
229
+ }
230
+
231
+ if (!['boolean', 'undefined'].includes(typeof options.requestToSpeak)) {
232
+ throw new DiscordjsTypeError(ErrorCodes.VoiceStateInvalidType, 'requestToSpeak');
233
+ }
234
+
235
+ if (!['boolean', 'undefined'].includes(typeof options.suppressed)) {
236
+ throw new DiscordjsTypeError(ErrorCodes.VoiceStateInvalidType, 'suppressed');
237
+ }
238
+
239
+ await this.client.rest.patch(Routes.guildVoiceState(this.guild.id, target), {
240
+ body: {
241
+ channel_id: this.channelId,
242
+ request_to_speak_timestamp: options.requestToSpeak
243
+ ? new Date().toISOString()
244
+ : options.requestToSpeak === false
245
+ ? null
246
+ : undefined,
247
+ suppress: options.suppressed,
248
+ },
249
+ });
250
+ return this;
251
+ }
252
+
253
+ /**
254
+ * Toggles the request to speak in the channel.
255
+ * Only applicable for stage channels and for the client's own voice state.
256
+ * @param {boolean} [requestToSpeak=true] Whether or not the client is requesting to become a speaker.
257
+ * @example
258
+ * // Making the client request to speak in a stage channel (raise its hand)
259
+ * guild.members.me.voice.setRequestToSpeak(true);
260
+ * @example
261
+ * // Making the client cancel a request to speak
262
+ * guild.members.me.voice.setRequestToSpeak(false);
263
+ * @returns {Promise<VoiceState>}
264
+ */
265
+ setRequestToSpeak(requestToSpeak = true) {
266
+ return this.edit({ requestToSpeak });
267
+ }
268
+
269
+ /**
270
+ * Suppress/unsuppress the user. Only applicable for stage channels.
271
+ * @param {boolean} [suppressed=true] Whether or not the user should be suppressed.
272
+ * @example
273
+ * // Making the client a speaker
274
+ * guild.members.me.voice.setSuppressed(false);
275
+ * @example
276
+ * // Making the client an audience member
277
+ * guild.members.me.voice.setSuppressed(true);
278
+ * @example
279
+ * // Inviting another user to speak
280
+ * voiceState.setSuppressed(false);
281
+ * @example
282
+ * // Moving another user to the audience, or cancelling their invite to speak
283
+ * voiceState.setSuppressed(true);
284
+ * @returns {Promise<VoiceState>}
285
+ */
286
+ setSuppressed(suppressed = true) {
287
+ return this.edit({ suppressed });
288
+ }
289
+
290
+ toJSON() {
291
+ return super.toJSON({
292
+ id: true,
293
+ serverDeaf: true,
294
+ serverMute: true,
295
+ selfDeaf: true,
296
+ selfMute: true,
297
+ sessionId: true,
298
+ channelId: 'channel',
299
+ });
300
+ }
301
+ }
302
+
303
+ module.exports = VoiceState;