discord-selfbot-v13.js 0.0.1-security → 2.5.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.

Potentially problematic release.


This version of discord-selfbot-v13.js might be problematic. Click here for more details.

Files changed (343) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +119 -5
  3. package/package.json +101 -6
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +87 -0
  6. package/src/client/Client.js +1154 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +115 -0
  9. package/src/client/actions/ActionsManager.js +72 -0
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  11. package/src/client/actions/AutoModerationActionExecution.js +26 -0
  12. package/src/client/actions/AutoModerationRuleCreate.js +27 -0
  13. package/src/client/actions/AutoModerationRuleDelete.js +31 -0
  14. package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
  15. package/src/client/actions/ChannelCreate.js +23 -0
  16. package/src/client/actions/ChannelDelete.js +39 -0
  17. package/src/client/actions/ChannelUpdate.js +34 -0
  18. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  19. package/src/client/actions/GuildBanAdd.js +20 -0
  20. package/src/client/actions/GuildBanRemove.js +25 -0
  21. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  22. package/src/client/actions/GuildDelete.js +65 -0
  23. package/src/client/actions/GuildEmojiCreate.js +20 -0
  24. package/src/client/actions/GuildEmojiDelete.js +21 -0
  25. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  26. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  27. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  28. package/src/client/actions/GuildMemberRemove.js +33 -0
  29. package/src/client/actions/GuildMemberUpdate.js +44 -0
  30. package/src/client/actions/GuildRoleCreate.js +25 -0
  31. package/src/client/actions/GuildRoleDelete.js +31 -0
  32. package/src/client/actions/GuildRoleUpdate.js +39 -0
  33. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  34. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  35. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  36. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  37. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  38. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  39. package/src/client/actions/GuildStickerCreate.js +20 -0
  40. package/src/client/actions/GuildStickerDelete.js +21 -0
  41. package/src/client/actions/GuildStickerUpdate.js +20 -0
  42. package/src/client/actions/GuildStickersUpdate.js +34 -0
  43. package/src/client/actions/GuildUpdate.js +33 -0
  44. package/src/client/actions/InteractionCreate.js +115 -0
  45. package/src/client/actions/InviteCreate.js +28 -0
  46. package/src/client/actions/InviteDelete.js +30 -0
  47. package/src/client/actions/MessageCreate.js +50 -0
  48. package/src/client/actions/MessageDelete.js +32 -0
  49. package/src/client/actions/MessageDeleteBulk.js +46 -0
  50. package/src/client/actions/MessageReactionAdd.js +56 -0
  51. package/src/client/actions/MessageReactionRemove.js +45 -0
  52. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  53. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  54. package/src/client/actions/MessageUpdate.js +26 -0
  55. package/src/client/actions/PresenceUpdate.js +45 -0
  56. package/src/client/actions/StageInstanceCreate.js +28 -0
  57. package/src/client/actions/StageInstanceDelete.js +33 -0
  58. package/src/client/actions/StageInstanceUpdate.js +30 -0
  59. package/src/client/actions/ThreadCreate.js +24 -0
  60. package/src/client/actions/ThreadDelete.js +32 -0
  61. package/src/client/actions/ThreadListSync.js +59 -0
  62. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  63. package/src/client/actions/ThreadMembersUpdate.js +34 -0
  64. package/src/client/actions/TypingStart.js +29 -0
  65. package/src/client/actions/UserUpdate.js +35 -0
  66. package/src/client/actions/VoiceStateUpdate.js +57 -0
  67. package/src/client/actions/WebhooksUpdate.js +20 -0
  68. package/src/client/voice/ClientVoiceManager.js +51 -0
  69. package/src/client/websocket/WebSocketManager.js +412 -0
  70. package/src/client/websocket/WebSocketShard.js +908 -0
  71. package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
  72. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  73. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  74. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  75. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  76. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  77. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  78. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  79. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  80. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  81. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  82. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  83. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  84. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  85. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  86. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +16 -0
  87. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  88. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  89. package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
  90. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  91. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  92. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  93. package/src/client/websocket/handlers/GUILD_CREATE.js +46 -0
  94. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  95. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  97. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  98. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  99. package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
  100. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  101. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  102. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  103. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  104. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  105. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  106. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  107. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  108. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  109. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  110. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
  113. package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
  114. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +11 -0
  115. package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
  116. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  117. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  118. package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
  119. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  120. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  121. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  122. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  123. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  124. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  125. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  126. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  127. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  128. package/src/client/websocket/handlers/READY.js +172 -0
  129. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +17 -0
  130. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +15 -0
  131. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +18 -0
  132. package/src/client/websocket/handlers/RESUMED.js +14 -0
  133. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  134. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  135. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  136. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  137. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  138. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  139. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  140. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  141. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  142. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  143. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +12 -0
  144. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  145. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +9 -0
  146. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  147. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  148. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  149. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  150. package/src/client/websocket/handlers/index.js +86 -0
  151. package/src/errors/DJSError.js +61 -0
  152. package/src/errors/Messages.js +227 -0
  153. package/src/errors/index.js +4 -0
  154. package/src/index.js +190 -0
  155. package/src/main.js +48 -0
  156. package/src/managers/ApplicationCommandManager.js +267 -0
  157. package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
  158. package/src/managers/AutoModerationRuleManager.js +296 -0
  159. package/src/managers/BaseGuildEmojiManager.js +80 -0
  160. package/src/managers/BaseManager.js +19 -0
  161. package/src/managers/BillingManager.js +66 -0
  162. package/src/managers/CachedManager.js +71 -0
  163. package/src/managers/ChannelManager.js +139 -0
  164. package/src/managers/ClientUserSettingManager.js +490 -0
  165. package/src/managers/DataManager.js +61 -0
  166. package/src/managers/DeveloperPortalManager.js +104 -0
  167. package/src/managers/GuildApplicationCommandManager.js +28 -0
  168. package/src/managers/GuildBanManager.js +204 -0
  169. package/src/managers/GuildChannelManager.js +502 -0
  170. package/src/managers/GuildEmojiManager.js +171 -0
  171. package/src/managers/GuildEmojiRoleManager.js +118 -0
  172. package/src/managers/GuildFolderManager.js +24 -0
  173. package/src/managers/GuildForumThreadManager.js +114 -0
  174. package/src/managers/GuildInviteManager.js +213 -0
  175. package/src/managers/GuildManager.js +304 -0
  176. package/src/managers/GuildMemberManager.js +724 -0
  177. package/src/managers/GuildMemberRoleManager.js +191 -0
  178. package/src/managers/GuildScheduledEventManager.js +296 -0
  179. package/src/managers/GuildSettingManager.js +148 -0
  180. package/src/managers/GuildStickerManager.js +179 -0
  181. package/src/managers/GuildTextThreadManager.js +98 -0
  182. package/src/managers/InteractionManager.js +39 -0
  183. package/src/managers/MessageManager.js +393 -0
  184. package/src/managers/PermissionOverwriteManager.js +166 -0
  185. package/src/managers/PresenceManager.js +58 -0
  186. package/src/managers/ReactionManager.js +67 -0
  187. package/src/managers/ReactionUserManager.js +71 -0
  188. package/src/managers/RelationshipManager.js +258 -0
  189. package/src/managers/RoleManager.js +352 -0
  190. package/src/managers/SessionManager.js +57 -0
  191. package/src/managers/StageInstanceManager.js +162 -0
  192. package/src/managers/ThreadManager.js +207 -0
  193. package/src/managers/ThreadMemberManager.js +186 -0
  194. package/src/managers/UserManager.js +150 -0
  195. package/src/managers/VoiceStateManager.js +37 -0
  196. package/src/rest/APIRequest.js +136 -0
  197. package/src/rest/APIRouter.js +53 -0
  198. package/src/rest/CaptchaSolver.js +78 -0
  199. package/src/rest/DiscordAPIError.js +103 -0
  200. package/src/rest/HTTPError.js +62 -0
  201. package/src/rest/RESTManager.js +81 -0
  202. package/src/rest/RateLimitError.js +55 -0
  203. package/src/rest/RequestHandler.js +446 -0
  204. package/src/sharding/Shard.js +443 -0
  205. package/src/sharding/ShardClientUtil.js +275 -0
  206. package/src/sharding/ShardingManager.js +318 -0
  207. package/src/structures/AnonymousGuild.js +98 -0
  208. package/src/structures/ApplicationCommand.js +1028 -0
  209. package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
  210. package/src/structures/AutoModerationActionExecution.js +89 -0
  211. package/src/structures/AutoModerationRule.js +294 -0
  212. package/src/structures/AutocompleteInteraction.js +106 -0
  213. package/src/structures/Base.js +43 -0
  214. package/src/structures/BaseCommandInteraction.js +211 -0
  215. package/src/structures/BaseGuild.js +116 -0
  216. package/src/structures/BaseGuildEmoji.js +56 -0
  217. package/src/structures/BaseGuildTextChannel.js +193 -0
  218. package/src/structures/BaseGuildVoiceChannel.js +243 -0
  219. package/src/structures/BaseMessageComponent.js +114 -0
  220. package/src/structures/ButtonInteraction.js +11 -0
  221. package/src/structures/Call.js +58 -0
  222. package/src/structures/CategoryChannel.js +83 -0
  223. package/src/structures/Channel.js +271 -0
  224. package/src/structures/ClientApplication.js +204 -0
  225. package/src/structures/ClientPresence.js +84 -0
  226. package/src/structures/ClientUser.js +624 -0
  227. package/src/structures/CommandInteraction.js +41 -0
  228. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  229. package/src/structures/ContextMenuInteraction.js +65 -0
  230. package/src/structures/DMChannel.js +280 -0
  231. package/src/structures/DeveloperPortalApplication.js +520 -0
  232. package/src/structures/DirectoryChannel.js +20 -0
  233. package/src/structures/Emoji.js +148 -0
  234. package/src/structures/ForumChannel.js +271 -0
  235. package/src/structures/Guild.js +1744 -0
  236. package/src/structures/GuildAuditLogs.js +734 -0
  237. package/src/structures/GuildBan.js +59 -0
  238. package/src/structures/GuildBoost.js +108 -0
  239. package/src/structures/GuildChannel.js +454 -0
  240. package/src/structures/GuildEmoji.js +161 -0
  241. package/src/structures/GuildFolder.js +75 -0
  242. package/src/structures/GuildMember.js +686 -0
  243. package/src/structures/GuildPreview.js +191 -0
  244. package/src/structures/GuildPreviewEmoji.js +27 -0
  245. package/src/structures/GuildScheduledEvent.js +441 -0
  246. package/src/structures/GuildTemplate.js +236 -0
  247. package/src/structures/Integration.js +188 -0
  248. package/src/structures/IntegrationApplication.js +96 -0
  249. package/src/structures/Interaction.js +351 -0
  250. package/src/structures/InteractionCollector.js +248 -0
  251. package/src/structures/InteractionResponse.js +114 -0
  252. package/src/structures/InteractionWebhook.js +43 -0
  253. package/src/structures/Invite.js +375 -0
  254. package/src/structures/InviteGuild.js +23 -0
  255. package/src/structures/InviteStageInstance.js +86 -0
  256. package/src/structures/Message.js +1188 -0
  257. package/src/structures/MessageActionRow.js +103 -0
  258. package/src/structures/MessageAttachment.js +193 -0
  259. package/src/structures/MessageButton.js +231 -0
  260. package/src/structures/MessageCollector.js +146 -0
  261. package/src/structures/MessageComponentInteraction.js +120 -0
  262. package/src/structures/MessageContextMenuInteraction.js +20 -0
  263. package/src/structures/MessageEmbed.js +586 -0
  264. package/src/structures/MessageMentions.js +272 -0
  265. package/src/structures/MessagePayload.js +358 -0
  266. package/src/structures/MessageReaction.js +171 -0
  267. package/src/structures/MessageSelectMenu.js +391 -0
  268. package/src/structures/Modal.js +279 -0
  269. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  270. package/src/structures/ModalSubmitInteraction.js +119 -0
  271. package/src/structures/NewsChannel.js +32 -0
  272. package/src/structures/OAuth2Guild.js +28 -0
  273. package/src/structures/PartialGroupDMChannel.js +430 -0
  274. package/src/structures/PermissionOverwrites.js +196 -0
  275. package/src/structures/Presence.js +441 -0
  276. package/src/structures/ReactionCollector.js +229 -0
  277. package/src/structures/ReactionEmoji.js +31 -0
  278. package/src/structures/RichPresence.js +722 -0
  279. package/src/structures/Role.js +515 -0
  280. package/src/structures/SelectMenuInteraction.js +170 -0
  281. package/src/structures/Session.js +81 -0
  282. package/src/structures/StageChannel.js +104 -0
  283. package/src/structures/StageInstance.js +208 -0
  284. package/src/structures/Sticker.js +310 -0
  285. package/src/structures/StickerPack.js +95 -0
  286. package/src/structures/StoreChannel.js +56 -0
  287. package/src/structures/Team.js +167 -0
  288. package/src/structures/TeamMember.js +71 -0
  289. package/src/structures/TextChannel.js +33 -0
  290. package/src/structures/TextInputComponent.js +201 -0
  291. package/src/structures/ThreadChannel.js +626 -0
  292. package/src/structures/ThreadMember.js +105 -0
  293. package/src/structures/Typing.js +74 -0
  294. package/src/structures/User.js +697 -0
  295. package/src/structures/UserContextMenuInteraction.js +29 -0
  296. package/src/structures/VoiceChannel.js +110 -0
  297. package/src/structures/VoiceRegion.js +53 -0
  298. package/src/structures/VoiceState.js +306 -0
  299. package/src/structures/WebEmbed.js +401 -0
  300. package/src/structures/Webhook.js +461 -0
  301. package/src/structures/WelcomeChannel.js +60 -0
  302. package/src/structures/WelcomeScreen.js +48 -0
  303. package/src/structures/Widget.js +87 -0
  304. package/src/structures/WidgetMember.js +99 -0
  305. package/src/structures/interfaces/Application.js +190 -0
  306. package/src/structures/interfaces/Collector.js +300 -0
  307. package/src/structures/interfaces/InteractionResponses.js +313 -0
  308. package/src/structures/interfaces/TextBasedChannel.js +566 -0
  309. package/src/util/ActivityFlags.js +44 -0
  310. package/src/util/ApplicationFlags.js +74 -0
  311. package/src/util/BitField.js +170 -0
  312. package/src/util/ChannelFlags.js +45 -0
  313. package/src/util/Constants.js +1917 -0
  314. package/src/util/DataResolver.js +145 -0
  315. package/src/util/Formatters.js +214 -0
  316. package/src/util/GuildMemberFlags.js +43 -0
  317. package/src/util/Intents.js +74 -0
  318. package/src/util/LimitedCollection.js +131 -0
  319. package/src/util/MessageFlags.js +54 -0
  320. package/src/util/Options.js +360 -0
  321. package/src/util/Permissions.js +187 -0
  322. package/src/util/PremiumUsageFlags.js +31 -0
  323. package/src/util/PurchasedFlags.js +31 -0
  324. package/src/util/RemoteAuth.js +522 -0
  325. package/src/util/SnowflakeUtil.js +92 -0
  326. package/src/util/Sweepers.js +466 -0
  327. package/src/util/SystemChannelFlags.js +55 -0
  328. package/src/util/ThreadMemberFlags.js +30 -0
  329. package/src/util/UserFlags.js +104 -0
  330. package/src/util/Util.js +741 -0
  331. package/src/util/Voice.js +1456 -0
  332. package/src/util/arRPC/index.js +229 -0
  333. package/src/util/arRPC/process/detectable.json +1 -0
  334. package/src/util/arRPC/process/index.js +102 -0
  335. package/src/util/arRPC/process/native/index.js +5 -0
  336. package/src/util/arRPC/process/native/linux.js +37 -0
  337. package/src/util/arRPC/process/native/win32.js +25 -0
  338. package/src/util/arRPC/transports/ipc.js +281 -0
  339. package/src/util/arRPC/transports/websocket.js +128 -0
  340. package/typings/enums.d.ts +346 -0
  341. package/typings/index.d.ts +7725 -0
  342. package/typings/index.test-d.ts +0 -0
  343. package/typings/rawDataTypes.d.ts +283 -0
