discord.jselfbot-v13 0.0.1-security → 2.17.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of discord.jselfbot-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/managers/ApplicationCommandManager.js +267 -0
  156. package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
  157. package/src/managers/AutoModerationRuleManager.js +296 -0
  158. package/src/managers/BaseGuildEmojiManager.js +80 -0
  159. package/src/managers/BaseManager.js +19 -0
  160. package/src/managers/BillingManager.js +66 -0
  161. package/src/managers/CachedManager.js +71 -0
  162. package/src/managers/ChannelManager.js +139 -0
  163. package/src/managers/ClientUserSettingManager.js +490 -0
  164. package/src/managers/DataManager.js +61 -0
  165. package/src/managers/DeveloperPortalManager.js +104 -0
  166. package/src/managers/GuildApplicationCommandManager.js +28 -0
  167. package/src/managers/GuildBanManager.js +204 -0
  168. package/src/managers/GuildChannelManager.js +502 -0
  169. package/src/managers/GuildEmojiManager.js +171 -0
  170. package/src/managers/GuildEmojiRoleManager.js +118 -0
  171. package/src/managers/GuildFolderManager.js +24 -0
  172. package/src/managers/GuildForumThreadManager.js +114 -0
  173. package/src/managers/GuildInviteManager.js +213 -0
  174. package/src/managers/GuildManager.js +304 -0
  175. package/src/managers/GuildMemberManager.js +724 -0
  176. package/src/managers/GuildMemberRoleManager.js +191 -0
  177. package/src/managers/GuildScheduledEventManager.js +296 -0
  178. package/src/managers/GuildSettingManager.js +148 -0
  179. package/src/managers/GuildStickerManager.js +179 -0
  180. package/src/managers/GuildTextThreadManager.js +98 -0
  181. package/src/managers/InteractionManager.js +39 -0
  182. package/src/managers/MessageManager.js +393 -0
  183. package/src/managers/PermissionOverwriteManager.js +166 -0
  184. package/src/managers/PresenceManager.js +58 -0
  185. package/src/managers/ReactionManager.js +67 -0
  186. package/src/managers/ReactionUserManager.js +71 -0
  187. package/src/managers/RelationshipManager.js +258 -0
  188. package/src/managers/RoleManager.js +352 -0
  189. package/src/managers/SessionManager.js +57 -0
  190. package/src/managers/StageInstanceManager.js +162 -0
  191. package/src/managers/ThreadManager.js +207 -0
  192. package/src/managers/ThreadMemberManager.js +186 -0
  193. package/src/managers/UserManager.js +150 -0
  194. package/src/managers/VoiceStateManager.js +37 -0
  195. package/src/rest/APIRequest.js +136 -0
  196. package/src/rest/APIRouter.js +53 -0
  197. package/src/rest/CaptchaSolver.js +78 -0
  198. package/src/rest/DiscordAPIError.js +103 -0
  199. package/src/rest/HTTPError.js +62 -0
  200. package/src/rest/RESTManager.js +81 -0
  201. package/src/rest/RateLimitError.js +55 -0
  202. package/src/rest/RequestHandler.js +446 -0
  203. package/src/sharding/Shard.js +443 -0
  204. package/src/sharding/ShardClientUtil.js +275 -0
  205. package/src/sharding/ShardingManager.js +318 -0
  206. package/src/structures/AnonymousGuild.js +98 -0
  207. package/src/structures/ApplicationCommand.js +1028 -0
  208. package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
  209. package/src/structures/AutoModerationActionExecution.js +89 -0
  210. package/src/structures/AutoModerationRule.js +294 -0
  211. package/src/structures/AutocompleteInteraction.js +106 -0
  212. package/src/structures/Base.js +43 -0
  213. package/src/structures/BaseCommandInteraction.js +211 -0
  214. package/src/structures/BaseGuild.js +116 -0
  215. package/src/structures/BaseGuildEmoji.js +56 -0
  216. package/src/structures/BaseGuildTextChannel.js +193 -0
  217. package/src/structures/BaseGuildVoiceChannel.js +243 -0
  218. package/src/structures/BaseMessageComponent.js +114 -0
  219. package/src/structures/ButtonInteraction.js +11 -0
  220. package/src/structures/Call.js +58 -0
  221. package/src/structures/CategoryChannel.js +83 -0
  222. package/src/structures/Channel.js +271 -0
  223. package/src/structures/ClientApplication.js +204 -0
  224. package/src/structures/ClientPresence.js +84 -0
  225. package/src/structures/ClientUser.js +624 -0
  226. package/src/structures/CommandInteraction.js +41 -0
  227. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  228. package/src/structures/ContextMenuInteraction.js +65 -0
  229. package/src/structures/DMChannel.js +280 -0
  230. package/src/structures/DeveloperPortalApplication.js +520 -0
  231. package/src/structures/DirectoryChannel.js +20 -0
  232. package/src/structures/Emoji.js +148 -0
  233. package/src/structures/ForumChannel.js +271 -0
  234. package/src/structures/Guild.js +1744 -0
  235. package/src/structures/GuildAuditLogs.js +734 -0
  236. package/src/structures/GuildBan.js +59 -0
  237. package/src/structures/GuildBoost.js +108 -0
  238. package/src/structures/GuildChannel.js +454 -0
  239. package/src/structures/GuildEmoji.js +161 -0
  240. package/src/structures/GuildFolder.js +75 -0
  241. package/src/structures/GuildMember.js +686 -0
  242. package/src/structures/GuildPreview.js +191 -0
  243. package/src/structures/GuildPreviewEmoji.js +27 -0
  244. package/src/structures/GuildScheduledEvent.js +441 -0
  245. package/src/structures/GuildTemplate.js +236 -0
  246. package/src/structures/Integration.js +188 -0
  247. package/src/structures/IntegrationApplication.js +96 -0
  248. package/src/structures/Interaction.js +351 -0
  249. package/src/structures/InteractionCollector.js +248 -0
  250. package/src/structures/InteractionResponse.js +114 -0
  251. package/src/structures/InteractionWebhook.js +43 -0
  252. package/src/structures/Invite.js +375 -0
  253. package/src/structures/InviteGuild.js +23 -0
  254. package/src/structures/InviteStageInstance.js +86 -0
  255. package/src/structures/Message.js +1188 -0
  256. package/src/structures/MessageActionRow.js +103 -0
  257. package/src/structures/MessageAttachment.js +193 -0
  258. package/src/structures/MessageButton.js +231 -0
  259. package/src/structures/MessageCollector.js +146 -0
  260. package/src/structures/MessageComponentInteraction.js +120 -0
  261. package/src/structures/MessageContextMenuInteraction.js +20 -0
  262. package/src/structures/MessageEmbed.js +586 -0
  263. package/src/structures/MessageMentions.js +272 -0
  264. package/src/structures/MessagePayload.js +358 -0
  265. package/src/structures/MessageReaction.js +171 -0
  266. package/src/structures/MessageSelectMenu.js +391 -0
  267. package/src/structures/Modal.js +279 -0
  268. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  269. package/src/structures/ModalSubmitInteraction.js +119 -0
  270. package/src/structures/NewsChannel.js +32 -0
  271. package/src/structures/OAuth2Guild.js +28 -0
  272. package/src/structures/PartialGroupDMChannel.js +430 -0
  273. package/src/structures/PermissionOverwrites.js +196 -0
  274. package/src/structures/Presence.js +441 -0
  275. package/src/structures/ReactionCollector.js +229 -0
  276. package/src/structures/ReactionEmoji.js +31 -0
  277. package/src/structures/RichPresence.js +722 -0
  278. package/src/structures/Role.js +515 -0
  279. package/src/structures/SelectMenuInteraction.js +170 -0
  280. package/src/structures/Session.js +81 -0
  281. package/src/structures/StageChannel.js +104 -0
  282. package/src/structures/StageInstance.js +208 -0
  283. package/src/structures/Sticker.js +310 -0
  284. package/src/structures/StickerPack.js +95 -0
  285. package/src/structures/StoreChannel.js +56 -0
  286. package/src/structures/Team.js +167 -0
  287. package/src/structures/TeamMember.js +71 -0
  288. package/src/structures/TextChannel.js +33 -0
  289. package/src/structures/TextInputComponent.js +201 -0
  290. package/src/structures/ThreadChannel.js +626 -0
  291. package/src/structures/ThreadMember.js +105 -0
  292. package/src/structures/Typing.js +74 -0
  293. package/src/structures/User.js +697 -0
  294. package/src/structures/UserContextMenuInteraction.js +29 -0
  295. package/src/structures/VoiceChannel.js +110 -0
  296. package/src/structures/VoiceRegion.js +53 -0
  297. package/src/structures/VoiceState.js +306 -0
  298. package/src/structures/WebEmbed.js +401 -0
  299. package/src/structures/Webhook.js +461 -0
  300. package/src/structures/WelcomeChannel.js +60 -0
  301. package/src/structures/WelcomeScreen.js +48 -0
  302. package/src/structures/Widget.js +87 -0
  303. package/src/structures/WidgetMember.js +99 -0
  304. package/src/structures/interfaces/Application.js +190 -0
  305. package/src/structures/interfaces/Collector.js +300 -0
  306. package/src/structures/interfaces/InteractionResponses.js +313 -0
  307. package/src/structures/interfaces/TextBasedChannel.js +566 -0
  308. package/src/util/ActivityFlags.js +44 -0
  309. package/src/util/ApplicationFlags.js +74 -0
  310. package/src/util/BitField.js +170 -0
  311. package/src/util/ChannelFlags.js +45 -0
  312. package/src/util/Constants.js +1917 -0
  313. package/src/util/DataResolver.js +145 -0
  314. package/src/util/Formatters.js +214 -0
  315. package/src/util/GuildMemberFlags.js +43 -0
  316. package/src/util/Intents.js +74 -0
  317. package/src/util/LimitedCollection.js +131 -0
  318. package/src/util/MessageFlags.js +54 -0
  319. package/src/util/Options.js +360 -0
  320. package/src/util/Permissions.js +187 -0
  321. package/src/util/PremiumUsageFlags.js +31 -0
  322. package/src/util/PurchasedFlags.js +31 -0
  323. package/src/util/RemoteAuth.js +522 -0
  324. package/src/util/SnowflakeUtil.js +92 -0
  325. package/src/util/Sweepers.js +466 -0
  326. package/src/util/Symbols.js +48 -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;