discord.js-selfbots-v13 0.0.1-security → 3.3.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.js-selfbots-v13 might be problematic. Click here for more details.

Files changed (343) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +127 -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 +1 -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,490 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const BaseManager = require('./BaseManager');
5
+ const GuildFolderManager = require('./GuildFolderManager');
6
+ const { Error, TypeError } = require('../errors/DJSError');
7
+ const GuildFolder = require('../structures/GuildFolder');
8
+ const { CustomStatus } = require('../structures/RichPresence');
9
+ const { localeSetting, DMScanLevel, stickerAnimationMode } = require('../util/Constants');
10
+ /**
11
+ * Manages API methods for users and stores their cache.
12
+ * @extends {BaseManager}
13
+ * @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}
14
+ */
15
+ class ClientUserSettingManager extends BaseManager {
16
+ constructor(client) {
17
+ super(client);
18
+ /**
19
+ * Raw data
20
+ * @type {Object}
21
+ */
22
+ this.rawSetting = {};
23
+ /**
24
+ * Language
25
+ * @type {?string}
26
+ */
27
+ this.locale = null;
28
+ /**
29
+ * From: Setting => ACTIVITY SETTINGS => Activity Status => Display current activity as a status message
30
+ * @type {?boolean}
31
+ */
32
+ this.activityDisplay = null;
33
+ /**
34
+ * Disable Direct Message from servers
35
+ * @type {Collection<Snowflake, boolean>}
36
+ */
37
+ this.disableDMfromServer = new Collection();
38
+ /**
39
+ * Allow direct messages from server members
40
+ * @type {?boolean}
41
+ */
42
+ this.DMfromServerMode = null;
43
+ /**
44
+ * Display images
45
+ * @type {?boolean}
46
+ */
47
+ this.displayImage = null;
48
+ /**
49
+ * Display linked images
50
+ * @type {?boolean}
51
+ */
52
+ this.linkedImageDisplay = null;
53
+ /**
54
+ * From: Setting => APP SETTINGS => Accessibility => Automatically play GIFs when Discord is focused.
55
+ * @type {?boolean}
56
+ */
57
+ this.autoplayGIF = null;
58
+ /**
59
+ * Show embeds and preview website links pasted into chat
60
+ * @type {?boolean}
61
+ */
62
+ this.previewLink = null;
63
+ /**
64
+ * From: Setting => APP SETTINGS => Accessibility => Play Animated Emojis
65
+ * @type {?boolean}
66
+ */
67
+ this.animatedEmojis = null;
68
+ /**
69
+ * From: Setting => APP SETTINGS => Accessibility => Text-to-speech => Allow playback
70
+ * @type {?boolean}
71
+ */
72
+ this.allowTTS = null;
73
+ /**
74
+ * From: Setting => APP SETTINGS => Appearance => Message Display => Compact Mode
75
+ * @type {?boolean}
76
+ */
77
+ this.compactMode = null;
78
+ /**
79
+ * From: Setting => APP SETTINGS => Text & Images => Emoji => Convert Emoticons
80
+ * @type {?boolean}
81
+ */
82
+ this.convertEmoticons = null;
83
+ /**
84
+ * SAFE DIRECT MESSAGING
85
+ * @type {?DMScanLevel}
86
+ */
87
+ this.DMScanLevel = null;
88
+ /**
89
+ * From: Setting => APP SETTINGS => Appearance => Theme
90
+ * @type {'dark' | 'light' | null}
91
+ */
92
+ this.theme = '';
93
+ /**
94
+ * Developer Mode (Copy ID, etc.)
95
+ * @type {?boolean}
96
+ */
97
+ this.developerMode = null;
98
+ /**
99
+ * AFK timeout (receives notifications)
100
+ * @type {?number}
101
+ */
102
+ this.afkTimeout = null;
103
+ /**
104
+ * Sticker animation mode
105
+ * @type {?stickerAnimationMode}
106
+ */
107
+ this.stickerAnimationMode = null;
108
+ /**
109
+ * WHO CAN ADD YOU AS A FRIEND ?
110
+ * @type {?object}
111
+ * @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html#friend-source-flags-structure}
112
+ */
113
+ this.addFriendFrom = {
114
+ all: null,
115
+ mutual_friends: null,
116
+ mutual_guilds: null,
117
+ };
118
+ /**
119
+ * From: Setting => APP SETTINGS => Text & Images => Emoji => Show emoji reactions
120
+ * @type {?boolean}
121
+ */
122
+ this.showEmojiReactions = null;
123
+ /**
124
+ * Custom Stauts
125
+ * @type {?object}
126
+ * @see {@link https://luna.gitlab.io/discord-unofficial-docs/custom_status.html#customstatus-structure}
127
+ */
128
+ this.customStatus = null;
129
+ /**
130
+ * Guild folder and position
131
+ * @type {GuildFolderManager}
132
+ */
133
+ this.guildFolder = new GuildFolderManager(client);
134
+ // Todo: add new method from Discum
135
+ }
136
+ /**
137
+ * Patch data file
138
+ * https://github.com/Merubokkusu/Discord-S.C.U.M/blob/master/discum/user/user.py
139
+ * @private
140
+ * @param {Object} data Raw Data to patch
141
+ */
142
+ _patch(data = {}) {
143
+ this.rawSetting = Object.assign(this.rawSetting, data);
144
+ if ('locale' in data) {
145
+ this.locale = localeSetting[data.locale];
146
+ }
147
+ if ('show_current_game' in data) {
148
+ this.activityDisplay = data.show_current_game;
149
+ }
150
+ if ('default_guilds_restricted' in data) {
151
+ this.DMfromServerMode = data.default_guilds_restricted;
152
+ }
153
+ if ('inline_attachment_media' in data) {
154
+ this.displayImage = data.inline_attachment_media;
155
+ }
156
+ if ('inline_embed_media' in data) {
157
+ this.linkedImageDisplay = data.inline_embed_media;
158
+ }
159
+ if ('gif_auto_play' in data) {
160
+ this.autoplayGIF = data.gif_auto_play;
161
+ }
162
+ if ('render_embeds' in data) {
163
+ this.previewLink = data.render_embeds;
164
+ }
165
+ if ('animate_emoji' in data) {
166
+ this.animatedEmojis = data.animate_emoji;
167
+ }
168
+ if ('enable_tts_command' in data) {
169
+ this.allowTTS = data.enable_tts_command;
170
+ }
171
+ if ('message_display_compact' in data) {
172
+ this.compactMode = data.message_display_compact;
173
+ }
174
+ if ('convert_emoticons' in data) {
175
+ this.convertEmoticons = data.convert_emoticons;
176
+ }
177
+ if ('explicit_content_filter' in data) {
178
+ this.DMScanLevel = DMScanLevel[data.explicit_content_filter];
179
+ }
180
+ if ('theme' in data) {
181
+ this.theme = data.theme;
182
+ }
183
+ if ('developer_mode' in data) {
184
+ this.developerMode = data.developer_mode;
185
+ }
186
+ if ('afk_timeout' in data) {
187
+ this.afkTimeout = data.afk_timeout * 1000; // Second => milisecond
188
+ }
189
+ if ('animate_stickers' in data) {
190
+ this.stickerAnimationMode = stickerAnimationMode[data.animate_stickers];
191
+ }
192
+ if ('render_reactions' in data) {
193
+ this.showEmojiReactions = data.render_reactions;
194
+ }
195
+ if ('custom_status' in data) {
196
+ this.customStatus = data.custom_status || {}; // Thanks PinkDuwc._#3443 reported this issue
197
+ this.customStatus.status = data.status;
198
+ }
199
+ if ('friend_source_flags' in data) {
200
+ this.addFriendFrom = {
201
+ all: data.friend_source_flags.all || false,
202
+ mutual_friends: data.friend_source_flags.all ? true : data.friend_source_flags.mutual_friends,
203
+ mutual_guilds: data.friend_source_flags.all ? true : data.friend_source_flags.mutual_guilds,
204
+ };
205
+ }
206
+ if ('guild_folders' in data) {
207
+ data.guild_folders.map((folder, index) =>
208
+ this.guildFolder.cache.set(index, new GuildFolder(this.client, folder)),
209
+ );
210
+ }
211
+ if ('restricted_guilds' in data) {
212
+ this.disableDMfromServer = new Collection(data.restricted_guilds.map(guildId => [guildId, true]));
213
+ }
214
+ }
215
+ async fetch() {
216
+ if (this.client.bot) throw new Error('INVALID_BOT_METHOD');
217
+ const data = await this.client.api.users('@me').settings.get();
218
+ this._patch(data);
219
+ return this;
220
+ }
221
+ /**
222
+ * Edit data
223
+ * @param {Object} data Data to edit
224
+ * @private
225
+ */
226
+ async edit(data) {
227
+ if (this.client.bot) throw new Error('INVALID_BOT_METHOD');
228
+ const res = await this.client.api.users('@me').settings.patch({ data });
229
+ this._patch(res);
230
+ return this;
231
+ }
232
+ /**
233
+ * Set compact mode
234
+ * @param {boolean | null} value Compact mode enable or disable
235
+ * @returns {boolean}
236
+ */
237
+ async setDisplayCompactMode(value) {
238
+ if (typeof value !== 'boolean' && value !== null) {
239
+ throw new TypeError('INVALID_TYPE', 'value', 'boolean | null', true);
240
+ }
241
+ if (!value) value = !this.compactMode;
242
+ if (value !== this.compactMode) {
243
+ await this.edit({ message_display_compact: value });
244
+ }
245
+ return this.compactMode;
246
+ }
247
+ /**
248
+ * Discord Theme
249
+ * @param {null |dark |light} value Theme to set
250
+ * @returns {theme}
251
+ */
252
+ async setTheme(value) {
253
+ const validValues = ['dark', 'light'];
254
+ if (typeof value !== 'string' && value !== null) {
255
+ throw new TypeError('INVALID_TYPE', 'value', 'string | null', true);
256
+ }
257
+ if (!validValues.includes(value)) {
258
+ if (value == validValues[0]) value = validValues[1];
259
+ else value = validValues[0];
260
+ }
261
+ if (value !== this.theme) {
262
+ await this.edit({ theme: value });
263
+ }
264
+ return this.theme;
265
+ }
266
+
267
+ /**
268
+ * CustomStatus Object
269
+ * @typedef {Object} CustomStatusOption
270
+ * @property {string | null} text Text to set
271
+ * @property {string | null} status The status to set: 'online', 'idle', 'dnd', 'invisible' or null.
272
+ * @property {EmojiResolvable | null} emoji UnicodeEmoji, DiscordEmoji, or null.
273
+ * @property {number | null} expires The number of seconds until the status expires, or null.
274
+ */
275
+
276
+ /**
277
+ * Set custom status
278
+ * @param {?CustomStatus | CustomStatusOption} options CustomStatus
279
+ */
280
+ setCustomStatus(options) {
281
+ if (typeof options !== 'object') {
282
+ this.edit({ custom_status: null });
283
+ } else if (options instanceof CustomStatus) {
284
+ options = options.toJSON();
285
+ let data = {
286
+ emoji_name: null,
287
+ expires_at: null,
288
+ text: null,
289
+ };
290
+ if (typeof options.state === 'string') {
291
+ data.text = options.state;
292
+ }
293
+ if (options.emoji) {
294
+ if (options.emoji?.id) {
295
+ data.emoji_name = options.emoji?.name;
296
+ data.emoji_id = options.emoji?.id;
297
+ } else {
298
+ data.emoji_name = typeof options.emoji?.name === 'string' ? options.emoji?.name : null;
299
+ }
300
+ }
301
+ this.edit({ custom_status: data });
302
+ } else {
303
+ let data = {
304
+ emoji_name: null,
305
+ expires_at: null,
306
+ text: null,
307
+ };
308
+ if (typeof options.text === 'string') {
309
+ if (options.text.length > 128) {
310
+ throw new RangeError('[INVALID_VALUE] Custom status text must be less than 128 characters');
311
+ }
312
+ data.text = options.text;
313
+ }
314
+ if (options.emoji) {
315
+ const emoji = this.client.emojis.resolve(options.emoji);
316
+ if (emoji) {
317
+ data.emoji_name = emoji.name;
318
+ data.emoji_id = emoji.id;
319
+ } else {
320
+ data.emoji_name = typeof options.emoji === 'string' ? options.emoji : null;
321
+ }
322
+ }
323
+ if (typeof options.expires === 'number') {
324
+ if (options.expires < Date.now()) {
325
+ throw new RangeError(`[INVALID_VALUE] Custom status expiration must be greater than ${Date.now()}`);
326
+ }
327
+ data.expires_at = new Date(options.expires).toISOString();
328
+ }
329
+ if (['online', 'idle', 'dnd', 'invisible'].includes(options.status)) this.edit({ status: options.status });
330
+ this.edit({ custom_status: data });
331
+ }
332
+ }
333
+
334
+ /**
335
+ * * Locale Setting, must be one of:
336
+ * * `DANISH`
337
+ * * `GERMAN`
338
+ * * `ENGLISH_UK`
339
+ * * `ENGLISH_US`
340
+ * * `SPANISH`
341
+ * * `FRENCH`
342
+ * * `CROATIAN`
343
+ * * `ITALIAN`
344
+ * * `LITHUANIAN`
345
+ * * `HUNGARIAN`
346
+ * * `DUTCH`
347
+ * * `NORWEGIAN`
348
+ * * `POLISH`
349
+ * * `BRAZILIAN_PORTUGUESE`
350
+ * * `ROMANIA_ROMANIAN`
351
+ * * `FINNISH`
352
+ * * `SWEDISH`
353
+ * * `VIETNAMESE`
354
+ * * `TURKISH`
355
+ * * `CZECH`
356
+ * * `GREEK`
357
+ * * `BULGARIAN`
358
+ * * `RUSSIAN`
359
+ * * `UKRAINIAN`
360
+ * * `HINDI`
361
+ * * `THAI`
362
+ * * `CHINA_CHINESE`
363
+ * * `JAPANESE`
364
+ * * `TAIWAN_CHINESE`
365
+ * * `KOREAN`
366
+ * @param {localeSetting} value Locale to set
367
+ * @returns {locale}
368
+ */
369
+ async setLocale(value) {
370
+ if (typeof value !== 'string') {
371
+ throw new TypeError('INVALID_TYPE', 'value', 'string', true);
372
+ }
373
+ if (!localeSetting[value]) throw new Error('INVALID_LOCALE');
374
+ if (localeSetting[value] !== this.locale) {
375
+ await this.edit({ locale: localeSetting[value] });
376
+ }
377
+ return this.locale;
378
+ }
379
+ // TODO: Guild positions & folders
380
+ // Change Index in Array [Hidden]
381
+ /**
382
+ *
383
+ * @param {Array} array Array
384
+ * @param {number} from Index1
385
+ * @param {number} to Index2
386
+ * @returns {Array}
387
+ * @private
388
+ */
389
+ _move(array, from, to) {
390
+ array.splice(to, 0, array.splice(from, 1)[0]);
391
+ return array;
392
+ }
393
+ // TODO: Move Guild
394
+ // folder to folder
395
+ // folder to home
396
+ // home to home
397
+ // home to folder
398
+ /**
399
+ * Change Guild Position (from * to Folder or Home)
400
+ * @param {GuildIDResolve} guildId guild.id
401
+ * @param {number} newPosition Guild Position
402
+ * * **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder.
403
+ * @param {number} type Move to folder or home
404
+ * * `FOLDER`: 1
405
+ * * `HOME`: 2
406
+ * @param {FolderID} folderId If you want to move to folder
407
+ * @private
408
+ */
409
+ guildChangePosition(guildId, newPosition, type, folderId) {
410
+ // Get Guild default position
411
+ // Escape
412
+ const oldGuildFolderPosition = this.rawSetting.guild_folders.findIndex(value => value.guild_ids.includes(guildId));
413
+ const newGuildFolderPosition = this.rawSetting.guild_folders.findIndex(value =>
414
+ value.guild_ids.includes(this.rawSetting.guild_positions[newPosition]),
415
+ );
416
+ if (type == 2 || `${type}`.toUpperCase() == 'HOME') {
417
+ // Delete GuildID from Folder and create new Folder
418
+ // Check it is folder
419
+ const folder = this.rawSetting.guild_folders[oldGuildFolderPosition];
420
+ if (folder.id) {
421
+ this.rawSetting.guild_folders[oldGuildFolderPosition].guild_ids = this.rawSetting.guild_folders[
422
+ oldGuildFolderPosition
423
+ ].guild_ids.filter(v => v !== guildId);
424
+ }
425
+ this.rawSetting.guild_folders = this._move(
426
+ this.rawSetting.guild_folders,
427
+ oldGuildFolderPosition,
428
+ newGuildFolderPosition,
429
+ );
430
+ this.rawSetting.guild_folders[newGuildFolderPosition].id = null;
431
+ } else if (type == 1 || `${type}`.toUpperCase() == 'FOLDER') {
432
+ // Delete GuildID from oldFolder
433
+ this.rawSetting.guild_folders[oldGuildFolderPosition].guild_ids = this.rawSetting.guild_folders[
434
+ oldGuildFolderPosition
435
+ ].guild_ids.filter(v => v !== guildId);
436
+ // Index new Folder
437
+ const folderIndex = this.rawSetting.guild_folders.findIndex(value => value.id == folderId);
438
+ const folder = this.rawSetting.guild_folders[folderIndex];
439
+ folder.guild_ids.push(guildId);
440
+ folder.guild_ids = [...new Set(folder.guild_ids)];
441
+ folder.guild_ids = this._move(
442
+ folder.guild_ids,
443
+ folder.guild_ids.findIndex(v => v == guildId),
444
+ newPosition,
445
+ );
446
+ }
447
+ this.edit({ guild_folders: this.rawSetting.guild_folders });
448
+ }
449
+
450
+ /**
451
+ * Restricted guilds setting
452
+ * @param {boolean} status Restricted status
453
+ * @returns {Promise}
454
+ */
455
+ restrictedGuilds(status) {
456
+ if (typeof status !== 'boolean') {
457
+ throw new TypeError('INVALID_TYPE', 'status', 'boolean', true);
458
+ }
459
+ return this.edit({
460
+ default_guilds_restricted: status,
461
+ restricted_guilds: status ? this.client.guilds.cache.map(v => v.id) : [],
462
+ });
463
+ }
464
+ /**
465
+ * Add a guild to the list of restricted guilds.
466
+ * @param {GuildIDResolve} guildId The guild to add
467
+ * @returns {Promise}
468
+ */
469
+ addRestrictedGuild(guildId) {
470
+ const temp = Object.assign(
471
+ [],
472
+ this.disableDMfromServer.map((v, k) => k),
473
+ );
474
+ if (temp.includes(guildId)) throw new Error('Guild is already restricted');
475
+ temp.push(guildId);
476
+ return this.edit({ restricted_guilds: temp });
477
+ }
478
+
479
+ /**
480
+ * Remove a guild from the list of restricted guilds.
481
+ * @param {GuildIDResolve} guildId The guild to remove
482
+ * @returns {Promise}
483
+ */
484
+ removeRestrictedGuild(guildId) {
485
+ if (!this.disableDMfromServer.delete(guildId)) throw new Error('Guild is already restricted');
486
+ return this.edit({ restricted_guilds: this.disableDMfromServer.map((v, k) => k) });
487
+ }
488
+ }
489
+
490
+ module.exports = ClientUserSettingManager;
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ const BaseManager = require('./BaseManager');
4
+ const { Error } = require('../errors');
5
+
6
+ /**
7
+ * Manages the API methods of a data model along with a collection of instances.
8
+ * @extends {BaseManager}
9
+ * @abstract
10
+ */
11
+ class DataManager extends BaseManager {
12
+ constructor(client, holds) {
13
+ super(client);
14
+
15
+ /**
16
+ * The data structure belonging to this manager.
17
+ * @name DataManager#holds
18
+ * @type {Function}
19
+ * @private
20
+ * @readonly
21
+ */
22
+ Object.defineProperty(this, 'holds', { value: holds });
23
+ }
24
+
25
+ /**
26
+ * The cache of items for this manager.
27
+ * @type {Collection}
28
+ * @abstract
29
+ */
30
+ get cache() {
31
+ throw new Error('NOT_IMPLEMENTED', 'get cache', this.constructor.name);
32
+ }
33
+
34
+ /**
35
+ * Resolves a data entry to a data Object.
36
+ * @param {string|Object} idOrInstance The id or instance of something in this Manager
37
+ * @returns {?Object} An instance from this Manager
38
+ */
39
+ resolve(idOrInstance) {
40
+ if (idOrInstance instanceof this.holds) return idOrInstance;
41
+ if (typeof idOrInstance === 'string') return this.cache.get(idOrInstance) ?? null;
42
+ return null;
43
+ }
44
+
45
+ /**
46
+ * Resolves a data entry to an instance id.
47
+ * @param {string|Object} idOrInstance The id or instance of something in this Manager
48
+ * @returns {?Snowflake}
49
+ */
50
+ resolveId(idOrInstance) {
51
+ if (idOrInstance instanceof this.holds) return idOrInstance.id;
52
+ if (typeof idOrInstance === 'string') return idOrInstance;
53
+ return null;
54
+ }
55
+
56
+ valueOf() {
57
+ return this.cache;
58
+ }
59
+ }
60
+
61
+ module.exports = DataManager;
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const BaseManager = require('./BaseManager');
5
+ const DeveloperPortalApplication = require('../structures/DeveloperPortalApplication');
6
+ const Team = require('../structures/Team');
7
+
8
+ /**
9
+ * Manages API methods for users and stores their cache.
10
+ * @extends {BaseManager}
11
+ */
12
+ class DeveloperPortalManager extends BaseManager {
13
+ constructor(client) {
14
+ super(client);
15
+ /**
16
+ * A collection of all the applications the client has.
17
+ * @type {Collection<Snowflake, DeveloperPortalApplication>}
18
+ * @readonly
19
+ */
20
+ this.applications = new Collection();
21
+ /**
22
+ * A collection of all the teams the client has.
23
+ * @type {Collection<Snowflake, Team>}
24
+ * @readonly
25
+ */
26
+ this.teams = new Collection(); // Collection<Snowflake, Team>
27
+ }
28
+ /**
29
+ * Fetches all the applications & teams the client has.
30
+ * @returns {Promise<DeveloperPortalManager>}
31
+ */
32
+ async fetch() {
33
+ const promise1 = this.client.api.applications.get({
34
+ query: {
35
+ with_team_applications: true,
36
+ },
37
+ });
38
+ const promise2 = this.client.api.teams.get();
39
+ const [applications, teams] = await Promise.all([promise1, promise2]);
40
+ for (const team of teams) {
41
+ this.teams.set(team.id, new Team(this.client, team));
42
+ }
43
+ for (const application of applications) {
44
+ this.applications.set(application.id, new DeveloperPortalApplication(this.client, application));
45
+ }
46
+ return this;
47
+ }
48
+
49
+ /**
50
+ * Creates a new Team.
51
+ * @param {string} name Name of the team
52
+ * @returns {Promise<Team>}
53
+ */
54
+ async createTeam(name) {
55
+ const team = await this.client.api.teams.post({
56
+ data: {
57
+ name: name,
58
+ },
59
+ });
60
+
61
+ this.teams.set(team.id, new Team(this.client, team));
62
+ return this.teams.get(team.id);
63
+ }
64
+
65
+ /**
66
+ * Creates a new application.
67
+ * @param {string} name Name of the application
68
+ * @param {?Snowflake | Team} teamId The team to create the application in
69
+ * @returns {Promise<DeveloperPortalApplication>}
70
+ */
71
+ async createApplication(name, teamId = null) {
72
+ teamId = teamId instanceof Team ? teamId.id : teamId;
73
+ const application = await this.client.api.applications.post({
74
+ data: {
75
+ name,
76
+ team_id: teamId,
77
+ },
78
+ });
79
+ this.applications.set(application.id, new DeveloperPortalApplication(this.client, application));
80
+ return this.applications.get(application.id);
81
+ }
82
+
83
+ /**
84
+ * Deletes an application.
85
+ * @param {Snowflake} id Application ID
86
+ * @param {?number} MFACode 2FA code (if 2FA is enabled)
87
+ * @returns {Promise<void>}
88
+ */
89
+ async deleteApplication(id, MFACode) {
90
+ if (MFACode) {
91
+ await this.client.api.applications[`${id}/delete`].post({
92
+ query: {
93
+ code: MFACode,
94
+ },
95
+ });
96
+ } else {
97
+ await this.client.api.applications[`${id}/delete`].post();
98
+ }
99
+ this.applications.delete(id);
100
+ return undefined;
101
+ }
102
+ }
103
+
104
+ module.exports = DeveloperPortalManager;
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const ApplicationCommandManager = require('./ApplicationCommandManager');
4
+ const ApplicationCommandPermissionsManager = require('./ApplicationCommandPermissionsManager');
5
+
6
+ /**
7
+ * An extension for guild-specific application commands.
8
+ * @extends {ApplicationCommandManager}
9
+ */
10
+ class GuildApplicationCommandManager extends ApplicationCommandManager {
11
+ constructor(guild, iterable) {
12
+ super(guild.client, iterable);
13
+
14
+ /**
15
+ * The guild that this manager belongs to
16
+ * @type {Guild}
17
+ */
18
+ this.guild = guild;
19
+
20
+ /**
21
+ * The manager for permissions of arbitrary commands on this guild
22
+ * @type {ApplicationCommandPermissionsManager}
23
+ */
24
+ this.permissions = new ApplicationCommandPermissionsManager(this);
25
+ }
26
+ }
27
+
28
+ module.exports = GuildApplicationCommandManager;