discord-selfbot-v13.js 0.0.1-security → 3.2.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 +42 -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,441 @@
1
+ 'use strict';
2
+
3
+ const Base = require('./Base');
4
+ const { Emoji } = require('./Emoji');
5
+ const { CustomStatus, SpotifyRPC, RichPresence } = require('./RichPresence');
6
+ const ActivityFlags = require('../util/ActivityFlags');
7
+ const { ActivityTypes } = require('../util/Constants');
8
+ const Util = require('../util/Util');
9
+
10
+ /**
11
+ * Activity sent in a message.
12
+ * @typedef {Object} MessageActivity
13
+ * @property {string} [partyId] Id of the party represented in activity
14
+ * @property {MessageActivityType} type Type of activity sent
15
+ */
16
+
17
+ /**
18
+ * @external MessageActivityType
19
+ * @see {@link https://discord-api-types.dev/api/discord-api-types-v9/enum/MessageActivityType}
20
+ */
21
+
22
+ /**
23
+ * The status of this presence:
24
+ * * **`online`** - user is online
25
+ * * **`idle`** - user is AFK
26
+ * * **`offline`** - user is offline or invisible
27
+ * * **`dnd`** - user is in Do Not Disturb
28
+ * @typedef {string} PresenceStatus
29
+ */
30
+
31
+ /**
32
+ * The status of this presence:
33
+ * * **`online`** - user is online
34
+ * * **`idle`** - user is AFK
35
+ * * **`dnd`** - user is in Do Not Disturb
36
+ * @typedef {string} ClientPresenceStatus
37
+ */
38
+
39
+ /**
40
+ * Represents a user's presence.
41
+ * @extends {Base}
42
+ */
43
+ class Presence extends Base {
44
+ constructor(client, data = {}) {
45
+ super(client);
46
+
47
+ /**
48
+ * The presence's user id
49
+ * @type {Snowflake}
50
+ */
51
+ this.userId = data.user.id;
52
+
53
+ /**
54
+ * The guild this presence is in
55
+ * @type {?Guild}
56
+ */
57
+ this.guild = data.guild ?? null;
58
+
59
+ this._patch(data);
60
+ }
61
+
62
+ /**
63
+ * The user of this presence
64
+ * @type {?User}
65
+ * @readonly
66
+ */
67
+ get user() {
68
+ return this.client.users.resolve(this.userId);
69
+ }
70
+
71
+ /**
72
+ * The member of this presence
73
+ * @type {?GuildMember}
74
+ * @readonly
75
+ */
76
+ get member() {
77
+ return this.guild.members.resolve(this.userId);
78
+ }
79
+
80
+ _patch(data, fromClient) {
81
+ if ('status' in data) {
82
+ /**
83
+ * The status of this presence
84
+ * @type {PresenceStatus}
85
+ */
86
+ this.status = data.status;
87
+ } else {
88
+ this.status ??= 'offline';
89
+ }
90
+
91
+ if ('activities' in data) {
92
+ /**
93
+ * The activities of this presence
94
+ * @type {Activity[]}
95
+ */
96
+ this.activities = data.activities.map(activity => {
97
+ if (fromClient === true) {
98
+ if ([ActivityTypes.CUSTOM, 'CUSTOM'].includes(activity.type)) {
99
+ return new CustomStatus(activity, this);
100
+ } else if (activity.id == 'spotify:1') {
101
+ return new SpotifyRPC(this.client, activity, this);
102
+ } else {
103
+ return new RichPresence(this.client, activity, false, this);
104
+ }
105
+ } else {
106
+ return new Activity(this, activity);
107
+ }
108
+ });
109
+ } else {
110
+ this.activities ??= [];
111
+ }
112
+
113
+ if ('client_status' in data) {
114
+ /**
115
+ * The devices this presence is on
116
+ * @type {?Object}
117
+ * @property {?ClientPresenceStatus} web The current presence in the web application
118
+ * @property {?ClientPresenceStatus} mobile The current presence in the mobile application
119
+ * @property {?ClientPresenceStatus} desktop The current presence in the desktop application
120
+ */
121
+ this.clientStatus = data.client_status;
122
+ } else {
123
+ this.clientStatus ??= null;
124
+ }
125
+
126
+ if ('last_modified' in data) {
127
+ /**
128
+ * The timestamp this presence was last updated
129
+ * @type {number}
130
+ */
131
+ this.lastModified = data.last_modified;
132
+ }
133
+
134
+ return this;
135
+ }
136
+
137
+ _clone() {
138
+ const clone = Object.assign(Object.create(this), this);
139
+ clone.activities = this.activities.map(activity => activity._clone());
140
+ return clone;
141
+ }
142
+
143
+ /**
144
+ * Whether this presence is equal to another.
145
+ * @param {Presence} presence The presence to compare with
146
+ * @returns {boolean}
147
+ */
148
+ equals(presence) {
149
+ return (
150
+ this === presence ||
151
+ (presence &&
152
+ this.status === presence.status &&
153
+ this.activities.length === presence.activities.length &&
154
+ this.activities.every((activity, index) => activity.equals(presence.activities[index])) &&
155
+ this.clientStatus?.web === presence.clientStatus?.web &&
156
+ this.clientStatus?.mobile === presence.clientStatus?.mobile &&
157
+ this.clientStatus?.desktop === presence.clientStatus?.desktop)
158
+ );
159
+ }
160
+
161
+ toJSON() {
162
+ return Util.flatten(this);
163
+ }
164
+ }
165
+
166
+ /**
167
+ * The platform of this activity:
168
+ * * **`desktop`**
169
+ * * **`samsung`** - playing on Samsung Galaxy
170
+ * * **`xbox`** - playing on Xbox Live
171
+ * @typedef {string} ActivityPlatform
172
+ */
173
+
174
+ /**
175
+ * Represents an activity that is part of a user's presence.
176
+ */
177
+ class Activity {
178
+ constructor(presence, data) {
179
+ /**
180
+ * The presence of the Activity
181
+ * @type {Presence}
182
+ * @readonly
183
+ * @name Activity#presence
184
+ */
185
+ Object.defineProperty(this, 'presence', { value: presence });
186
+
187
+ /**
188
+ * The activity's id
189
+ * @type {string}
190
+ */
191
+ this.id = data.id;
192
+
193
+ /**
194
+ * The activity's name
195
+ * @type {string}
196
+ */
197
+ this.name = data.name;
198
+
199
+ /**
200
+ * The activity status's type
201
+ * @type {ActivityType}
202
+ */
203
+ this.type = typeof data.type === 'number' ? ActivityTypes[data.type] : data.type;
204
+
205
+ /**
206
+ * If the activity is being streamed, a link to the stream
207
+ * @type {?string}
208
+ */
209
+ this.url = data.url ?? null;
210
+
211
+ /**
212
+ * Details about the activity
213
+ * @type {?string}
214
+ */
215
+ this.details = data.details ?? null;
216
+
217
+ /**
218
+ * State of the activity
219
+ * @type {?string}
220
+ */
221
+ this.state = data.state ?? null;
222
+
223
+ /**
224
+ * The id of the application associated with this activity
225
+ * @type {?Snowflake}
226
+ */
227
+ this.applicationId = data.application_id ?? null;
228
+
229
+ /**
230
+ * Represents timestamps of an activity
231
+ * @typedef {Object} ActivityTimestamps
232
+ * @property {?Date} start When the activity started
233
+ * @property {?Date} end When the activity will end
234
+ */
235
+
236
+ /**
237
+ * Timestamps for the activity
238
+ * @type {?ActivityTimestamps}
239
+ */
240
+ this.timestamps = data.timestamps
241
+ ? {
242
+ start: data.timestamps.start ? new Date(Number(data.timestamps.start)) : null,
243
+ end: data.timestamps.end ? new Date(Number(data.timestamps.end)) : null,
244
+ }
245
+ : null;
246
+
247
+ /**
248
+ * The Spotify song's id
249
+ * @type {?string}
250
+ */
251
+ this.syncId = data.sync_id ?? null;
252
+
253
+ /**
254
+ * The platform the game is being played on
255
+ * @type {?ActivityPlatform}
256
+ */
257
+ this.platform = data.platform ?? null;
258
+
259
+ /**
260
+ * Represents a party of an activity
261
+ * @typedef {Object} ActivityParty
262
+ * @property {?string} id The party's id
263
+ * @property {number[]} size Size of the party as `[current, max]`
264
+ */
265
+
266
+ /**
267
+ * Party of the activity
268
+ * @type {?ActivityParty}
269
+ */
270
+ this.party = data.party ?? null;
271
+
272
+ /**
273
+ * Assets for rich presence
274
+ * @type {?RichPresenceAssets}
275
+ */
276
+ this.assets = data.assets ? new RichPresenceAssets(this, data.assets) : null;
277
+
278
+ /**
279
+ * Flags that describe the activity
280
+ * @type {Readonly<ActivityFlags>}
281
+ */
282
+ this.flags = new ActivityFlags(data.flags).freeze();
283
+
284
+ /**
285
+ * Emoji for a custom activity
286
+ * @type {?Emoji}
287
+ */
288
+ this.emoji = data.emoji ? new Emoji(presence.client, data.emoji) : null;
289
+
290
+ /**
291
+ * The game's or Spotify session's id
292
+ * @type {?string}
293
+ */
294
+ this.sessionId = data.session_id ?? null;
295
+
296
+ /**
297
+ * The labels of the buttons of this rich presence
298
+ * @type {string[]}
299
+ */
300
+ this.buttons = data.buttons ?? [];
301
+
302
+ /**
303
+ * Creation date of the activity
304
+ * @type {number}
305
+ */
306
+ this.createdTimestamp = data.created_at;
307
+ }
308
+
309
+ /**
310
+ * Whether this activity is equal to another activity.
311
+ * @param {Activity} activity The activity to compare with
312
+ * @returns {boolean}
313
+ */
314
+ equals(activity) {
315
+ return (
316
+ this === activity ||
317
+ (activity &&
318
+ this.name === activity.name &&
319
+ this.type === activity.type &&
320
+ this.url === activity.url &&
321
+ this.state === activity.state &&
322
+ this.details === activity.details &&
323
+ this.emoji?.id === activity.emoji?.id &&
324
+ this.emoji?.name === activity.emoji?.name)
325
+ );
326
+ }
327
+
328
+ /**
329
+ * The time the activity was created at
330
+ * @type {Date}
331
+ * @readonly
332
+ */
333
+ get createdAt() {
334
+ return new Date(this.createdTimestamp);
335
+ }
336
+
337
+ /**
338
+ * When concatenated with a string, this automatically returns the activities' name instead of the Activity object.
339
+ * @returns {string}
340
+ */
341
+ toString() {
342
+ return this.name;
343
+ }
344
+
345
+ _clone() {
346
+ return Object.assign(Object.create(this), this);
347
+ }
348
+ }
349
+
350
+ /**
351
+ * Assets for a rich presence
352
+ */
353
+ class RichPresenceAssets {
354
+ constructor(activity, assets) {
355
+ /**
356
+ * The activity of the RichPresenceAssets
357
+ * @type {Activity}
358
+ * @readonly
359
+ * @name RichPresenceAssets#activity
360
+ */
361
+ Object.defineProperty(this, 'activity', { value: activity });
362
+
363
+ /**
364
+ * Hover text for the large image
365
+ * @type {?string}
366
+ */
367
+ this.largeText = assets.large_text ?? null;
368
+
369
+ /**
370
+ * Hover text for the small image
371
+ * @type {?string}
372
+ */
373
+ this.smallText = assets.small_text ?? null;
374
+
375
+ /**
376
+ * The large image asset's id
377
+ * @type {?Snowflake}
378
+ */
379
+ this.largeImage = assets.large_image ?? null;
380
+
381
+ /**
382
+ * The small image asset's id
383
+ * @type {?Snowflake}
384
+ */
385
+ this.smallImage = assets.small_image ?? null;
386
+ }
387
+
388
+ /**
389
+ * Gets the URL of the small image asset
390
+ * @param {StaticImageURLOptions} [options] Options for the image URL
391
+ * @returns {?string}
392
+ */
393
+ smallImageURL({ format, size } = {}) {
394
+ if (!this.smallImage) return null;
395
+ if (this.smallImage.includes(':')) {
396
+ const [platform, id] = this.smallImage.split(':');
397
+ switch (platform) {
398
+ case 'mp':
399
+ return `https://media.discordapp.net/${id}`;
400
+ default:
401
+ return null;
402
+ }
403
+ }
404
+
405
+ return this.activity.presence.client.rest.cdn.AppAsset(this.activity.applicationId, this.smallImage, {
406
+ format,
407
+ size,
408
+ });
409
+ }
410
+
411
+ /**
412
+ * Gets the URL of the large image asset
413
+ * @param {StaticImageURLOptions} [options] Options for the image URL
414
+ * @returns {?string}
415
+ */
416
+ largeImageURL({ format, size } = {}) {
417
+ if (!this.largeImage) return null;
418
+ if (this.largeImage.includes(':')) {
419
+ const [platform, id] = this.largeImage.split(':');
420
+ switch (platform) {
421
+ case 'mp':
422
+ return `https://media.discordapp.net/${id}`;
423
+ case 'spotify':
424
+ return `https://i.scdn.co/image/${id}`;
425
+ case 'twitch':
426
+ return `https://static-cdn.jtvnw.net/previews-ttv/live_user_${id}.png`;
427
+ default:
428
+ return null;
429
+ }
430
+ }
431
+
432
+ return this.activity.presence.client.rest.cdn.AppAsset(this.activity.applicationId, this.largeImage, {
433
+ format,
434
+ size,
435
+ });
436
+ }
437
+ }
438
+
439
+ exports.Presence = Presence;
440
+ exports.Activity = Activity;
441
+ exports.RichPresenceAssets = RichPresenceAssets;
@@ -0,0 +1,229 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const Collector = require('./interfaces/Collector');
5
+ const { Events } = require('../util/Constants');
6
+
7
+ /**
8
+ * @typedef {CollectorOptions} ReactionCollectorOptions
9
+ * @property {number} max The maximum total amount of reactions to collect
10
+ * @property {number} maxEmojis The maximum number of emojis to collect
11
+ * @property {number} maxUsers The maximum number of users to react
12
+ */
13
+
14
+ /**
15
+ * Collects reactions on messages.
16
+ * Will automatically stop if the message ({@link Client#event:messageDelete messageDelete} or
17
+ * {@link Client#event:messageDeleteBulk messageDeleteBulk}),
18
+ * channel ({@link Client#event:channelDelete channelDelete}),
19
+ * thread ({@link Client#event:threadDelete threadDelete}), or
20
+ * guild ({@link Client#event:guildDelete guildDelete}) is deleted.
21
+ * @extends {Collector}
22
+ */
23
+ class ReactionCollector extends Collector {
24
+ /**
25
+ * @param {Message} message The message upon which to collect reactions
26
+ * @param {ReactionCollectorOptions} [options={}] The options to apply to this collector
27
+ */
28
+ constructor(message, options = {}) {
29
+ super(message.client, options);
30
+
31
+ /**
32
+ * The message upon which to collect reactions
33
+ * @type {Message}
34
+ */
35
+ this.message = message;
36
+
37
+ /**
38
+ * The users that have reacted to this message
39
+ * @type {Collection}
40
+ */
41
+ this.users = new Collection();
42
+
43
+ /**
44
+ * The total number of reactions collected
45
+ * @type {number}
46
+ */
47
+ this.total = 0;
48
+
49
+ this.empty = this.empty.bind(this);
50
+ this._handleChannelDeletion = this._handleChannelDeletion.bind(this);
51
+ this._handleThreadDeletion = this._handleThreadDeletion.bind(this);
52
+ this._handleGuildDeletion = this._handleGuildDeletion.bind(this);
53
+ this._handleMessageDeletion = this._handleMessageDeletion.bind(this);
54
+
55
+ const bulkDeleteListener = messages => {
56
+ if (messages.has(this.message.id)) this.stop('messageDelete');
57
+ };
58
+
59
+ this.client.incrementMaxListeners();
60
+ this.client.on(Events.MESSAGE_REACTION_ADD, this.handleCollect);
61
+ this.client.on(Events.MESSAGE_REACTION_REMOVE, this.handleDispose);
62
+ this.client.on(Events.MESSAGE_REACTION_REMOVE_ALL, this.empty);
63
+ this.client.on(Events.MESSAGE_DELETE, this._handleMessageDeletion);
64
+ this.client.on(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
65
+ this.client.on(Events.CHANNEL_DELETE, this._handleChannelDeletion);
66
+ this.client.on(Events.THREAD_DELETE, this._handleThreadDeletion);
67
+ this.client.on(Events.GUILD_DELETE, this._handleGuildDeletion);
68
+
69
+ this.once('end', () => {
70
+ this.client.removeListener(Events.MESSAGE_REACTION_ADD, this.handleCollect);
71
+ this.client.removeListener(Events.MESSAGE_REACTION_REMOVE, this.handleDispose);
72
+ this.client.removeListener(Events.MESSAGE_REACTION_REMOVE_ALL, this.empty);
73
+ this.client.removeListener(Events.MESSAGE_DELETE, this._handleMessageDeletion);
74
+ this.client.removeListener(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
75
+ this.client.removeListener(Events.CHANNEL_DELETE, this._handleChannelDeletion);
76
+ this.client.removeListener(Events.THREAD_DELETE, this._handleThreadDeletion);
77
+ this.client.removeListener(Events.GUILD_DELETE, this._handleGuildDeletion);
78
+ this.client.decrementMaxListeners();
79
+ });
80
+
81
+ this.on('collect', (reaction, user) => {
82
+ /**
83
+ * Emitted whenever a reaction is newly created on a message. Will emit only when a new reaction is
84
+ * added to the message, as opposed to {@link Collector#collect} which will
85
+ * be emitted even when a reaction has already been added to the message.
86
+ * @event ReactionCollector#create
87
+ * @param {MessageReaction} reaction The reaction that was added
88
+ * @param {User} user The user that added the reaction
89
+ */
90
+ if (reaction.count === 1) {
91
+ this.emit('create', reaction, user);
92
+ }
93
+ this.total++;
94
+ this.users.set(user.id, user);
95
+ });
96
+
97
+ this.on('remove', (reaction, user) => {
98
+ this.total--;
99
+ if (!this.collected.some(r => r.users.cache.has(user.id))) this.users.delete(user.id);
100
+ });
101
+ }
102
+
103
+ /**
104
+ * Handles an incoming reaction for possible collection.
105
+ * @param {MessageReaction} reaction The reaction to possibly collect
106
+ * @param {User} user The user that added the reaction
107
+ * @returns {?(Snowflake|string)}
108
+ * @private
109
+ */
110
+ collect(reaction) {
111
+ /**
112
+ * Emitted whenever a reaction is collected.
113
+ * @event ReactionCollector#collect
114
+ * @param {MessageReaction} reaction The reaction that was collected
115
+ * @param {User} user The user that added the reaction
116
+ */
117
+ if (reaction.message.id !== this.message.id) return null;
118
+
119
+ return ReactionCollector.key(reaction);
120
+ }
121
+
122
+ /**
123
+ * Handles a reaction deletion for possible disposal.
124
+ * @param {MessageReaction} reaction The reaction to possibly dispose of
125
+ * @param {User} user The user that removed the reaction
126
+ * @returns {?(Snowflake|string)}
127
+ */
128
+ dispose(reaction, user) {
129
+ /**
130
+ * Emitted when the reaction had all the users removed and the `dispose` option is set to true.
131
+ * @event ReactionCollector#dispose
132
+ * @param {MessageReaction} reaction The reaction that was disposed of
133
+ * @param {User} user The user that removed the reaction
134
+ */
135
+ if (reaction.message.id !== this.message.id) return null;
136
+
137
+ /**
138
+ * Emitted when the reaction had one user removed and the `dispose` option is set to true.
139
+ * @event ReactionCollector#remove
140
+ * @param {MessageReaction} reaction The reaction that was removed
141
+ * @param {User} user The user that removed the reaction
142
+ */
143
+ if (this.collected.has(ReactionCollector.key(reaction)) && this.users.has(user.id)) {
144
+ this.emit('remove', reaction, user);
145
+ }
146
+ return reaction.count ? null : ReactionCollector.key(reaction);
147
+ }
148
+
149
+ /**
150
+ * Empties this reaction collector.
151
+ */
152
+ empty() {
153
+ this.total = 0;
154
+ this.collected.clear();
155
+ this.users.clear();
156
+ this.checkEnd();
157
+ }
158
+
159
+ /**
160
+ * The reason this collector has ended with, or null if it hasn't ended yet
161
+ * @type {?string}
162
+ * @readonly
163
+ */
164
+ get endReason() {
165
+ if (this.options.max && this.total >= this.options.max) return 'limit';
166
+ if (this.options.maxEmojis && this.collected.size >= this.options.maxEmojis) return 'emojiLimit';
167
+ if (this.options.maxUsers && this.users.size >= this.options.maxUsers) return 'userLimit';
168
+ return null;
169
+ }
170
+
171
+ /**
172
+ * Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.
173
+ * @private
174
+ * @param {Message} message The message that was deleted
175
+ * @returns {void}
176
+ */
177
+ _handleMessageDeletion(message) {
178
+ if (message.id === this.message.id) {
179
+ this.stop('messageDelete');
180
+ }
181
+ }
182
+
183
+ /**
184
+ * Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.
185
+ * @private
186
+ * @param {GuildChannel} channel The channel that was deleted
187
+ * @returns {void}
188
+ */
189
+ _handleChannelDeletion(channel) {
190
+ if (channel.id === this.message.channelId || channel.threads?.cache.has(this.message.channelId)) {
191
+ this.stop('channelDelete');
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.
197
+ * @private
198
+ * @param {ThreadChannel} thread The thread that was deleted
199
+ * @returns {void}
200
+ */
201
+ _handleThreadDeletion(thread) {
202
+ if (thread.id === this.message.channelId) {
203
+ this.stop('threadDelete');
204
+ }
205
+ }
206
+
207
+ /**
208
+ * Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.
209
+ * @private
210
+ * @param {Guild} guild The guild that was deleted
211
+ * @returns {void}
212
+ */
213
+ _handleGuildDeletion(guild) {
214
+ if (guild.id === this.message.guild?.id) {
215
+ this.stop('guildDelete');
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Gets the collector key for a reaction.
221
+ * @param {MessageReaction} reaction The message reaction to get the key for
222
+ * @returns {Snowflake|string}
223
+ */
224
+ static key(reaction) {
225
+ return reaction.emoji.id ?? reaction.emoji.name;
226
+ }
227
+ }
228
+
229
+ module.exports = ReactionCollector;
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ const { Emoji } = require('./Emoji');
4
+ const Util = require('../util/Util');
5
+
6
+ /**
7
+ * Represents a limited emoji set used for both custom and unicode emojis. Custom emojis
8
+ * will use this class opposed to the Emoji class when the client doesn't know enough
9
+ * information about them.
10
+ * @extends {Emoji}
11
+ */
12
+ class ReactionEmoji extends Emoji {
13
+ constructor(reaction, emoji) {
14
+ super(reaction.message.client, emoji);
15
+ /**
16
+ * The message reaction this emoji refers to
17
+ * @type {MessageReaction}
18
+ */
19
+ this.reaction = reaction;
20
+ }
21
+
22
+ toJSON() {
23
+ return Util.flatten(this, { identifier: true });
24
+ }
25
+
26
+ valueOf() {
27
+ return this.id;
28
+ }
29
+ }
30
+
31
+ module.exports = ReactionEmoji;