safeness-sb-new 0.0.1

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.
Files changed (343) hide show
  1. package/README.md +115 -0
  2. package/package.json +96 -0
  3. package/src/WebSocket.js +39 -0
  4. package/src/client/BaseClient.js +86 -0
  5. package/src/client/Client.js +836 -0
  6. package/src/client/WebhookClient.js +61 -0
  7. package/src/client/actions/Action.js +120 -0
  8. package/src/client/actions/ActionsManager.js +78 -0
  9. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  10. package/src/client/actions/AutoModerationActionExecution.js +27 -0
  11. package/src/client/actions/AutoModerationRuleCreate.js +28 -0
  12. package/src/client/actions/AutoModerationRuleDelete.js +32 -0
  13. package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
  14. package/src/client/actions/ChannelCreate.js +23 -0
  15. package/src/client/actions/ChannelDelete.js +39 -0
  16. package/src/client/actions/ChannelUpdate.js +43 -0
  17. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  18. package/src/client/actions/GuildBanAdd.js +20 -0
  19. package/src/client/actions/GuildBanRemove.js +25 -0
  20. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  21. package/src/client/actions/GuildDelete.js +65 -0
  22. package/src/client/actions/GuildEmojiCreate.js +20 -0
  23. package/src/client/actions/GuildEmojiDelete.js +21 -0
  24. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  25. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  26. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  27. package/src/client/actions/GuildMemberRemove.js +33 -0
  28. package/src/client/actions/GuildMemberUpdate.js +44 -0
  29. package/src/client/actions/GuildRoleCreate.js +25 -0
  30. package/src/client/actions/GuildRoleDelete.js +31 -0
  31. package/src/client/actions/GuildRoleUpdate.js +39 -0
  32. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  33. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  34. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  35. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  36. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  37. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  38. package/src/client/actions/GuildStickerCreate.js +20 -0
  39. package/src/client/actions/GuildStickerDelete.js +21 -0
  40. package/src/client/actions/GuildStickerUpdate.js +20 -0
  41. package/src/client/actions/GuildStickersUpdate.js +34 -0
  42. package/src/client/actions/GuildUpdate.js +33 -0
  43. package/src/client/actions/InviteCreate.js +28 -0
  44. package/src/client/actions/InviteDelete.js +30 -0
  45. package/src/client/actions/MessageCreate.js +46 -0
  46. package/src/client/actions/MessageDelete.js +32 -0
  47. package/src/client/actions/MessageDeleteBulk.js +46 -0
  48. package/src/client/actions/MessageReactionAdd.js +56 -0
  49. package/src/client/actions/MessageReactionRemove.js +45 -0
  50. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  51. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  52. package/src/client/actions/MessageUpdate.js +26 -0
  53. package/src/client/actions/PresenceUpdate.js +46 -0
  54. package/src/client/actions/StageInstanceCreate.js +28 -0
  55. package/src/client/actions/StageInstanceDelete.js +33 -0
  56. package/src/client/actions/StageInstanceUpdate.js +30 -0
  57. package/src/client/actions/ThreadCreate.js +24 -0
  58. package/src/client/actions/ThreadDelete.js +32 -0
  59. package/src/client/actions/ThreadListSync.js +59 -0
  60. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  61. package/src/client/actions/ThreadMembersUpdate.js +34 -0
  62. package/src/client/actions/TypingStart.js +29 -0
  63. package/src/client/actions/UserUpdate.js +35 -0
  64. package/src/client/actions/VoiceStateUpdate.js +57 -0
  65. package/src/client/actions/WebhooksUpdate.js +20 -0
  66. package/src/client/voice/ClientVoiceManager.js +150 -0
  67. package/src/client/voice/VoiceConnection.js +849 -0
  68. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  69. package/src/client/voice/dispatcher/AudioDispatcher.js +115 -0
  70. package/src/client/voice/dispatcher/BaseDispatcher.js +405 -0
  71. package/src/client/voice/dispatcher/VPxDispatcher.js +52 -0
  72. package/src/client/voice/dispatcher/VideoDispatcher.js +31 -0
  73. package/src/client/voice/networking/VoiceUDPClient.js +188 -0
  74. package/src/client/voice/networking/VoiceWebSocket.js +280 -0
  75. package/src/client/voice/player/MediaPlayer.js +294 -0
  76. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  77. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  78. package/src/client/voice/receiver/PacketHandler.js +170 -0
  79. package/src/client/voice/receiver/Receiver.js +82 -0
  80. package/src/client/voice/receiver/video/IvfJoinner.js +106 -0
  81. package/src/client/voice/util/Function.js +14 -0
  82. package/src/client/voice/util/PlayInterface.js +122 -0
  83. package/src/client/voice/util/Secretbox.js +42 -0
  84. package/src/client/voice/util/Silence.js +16 -0
  85. package/src/client/voice/util/Socket.js +62 -0
  86. package/src/client/voice/util/VolumeInterface.js +104 -0
  87. package/src/client/websocket/WebSocketManager.js +392 -0
  88. package/src/client/websocket/WebSocketShard.js +906 -0
  89. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  90. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  91. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  92. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  93. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  94. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  95. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  96. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  97. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  98. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  99. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  100. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  101. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  102. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  103. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  104. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  105. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  106. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  107. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  108. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  109. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -0
  110. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  113. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  114. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  115. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  116. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  118. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  119. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  120. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  121. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  122. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  128. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  129. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  130. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  131. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  132. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  133. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +22 -0
  134. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +12 -0
  135. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  136. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  140. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  141. package/src/client/websocket/handlers/READY.js +120 -0
  142. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  143. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  144. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  145. package/src/client/websocket/handlers/RESUMED.js +14 -0
  146. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  147. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  148. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  149. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  150. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  151. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  152. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  153. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  154. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  155. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  156. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  157. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  158. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
  159. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  160. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  161. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  162. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  163. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  164. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  165. package/src/client/websocket/handlers/index.js +83 -0
  166. package/src/errors/DJSError.js +61 -0
  167. package/src/errors/Messages.js +208 -0
  168. package/src/errors/index.js +4 -0
  169. package/src/index.js +159 -0
  170. package/src/managers/ApplicationCommandManager.js +264 -0
  171. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  172. package/src/managers/AutoModerationRuleManager.js +296 -0
  173. package/src/managers/BaseGuildEmojiManager.js +80 -0
  174. package/src/managers/BaseManager.js +19 -0
  175. package/src/managers/BillingManager.js +66 -0
  176. package/src/managers/CachedManager.js +71 -0
  177. package/src/managers/ChannelManager.js +138 -0
  178. package/src/managers/ClientUserSettingManager.js +372 -0
  179. package/src/managers/DataManager.js +61 -0
  180. package/src/managers/GuildBanManager.js +204 -0
  181. package/src/managers/GuildChannelManager.js +488 -0
  182. package/src/managers/GuildEmojiManager.js +171 -0
  183. package/src/managers/GuildEmojiRoleManager.js +118 -0
  184. package/src/managers/GuildForumThreadManager.js +108 -0
  185. package/src/managers/GuildInviteManager.js +213 -0
  186. package/src/managers/GuildManager.js +304 -0
  187. package/src/managers/GuildMemberManager.js +597 -0
  188. package/src/managers/GuildMemberRoleManager.js +191 -0
  189. package/src/managers/GuildScheduledEventManager.js +296 -0
  190. package/src/managers/GuildSettingManager.js +155 -0
  191. package/src/managers/GuildStickerManager.js +179 -0
  192. package/src/managers/GuildTextThreadManager.js +98 -0
  193. package/src/managers/InteractionManager.js +39 -0
  194. package/src/managers/MessageManager.js +391 -0
  195. package/src/managers/PermissionOverwriteManager.js +166 -0
  196. package/src/managers/PresenceManager.js +58 -0
  197. package/src/managers/ReactionManager.js +67 -0
  198. package/src/managers/ReactionUserManager.js +71 -0
  199. package/src/managers/RelationshipManager.js +265 -0
  200. package/src/managers/RoleManager.js +352 -0
  201. package/src/managers/StageInstanceManager.js +162 -0
  202. package/src/managers/ThreadManager.js +174 -0
  203. package/src/managers/ThreadMemberManager.js +186 -0
  204. package/src/managers/UserManager.js +146 -0
  205. package/src/managers/UserNoteManager.js +53 -0
  206. package/src/managers/VoiceStateManager.js +37 -0
  207. package/src/rest/APIRequest.js +159 -0
  208. package/src/rest/APIRouter.js +53 -0
  209. package/src/rest/DiscordAPIError.js +104 -0
  210. package/src/rest/HTTPError.js +62 -0
  211. package/src/rest/RESTManager.js +62 -0
  212. package/src/rest/RateLimitError.js +55 -0
  213. package/src/rest/RequestHandler.js +444 -0
  214. package/src/sharding/Shard.js +443 -0
  215. package/src/sharding/ShardClientUtil.js +275 -0
  216. package/src/sharding/ShardingManager.js +318 -0
  217. package/src/structures/AnonymousGuild.js +98 -0
  218. package/src/structures/ApplicationCommand.js +593 -0
  219. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
  220. package/src/structures/AutoModerationActionExecution.js +89 -0
  221. package/src/structures/AutoModerationRule.js +294 -0
  222. package/src/structures/AutocompleteInteraction.js +107 -0
  223. package/src/structures/Base.js +43 -0
  224. package/src/structures/BaseCommandInteraction.js +211 -0
  225. package/src/structures/BaseGuild.js +116 -0
  226. package/src/structures/BaseGuildEmoji.js +56 -0
  227. package/src/structures/BaseGuildTextChannel.js +191 -0
  228. package/src/structures/BaseGuildVoiceChannel.js +241 -0
  229. package/src/structures/BaseMessageComponent.js +114 -0
  230. package/src/structures/ButtonInteraction.js +11 -0
  231. package/src/structures/CallState.js +63 -0
  232. package/src/structures/CategoryChannel.js +85 -0
  233. package/src/structures/Channel.js +270 -0
  234. package/src/structures/ClientPresence.js +77 -0
  235. package/src/structures/ClientUser.js +450 -0
  236. package/src/structures/CommandInteraction.js +41 -0
  237. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  238. package/src/structures/ContextMenuInteraction.js +65 -0
  239. package/src/structures/DMChannel.js +217 -0
  240. package/src/structures/DirectoryChannel.js +20 -0
  241. package/src/structures/Emoji.js +148 -0
  242. package/src/structures/ForumChannel.js +261 -0
  243. package/src/structures/GroupDMChannel.js +387 -0
  244. package/src/structures/Guild.js +1608 -0
  245. package/src/structures/GuildAuditLogs.js +729 -0
  246. package/src/structures/GuildBan.js +59 -0
  247. package/src/structures/GuildBoost.js +108 -0
  248. package/src/structures/GuildChannel.js +468 -0
  249. package/src/structures/GuildEmoji.js +161 -0
  250. package/src/structures/GuildMember.js +568 -0
  251. package/src/structures/GuildPreview.js +191 -0
  252. package/src/structures/GuildPreviewEmoji.js +27 -0
  253. package/src/structures/GuildScheduledEvent.js +441 -0
  254. package/src/structures/GuildTemplate.js +236 -0
  255. package/src/structures/Integration.js +188 -0
  256. package/src/structures/IntegrationApplication.js +96 -0
  257. package/src/structures/Interaction.js +290 -0
  258. package/src/structures/InteractionCollector.js +248 -0
  259. package/src/structures/InteractionWebhook.js +43 -0
  260. package/src/structures/Invite.js +358 -0
  261. package/src/structures/InviteGuild.js +23 -0
  262. package/src/structures/InviteStageInstance.js +86 -0
  263. package/src/structures/Message.js +1227 -0
  264. package/src/structures/MessageActionRow.js +103 -0
  265. package/src/structures/MessageAttachment.js +204 -0
  266. package/src/structures/MessageButton.js +165 -0
  267. package/src/structures/MessageCollector.js +146 -0
  268. package/src/structures/MessageComponentInteraction.js +120 -0
  269. package/src/structures/MessageContextMenuInteraction.js +20 -0
  270. package/src/structures/MessageEmbed.js +586 -0
  271. package/src/structures/MessageMentions.js +273 -0
  272. package/src/structures/MessagePayload.js +318 -0
  273. package/src/structures/MessagePoll.js +238 -0
  274. package/src/structures/MessageReaction.js +171 -0
  275. package/src/structures/MessageSelectMenu.js +140 -0
  276. package/src/structures/Modal.js +161 -0
  277. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  278. package/src/structures/ModalSubmitInteraction.js +119 -0
  279. package/src/structures/NewsChannel.js +32 -0
  280. package/src/structures/OAuth2Guild.js +28 -0
  281. package/src/structures/PermissionOverwrites.js +196 -0
  282. package/src/structures/Presence.js +1131 -0
  283. package/src/structures/ReactionCollector.js +229 -0
  284. package/src/structures/ReactionEmoji.js +31 -0
  285. package/src/structures/Role.js +531 -0
  286. package/src/structures/SelectMenuInteraction.js +21 -0
  287. package/src/structures/StageChannel.js +104 -0
  288. package/src/structures/StageInstance.js +208 -0
  289. package/src/structures/Sticker.js +310 -0
  290. package/src/structures/StickerPack.js +95 -0
  291. package/src/structures/StoreChannel.js +56 -0
  292. package/src/structures/Team.js +118 -0
  293. package/src/structures/TeamMember.js +71 -0
  294. package/src/structures/TextChannel.js +33 -0
  295. package/src/structures/TextInputComponent.js +131 -0
  296. package/src/structures/ThreadChannel.js +607 -0
  297. package/src/structures/ThreadMember.js +105 -0
  298. package/src/structures/Typing.js +74 -0
  299. package/src/structures/User.js +543 -0
  300. package/src/structures/UserContextMenuInteraction.js +29 -0
  301. package/src/structures/VoiceChannel.js +110 -0
  302. package/src/structures/VoiceRegion.js +53 -0
  303. package/src/structures/VoiceState.js +345 -0
  304. package/src/structures/WebEmbed.js +373 -0
  305. package/src/structures/Webhook.js +467 -0
  306. package/src/structures/WelcomeChannel.js +60 -0
  307. package/src/structures/WelcomeScreen.js +48 -0
  308. package/src/structures/Widget.js +87 -0
  309. package/src/structures/WidgetMember.js +99 -0
  310. package/src/structures/interfaces/Application.js +313 -0
  311. package/src/structures/interfaces/Collector.js +300 -0
  312. package/src/structures/interfaces/InteractionResponses.js +313 -0
  313. package/src/structures/interfaces/TextBasedChannel.js +719 -0
  314. package/src/util/ActivityFlags.js +44 -0
  315. package/src/util/ApplicationFlags.js +76 -0
  316. package/src/util/AttachmentFlags.js +38 -0
  317. package/src/util/BitField.js +170 -0
  318. package/src/util/ChannelFlags.js +45 -0
  319. package/src/util/Constants.js +1815 -0
  320. package/src/util/DataResolver.js +145 -0
  321. package/src/util/Formatters.js +228 -0
  322. package/src/util/GuildMemberFlags.js +43 -0
  323. package/src/util/Intents.js +74 -0
  324. package/src/util/InviteFlags.js +29 -0
  325. package/src/util/LimitedCollection.js +131 -0
  326. package/src/util/MessageFlags.js +54 -0
  327. package/src/util/Options.js +336 -0
  328. package/src/util/Permissions.js +202 -0
  329. package/src/util/PremiumUsageFlags.js +31 -0
  330. package/src/util/PurchasedFlags.js +33 -0
  331. package/src/util/RemoteAuth.js +382 -0
  332. package/src/util/RoleFlags.js +37 -0
  333. package/src/util/SnowflakeUtil.js +92 -0
  334. package/src/util/Speaking.js +33 -0
  335. package/src/util/Sweepers.js +466 -0
  336. package/src/util/SystemChannelFlags.js +55 -0
  337. package/src/util/ThreadMemberFlags.js +30 -0
  338. package/src/util/UserFlags.js +104 -0
  339. package/src/util/Util.js +889 -0
  340. package/typings/enums.d.ts +297 -0
  341. package/typings/index.d.ts +7670 -0
  342. package/typings/index.test-d.ts +0 -0
  343. package/typings/rawDataTypes.d.ts +342 -0
