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,568 @@
1
+ 'use strict';
2
+
3
+ const process = require('node:process');
4
+ const Base = require('./Base');
5
+ const VoiceState = require('./VoiceState');
6
+ const TextBasedChannel = require('./interfaces/TextBasedChannel');
7
+ const { Error } = require('../errors');
8
+ const GuildMemberRoleManager = require('../managers/GuildMemberRoleManager');
9
+ const GuildMemberFlags = require('../util/GuildMemberFlags');
10
+ const Permissions = require('../util/Permissions');
11
+
12
+ /**
13
+ * @type {WeakSet<GuildMember>}
14
+ * @private
15
+ * @internal
16
+ */
17
+ const deletedGuildMembers = new WeakSet();
18
+ let deprecationEmittedForDeleted = false;
19
+
20
+ /**
21
+ * Represents a member of a guild on Discord.
22
+ * @implements {TextBasedChannel}
23
+ * @extends {Base}
24
+ */
25
+ class GuildMember extends Base {
26
+ constructor(client, data, guild) {
27
+ super(client);
28
+
29
+ /**
30
+ * The guild that this member is part of
31
+ * @type {Guild}
32
+ */
33
+ this.guild = guild;
34
+
35
+ /**
36
+ * The timestamp the member joined the guild at
37
+ * @type {?number}
38
+ */
39
+ this.joinedTimestamp = null;
40
+
41
+ /**
42
+ * The last timestamp this member started boosting the guild
43
+ * @type {?number}
44
+ */
45
+ this.premiumSinceTimestamp = null;
46
+
47
+ /**
48
+ * The nickname of this member, if they have one
49
+ * @type {?string}
50
+ */
51
+ this.nickname = null;
52
+
53
+ /**
54
+ * Whether this member has yet to pass the guild's membership gate
55
+ * @type {boolean}
56
+ */
57
+ this.pending = false;
58
+
59
+ /**
60
+ * The timestamp this member's timeout will be removed
61
+ * @type {?number}
62
+ */
63
+ this.communicationDisabledUntilTimestamp = null;
64
+
65
+ /**
66
+ * The role ids of the member
67
+ * @type {Snowflake[]}
68
+ * @private
69
+ */
70
+ this._roles = [];
71
+ if (data) this._patch(data);
72
+ }
73
+
74
+ _patch(data) {
75
+ if ('user' in data) {
76
+ /**
77
+ * The user that this guild member instance represents
78
+ * @type {?User}
79
+ */
80
+ this.user = this.client.users._add(data.user, true);
81
+ }
82
+
83
+ if ('nick' in data) this.nickname = data.nick;
84
+ if ('avatar' in data) {
85
+ /**
86
+ * The guild member's avatar hash
87
+ * @type {?string}
88
+ */
89
+ this.avatar = data.avatar;
90
+ } else if (typeof this.avatar !== 'string') {
91
+ this.avatar = null;
92
+ }
93
+ if ('joined_at' in data) this.joinedTimestamp = new Date(data.joined_at).getTime();
94
+ if ('premium_since' in data) {
95
+ this.premiumSinceTimestamp = data.premium_since ? new Date(data.premium_since).getTime() : null;
96
+ }
97
+ if ('roles' in data) this._roles = data.roles;
98
+ this.pending = data.pending ?? false;
99
+
100
+ if ('communication_disabled_until' in data) {
101
+ this.communicationDisabledUntilTimestamp =
102
+ data.communication_disabled_until && Date.parse(data.communication_disabled_until);
103
+ }
104
+ if ('flags' in data) {
105
+ /**
106
+ * The flags of this member
107
+ * @type {Readonly<GuildMemberFlags>}
108
+ */
109
+ this.flags = new GuildMemberFlags(data.flags).freeze();
110
+ } else {
111
+ this.flags ??= new GuildMemberFlags().freeze();
112
+ }
113
+ }
114
+
115
+ _clone() {
116
+ const clone = super._clone();
117
+ clone._roles = this._roles.slice();
118
+ return clone;
119
+ }
120
+
121
+ /**
122
+ * Whether or not the structure has been deleted
123
+ * @type {boolean}
124
+ * @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091
125
+ */
126
+ get deleted() {
127
+ if (!deprecationEmittedForDeleted) {
128
+ deprecationEmittedForDeleted = true;
129
+ process.emitWarning(
130
+ 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
131
+ 'DeprecationWarning',
132
+ );
133
+ }
134
+
135
+ return deletedGuildMembers.has(this);
136
+ }
137
+
138
+ set deleted(value) {
139
+ if (!deprecationEmittedForDeleted) {
140
+ deprecationEmittedForDeleted = true;
141
+ process.emitWarning(
142
+ 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
143
+ 'DeprecationWarning',
144
+ );
145
+ }
146
+
147
+ if (value) deletedGuildMembers.add(this);
148
+ else deletedGuildMembers.delete(this);
149
+ }
150
+
151
+ /**
152
+ * Whether this GuildMember is a partial
153
+ * @type {boolean}
154
+ * @readonly
155
+ */
156
+ get partial() {
157
+ return this.joinedTimestamp === null;
158
+ }
159
+
160
+ /**
161
+ * A manager for the roles belonging to this member
162
+ * @type {GuildMemberRoleManager}
163
+ * @readonly
164
+ */
165
+ get roles() {
166
+ return new GuildMemberRoleManager(this);
167
+ }
168
+
169
+ /**
170
+ * The voice state of this member
171
+ * @type {VoiceState}
172
+ * @readonly
173
+ */
174
+ get voice() {
175
+ return this.guild.voiceStates.cache.get(this.id) ?? new VoiceState(this.guild, { user_id: this.id });
176
+ }
177
+
178
+ /**
179
+ * A link to the member's guild avatar.
180
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
181
+ * @returns {?string}
182
+ */
183
+ avatarURL({ format, size, dynamic } = {}) {
184
+ if (!this.avatar) return null;
185
+ return this.client.rest.cdn.GuildMemberAvatar(this.guild.id, this.id, this.avatar, format, size, dynamic);
186
+ }
187
+
188
+ /**
189
+ * A link to the member's guild avatar if they have one.
190
+ * Otherwise, a link to their {@link User#displayAvatarURL} will be returned.
191
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
192
+ * @returns {string}
193
+ */
194
+ displayAvatarURL(options) {
195
+ return this.avatarURL(options) ?? this.user.displayAvatarURL(options);
196
+ }
197
+
198
+ /**
199
+ * The time this member joined the guild
200
+ * @type {?Date}
201
+ * @readonly
202
+ */
203
+ get joinedAt() {
204
+ return this.joinedTimestamp ? new Date(this.joinedTimestamp) : null;
205
+ }
206
+
207
+ /**
208
+ * The time this member's timeout will be removed
209
+ * @type {?Date}
210
+ * @readonly
211
+ */
212
+ get communicationDisabledUntil() {
213
+ return this.communicationDisabledUntilTimestamp && new Date(this.communicationDisabledUntilTimestamp);
214
+ }
215
+
216
+ /**
217
+ * The last time this member started boosting the guild
218
+ * @type {?Date}
219
+ * @readonly
220
+ */
221
+ get premiumSince() {
222
+ return this.premiumSinceTimestamp ? new Date(this.premiumSinceTimestamp) : null;
223
+ }
224
+
225
+ /**
226
+ * The presence of this guild member
227
+ * @type {?Presence}
228
+ * @readonly
229
+ */
230
+ get presence() {
231
+ return this.guild.presences.resolve(this.id);
232
+ }
233
+
234
+ /**
235
+ * The displayed color of this member in base 10
236
+ * @type {number}
237
+ * @readonly
238
+ */
239
+ get displayColor() {
240
+ return this.roles.color?.color ?? 0;
241
+ }
242
+
243
+ /**
244
+ * The displayed color of this member in hexadecimal
245
+ * @type {string}
246
+ * @readonly
247
+ */
248
+ get displayHexColor() {
249
+ return this.roles.color?.hexColor ?? '#000000';
250
+ }
251
+
252
+ /**
253
+ * The member's id
254
+ * @type {Snowflake}
255
+ * @readonly
256
+ */
257
+ get id() {
258
+ return this.user.id;
259
+ }
260
+
261
+ /**
262
+ * The nickname of this member, or their user display name if they don't have one
263
+ * @type {?string}
264
+ * @readonly
265
+ */
266
+ get displayName() {
267
+ return this.nickname ?? this.user.displayName;
268
+ }
269
+
270
+ /**
271
+ * The overall set of permissions for this member, taking only roles and owner status into account
272
+ * @type {Readonly<Permissions>}
273
+ * @readonly
274
+ */
275
+ get permissions() {
276
+ if (this.user.id === this.guild.ownerId) return new Permissions(Permissions.ALL).freeze();
277
+ return new Permissions(this.roles.cache.map(role => role.permissions)).freeze();
278
+ }
279
+
280
+ /**
281
+ * Whether the client user is above this user in the hierarchy, according to role position and guild ownership.
282
+ * This is a prerequisite for many moderative actions.
283
+ * @type {boolean}
284
+ * @readonly
285
+ */
286
+ get manageable() {
287
+ if (this.user.id === this.guild.ownerId) return false;
288
+ if (this.user.id === this.client.user.id) return false;
289
+ if (this.client.user.id === this.guild.ownerId) return true;
290
+ if (!this.guild.members.me) throw new Error('GUILD_UNCACHED_ME');
291
+ return this.guild.members.me.roles.highest.comparePositionTo(this.roles.highest) > 0;
292
+ }
293
+
294
+ /**
295
+ * Whether this member is kickable by the client user
296
+ * @type {boolean}
297
+ * @readonly
298
+ */
299
+ get kickable() {
300
+ return this.manageable && this.guild.members.me.permissions.has(Permissions.FLAGS.KICK_MEMBERS);
301
+ }
302
+
303
+ /**
304
+ * Whether this member is bannable by the client user
305
+ * @type {boolean}
306
+ * @readonly
307
+ */
308
+ get bannable() {
309
+ return this.manageable && this.guild.members.me.permissions.has(Permissions.FLAGS.BAN_MEMBERS);
310
+ }
311
+
312
+ /**
313
+ * Whether this member is moderatable by the client user
314
+ * @type {boolean}
315
+ * @readonly
316
+ */
317
+ get moderatable() {
318
+ return (
319
+ !this.permissions.has(Permissions.FLAGS.ADMINISTRATOR) &&
320
+ this.manageable &&
321
+ (this.guild.members.me?.permissions.has(Permissions.FLAGS.MODERATE_MEMBERS) ?? false)
322
+ );
323
+ }
324
+
325
+ /**
326
+ * Whether this member is currently timed out
327
+ * @returns {boolean}
328
+ */
329
+ isCommunicationDisabled() {
330
+ return this.communicationDisabledUntilTimestamp > Date.now();
331
+ }
332
+
333
+ /**
334
+ * Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,
335
+ * taking into account roles and permission overwrites.
336
+ * @param {GuildChannelResolvable} channel The guild channel to use as context
337
+ * @returns {Readonly<Permissions>}
338
+ */
339
+ permissionsIn(channel) {
340
+ channel = this.guild.channels.resolve(channel);
341
+ if (!channel) throw new Error('GUILD_CHANNEL_RESOLVE');
342
+ return channel.permissionsFor(this);
343
+ }
344
+
345
+ /**
346
+ * Edits this member.
347
+ * @param {GuildMemberEditData} data The data to edit the member with
348
+ * @param {string} [reason] Reason for editing this user
349
+ * @returns {Promise<GuildMember>}
350
+ */
351
+ edit(data, reason) {
352
+ return this.guild.members.edit(this, data, reason);
353
+ }
354
+
355
+ /**
356
+ * Sets the nickname for this member.
357
+ * @param {?string} nick The nickname for the guild member, or `null` if you want to reset their nickname
358
+ * @param {string} [reason] Reason for setting the nickname
359
+ * @returns {Promise<GuildMember>}
360
+ * @example
361
+ * // Set a nickname for a guild member
362
+ * guildMember.setNickname('cool nickname', 'Needed a new nickname')
363
+ * .then(member => console.log(`Set nickname of ${member.user.username}`))
364
+ * .catch(console.error);
365
+ * @example
366
+ * // Remove a nickname for a guild member
367
+ * guildMember.setNickname(null, 'No nicknames allowed!')
368
+ * .then(member => console.log(`Removed nickname for ${member.user.username}`))
369
+ * .catch(console.error);
370
+ */
371
+ setNickname(nick, reason) {
372
+ return this.edit({ nick }, reason);
373
+ }
374
+
375
+ /**
376
+ * Sets the flags for this member.
377
+ * @param {GuildMemberFlagsResolvable} flags The flags to set
378
+ * @param {string} [reason] Reason for setting the flags
379
+ * @returns {Promise<GuildMember>}
380
+ */
381
+ setFlags(flags, reason) {
382
+ return this.edit({ flags, reason });
383
+ }
384
+
385
+ /**
386
+ * Creates a DM channel between the client and this member.
387
+ * @param {boolean} [force=false] Whether to skip the cache check and request the API
388
+ * @returns {Promise<DMChannel>}
389
+ */
390
+ createDM(force = false) {
391
+ return this.user.createDM(force);
392
+ }
393
+
394
+ /**
395
+ * Deletes any DMs with this member.
396
+ * @returns {Promise<DMChannel>}
397
+ */
398
+ deleteDM() {
399
+ return this.user.deleteDM();
400
+ }
401
+
402
+ /**
403
+ * Kicks this member from the guild.
404
+ * @param {string} [reason] Reason for kicking user
405
+ * @returns {Promise<GuildMember>}
406
+ */
407
+ kick(reason) {
408
+ return this.guild.members.kick(this, reason);
409
+ }
410
+
411
+ /**
412
+ * Bans this guild member.
413
+ * @param {BanOptions} [options] Options for the ban
414
+ * @returns {Promise<GuildMember>}
415
+ * @example
416
+ * // Ban a guild member, deleting a week's worth of messages
417
+ * guildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })
418
+ * .then(console.log)
419
+ * .catch(console.error);
420
+ */
421
+ ban(options) {
422
+ return this.guild.bans.create(this, options);
423
+ }
424
+
425
+ /**
426
+ * Times this guild member out.
427
+ * @param {DateResolvable|null} communicationDisabledUntil The date or timestamp
428
+ * for the member's communication to be disabled until. Provide `null` to remove the timeout.
429
+ * @param {string} [reason] The reason for this timeout.
430
+ * @returns {Promise<GuildMember>}
431
+ * @example
432
+ * // Time a guild member out for 5 minutes
433
+ * guildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')
434
+ * .then(console.log)
435
+ * .catch(console.error);
436
+ * @example
437
+ * // Remove the timeout of a guild member
438
+ * guildMember.disableCommunicationUntil(null)
439
+ * .then(member => console.log(`Removed timeout for ${member.displayName}`))
440
+ * .catch(console.error);
441
+ */
442
+ disableCommunicationUntil(communicationDisabledUntil, reason) {
443
+ return this.edit({ communicationDisabledUntil }, reason);
444
+ }
445
+
446
+ /**
447
+ * Times this guild member out.
448
+ * @param {number|null} timeout The time in milliseconds
449
+ * for the member's communication to be disabled until. Provide `null` to remove the timeout.
450
+ * @param {string} [reason] The reason for this timeout.
451
+ * @returns {Promise<GuildMember>}
452
+ * @example
453
+ * // Time a guild member out for 5 minutes
454
+ * guildMember.timeout(5 * 60 * 1000, 'They deserved it')
455
+ * .then(console.log)
456
+ * .catch(console.error);
457
+ */
458
+ timeout(timeout, reason) {
459
+ return this.disableCommunicationUntil(timeout && Date.now() + timeout, reason);
460
+ }
461
+
462
+ /**
463
+ * Fetches this GuildMember.
464
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
465
+ * @returns {Promise<GuildMember>}
466
+ */
467
+ fetch(force = true) {
468
+ return this.guild.members.fetch({ user: this.id, cache: true, force });
469
+ }
470
+
471
+ /**
472
+ * Whether this guild member equals another guild member. It compares all properties, so for most
473
+ * comparison it is advisable to just compare `member.id === member2.id` as it is significantly faster
474
+ * and is often what most users need.
475
+ * @param {GuildMember} member The member to compare with
476
+ * @returns {boolean}
477
+ */
478
+ equals(member) {
479
+ return (
480
+ member instanceof this.constructor &&
481
+ this.id === member.id &&
482
+ this.partial === member.partial &&
483
+ this.guild.id === member.guild.id &&
484
+ this.joinedTimestamp === member.joinedTimestamp &&
485
+ this.nickname === member.nickname &&
486
+ this.avatar === member.avatar &&
487
+ this.pending === member.pending &&
488
+ this.communicationDisabledUntilTimestamp === member.communicationDisabledUntilTimestamp &&
489
+ this.flags.equals(member.flags) &&
490
+ (this._roles === member._roles ||
491
+ (this._roles.length === member._roles.length && this._roles.every((role, i) => role === member._roles[i])))
492
+ );
493
+ }
494
+
495
+ /**
496
+ * When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.
497
+ * @returns {string}
498
+ * @example
499
+ * // Logs: Hello from <@123456789012345678>!
500
+ * console.log(`Hello from ${member}!`);
501
+ */
502
+ toString() {
503
+ return `<@${this.nickname ? '!' : ''}${this.user.id}>`;
504
+ }
505
+
506
+ toJSON() {
507
+ const json = super.toJSON({
508
+ guild: 'guildId',
509
+ user: 'userId',
510
+ displayName: true,
511
+ roles: true,
512
+ });
513
+ json.avatarURL = this.avatarURL();
514
+ json.displayAvatarURL = this.displayAvatarURL();
515
+ return json;
516
+ }
517
+
518
+ /**
519
+ * Sets the guild avatar of the logged in client.
520
+ * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
521
+ * @returns {Promise<GuildMember>}
522
+ */
523
+ setAvatar(avatar) {
524
+ return this.edit({ avatar });
525
+ }
526
+
527
+ /**
528
+ * Sets the guild banner of the logged in client.
529
+ * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner
530
+ * @returns {Promise<GuildMember>}
531
+ */
532
+ setBanner(banner) {
533
+ return this.edit({ banner });
534
+ }
535
+
536
+ /**
537
+ * Set Guild About me
538
+ * @param {string | null} bio Bio to set
539
+ * @returns {Promise<GuildMember>}
540
+ */
541
+ setAboutMe(bio = null) {
542
+ return this.edit({ bio });
543
+ }
544
+ }
545
+
546
+ /**
547
+ * Sends a message to this user.
548
+ * @method send
549
+ * @memberof GuildMember
550
+ * @instance
551
+ * @param {string|MessagePayload|MessageOptions} options The options to provide
552
+ * @returns {Promise<Message>}
553
+ * @example
554
+ * // Send a direct message
555
+ * guildMember.send('Hello!')
556
+ * .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))
557
+ * .catch(console.error);
558
+ */
559
+
560
+ TextBasedChannel.applyToClass(GuildMember);
561
+
562
+ exports.GuildMember = GuildMember;
563
+ exports.deletedGuildMembers = deletedGuildMembers;
564
+
565
+ /**
566
+ * @external APIGuildMember
567
+ * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object}
568
+ */