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,461 @@
1
+ 'use strict';
2
+
3
+ const process = require('node:process');
4
+ const MessagePayload = require('./MessagePayload');
5
+ const { Error } = require('../errors');
6
+ const { WebhookTypes } = require('../util/Constants');
7
+ const DataResolver = require('../util/DataResolver');
8
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
9
+
10
+ let deprecationEmittedForFetchMessage = false;
11
+
12
+ /**
13
+ * Represents a webhook.
14
+ */
15
+ class Webhook {
16
+ constructor(client, data) {
17
+ /**
18
+ * The client that instantiated the webhook
19
+ * @name Webhook#client
20
+ * @type {Client}
21
+ * @readonly
22
+ */
23
+ Object.defineProperty(this, 'client', { value: client });
24
+ if (data) this._patch(data);
25
+ }
26
+
27
+ _patch(data) {
28
+ if ('name' in data) {
29
+ /**
30
+ * The name of the webhook
31
+ * @type {string}
32
+ */
33
+ this.name = data.name;
34
+ }
35
+
36
+ /**
37
+ * The token for the webhook, unavailable for follower webhooks and webhooks owned by another application.
38
+ * @name Webhook#token
39
+ * @type {?string}
40
+ */
41
+ Object.defineProperty(this, 'token', { value: data.token ?? null, writable: true, configurable: true });
42
+
43
+ if ('avatar' in data) {
44
+ /**
45
+ * The avatar for the webhook
46
+ * @type {?string}
47
+ */
48
+ this.avatar = data.avatar;
49
+ }
50
+
51
+ /**
52
+ * The webhook's id
53
+ * @type {Snowflake}
54
+ */
55
+ this.id = data.id;
56
+
57
+ if ('type' in data) {
58
+ /**
59
+ * The type of the webhook
60
+ * @type {WebhookType}
61
+ */
62
+ this.type = WebhookTypes[data.type];
63
+ }
64
+
65
+ if ('guild_id' in data) {
66
+ /**
67
+ * The guild the webhook belongs to
68
+ * @type {Snowflake}
69
+ */
70
+ this.guildId = data.guild_id;
71
+ }
72
+
73
+ if ('channel_id' in data) {
74
+ /**
75
+ * The channel the webhook belongs to
76
+ * @type {Snowflake}
77
+ */
78
+ this.channelId = data.channel_id;
79
+ }
80
+
81
+ if ('user' in data) {
82
+ /**
83
+ * The owner of the webhook
84
+ * @type {?(User|APIUser)}
85
+ */
86
+ this.owner = this.client.users?._add(data.user) ?? data.user;
87
+ } else {
88
+ this.owner ??= null;
89
+ }
90
+
91
+ if ('source_guild' in data) {
92
+ /**
93
+ * The source guild of the webhook
94
+ * @type {?(Guild|APIGuild)}
95
+ */
96
+ this.sourceGuild = this.client.guilds?.resolve(data.source_guild.id) ?? data.source_guild;
97
+ } else {
98
+ this.sourceGuild ??= null;
99
+ }
100
+
101
+ if ('source_channel' in data) {
102
+ /**
103
+ * The source channel of the webhook
104
+ * @type {?(NewsChannel|APIChannel)}
105
+ */
106
+ this.sourceChannel = this.client.channels?.resolve(data.source_channel?.id) ?? data.source_channel;
107
+ } else {
108
+ this.sourceChannel ??= null;
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Options that can be passed into send.
114
+ * @typedef {BaseMessageOptions} WebhookMessageOptions
115
+ * @property {string} [username=this.name] Username override for the message
116
+ * @property {string} [avatarURL] Avatar URL override for the message
117
+ * @property {Snowflake} [threadId] The id of the thread in the channel to send to.
118
+ * <info>For interaction webhooks, this property is ignored</info>
119
+ * @property {MessageFlags} [flags] Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be set.
120
+ */
121
+
122
+ /**
123
+ * Options that can be passed into editMessage.
124
+ * @typedef {Object} WebhookEditMessageOptions
125
+ * @property {MessageEmbed[]|APIEmbed[]} [embeds] See {@link WebhookMessageOptions#embeds}
126
+ * @property {string} [content] See {@link BaseMessageOptions#content}
127
+ * @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] See {@link BaseMessageOptions#files}
128
+ * @property {MessageMentionOptions} [allowedMentions] See {@link BaseMessageOptions#allowedMentions}
129
+ * @property {MessageAttachment[]} [attachments] Attachments to send with the message
130
+ * @property {Array<(MessageActionRow|MessageActionRowOptions)>} [components]
131
+ * Action rows containing interactive components for the message (buttons, select menus)
132
+ * @property {Snowflake} [threadId] The id of the thread this message belongs to
133
+ * <info>For interaction webhooks, this property is ignored</info>
134
+ * @property {string} [threadName] Name of the thread to create (only available if webhook is in a forum channel)
135
+ */
136
+
137
+ /**
138
+ * Sends a message with this webhook.
139
+ * @param {string|MessagePayload|WebhookMessageOptions} options The options to provide
140
+ * @returns {Promise<Message|APIMessage>}
141
+ * @example
142
+ * // Send a basic message
143
+ * webhook.send('hello!')
144
+ * .then(message => console.log(`Sent message: ${message.content}`))
145
+ * .catch(console.error);
146
+ * @example
147
+ * // Send a basic message in a thread
148
+ * webhook.send({ content: 'hello!', threadId: '836856309672348295' })
149
+ * .then(message => console.log(`Sent message: ${message.content}`))
150
+ * .catch(console.error);
151
+ * @example
152
+ * // Send a remote file
153
+ * webhook.send({
154
+ * files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']
155
+ * })
156
+ * .then(console.log)
157
+ * .catch(console.error);
158
+ * @example
159
+ * // Send a local file
160
+ * webhook.send({
161
+ * files: [{
162
+ * attachment: 'entire/path/to/file.jpg',
163
+ * name: 'file.jpg'
164
+ * }]
165
+ * })
166
+ * .then(console.log)
167
+ * .catch(console.error);
168
+ * @example
169
+ * // Send an embed with a local image inside
170
+ * webhook.send({
171
+ * content: 'This is an embed',
172
+ * embeds: [{
173
+ * thumbnail: {
174
+ * url: 'attachment://file.jpg'
175
+ * }
176
+ * }],
177
+ * files: [{
178
+ * attachment: 'entire/path/to/file.jpg',
179
+ * name: 'file.jpg'
180
+ * }]
181
+ * })
182
+ * .then(console.log)
183
+ * .catch(console.error);
184
+ */
185
+ async send(options) {
186
+ if (!this.token) throw new Error('WEBHOOK_TOKEN_UNAVAILABLE');
187
+
188
+ let messagePayload;
189
+
190
+ if (options instanceof MessagePayload) {
191
+ messagePayload = await options.resolveData();
192
+ } else {
193
+ messagePayload = await MessagePayload.create(this, options).resolveData();
194
+ }
195
+
196
+ const { data, files } = await messagePayload.resolveFiles();
197
+ const d = await this.client.api.webhooks(this.id, this.token).post({
198
+ data,
199
+ files,
200
+ query: { thread_id: messagePayload.options.threadId, wait: true },
201
+ auth: false,
202
+ webhook: true,
203
+ });
204
+ return this.client.channels?.cache.get(d.channel_id)?.messages._add(d, false) ?? d;
205
+ }
206
+
207
+ /**
208
+ * Sends a raw slack message with this webhook.
209
+ * @param {Object} body The raw body to send
210
+ * @returns {Promise<boolean>}
211
+ * @example
212
+ * // Send a slack message
213
+ * webhook.sendSlackMessage({
214
+ * 'username': 'Wumpus',
215
+ * 'attachments': [{
216
+ * 'pretext': 'this looks pretty cool',
217
+ * 'color': '#F0F',
218
+ * 'footer_icon': 'http://snek.s3.amazonaws.com/topSnek.png',
219
+ * 'footer': 'Powered by sneks',
220
+ * 'ts': Date.now() / 1_000
221
+ * }]
222
+ * }).catch(console.error);
223
+ * @see {@link https://api.slack.com/messaging/webhooks}
224
+ */
225
+ async sendSlackMessage(body) {
226
+ if (!this.token) throw new Error('WEBHOOK_TOKEN_UNAVAILABLE');
227
+
228
+ const data = await this.client.api.webhooks(this.id, this.token).slack.post({
229
+ query: { wait: true },
230
+ auth: false,
231
+ data: body,
232
+ webhook: true,
233
+ });
234
+ return data.toString() === 'ok';
235
+ }
236
+
237
+ /**
238
+ * Options used to edit a {@link Webhook}.
239
+ * @typedef {Object} WebhookEditData
240
+ * @property {string} [name=this.name] The new name for the webhook
241
+ * @property {?(BufferResolvable)} [avatar] The new avatar for the webhook
242
+ * @property {GuildTextChannelResolvable|VoiceChannel|StageChannel|ForumChannel} [channel]
243
+ * The new channel for the webhook
244
+ */
245
+
246
+ /**
247
+ * Edits this webhook.
248
+ * @param {WebhookEditData} options Options for editing the webhook
249
+ * @param {string} [reason] Reason for editing the webhook
250
+ * @returns {Promise<Webhook>}
251
+ */
252
+ async edit({ name = this.name, avatar, channel }, reason) {
253
+ if (avatar && !(typeof avatar === 'string' && avatar.startsWith('data:'))) {
254
+ avatar = await DataResolver.resolveImage(avatar);
255
+ }
256
+ channel &&= channel.id ?? channel;
257
+ const data = await this.client.api.webhooks(this.id, channel ? undefined : this.token).patch({
258
+ data: { name, avatar, channel_id: channel },
259
+ reason,
260
+ auth: !this.token || Boolean(channel),
261
+ webhook: true,
262
+ });
263
+
264
+ this.name = data.name;
265
+ this.avatar = data.avatar;
266
+ this.channelId = data.channel_id;
267
+ return this;
268
+ }
269
+
270
+ /**
271
+ * Options that can be passed into fetchMessage.
272
+ * @typedef {options} WebhookFetchMessageOptions
273
+ * @property {boolean} [cache=true] Whether to cache the message.
274
+ * @property {Snowflake} [threadId] The id of the thread this message belongs to.
275
+ * <info>For interaction webhooks, this property is ignored</info>
276
+ */
277
+
278
+ /**
279
+ * Gets a message that was sent by this webhook.
280
+ * @param {Snowflake|'@original'} message The id of the message to fetch
281
+ * @param {WebhookFetchMessageOptions|boolean} [cacheOrOptions={}] The options to provide to fetch the message.
282
+ * <warn>A **deprecated** boolean may be passed instead to specify whether to cache the message.</warn>
283
+ * @returns {Promise<Message|APIMessage>} Returns the raw message data if the webhook was instantiated as a
284
+ * {@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned
285
+ */
286
+ async fetchMessage(message, cacheOrOptions = { cache: true }) {
287
+ if (typeof cacheOrOptions === 'boolean') {
288
+ if (!deprecationEmittedForFetchMessage) {
289
+ process.emitWarning(
290
+ 'Passing a boolean to cache the message in Webhook#fetchMessage is deprecated. Pass an object instead.',
291
+ 'DeprecationWarning',
292
+ );
293
+
294
+ deprecationEmittedForFetchMessage = true;
295
+ }
296
+
297
+ cacheOrOptions = { cache: cacheOrOptions };
298
+ }
299
+
300
+ if (!this.token) throw new Error('WEBHOOK_TOKEN_UNAVAILABLE');
301
+
302
+ const data = await this.client.api
303
+ .webhooks(this.id, this.token)
304
+ .messages(message)
305
+ .get({
306
+ query: {
307
+ thread_id: cacheOrOptions.threadId,
308
+ },
309
+ auth: false,
310
+ webhook: true,
311
+ });
312
+ return this.client.channels?.cache.get(data.channel_id)?.messages._add(data, cacheOrOptions.cache) ?? data;
313
+ }
314
+
315
+ /**
316
+ * Edits a message that was sent by this webhook.
317
+ * @param {MessageResolvable|'@original'} message The message to edit
318
+ * @param {string|MessagePayload|WebhookEditMessageOptions} options The options to provide
319
+ * @returns {Promise<Message|APIMessage>} Returns the raw message data if the webhook was instantiated as a
320
+ * {@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned
321
+ */
322
+ async editMessage(message, options) {
323
+ if (!this.token) throw new Error('WEBHOOK_TOKEN_UNAVAILABLE');
324
+
325
+ let messagePayload;
326
+
327
+ if (options instanceof MessagePayload) {
328
+ messagePayload = await options.resolveData();
329
+ } else {
330
+ messagePayload = await MessagePayload.create(this, options).resolveData();
331
+ }
332
+
333
+ const { data, files } = await messagePayload.resolveFiles();
334
+
335
+ const d = await this.client.api
336
+ .webhooks(this.id, this.token)
337
+ .messages(typeof message === 'string' ? message : message.id)
338
+ .patch({
339
+ data,
340
+ files,
341
+ query: {
342
+ thread_id: messagePayload.options.threadId,
343
+ },
344
+ auth: false,
345
+ webhook: true,
346
+ });
347
+
348
+ const messageManager = this.client.channels?.cache.get(d.channel_id)?.messages;
349
+ if (!messageManager) return d;
350
+
351
+ const existing = messageManager.cache.get(d.id);
352
+ if (!existing) return messageManager._add(d);
353
+
354
+ const clone = existing._clone();
355
+ clone._patch(d);
356
+ return clone;
357
+ }
358
+
359
+ /**
360
+ * Deletes the webhook.
361
+ * @param {string} [reason] Reason for deleting this webhook
362
+ * @returns {Promise<void>}
363
+ */
364
+ async delete(reason) {
365
+ await this.client.api.webhooks(this.id, this.token).delete({ reason, auth: !this.token, webhook: true });
366
+ }
367
+
368
+ /**
369
+ * Delete a message that was sent by this webhook.
370
+ * @param {MessageResolvable|'@original'} message The message to delete
371
+ * @param {Snowflake} [threadId] The id of the thread this message belongs to
372
+ * @returns {Promise<void>}
373
+ */
374
+ async deleteMessage(message, threadId) {
375
+ if (!this.token) throw new Error('WEBHOOK_TOKEN_UNAVAILABLE');
376
+
377
+ await this.client.api
378
+ .webhooks(this.id, this.token)
379
+ .messages(typeof message === 'string' ? message : message.id)
380
+ .delete({
381
+ query: {
382
+ thread_id: threadId,
383
+ },
384
+ auth: false,
385
+ webhook: true,
386
+ });
387
+ }
388
+
389
+ /**
390
+ * The timestamp the webhook was created at
391
+ * @type {number}
392
+ * @readonly
393
+ */
394
+ get createdTimestamp() {
395
+ return SnowflakeUtil.timestampFrom(this.id);
396
+ }
397
+
398
+ /**
399
+ * The time the webhook was created at
400
+ * @type {Date}
401
+ * @readonly
402
+ */
403
+ get createdAt() {
404
+ return new Date(this.createdTimestamp);
405
+ }
406
+
407
+ /**
408
+ * The URL of this webhook
409
+ * @type {string}
410
+ * @readonly
411
+ */
412
+ get url() {
413
+ return this.client.options.http.api + this.client.api.webhooks(this.id, this.token);
414
+ }
415
+
416
+ /**
417
+ * A link to the webhook's avatar.
418
+ * @param {StaticImageURLOptions} [options={}] Options for the Image URL
419
+ * @returns {?string}
420
+ */
421
+ avatarURL({ format, size } = {}) {
422
+ if (!this.avatar) return null;
423
+ return this.client.rest.cdn.Avatar(this.id, this.avatar, format, size);
424
+ }
425
+
426
+ /**
427
+ * Whether or not this webhook is a channel follower webhook.
428
+ * @returns {boolean}
429
+ */
430
+ isChannelFollower() {
431
+ return this.type === 'Channel Follower';
432
+ }
433
+
434
+ /**
435
+ * Whether or not this webhook is an incoming webhook.
436
+ * @returns {boolean}
437
+ */
438
+ isIncoming() {
439
+ return this.type === 'Incoming';
440
+ }
441
+
442
+ static applyToClass(structure, ignore = []) {
443
+ for (const prop of [
444
+ 'send',
445
+ 'sendSlackMessage',
446
+ 'fetchMessage',
447
+ 'edit',
448
+ 'editMessage',
449
+ 'delete',
450
+ 'deleteMessage',
451
+ 'createdTimestamp',
452
+ 'createdAt',
453
+ 'url',
454
+ ]) {
455
+ if (ignore.includes(prop)) continue;
456
+ Object.defineProperty(structure.prototype, prop, Object.getOwnPropertyDescriptor(Webhook.prototype, prop));
457
+ }
458
+ }
459
+ }
460
+
461
+ module.exports = Webhook;
@@ -0,0 +1,60 @@
1
+ 'use strict';
2
+
3
+ const Base = require('./Base');
4
+ const { Emoji } = require('./Emoji');
5
+
6
+ /**
7
+ * Represents a channel link in a guild's welcome screen.
8
+ * @extends {Base}
9
+ */
10
+ class WelcomeChannel extends Base {
11
+ constructor(guild, data) {
12
+ super(guild.client);
13
+
14
+ /**
15
+ * The guild for this welcome channel
16
+ * @type {Guild|InviteGuild}
17
+ */
18
+ this.guild = guild;
19
+
20
+ /**
21
+ * The description of this welcome channel
22
+ * @type {string}
23
+ */
24
+ this.description = data.description;
25
+
26
+ /**
27
+ * The raw emoji data
28
+ * @type {Object}
29
+ * @private
30
+ */
31
+ this._emoji = {
32
+ name: data.emoji_name,
33
+ id: data.emoji_id,
34
+ };
35
+
36
+ /**
37
+ * The id of this welcome channel
38
+ * @type {Snowflake}
39
+ */
40
+ this.channelId = data.channel_id;
41
+ }
42
+
43
+ /**
44
+ * The channel of this welcome channel
45
+ * @type {?(TextChannel|NewsChannel|StoreChannel|ForumChannel)}
46
+ */
47
+ get channel() {
48
+ return this.client.channels.resolve(this.channelId);
49
+ }
50
+
51
+ /**
52
+ * The emoji of this welcome channel
53
+ * @type {GuildEmoji|Emoji}
54
+ */
55
+ get emoji() {
56
+ return this.client.emojis.resolve(this._emoji.id) ?? new Emoji(this.client, this._emoji);
57
+ }
58
+ }
59
+
60
+ module.exports = WelcomeChannel;
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const Base = require('./Base');
5
+ const WelcomeChannel = require('./WelcomeChannel');
6
+
7
+ /**
8
+ * Represents a welcome screen.
9
+ * @extends {Base}
10
+ */
11
+ class WelcomeScreen extends Base {
12
+ constructor(guild, data) {
13
+ super(guild.client);
14
+
15
+ /**
16
+ * The guild for this welcome screen
17
+ * @type {Guild}
18
+ */
19
+ this.guild = guild;
20
+
21
+ /**
22
+ * The description of this welcome screen
23
+ * @type {?string}
24
+ */
25
+ this.description = data.description ?? null;
26
+
27
+ /**
28
+ * Collection of welcome channels belonging to this welcome screen
29
+ * @type {Collection<Snowflake, WelcomeChannel>}
30
+ */
31
+ this.welcomeChannels = new Collection();
32
+
33
+ for (const channel of data.welcome_channels) {
34
+ const welcomeChannel = new WelcomeChannel(this.guild, channel);
35
+ this.welcomeChannels.set(welcomeChannel.channelId, welcomeChannel);
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Whether the welcome screen is enabled on the guild or not
41
+ * @type {boolean}
42
+ */
43
+ get enabled() {
44
+ return this.guild.features.includes('WELCOME_SCREEN_ENABLED');
45
+ }
46
+ }
47
+
48
+ module.exports = WelcomeScreen;
@@ -0,0 +1,87 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const Base = require('./Base');
5
+ const WidgetMember = require('./WidgetMember');
6
+
7
+ /**
8
+ * Represents a Widget.
9
+ * @extends {Base}
10
+ */
11
+ class Widget extends Base {
12
+ constructor(client, data) {
13
+ super(client);
14
+ this._patch(data);
15
+ }
16
+
17
+ /**
18
+ * Represents a channel in a Widget
19
+ * @typedef {Object} WidgetChannel
20
+ * @property {Snowflake} id Id of the channel
21
+ * @property {string} name Name of the channel
22
+ * @property {number} position Position of the channel
23
+ */
24
+
25
+ _patch(data) {
26
+ /**
27
+ * The id of the guild.
28
+ * @type {Snowflake}
29
+ */
30
+ this.id = data.id;
31
+
32
+ if ('name' in data) {
33
+ /**
34
+ * The name of the guild.
35
+ * @type {string}
36
+ */
37
+ this.name = data.name;
38
+ }
39
+
40
+ if ('instant_invite' in data) {
41
+ /**
42
+ * The invite of the guild.
43
+ * @type {?string}
44
+ */
45
+ this.instantInvite = data.instant_invite;
46
+ }
47
+
48
+ /**
49
+ * The list of channels in the guild.
50
+ * @type {Collection<Snowflake, WidgetChannel>}
51
+ */
52
+ this.channels = new Collection();
53
+ for (const channel of data.channels) {
54
+ this.channels.set(channel.id, channel);
55
+ }
56
+
57
+ /**
58
+ * The list of members in the guild.
59
+ * These strings are just arbitrary numbers, they aren't Snowflakes.
60
+ * @type {Collection<string, WidgetMember>}
61
+ */
62
+ this.members = new Collection();
63
+ for (const member of data.members) {
64
+ this.members.set(member.id, new WidgetMember(this.client, member));
65
+ }
66
+
67
+ if ('presence_count' in data) {
68
+ /**
69
+ * The number of members online.
70
+ * @type {number}
71
+ */
72
+ this.presenceCount = data.presence_count;
73
+ }
74
+ }
75
+
76
+ /**
77
+ * Update the Widget.
78
+ * @returns {Promise<Widget>}
79
+ */
80
+ async fetch() {
81
+ const data = await this.client.api.guilds(this.id, 'widget.json').get();
82
+ this._patch(data);
83
+ return this;
84
+ }
85
+ }
86
+
87
+ module.exports = Widget;