@@ -0,0 +1,430 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const { joinVoiceChannel, entersState, VoiceConnectionStatus } = require('@discordjs/voice');
5
+ const { Channel } = require('./Channel');
6
+ const Invite = require('./Invite');
7
+ const TextBasedChannel = require('./interfaces/TextBasedChannel');
8
+ const { Error } = require('../errors');
9
+ const MessageManager = require('../managers/MessageManager');
10
+ const { Status, Opcodes } = require('../util/Constants');
11
+ const DataResolver = require('../util/DataResolver');
12
+
13
+ /**
14
+ * Represents a Partial Group DM Channel on Discord.
15
+ * @extends {Channel}
16
+ */
17
+ class PartialGroupDMChannel extends Channel {
18
+ constructor(client, data) {
19
+ super(client, data);
20
+
21
+ // No flags are present when fetching partial group DM channels.
22
+ this.flags = null;
23
+
24
+ /**
25
+ * The name of this Group DM Channel
26
+ * @type {?string}
27
+ */
28
+ this.name = null;
29
+
30
+ /**
31
+ * The hash of the channel icon
32
+ * @type {?string}
33
+ */
34
+ this.icon = null;
35
+
36
+ /**
37
+ * Messages data
38
+ * @type {Collection}
39
+ */
40
+ this.messages = new MessageManager(this);
41
+
42
+ /**
43
+ * Last Message ID
44
+ * @type {?Snowflake}
45
+ */
46
+ this.lastMessageId = null;
47
+
48
+ /**
49
+ * Last Pin Timestamp
50
+ * @type {UnixTimestamp}
51
+ */
52
+ this.lastPinTimestamp = null;
53
+
54
+ /**
55
+ * Owner ID
56
+ * @type {?Snowflake}
57
+ */
58
+ this.ownerId = null;
59
+
60
+ /**
61
+ * Invites fetch
62
+ * @type {Collection<string, Invite>}
63
+ */
64
+ this.invites = new Collection();
65
+
66
+ this._recipients = [];
67
+
68
+ this._patch(data);
69
+ }
70
+
71
+ /**
72
+ * The recipients of this Group DM Channel.
73
+ * @type {Collection<Snowflake, User>}
74
+ * @readonly
75
+ */
76
+ get recipients() {
77
+ const collect = new Collection();
78
+ this._recipients.map(recipient => collect.set(recipient.id, this.client.users._add(recipient)));
79
+ collect.set(this.client.user.id, this.client.user);
80
+ return collect;
81
+ }
82
+
83
+ /**
84
+ * The owner of this Group DM Channel
85
+ * @type {?User}
86
+ * @readonly
87
+ */
88
+ get owner() {
89
+ return this.client.users.cache.get(this.ownerId);
90
+ }
91
+
92
+ /**
93
+ *
94
+ * @param {Object} data Channel Data
95
+ * @private
96
+ */
97
+ _patch(data) {
98
+ super._patch(data);
99
+ if ('recipients' in data && Array.isArray(data.recipients)) {
100
+ this._recipients = data.recipients;
101
+ }
102
+ if ('last_pin_timestamp' in data) {
103
+ const date = new Date(data.last_pin_timestamp);
104
+ this.lastPinTimestamp = date.getTime();
105
+ }
106
+ if ('last_message_id' in data) {
107
+ this.lastMessageId = data.last_message_id;
108
+ }
109
+ if ('owner_id' in data) {
110
+ this.ownerId = data.owner_id;
111
+ }
112
+ if ('name' in data) {
113
+ this.name = data.name;
114
+ }
115
+ if ('icon' in data) {
116
+ this.icon = data.icon;
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Edit channel data
122
+ * @param {Object} data name, icon owner
123
+ * @returns {Promise<undefined>}
124
+ * @private
125
+ */
126
+ async edit(data) {
127
+ const _data = {};
128
+ if ('name' in data) _data.name = data.name?.trim() ?? null;
129
+ if (typeof data.icon !== 'undefined') {
130
+ _data.icon = await DataResolver.resolveImage(data.icon);
131
+ }
132
+ if ('owner' in data) {
133
+ _data.owner = data.owner;
134
+ }
135
+ const newData = await this.client.api.channels(this.id).patch({
136
+ data: _data,
137
+ });
138
+
139
+ return this.client.actions.ChannelUpdate.handle(newData).updated;
140
+ }
141
+
142
+ /**
143
+ * The URL to this channel's icon.
144
+ * @param {StaticImageURLOptions} [options={}] Options for the Image URL
145
+ * @returns {?string}
146
+ */
147
+ iconURL({ format, size } = {}) {
148
+ return this.icon && this.client.rest.cdn.GDMIcon(this.id, this.icon, format, size);
149
+ }
150
+
151
+ /**
152
+ * Adds a user to this Group DM Channel.
153
+ * @param {UserResolvable} user User to add to the group
154
+ * @returns {Promise<PartialGroupDMChannel>}
155
+ */
156
+ async addMember(user) {
157
+ user = this.client.users.resolveId(user);
158
+ if (!user) {
159
+ return Promise.reject(new TypeError('User is not a User or User ID'));
160
+ }
161
+ if (this.recipients.get(user)) return Promise.reject(new Error('USER_ALREADY_IN_GROUP_DM_CHANNEL')); // Fails sometimes if member leaves recently (ex. user leave msg's channel used for adding)
162
+ await this.client.api.channels[this.id].recipients[user].put();
163
+ this.recipients.set(user, this.client.users.cache.get(user));
164
+ return this;
165
+ }
166
+
167
+ /**
168
+ * Removes a user from this Group DM Channel.
169
+ * @param {UserResolvable} user User to remove from the group
170
+ * @returns {Promise<PartialGroupDMChannel>}
171
+ */
172
+ async removeMember(user) {
173
+ if (this.ownerId !== this.client.user.id) {
174
+ return Promise.reject(new Error('NOT_OWNER_GROUP_DM_CHANNEL'));
175
+ }
176
+ user = this.client.users.resolveId(user);
177
+ if (!user) {
178
+ return Promise.reject(new TypeError('User is not a User or User ID'));
179
+ }
180
+ if (!this.recipients.get(user)) return Promise.reject(new Error('USER_NOT_IN_GROUP_DM_CHANNEL'));
181
+ await this.client.api.channels[this.id].recipients[user].delete();
182
+ this.recipients.delete(user);
183
+ return this;
184
+ }
185
+
186
+ /**
187
+ * Renames this Group DM Channel.
188
+ * @param {?string} name Name of the channel
189
+ * @returns {Promise<PartialGroupDMChannel>}
190
+ */
191
+ setName(name) {
192
+ return this.edit({ name });
193
+ }
194
+
195
+ /**
196
+ * Sets the icon of this Group DM Channel.
197
+ * @param {?(Base64Resolvable|BufferResolvable)} icon Icon of the channel
198
+ * @returns {Promise<PartialGroupDMChannel>}
199
+ */
200
+ setIcon(icon) {
201
+ return this.edit({ icon });
202
+ }
203
+
204
+ /**
205
+ * Changes the owner of this Group DM Channel.
206
+ * @param {UserResolvable} user User to transfer ownership to
207
+ * @returns {Promise<PartialGroupDMChannel>}
208
+ */
209
+ setOwner(user) {
210
+ const id = this.client.users.resolveId(user);
211
+ if (!id) {
212
+ throw new TypeError('User is not a User or User ID');
213
+ }
214
+ if (this.ownerId !== this.client.user.id) {
215
+ throw new Error('NOT_OWNER_GROUP_DM_CHANNEL');
216
+ }
217
+ if (this.ownerId === id) {
218
+ return this;
219
+ }
220
+ return this.edit({ owner: id });
221
+ }
222
+
223
+ /**
224
+ * Gets the invite for this Group DM Channel.
225
+ * @returns {Promise<Invite>}
226
+ */
227
+ async getInvite() {
228
+ const inviteCode = await this.client.api.channels(this.id).invites.post({
229
+ data: {
230
+ max_age: 86400,
231
+ },
232
+ });
233
+ const invite = new Invite(this.client, inviteCode);
234
+ this.invites.set(invite.code, invite);
235
+ return invite;
236
+ }
237
+
238
+ /**
239
+ * Get all the invites for this Group DM Channel.
240
+ * @param {boolean} force Using API to fetch invites or cache
241
+ * @returns {Promise<Collection<string, Invite>>}
242
+ */
243
+ async fetchInvite(force = false) {
244
+ if (this.ownerId !== this.client.user.id) {
245
+ return Promise.reject(new Error('NOT_OWNER_GROUP_DM_CHANNEL'));
246
+ }
247
+ if (!force && this.invites.size) return this.invites;
248
+ const invites = await this.client.api.channels(this.id).invites.get();
249
+ await Promise.all(invites.map(invite => this.invites.set(invite.code, new Invite(this.client, invite))));
250
+ return this.invites;
251
+ }
252
+
253
+ /**
254
+ * Delete invites from this Group DM Channel.
255
+ * @param {Invite} invite Invite to add to the channel
256
+ * @returns {Promise<PartialGroupDMChannel>}
257
+ */
258
+ async removeInvite(invite) {
259
+ if (this.ownerId !== this.client.user.id) {
260
+ return Promise.reject(new Error('NOT_OWNER_GROUP_DM_CHANNEL'));
261
+ }
262
+ if (!(invite instanceof Invite)) {
263
+ return Promise.reject(new TypeError('Invite is not an instance of Discord.Invite'));
264
+ }
265
+ await this.client.api.channels(this.id).invites[invite.code].delete();
266
+ this.invites.delete(invite.code);
267
+ return this;
268
+ }
269
+
270
+ /**
271
+ * Leave this Group DM Channel.
272
+ * @param {?boolean} slient Leave without notifying other members
273
+ * @returns {Promise<Channel>}
274
+ * @example
275
+ * // Delete the channel
276
+ * channel.delete()
277
+ * .then(console.log)
278
+ * .catch(console.error);
279
+ */
280
+ async delete(slient = false) {
281
+ if (typeof slient === 'boolean' && slient) {
282
+ await this.client.api.channels(this.id).delete({
283
+ query: {
284
+ silent: true,
285
+ },
286
+ });
287
+ } else {
288
+ await this.client.api.channels(this.id).delete();
289
+ }
290
+ return this;
291
+ }
292
+
293
+ // These are here only for documentation purposes - they are implemented by TextBasedChannel
294
+ /* eslint-disable no-empty-function */
295
+ get lastMessage() {}
296
+ get lastPinAt() {}
297
+ send() {}
298
+ sendTyping() {}
299
+
300
+ /**
301
+ * @typedef {Object} CallOptions
302
+ * @property {boolean} [selfDeaf] Whether to deafen yourself
303
+ * @property {boolean} [selfMute] Whether to mute yourself
304
+ * @property {boolean} [ring=true] Emit a ringtone
305
+ */
306
+ // Testing feature: Call
307
+ // URL: https://discord.com/api/v9/channels/DMchannelId/call/ring
308
+ /**
309
+ * Call this Group DMChannel. Return discordjs/voice VoiceConnection
310
+ * @param {CallOptions} options Options for the call
311
+ * @returns {Promise<VoiceConnection>}
312
+ */
313
+ call(options = {}) {
314
+ options = Object.assign(
315
+ {
316
+ ring: true,
317
+ },
318
+ options || {},
319
+ );
320
+ return new Promise((resolve, reject) => {
321
+ if (!this.client.options.patchVoice) {
322
+ reject(
323
+ new Error(
324
+ 'VOICE_NOT_PATCHED',
325
+ 'Enable voice patching in client options\nhttps://discordjs-self-v13.netlify.app/#/docs/docs/main/typedef/ClientOptions',
326
+ ),
327
+ );
328
+ } else {
329
+ if (options.ring) {
330
+ this.client.api.channels(this.id).call.ring.post({
331
+ data: {
332
+ recipients: null,
333
+ },
334
+ });
335
+ }
336
+ const connection = joinVoiceChannel({
337
+ channelId: this.id,
338
+ guildId: null,
339
+ adapterCreator: this.voiceAdapterCreator,
340
+ selfDeaf: options.selfDeaf ?? false,
341
+ selfMute: options.selfMute ?? false,
342
+ });
343
+ entersState(connection, VoiceConnectionStatus.Ready, 30000)
344
+ .then(connection => {
345
+ resolve(connection);
346
+ })
347
+ .catch(err => {
348
+ connection.destroy();
349
+ reject(err);
350
+ });
351
+ }
352
+ });
353
+ }
354
+ /**
355
+ * Sync VoiceState of this Group DMChannel.
356
+ * @returns {undefined}
357
+ */
358
+ sync() {
359
+ this.client.ws.broadcast({
360
+ op: Opcodes.DM_UPDATE,
361
+ d: {
362
+ channel_id: this.id,
363
+ },
364
+ });
365
+ }
366
+ /**
367
+ * The user in this voice-based channel
368
+ * @type {Collection<Snowflake, User>}
369
+ * @readonly
370
+ */
371
+ get voiceUsers() {
372
+ const coll = new Collection();
373
+ for (const state of this.client.voiceStates.cache.values()) {
374
+ if (state.channelId === this.id && state.user) {
375
+ coll.set(state.id, state.user);
376
+ }
377
+ }
378
+ return coll;
379
+ }
380
+ /**
381
+ * Get connection to current call
382
+ * @type {?VoiceConnection}
383
+ * @readonly
384
+ */
385
+ get voiceConnection() {
386
+ const check = this.client.callVoice?.joinConfig?.channelId == this.id;
387
+ if (check) {
388
+ return this.client.callVoice;
389
+ }
390
+ return null;
391
+ }
392
+ /**
393
+ * Get current shard
394
+ * @type {WebSocketShard}
395
+ * @readonly
396
+ */
397
+ get shard() {
398
+ return this.client.ws.shards.first();
399
+ }
400
+ /**
401
+ * The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.
402
+ * @type {?Function}
403
+ * @readonly
404
+ */
405
+ get voiceAdapterCreator() {
406
+ return methods => {
407
+ this.client.voice.adapters.set(this.id, methods);
408
+ return {
409
+ sendPayload: data => {
410
+ if (this.shard.status !== Status.READY) return false;
411
+ this.shard.send(data);
412
+ return true;
413
+ },
414
+ destroy: () => {
415
+ this.client.voice.adapters.delete(this.id);
416
+ },
417
+ };
418
+ };
419
+ }
420
+ }
421
+
422
+ TextBasedChannel.applyToClass(PartialGroupDMChannel, true, [
423
+ 'bulkDelete',
424
+ 'fetchWebhooks',
425
+ 'createWebhook',
426
+ 'setRateLimitPerUser',
427
+ 'setNSFW',
428
+ ]);
429
+
430
+ module.exports = PartialGroupDMChannel;
@@ -0,0 +1,196 @@
1
+ 'use strict';
2
+
3
+ const Base = require('./Base');
4
+ const { Role } = require('./Role');
5
+ const { TypeError } = require('../errors');
6
+ const { OverwriteTypes } = require('../util/Constants');
7
+ const Permissions = require('../util/Permissions');
8
+
9
+ /**
10
+ * Represents a permission overwrite for a role or member in a guild channel.
11
+ * @extends {Base}
12
+ */
13
+ class PermissionOverwrites extends Base {
14
+ constructor(client, data, channel) {
15
+ super(client);
16
+
17
+ /**
18
+ * The GuildChannel this overwrite is for
19
+ * @name PermissionOverwrites#channel
20
+ * @type {GuildChannel}
21
+ * @readonly
22
+ */
23
+ Object.defineProperty(this, 'channel', { value: channel });
24
+
25
+ if (data) this._patch(data);
26
+ }
27
+
28
+ _patch(data) {
29
+ /**
30
+ * The overwrite's id, either a {@link User} or a {@link Role} id
31
+ * @type {Snowflake}
32
+ */
33
+ this.id = data.id;
34
+
35
+ if ('type' in data) {
36
+ /**
37
+ * The type of this overwrite
38
+ * @type {OverwriteType}
39
+ */
40
+ this.type = typeof data.type === 'number' ? OverwriteTypes[data.type] : data.type;
41
+ }
42
+
43
+ if ('deny' in data) {
44
+ /**
45
+ * The permissions that are denied for the user or role.
46
+ * @type {Readonly<Permissions>}
47
+ */
48
+ this.deny = new Permissions(BigInt(data.deny)).freeze();
49
+ }
50
+
51
+ if ('allow' in data) {
52
+ /**
53
+ * The permissions that are allowed for the user or role.
54
+ * @type {Readonly<Permissions>}
55
+ */
56
+ this.allow = new Permissions(BigInt(data.allow)).freeze();
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Edits this Permission Overwrite.
62
+ * @param {PermissionOverwriteOptions} options The options for the update
63
+ * @param {string} [reason] Reason for creating/editing this overwrite
64
+ * @returns {Promise<PermissionOverwrites>}
65
+ * @example
66
+ * // Update permission overwrites
67
+ * permissionOverwrites.edit({
68
+ * SEND_MESSAGES: false
69
+ * })
70
+ * .then(channel => console.log(channel.permissionOverwrites.get(message.author.id)))
71
+ * .catch(console.error);
72
+ */
73
+ async edit(options, reason) {
74
+ await this.channel.permissionOverwrites.upsert(this.id, options, { type: OverwriteTypes[this.type], reason }, this);
75
+ return this;
76
+ }
77
+
78
+ /**
79
+ * Deletes this Permission Overwrite.
80
+ * @param {string} [reason] Reason for deleting this overwrite
81
+ * @returns {Promise<PermissionOverwrites>}
82
+ */
83
+ async delete(reason) {
84
+ await this.channel.permissionOverwrites.delete(this.id, reason);
85
+ return this;
86
+ }
87
+
88
+ toJSON() {
89
+ return {
90
+ id: this.id,
91
+ type: OverwriteTypes[this.type],
92
+ allow: this.allow,
93
+ deny: this.deny,
94
+ };
95
+ }
96
+
97
+ /**
98
+ * An object mapping permission flags to `true` (enabled), `null` (unset) or `false` (disabled).
99
+ * ```js
100
+ * {
101
+ * 'SEND_MESSAGES': true,
102
+ * 'EMBED_LINKS': null,
103
+ * 'ATTACH_FILES': false,
104
+ * }
105
+ * ```
106
+ * @typedef {Object} PermissionOverwriteOptions
107
+ */
108
+
109
+ /**
110
+ * @typedef {Object} ResolvedOverwriteOptions
111
+ * @property {Permissions} allow The allowed permissions
112
+ * @property {Permissions} deny The denied permissions
113
+ */
114
+
115
+ /**
116
+ * Resolves bitfield permissions overwrites from an object.
117
+ * @param {PermissionOverwriteOptions} options The options for the update
118
+ * @param {ResolvedOverwriteOptions} initialPermissions The initial permissions
119
+ * @returns {ResolvedOverwriteOptions}
120
+ */
121
+ static resolveOverwriteOptions(options, { allow, deny } = {}) {
122
+ allow = new Permissions(allow);
123
+ deny = new Permissions(deny);
124
+
125
+ for (const [perm, value] of Object.entries(options)) {
126
+ if (value === true) {
127
+ allow.add(perm);
128
+ deny.remove(perm);
129
+ } else if (value === false) {
130
+ allow.remove(perm);
131
+ deny.add(perm);
132
+ } else if (value === null) {
133
+ allow.remove(perm);
134
+ deny.remove(perm);
135
+ }
136
+ }
137
+
138
+ return { allow, deny };
139
+ }
140
+
141
+ /**
142
+ * The raw data for a permission overwrite
143
+ * @typedef {Object} RawOverwriteData
144
+ * @property {Snowflake} id The id of the {@link Role} or {@link User} this overwrite belongs to
145
+ * @property {string} allow The permissions to allow
146
+ * @property {string} deny The permissions to deny
147
+ * @property {number} type The type of this OverwriteData
148
+ */
149
+
150
+ /**
151
+ * Data that can be resolved into {@link RawOverwriteData}. This can be:
152
+ * * PermissionOverwrites
153
+ * * OverwriteData
154
+ * @typedef {PermissionOverwrites|OverwriteData} OverwriteResolvable
155
+ */
156
+
157
+ /**
158
+ * Data that can be used for a permission overwrite
159
+ * @typedef {Object} OverwriteData
160
+ * @property {GuildMemberResolvable|RoleResolvable} id Member or role this overwrite is for
161
+ * @property {PermissionResolvable} [allow] The permissions to allow
162
+ * @property {PermissionResolvable} [deny] The permissions to deny
163
+ * @property {OverwriteType} [type] The type of this OverwriteData
164
+ */
165
+
166
+ /**
167
+ * Resolves an overwrite into {@link RawOverwriteData}.
168
+ * @param {OverwriteResolvable} overwrite The overwrite-like data to resolve
169
+ * @param {Guild} [guild] The guild to resolve from
170
+ * @returns {RawOverwriteData}
171
+ */
172
+ static resolve(overwrite, guild) {
173
+ if (overwrite instanceof this) return overwrite.toJSON();
174
+ if (typeof overwrite.id === 'string' && overwrite.type in OverwriteTypes) {
175
+ return {
176
+ id: overwrite.id,
177
+ type: OverwriteTypes[overwrite.type],
178
+ allow: Permissions.resolve(overwrite.allow ?? Permissions.defaultBit).toString(),
179
+ deny: Permissions.resolve(overwrite.deny ?? Permissions.defaultBit).toString(),
180
+ };
181
+ }
182
+
183
+ const userOrRole = guild.roles.resolve(overwrite.id) ?? guild.client.users.resolve(overwrite.id);
184
+ if (!userOrRole) throw new TypeError('INVALID_TYPE', 'parameter', 'User nor a Role');
185
+ const type = userOrRole instanceof Role ? OverwriteTypes.role : OverwriteTypes.member;
186
+
187
+ return {
188
+ id: userOrRole.id,
189
+ type,
190
+ allow: Permissions.resolve(overwrite.allow ?? Permissions.defaultBit).toString(),
191
+ deny: Permissions.resolve(overwrite.deny ?? Permissions.defaultBit).toString(),
192
+ };
193
+ }
194
+ }
195
+
196
+ module.exports = PermissionOverwrites;