@@ -0,0 +1,467 @@
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 id of 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 {string} [threadName] Name of the thread to create (only available if webhook is in a forum channel)
120
+ * @property {MessageFlags} [flags] Which flags to set for the message. Only `SUPPRESS_EMBEDS` can be set.
121
+ */
122
+
123
+ /**
124
+ * Options that can be passed into editMessage.
125
+ * @typedef {Object} WebhookEditMessageOptions
126
+ * @property {MessageEmbed[]|APIEmbed[]} [embeds] See {@link WebhookMessageOptions#embeds}
127
+ * @property {string} [content] See {@link BaseMessageOptions#content}
128
+ * @property {FileOptions[]|BufferResolvable[]|MessageAttachment[]} [files] See {@link BaseMessageOptions#files}
129
+ * @property {MessageMentionOptions} [allowedMentions] See {@link BaseMessageOptions#allowedMentions}
130
+ * @property {MessageAttachment[]} [attachments] Attachments to send with the message
131
+ * @property {MessageActionRow[]|MessageActionRowOptions[]} [components]
132
+ * Action rows containing interactive components for the message (buttons, select menus)
133
+ * @property {Snowflake} [threadId] The id of the thread this message belongs to
134
+ * <info>For interaction webhooks, this property is ignored</info>
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 = options.resolveData();
192
+ } else {
193
+ messagePayload = 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) messagePayload = options;
328
+ else messagePayload = MessagePayload.create(this, options);
329
+
330
+ const { data, files } = await messagePayload.resolveData().resolveFiles();
331
+
332
+ const d = await this.client.api
333
+ .webhooks(this.id, this.token)
334
+ .messages(typeof message === 'string' ? message : message.id)
335
+ .patch({
336
+ data,
337
+ files,
338
+ query: {
339
+ thread_id: messagePayload.options.threadId,
340
+ },
341
+ auth: false,
342
+ webhook: true,
343
+ });
344
+
345
+ const messageManager = this.client.channels?.cache.get(d.channel_id)?.messages;
346
+ if (!messageManager) return d;
347
+
348
+ const existing = messageManager.cache.get(d.id);
349
+ if (!existing) return messageManager._add(d);
350
+
351
+ const clone = existing._clone();
352
+ clone._patch(d);
353
+ return clone;
354
+ }
355
+
356
+ /**
357
+ * Deletes the webhook.
358
+ * @param {string} [reason] Reason for deleting this webhook
359
+ * @returns {Promise<void>}
360
+ */
361
+ async delete(reason) {
362
+ await this.client.api.webhooks(this.id, this.token).delete({ reason, auth: !this.token, webhook: true });
363
+ }
364
+
365
+ /**
366
+ * Delete a message that was sent by this webhook.
367
+ * @param {MessageResolvable|'@original'} message The message to delete
368
+ * @param {Snowflake} [threadId] The id of the thread this message belongs to
369
+ * @returns {Promise<void>}
370
+ */
371
+ async deleteMessage(message, threadId) {
372
+ if (!this.token) throw new Error('WEBHOOK_TOKEN_UNAVAILABLE');
373
+
374
+ await this.client.api
375
+ .webhooks(this.id, this.token)
376
+ .messages(typeof message === 'string' ? message : message.id)
377
+ .delete({
378
+ query: {
379
+ thread_id: threadId,
380
+ },
381
+ auth: false,
382
+ webhook: true,
383
+ });
384
+ }
385
+
386
+ /**
387
+ * The channel the webhook belongs to
388
+ * @type {?(TextChannel|VoiceChannel|NewsChannel|ForumChannel)}
389
+ * @readonly
390
+ */
391
+ get channel() {
392
+ return this.client.channels.resolve(this.channelId);
393
+ }
394
+
395
+ /**
396
+ * The timestamp the webhook was created at
397
+ * @type {number}
398
+ * @readonly
399
+ */
400
+ get createdTimestamp() {
401
+ return SnowflakeUtil.timestampFrom(this.id);
402
+ }
403
+
404
+ /**
405
+ * The time the webhook was created at
406
+ * @type {Date}
407
+ * @readonly
408
+ */
409
+ get createdAt() {
410
+ return new Date(this.createdTimestamp);
411
+ }
412
+
413
+ /**
414
+ * The URL of this webhook
415
+ * @type {string}
416
+ * @readonly
417
+ */
418
+ get url() {
419
+ return this.client.options.http.api + this.client.api.webhooks(this.id, this.token);
420
+ }
421
+
422
+ /**
423
+ * A link to the webhook's avatar.
424
+ * @param {StaticImageURLOptions} [options={}] Options for the Image URL
425
+ * @returns {?string}
426
+ */
427
+ avatarURL({ format, size } = {}) {
428
+ if (!this.avatar) return null;
429
+ return this.client.rest.cdn.Avatar(this.id, this.avatar, format, size);
430
+ }
431
+
432
+ /**
433
+ * Whether or not this webhook is a channel follower webhook.
434
+ * @returns {boolean}
435
+ */
436
+ isChannelFollower() {
437
+ return this.type === 'Channel Follower';
438
+ }
439
+
440
+ /**
441
+ * Whether or not this webhook is an incoming webhook.
442
+ * @returns {boolean}
443
+ */
444
+ isIncoming() {
445
+ return this.type === 'Incoming';
446
+ }
447
+
448
+ static applyToClass(structure, ignore = []) {
449
+ for (const prop of [
450
+ 'send',
451
+ 'sendSlackMessage',
452
+ 'fetchMessage',
453
+ 'edit',
454
+ 'editMessage',
455
+ 'delete',
456
+ 'deleteMessage',
457
+ 'createdTimestamp',
458
+ 'createdAt',
459
+ 'url',
460
+ ]) {
461
+ if (ignore.includes(prop)) continue;
462
+ Object.defineProperty(structure.prototype, prop, Object.getOwnPropertyDescriptor(Webhook.prototype, prop));
463
+ }
464
+ }
465
+ }
466
+
467
+ 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;