djs-selfbot-v13 3.2.2 → 3.7.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 (363) hide show
  1. package/README.md +37 -36
  2. package/package.json +89 -85
  3. package/src/WebSocket.js +39 -39
  4. package/src/client/BaseClient.js +86 -86
  5. package/src/client/Client.js +934 -836
  6. package/src/client/WebhookClient.js +61 -61
  7. package/src/client/actions/Action.js +116 -120
  8. package/src/client/actions/ActionsManager.js +80 -78
  9. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -34
  10. package/src/client/actions/AutoModerationActionExecution.js +27 -27
  11. package/src/client/actions/AutoModerationRuleCreate.js +28 -28
  12. package/src/client/actions/AutoModerationRuleDelete.js +32 -32
  13. package/src/client/actions/AutoModerationRuleUpdate.js +30 -30
  14. package/src/client/actions/ChannelCreate.js +23 -23
  15. package/src/client/actions/ChannelDelete.js +39 -39
  16. package/src/client/actions/ChannelUpdate.js +43 -43
  17. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -29
  18. package/src/client/actions/GuildBanAdd.js +20 -20
  19. package/src/client/actions/GuildBanRemove.js +25 -25
  20. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -21
  21. package/src/client/actions/GuildDelete.js +65 -65
  22. package/src/client/actions/GuildEmojiCreate.js +20 -20
  23. package/src/client/actions/GuildEmojiDelete.js +21 -21
  24. package/src/client/actions/GuildEmojiUpdate.js +20 -20
  25. package/src/client/actions/GuildEmojisUpdate.js +34 -34
  26. package/src/client/actions/GuildIntegrationsUpdate.js +19 -19
  27. package/src/client/actions/GuildMemberRemove.js +33 -32
  28. package/src/client/actions/GuildMemberUpdate.js +44 -43
  29. package/src/client/actions/GuildRoleCreate.js +25 -25
  30. package/src/client/actions/GuildRoleDelete.js +31 -31
  31. package/src/client/actions/GuildRoleUpdate.js +39 -39
  32. package/src/client/actions/GuildRolesPositionUpdate.js +21 -21
  33. package/src/client/actions/GuildScheduledEventCreate.js +27 -27
  34. package/src/client/actions/GuildScheduledEventDelete.js +31 -31
  35. package/src/client/actions/GuildScheduledEventUpdate.js +30 -30
  36. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -32
  37. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -32
  38. package/src/client/actions/GuildStickerCreate.js +20 -20
  39. package/src/client/actions/GuildStickerDelete.js +21 -21
  40. package/src/client/actions/GuildStickerUpdate.js +20 -20
  41. package/src/client/actions/GuildStickersUpdate.js +34 -34
  42. package/src/client/actions/GuildUpdate.js +33 -33
  43. package/src/client/actions/InviteCreate.js +28 -28
  44. package/src/client/actions/InviteDelete.js +30 -30
  45. package/src/client/actions/MessageCreate.js +50 -46
  46. package/src/client/actions/MessageDelete.js +32 -32
  47. package/src/client/actions/MessageDeleteBulk.js +46 -46
  48. package/src/client/actions/MessagePollVoteAdd.js +33 -0
  49. package/src/client/actions/MessagePollVoteRemove.js +33 -0
  50. package/src/client/actions/MessageReactionAdd.js +68 -56
  51. package/src/client/actions/MessageReactionRemove.js +50 -45
  52. package/src/client/actions/MessageReactionRemoveAll.js +33 -33
  53. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -28
  54. package/src/client/actions/MessageUpdate.js +26 -26
  55. package/src/client/actions/PresenceUpdate.js +50 -46
  56. package/src/client/actions/StageInstanceCreate.js +28 -28
  57. package/src/client/actions/StageInstanceDelete.js +33 -33
  58. package/src/client/actions/StageInstanceUpdate.js +30 -30
  59. package/src/client/actions/ThreadCreate.js +24 -24
  60. package/src/client/actions/ThreadDelete.js +32 -32
  61. package/src/client/actions/ThreadListSync.js +59 -59
  62. package/src/client/actions/ThreadMemberUpdate.js +30 -30
  63. package/src/client/actions/ThreadMembersUpdate.js +34 -34
  64. package/src/client/actions/TypingStart.js +29 -29
  65. package/src/client/actions/UserUpdate.js +35 -35
  66. package/src/client/actions/VoiceStateUpdate.js +50 -57
  67. package/src/client/actions/WebhooksUpdate.js +20 -20
  68. package/src/client/voice/ClientVoiceManager.js +151 -51
  69. package/src/client/voice/VoiceConnection.js +1249 -0
  70. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  71. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  72. package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
  73. package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
  74. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  75. package/src/client/voice/networking/VoiceUDPClient.js +173 -0
  76. package/src/client/voice/networking/VoiceWebSocket.js +286 -0
  77. package/src/client/voice/player/MediaPlayer.js +321 -0
  78. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  79. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  80. package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
  81. package/src/client/voice/receiver/PacketHandler.js +260 -0
  82. package/src/client/voice/receiver/Receiver.js +96 -0
  83. package/src/client/voice/receiver/Recorder.js +173 -0
  84. package/src/client/voice/util/Function.js +116 -0
  85. package/src/client/voice/util/PlayInterface.js +122 -0
  86. package/src/client/voice/util/Secretbox.js +64 -0
  87. package/src/client/voice/util/Silence.js +16 -0
  88. package/src/client/voice/util/Socket.js +62 -0
  89. package/src/client/voice/util/VolumeInterface.js +104 -0
  90. package/src/client/websocket/WebSocketManager.js +392 -392
  91. package/src/client/websocket/WebSocketShard.js +907 -906
  92. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -18
  93. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -20
  94. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -5
  95. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -20
  96. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -5
  97. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -5
  98. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -5
  99. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -5
  100. package/src/client/websocket/handlers/CALL_CREATE.js +14 -14
  101. package/src/client/websocket/handlers/CALL_DELETE.js +11 -11
  102. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -11
  103. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -5
  104. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -5
  105. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -22
  106. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -19
  107. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -16
  108. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -16
  109. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -5
  110. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -5
  111. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -5
  112. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -52
  113. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -5
  114. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -5
  115. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -5
  116. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -39
  117. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -19
  118. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -5
  119. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -5
  120. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -5
  121. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -5
  122. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -5
  123. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -5
  124. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -5
  125. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -5
  126. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -5
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -5
  128. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -5
  129. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -5
  130. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -12
  131. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -5
  132. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -5
  133. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -5
  134. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -5
  135. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -5
  136. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -22
  137. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -12
  138. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -5
  139. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -5
  140. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -5
  141. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -5
  142. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -16
  143. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -5
  144. package/src/client/websocket/handlers/READY.js +121 -120
  145. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -19
  146. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -17
  147. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -41
  148. package/src/client/websocket/handlers/RESUMED.js +14 -14
  149. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -5
  150. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -5
  151. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -5
  152. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -5
  153. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -5
  154. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -5
  155. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -5
  156. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -5
  157. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -16
  158. package/src/client/websocket/handlers/TYPING_START.js +5 -5
  159. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -6
  160. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -5
  161. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -78
  162. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -5
  163. package/src/client/websocket/handlers/USER_UPDATE.js +5 -5
  164. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  165. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -12
  166. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -6
  167. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -5
  168. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -5
  169. package/src/client/websocket/handlers/index.js +84 -83
  170. package/src/errors/DJSError.js +61 -61
  171. package/src/errors/Messages.js +217 -183
  172. package/src/errors/index.js +4 -4
  173. package/src/index.js +172 -159
  174. package/src/managers/ApplicationCommandManager.js +264 -264
  175. package/src/managers/ApplicationCommandPermissionsManager.js +417 -417
  176. package/src/managers/AutoModerationRuleManager.js +296 -296
  177. package/src/managers/BaseGuildEmojiManager.js +80 -80
  178. package/src/managers/BaseManager.js +19 -19
  179. package/src/managers/BillingManager.js +66 -66
  180. package/src/managers/CachedManager.js +71 -71
  181. package/src/managers/ChannelManager.js +148 -138
  182. package/src/managers/ClientUserSettingManager.js +372 -372
  183. package/src/managers/DataManager.js +61 -61
  184. package/src/managers/GuildBanManager.js +250 -250
  185. package/src/managers/GuildChannelManager.js +488 -488
  186. package/src/managers/GuildEmojiManager.js +171 -171
  187. package/src/managers/GuildEmojiRoleManager.js +118 -118
  188. package/src/managers/GuildForumThreadManager.js +108 -108
  189. package/src/managers/GuildInviteManager.js +213 -213
  190. package/src/managers/GuildManager.js +338 -304
  191. package/src/managers/GuildMemberManager.js +599 -597
  192. package/src/managers/GuildMemberRoleManager.js +195 -191
  193. package/src/managers/GuildScheduledEventManager.js +314 -296
  194. package/src/managers/GuildSettingManager.js +155 -155
  195. package/src/managers/GuildStickerManager.js +179 -179
  196. package/src/managers/GuildTextThreadManager.js +98 -98
  197. package/src/managers/InteractionManager.js +39 -39
  198. package/src/managers/MessageManager.js +423 -391
  199. package/src/managers/PermissionOverwriteManager.js +164 -166
  200. package/src/managers/PresenceManager.js +71 -58
  201. package/src/managers/ReactionManager.js +67 -67
  202. package/src/managers/ReactionUserManager.js +73 -71
  203. package/src/managers/RelationshipManager.js +278 -265
  204. package/src/managers/RoleManager.js +448 -352
  205. package/src/managers/SessionManager.js +66 -0
  206. package/src/managers/StageInstanceManager.js +162 -162
  207. package/src/managers/ThreadManager.js +175 -174
  208. package/src/managers/ThreadMemberManager.js +186 -186
  209. package/src/managers/UserManager.js +136 -146
  210. package/src/managers/UserNoteManager.js +53 -53
  211. package/src/managers/VoiceStateManager.js +59 -37
  212. package/src/rest/APIRequest.js +154 -160
  213. package/src/rest/APIRouter.js +53 -53
  214. package/src/rest/DiscordAPIError.js +119 -104
  215. package/src/rest/HTTPError.js +62 -62
  216. package/src/rest/RESTManager.js +67 -62
  217. package/src/rest/RateLimitError.js +55 -55
  218. package/src/rest/RequestHandler.js +466 -444
  219. package/src/sharding/Shard.js +444 -443
  220. package/src/sharding/ShardClientUtil.js +279 -275
  221. package/src/sharding/ShardingManager.js +319 -318
  222. package/src/structures/AnonymousGuild.js +98 -98
  223. package/src/structures/ApplicationCommand.js +593 -593
  224. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -48
  225. package/src/structures/AutoModerationActionExecution.js +89 -89
  226. package/src/structures/AutoModerationRule.js +294 -294
  227. package/src/structures/AutocompleteInteraction.js +107 -107
  228. package/src/structures/Base.js +43 -43
  229. package/src/structures/BaseCommandInteraction.js +211 -211
  230. package/src/structures/BaseGuild.js +116 -116
  231. package/src/structures/BaseGuildEmoji.js +56 -56
  232. package/src/structures/BaseGuildTextChannel.js +191 -191
  233. package/src/structures/BaseGuildVoiceChannel.js +241 -241
  234. package/src/structures/BaseMessageComponent.js +181 -114
  235. package/src/structures/ButtonInteraction.js +11 -11
  236. package/src/structures/CallState.js +63 -63
  237. package/src/structures/CategoryChannel.js +85 -85
  238. package/src/structures/Channel.js +284 -270
  239. package/src/structures/ClientPresence.js +77 -85
  240. package/src/structures/ClientUser.js +479 -448
  241. package/src/structures/CommandInteraction.js +41 -41
  242. package/src/structures/CommandInteractionOptionResolver.js +276 -276
  243. package/src/structures/ContainerComponent.js +68 -0
  244. package/src/structures/ContextMenuInteraction.js +65 -65
  245. package/src/structures/DMChannel.js +219 -217
  246. package/src/structures/DirectoryChannel.js +20 -20
  247. package/src/structures/Emoji.js +148 -148
  248. package/src/structures/FileComponent.js +49 -0
  249. package/src/structures/ForumChannel.js +31 -261
  250. package/src/structures/GroupDMChannel.js +394 -387
  251. package/src/structures/Guild.js +1643 -1608
  252. package/src/structures/GuildAuditLogs.js +746 -729
  253. package/src/structures/GuildBan.js +59 -59
  254. package/src/structures/GuildBoost.js +108 -108
  255. package/src/structures/GuildChannel.js +470 -468
  256. package/src/structures/GuildEmoji.js +161 -161
  257. package/src/structures/GuildMember.js +636 -568
  258. package/src/structures/GuildPreview.js +191 -191
  259. package/src/structures/GuildPreviewEmoji.js +27 -27
  260. package/src/structures/GuildScheduledEvent.js +536 -441
  261. package/src/structures/GuildTemplate.js +236 -236
  262. package/src/structures/Integration.js +188 -188
  263. package/src/structures/IntegrationApplication.js +96 -96
  264. package/src/structures/Interaction.js +290 -290
  265. package/src/structures/InteractionCollector.js +248 -248
  266. package/src/structures/InteractionWebhook.js +43 -43
  267. package/src/structures/Invite.js +358 -358
  268. package/src/structures/InviteGuild.js +23 -23
  269. package/src/structures/InviteStageInstance.js +86 -86
  270. package/src/structures/MediaChannel.js +11 -0
  271. package/src/structures/MediaGalleryComponent.js +41 -0
  272. package/src/structures/MediaGalleryItem.js +47 -0
  273. package/src/structures/Message.js +1252 -1227
  274. package/src/structures/MessageActionRow.js +105 -103
  275. package/src/structures/MessageAttachment.js +216 -204
  276. package/src/structures/MessageButton.js +166 -165
  277. package/src/structures/MessageCollector.js +146 -146
  278. package/src/structures/MessageComponentInteraction.js +120 -120
  279. package/src/structures/MessageContextMenuInteraction.js +20 -20
  280. package/src/structures/MessageEmbed.js +596 -586
  281. package/src/structures/MessageMentions.js +273 -273
  282. package/src/structures/MessagePayload.js +354 -318
  283. package/src/structures/MessageReaction.js +181 -171
  284. package/src/structures/MessageSelectMenu.js +141 -140
  285. package/src/structures/Modal.js +161 -161
  286. package/src/structures/ModalSubmitFieldsResolver.js +53 -53
  287. package/src/structures/ModalSubmitInteraction.js +119 -119
  288. package/src/structures/NewsChannel.js +32 -32
  289. package/src/structures/OAuth2Guild.js +28 -28
  290. package/src/structures/PermissionOverwrites.js +198 -196
  291. package/src/structures/Poll.js +108 -0
  292. package/src/structures/PollAnswer.js +88 -0
  293. package/src/structures/Presence.js +1105 -1101
  294. package/src/structures/ReactionCollector.js +229 -229
  295. package/src/structures/ReactionEmoji.js +31 -31
  296. package/src/structures/Role.js +590 -531
  297. package/src/structures/SectionComponent.js +48 -0
  298. package/src/structures/SelectMenuInteraction.js +21 -21
  299. package/src/structures/SeparatorComponent.js +48 -0
  300. package/src/structures/Session.js +81 -0
  301. package/src/structures/StageChannel.js +104 -104
  302. package/src/structures/StageInstance.js +208 -208
  303. package/src/structures/Sticker.js +310 -310
  304. package/src/structures/StickerPack.js +95 -95
  305. package/src/structures/StoreChannel.js +56 -56
  306. package/src/structures/Team.js +118 -118
  307. package/src/structures/TeamMember.js +80 -71
  308. package/src/structures/TextChannel.js +33 -33
  309. package/src/structures/TextDisplayComponent.js +40 -0
  310. package/src/structures/TextInputComponent.js +132 -131
  311. package/src/structures/ThreadChannel.js +605 -607
  312. package/src/structures/ThreadMember.js +105 -105
  313. package/src/structures/ThreadOnlyChannel.js +249 -0
  314. package/src/structures/ThumbnailComponent.js +57 -0
  315. package/src/structures/Typing.js +74 -74
  316. package/src/structures/UnfurledMediaItem.js +29 -0
  317. package/src/structures/User.js +640 -543
  318. package/src/structures/UserContextMenuInteraction.js +29 -29
  319. package/src/structures/VoiceChannel.js +110 -110
  320. package/src/structures/VoiceChannelEffect.js +69 -0
  321. package/src/structures/VoiceRegion.js +53 -53
  322. package/src/structures/VoiceState.js +354 -341
  323. package/src/structures/WebEmbed.js +373 -373
  324. package/src/structures/Webhook.js +478 -467
  325. package/src/structures/WelcomeChannel.js +60 -60
  326. package/src/structures/WelcomeScreen.js +48 -48
  327. package/src/structures/Widget.js +87 -87
  328. package/src/structures/WidgetMember.js +99 -99
  329. package/src/structures/interfaces/Application.js +825 -313
  330. package/src/structures/interfaces/Collector.js +300 -300
  331. package/src/structures/interfaces/InteractionResponses.js +313 -313
  332. package/src/structures/interfaces/TextBasedChannel.js +759 -719
  333. package/src/util/APITypes.js +59 -0
  334. package/src/util/ActivityFlags.js +44 -44
  335. package/src/util/ApplicationFlags.js +76 -76
  336. package/src/util/AttachmentFlags.js +38 -38
  337. package/src/util/BitField.js +170 -170
  338. package/src/util/ChannelFlags.js +45 -45
  339. package/src/util/Constants.js +1914 -1773
  340. package/src/util/DataResolver.js +146 -145
  341. package/src/util/Formatters.js +228 -228
  342. package/src/util/GuildMemberFlags.js +43 -43
  343. package/src/util/Intents.js +74 -74
  344. package/src/util/InviteFlags.js +34 -29
  345. package/src/util/LimitedCollection.js +131 -131
  346. package/src/util/MessageFlags.js +63 -54
  347. package/src/util/Options.js +358 -336
  348. package/src/util/Permissions.js +202 -202
  349. package/src/util/PremiumUsageFlags.js +31 -31
  350. package/src/util/PurchasedFlags.js +33 -33
  351. package/src/util/RemoteAuth.js +382 -379
  352. package/src/util/RoleFlags.js +37 -37
  353. package/src/util/SnowflakeUtil.js +92 -92
  354. package/src/util/Speaking.js +33 -0
  355. package/src/util/Sweepers.js +466 -466
  356. package/src/util/SystemChannelFlags.js +55 -55
  357. package/src/util/ThreadMemberFlags.js +30 -30
  358. package/src/util/UserFlags.js +104 -104
  359. package/src/util/Util.js +1048 -889
  360. package/typings/enums.d.ts +439 -297
  361. package/typings/index.d.ts +8247 -7432
  362. package/typings/rawDataTypes.d.ts +403 -342
  363. package/src/structures/MessagePoll.js +0 -238
@@ -1,531 +1,590 @@
1
- 'use strict';
2
-
3
- const process = require('node:process');
4
- const Base = require('./Base');
5
- const { Error } = require('../errors');
6
- const Permissions = require('../util/Permissions');
7
- const RoleFlags = require('../util/RoleFlags');
8
- const SnowflakeUtil = require('../util/SnowflakeUtil');
9
-
10
- let deprecationEmittedForComparePositions = false;
11
-
12
- /**
13
- * @type {WeakSet<Role>}
14
- * @private
15
- * @internal
16
- */
17
- const deletedRoles = new WeakSet();
18
- let deprecationEmittedForDeleted = false;
19
-
20
- /**
21
- * Represents a role on Discord.
22
- * @extends {Base}
23
- */
24
- class Role extends Base {
25
- constructor(client, data, guild) {
26
- super(client);
27
-
28
- /**
29
- * The guild that the role belongs to
30
- * @type {Guild}
31
- */
32
- this.guild = guild;
33
-
34
- /**
35
- * The icon hash of the role
36
- * @type {?string}
37
- */
38
- this.icon = null;
39
-
40
- /**
41
- * The unicode emoji for the role
42
- * @type {?string}
43
- */
44
- this.unicodeEmoji = null;
45
-
46
- if (data) this._patch(data);
47
- }
48
-
49
- _patch(data) {
50
- /**
51
- * The role's id (unique to the guild it is part of)
52
- * @type {Snowflake}
53
- */
54
- this.id = data.id;
55
- if ('name' in data) {
56
- /**
57
- * The name of the role
58
- * @type {string}
59
- */
60
- this.name = data.name;
61
- }
62
-
63
- if ('color' in data) {
64
- /**
65
- * The base 10 color of the role
66
- * @type {number}
67
- */
68
- this.color = data.color;
69
- }
70
-
71
- if ('hoist' in data) {
72
- /**
73
- * If true, users that are part of this role will appear in a separate category in the users list
74
- * @type {boolean}
75
- */
76
- this.hoist = data.hoist;
77
- }
78
-
79
- if ('position' in data) {
80
- /**
81
- * The raw position of the role from the API
82
- * @type {number}
83
- */
84
- this.rawPosition = data.position;
85
- }
86
-
87
- if ('permissions' in data) {
88
- /**
89
- * The permissions of the role
90
- * @type {Readonly<Permissions>}
91
- */
92
- this.permissions = new Permissions(BigInt(data.permissions)).freeze();
93
- }
94
-
95
- if ('managed' in data) {
96
- /**
97
- * Whether or not the role is managed by an external service
98
- * @type {boolean}
99
- */
100
- this.managed = data.managed;
101
- }
102
-
103
- if ('mentionable' in data) {
104
- /**
105
- * Whether or not the role can be mentioned by anyone
106
- * @type {boolean}
107
- */
108
- this.mentionable = data.mentionable;
109
- }
110
-
111
- if ('icon' in data) this.icon = data.icon;
112
-
113
- if ('unicode_emoji' in data) this.unicodeEmoji = data.unicode_emoji;
114
-
115
- /**
116
- * The tags this role has
117
- * @type {?Object}
118
- * @property {Snowflake} [botId] The id of the bot this role belongs to
119
- * @property {Snowflake|string} [integrationId] The id of the integration this role belongs to
120
- * @property {true} [premiumSubscriberRole] Whether this is the guild's premium subscription role
121
- * @property {Snowflake} [subscriptionListingId] The id of this role's subscription SKU and listing
122
- * @property {true} [availableForPurchase] Whether this role is available for purchase
123
- * @property {true} [guildConnections] Whether this role is a guild's linked role
124
- */
125
- this.tags = data.tags ? {} : null;
126
- if (data.tags) {
127
- if ('bot_id' in data.tags) {
128
- this.tags.botId = data.tags.bot_id;
129
- }
130
- if ('integration_id' in data.tags) {
131
- this.tags.integrationId = data.tags.integration_id;
132
- }
133
- if ('premium_subscriber' in data.tags) {
134
- this.tags.premiumSubscriberRole = true;
135
- }
136
- if ('subscription_listing_id' in data.tags) {
137
- this.tags.subscriptionListingId = data.tags.subscription_listing_id;
138
- }
139
- if ('available_for_purchase' in data.tags) {
140
- this.tags.availableForPurchase = true;
141
- }
142
- if ('guild_connections' in data.tags) {
143
- this.tags.guildConnections = true;
144
- }
145
- }
146
-
147
- if ('flags' in data) {
148
- /**
149
- * The flags of this role
150
- * @type {Readonly<RoleFlags>}
151
- */
152
- this.flags = new RoleFlags(data.flags).freeze();
153
- } else {
154
- this.flags ??= new RoleFlags().freeze();
155
- }
156
- }
157
-
158
- /**
159
- * The timestamp the role was created at
160
- * @type {number}
161
- * @readonly
162
- */
163
- get createdTimestamp() {
164
- return SnowflakeUtil.timestampFrom(this.id);
165
- }
166
-
167
- /**
168
- * The time the role was created at
169
- * @type {Date}
170
- * @readonly
171
- */
172
- get createdAt() {
173
- return new Date(this.createdTimestamp);
174
- }
175
-
176
- /**
177
- * Whether or not the role has been deleted
178
- * @type {boolean}
179
- * @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091
180
- */
181
- get deleted() {
182
- if (!deprecationEmittedForDeleted) {
183
- deprecationEmittedForDeleted = true;
184
- process.emitWarning(
185
- 'Role#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
186
- 'DeprecationWarning',
187
- );
188
- }
189
-
190
- return deletedRoles.has(this);
191
- }
192
-
193
- set deleted(value) {
194
- if (!deprecationEmittedForDeleted) {
195
- deprecationEmittedForDeleted = true;
196
- process.emitWarning(
197
- 'Role#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
198
- 'DeprecationWarning',
199
- );
200
- }
201
-
202
- if (value) deletedRoles.add(this);
203
- else deletedRoles.delete(this);
204
- }
205
-
206
- /**
207
- * The hexadecimal version of the role color, with a leading hashtag
208
- * @type {string}
209
- * @readonly
210
- */
211
- get hexColor() {
212
- return `#${this.color.toString(16).padStart(6, '0')}`;
213
- }
214
-
215
- /**
216
- * The cached guild members that have this role
217
- * @type {Collection<Snowflake, GuildMember>}
218
- * @readonly
219
- */
220
- get members() {
221
- return this.guild.members.cache.filter(m => m.roles.cache.has(this.id));
222
- }
223
-
224
- /**
225
- * Whether the role is editable by the client user
226
- * @type {boolean}
227
- * @readonly
228
- */
229
- get editable() {
230
- if (this.managed) return false;
231
- const clientMember = this.guild.members.resolve(this.client.user);
232
- if (!clientMember.permissions.has(Permissions.FLAGS.MANAGE_ROLES)) return false;
233
- return clientMember.roles.highest.comparePositionTo(this) > 0;
234
- }
235
-
236
- /**
237
- * The position of the role in the role manager
238
- * @type {number}
239
- * @readonly
240
- */
241
- get position() {
242
- let count = 0;
243
- for (const role of this.guild.roles.cache.values()) {
244
- if (this.rawPosition > role.rawPosition) count++;
245
- else if (this.rawPosition === role.rawPosition && BigInt(this.id) < BigInt(role.id)) count++;
246
- }
247
-
248
- return count;
249
- }
250
-
251
- /**
252
- * Compares this role's position to another role's.
253
- * @param {RoleResolvable} role Role to compare to this one
254
- * @returns {number} Negative number if this role's position is lower (other role's is higher),
255
- * positive number if this one is higher (other's is lower), 0 if equal
256
- * @example
257
- * // Compare the position of a role to another
258
- * const roleCompare = role.comparePositionTo(otherRole);
259
- * if (roleCompare >= 1) console.log(`${role.name} is higher than ${otherRole.name}`);
260
- */
261
- comparePositionTo(role) {
262
- return this.guild.roles.comparePositions(this, role);
263
- }
264
-
265
- /**
266
- * The data for a role.
267
- * @typedef {Object} RoleData
268
- * @property {string} [name] The name of the role
269
- * @property {ColorResolvable} [color] The color of the role, either a hex string or a base 10 number
270
- * @property {boolean} [hoist] Whether or not the role should be hoisted
271
- * @property {number} [position] The position of the role
272
- * @property {PermissionResolvable} [permissions] The permissions of the role
273
- * @property {boolean} [mentionable] Whether or not the role should be mentionable
274
- * @property {?(BufferResolvable|Base64Resolvable|EmojiResolvable)} [icon] The icon for the role
275
- * <warn>The `EmojiResolvable` should belong to the same guild as the role.
276
- * If not, pass the emoji's URL directly</warn>
277
- * @property {?string} [unicodeEmoji] The unicode emoji for the role
278
- */
279
-
280
- /**
281
- * Edits the role.
282
- * @param {RoleData} data The new data for the role
283
- * @param {string} [reason] Reason for editing this role
284
- * @returns {Promise<Role>}
285
- * @example
286
- * // Edit a role
287
- * role.edit({ name: 'new role' })
288
- * .then(updated => console.log(`Edited role name to ${updated.name}`))
289
- * .catch(console.error);
290
- */
291
- edit(data, reason) {
292
- return this.guild.roles.edit(this, data, reason);
293
- }
294
-
295
- /**
296
- * Returns `channel.permissionsFor(role)`. Returns permissions for a role in a guild channel,
297
- * taking into account permission overwrites.
298
- * @param {GuildChannel|Snowflake} channel The guild channel to use as context
299
- * @param {boolean} [checkAdmin=true] Whether having `ADMINISTRATOR` will return all permissions
300
- * @returns {Readonly<Permissions>}
301
- */
302
- permissionsIn(channel, checkAdmin = true) {
303
- channel = this.guild.channels.resolve(channel);
304
- if (!channel) throw new Error('GUILD_CHANNEL_RESOLVE');
305
- return channel.rolePermissions(this, checkAdmin);
306
- }
307
-
308
- /**
309
- * Sets a new name for the role.
310
- * @param {string} name The new name of the role
311
- * @param {string} [reason] Reason for changing the role's name
312
- * @returns {Promise<Role>}
313
- * @example
314
- * // Set the name of the role
315
- * role.setName('new role')
316
- * .then(updated => console.log(`Updated role name to ${updated.name}`))
317
- * .catch(console.error);
318
- */
319
- setName(name, reason) {
320
- return this.edit({ name }, reason);
321
- }
322
-
323
- /**
324
- * Sets a new color for the role.
325
- * @param {ColorResolvable} color The color of the role
326
- * @param {string} [reason] Reason for changing the role's color
327
- * @returns {Promise<Role>}
328
- * @example
329
- * // Set the color of a role
330
- * role.setColor('#FF0000')
331
- * .then(updated => console.log(`Set color of role to ${updated.color}`))
332
- * .catch(console.error);
333
- */
334
- setColor(color, reason) {
335
- return this.edit({ color }, reason);
336
- }
337
-
338
- /**
339
- * Sets whether or not the role should be hoisted.
340
- * @param {boolean} [hoist=true] Whether or not to hoist the role
341
- * @param {string} [reason] Reason for setting whether or not the role should be hoisted
342
- * @returns {Promise<Role>}
343
- * @example
344
- * // Set the hoist of the role
345
- * role.setHoist(true)
346
- * .then(updated => console.log(`Role hoisted: ${updated.hoist}`))
347
- * .catch(console.error);
348
- */
349
- setHoist(hoist = true, reason) {
350
- return this.edit({ hoist }, reason);
351
- }
352
-
353
- /**
354
- * Sets the permissions of the role.
355
- * @param {PermissionResolvable} permissions The permissions of the role
356
- * @param {string} [reason] Reason for changing the role's permissions
357
- * @returns {Promise<Role>}
358
- * @example
359
- * // Set the permissions of the role
360
- * role.setPermissions([Permissions.FLAGS.KICK_MEMBERS, Permissions.FLAGS.BAN_MEMBERS])
361
- * .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))
362
- * .catch(console.error);
363
- * @example
364
- * // Remove all permissions from a role
365
- * role.setPermissions(0n)
366
- * .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))
367
- * .catch(console.error);
368
- */
369
- setPermissions(permissions, reason) {
370
- return this.edit({ permissions }, reason);
371
- }
372
-
373
- /**
374
- * Sets whether this role is mentionable.
375
- * @param {boolean} [mentionable=true] Whether this role should be mentionable
376
- * @param {string} [reason] Reason for setting whether or not this role should be mentionable
377
- * @returns {Promise<Role>}
378
- * @example
379
- * // Make the role mentionable
380
- * role.setMentionable(true)
381
- * .then(updated => console.log(`Role updated ${updated.name}`))
382
- * .catch(console.error);
383
- */
384
- setMentionable(mentionable = true, reason) {
385
- return this.edit({ mentionable }, reason);
386
- }
387
-
388
- /**
389
- * Sets a new icon for the role.
390
- * @param {?(BufferResolvable|Base64Resolvable|EmojiResolvable)} icon The icon for the role
391
- * <warn>The `EmojiResolvable` should belong to the same guild as the role.
392
- * If not, pass the emoji's URL directly</warn>
393
- * @param {string} [reason] Reason for changing the role's icon
394
- * @returns {Promise<Role>}
395
- */
396
- setIcon(icon, reason) {
397
- return this.edit({ icon }, reason);
398
- }
399
-
400
- /**
401
- * Sets a new unicode emoji for the role.
402
- * @param {?string} unicodeEmoji The new unicode emoji for the role
403
- * @param {string} [reason] Reason for changing the role's unicode emoji
404
- * @returns {Promise<Role>}
405
- * @example
406
- * // Set a new unicode emoji for the role
407
- * role.setUnicodeEmoji('🤖')
408
- * .then(updated => console.log(`Set unicode emoji for the role to ${updated.unicodeEmoji}`))
409
- * .catch(console.error);
410
- */
411
- setUnicodeEmoji(unicodeEmoji, reason) {
412
- return this.edit({ unicodeEmoji }, reason);
413
- }
414
-
415
- /**
416
- * Options used to set the position of a role.
417
- * @typedef {Object} SetRolePositionOptions
418
- * @property {boolean} [relative=false] Whether to change the position relative to its current value or not
419
- * @property {string} [reason] The reason for changing the position
420
- */
421
-
422
- /**
423
- * Sets the new position of the role.
424
- * @param {number} position The new position for the role
425
- * @param {SetRolePositionOptions} [options] Options for setting the position
426
- * @returns {Promise<Role>}
427
- * @example
428
- * // Set the position of the role
429
- * role.setPosition(1)
430
- * .then(updated => console.log(`Role position: ${updated.position}`))
431
- * .catch(console.error);
432
- */
433
- setPosition(position, options = {}) {
434
- return this.guild.roles.setPosition(this, position, options);
435
- }
436
-
437
- /**
438
- * Deletes the role.
439
- * @param {string} [reason] Reason for deleting this role
440
- * @returns {Promise<Role>}
441
- * @example
442
- * // Delete a role
443
- * role.delete('The role needed to go')
444
- * .then(deleted => console.log(`Deleted role ${deleted.name}`))
445
- * .catch(console.error);
446
- */
447
- async delete(reason) {
448
- await this.guild.roles.delete(this.id, reason);
449
- return this;
450
- }
451
-
452
- /**
453
- * A link to the role's icon
454
- * @param {StaticImageURLOptions} [options={}] Options for the image URL
455
- * @returns {?string}
456
- */
457
- iconURL({ format, size } = {}) {
458
- if (!this.icon) return null;
459
- return this.client.rest.cdn.RoleIcon(this.id, this.icon, format, size);
460
- }
461
-
462
- /**
463
- * Whether this role equals another role. It compares all properties, so for most operations
464
- * it is advisable to just compare `role.id === role2.id` as it is much faster and is often
465
- * what most users need.
466
- * @param {Role} role Role to compare with
467
- * @returns {boolean}
468
- */
469
- equals(role) {
470
- return (
471
- role &&
472
- this.id === role.id &&
473
- this.name === role.name &&
474
- this.color === role.color &&
475
- this.hoist === role.hoist &&
476
- this.position === role.position &&
477
- this.permissions.bitfield === role.permissions.bitfield &&
478
- this.managed === role.managed &&
479
- this.icon === role.icon &&
480
- this.unicodeEmoji === role.unicodeEmoji
481
- );
482
- }
483
-
484
- /**
485
- * When concatenated with a string, this automatically returns the role's mention instead of the Role object.
486
- * @returns {string}
487
- * @example
488
- * // Logs: Role: <@&123456789012345678>
489
- * console.log(`Role: ${role}`);
490
- */
491
- toString() {
492
- if (this.id === this.guild.id) return '@everyone';
493
- return `<@&${this.id}>`;
494
- }
495
-
496
- toJSON() {
497
- return {
498
- ...super.toJSON({ createdTimestamp: true }),
499
- permissions: this.permissions.toJSON(),
500
- };
501
- }
502
-
503
- /**
504
- * Compares the positions of two roles.
505
- * @param {Role} role1 First role to compare
506
- * @param {Role} role2 Second role to compare
507
- * @returns {number} Negative number if the first role's position is lower (second role's is higher),
508
- * positive number if the first's is higher (second's is lower), 0 if equal
509
- * @deprecated Use {@link RoleManager#comparePositions} instead.
510
- */
511
- static comparePositions(role1, role2) {
512
- if (!deprecationEmittedForComparePositions) {
513
- process.emitWarning(
514
- 'The Role.comparePositions method is deprecated. Use RoleManager#comparePositions instead.',
515
- 'DeprecationWarning',
516
- );
517
-
518
- deprecationEmittedForComparePositions = true;
519
- }
520
-
521
- return role1.guild.roles.comparePositions(role1, role2);
522
- }
523
- }
524
-
525
- exports.Role = Role;
526
- exports.deletedRoles = deletedRoles;
527
-
528
- /**
529
- * @external APIRole
530
- * @see {@link https://discord.com/developers/docs/topics/permissions#role-object}
531
- */
1
+ 'use strict';
2
+
3
+ const process = require('node:process');
4
+ const Base = require('./Base');
5
+ const { Error } = require('../errors');
6
+ const Permissions = require('../util/Permissions');
7
+ const RoleFlags = require('../util/RoleFlags');
8
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
9
+
10
+ let deprecationEmittedForComparePositions = false;
11
+
12
+ /**
13
+ * @type {WeakSet<Role>}
14
+ * @private
15
+ * @internal
16
+ */
17
+ const deletedRoles = new WeakSet();
18
+ let deprecationEmittedForDeleted = false;
19
+
20
+ /**
21
+ * Represents a role on Discord.
22
+ * @extends {Base}
23
+ */
24
+ class Role extends Base {
25
+ constructor(client, data, guild) {
26
+ super(client);
27
+
28
+ /**
29
+ * The guild that the role belongs to
30
+ * @type {Guild}
31
+ */
32
+ this.guild = guild;
33
+
34
+ /**
35
+ * The icon hash of the role
36
+ * @type {?string}
37
+ */
38
+ this.icon = null;
39
+
40
+ /**
41
+ * The unicode emoji for the role
42
+ * @type {?string}
43
+ */
44
+ this.unicodeEmoji = null;
45
+
46
+ if (data) this._patch(data);
47
+ }
48
+
49
+ _patch(data) {
50
+ /**
51
+ * The role's id (unique to the guild it is part of)
52
+ * @type {Snowflake}
53
+ */
54
+ this.id = data.id;
55
+ if ('name' in data) {
56
+ /**
57
+ * The name of the role
58
+ * @type {string}
59
+ */
60
+ this.name = data.name;
61
+ }
62
+
63
+ if ('color' in data) {
64
+ /**
65
+ * The base 10 color of the role
66
+ * @type {number}
67
+ * @deprecated Use {@link Role#colors} instead.
68
+ */
69
+ this.color = data.color;
70
+ }
71
+
72
+ /**
73
+ * @typedef {Object} RoleColors
74
+ * @property {number} primaryColor The primary color of the role
75
+ * @property {?number} secondaryColor The secondary color of the role.
76
+ * This will make the role a gradient between the other provided colors
77
+ * @property {?number} tertiaryColor The tertiary color of the role.
78
+ * When sending `tertiaryColor` the API enforces the role color to be a holographic style
79
+ * with values of `primaryColor = 11127295`, `secondaryColor = 16759788`, and `tertiaryColor = 16761760`.
80
+ * These values are available as a constant: `Constants.HolographicStyle`
81
+ */
82
+
83
+ if ('colors' in data) {
84
+ /**
85
+ * The colors of the role
86
+ *
87
+ * @type {RoleColors}
88
+ */
89
+ this.colors = {
90
+ primaryColor: data.colors.primary_color,
91
+ secondaryColor: data.colors.secondary_color,
92
+ tertiaryColor: data.colors.tertiary_color,
93
+ };
94
+ }
95
+
96
+ if ('hoist' in data) {
97
+ /**
98
+ * If true, users that are part of this role will appear in a separate category in the users list
99
+ * @type {boolean}
100
+ */
101
+ this.hoist = data.hoist;
102
+ }
103
+
104
+ if ('position' in data) {
105
+ /**
106
+ * The raw position of the role from the API
107
+ * @type {number}
108
+ */
109
+ this.rawPosition = data.position;
110
+ }
111
+
112
+ if ('permissions' in data) {
113
+ /**
114
+ * The permissions of the role
115
+ * @type {Readonly<Permissions>}
116
+ */
117
+ this.permissions = new Permissions(BigInt(data.permissions)).freeze();
118
+ }
119
+
120
+ if ('managed' in data) {
121
+ /**
122
+ * Whether or not the role is managed by an external service
123
+ * @type {boolean}
124
+ */
125
+ this.managed = data.managed;
126
+ }
127
+
128
+ if ('mentionable' in data) {
129
+ /**
130
+ * Whether or not the role can be mentioned by anyone
131
+ * @type {boolean}
132
+ */
133
+ this.mentionable = data.mentionable;
134
+ }
135
+
136
+ if ('icon' in data) this.icon = data.icon;
137
+
138
+ if ('unicode_emoji' in data) this.unicodeEmoji = data.unicode_emoji;
139
+
140
+ /**
141
+ * The tags this role has
142
+ * @type {?Object}
143
+ * @property {Snowflake} [botId] The id of the bot this role belongs to
144
+ * @property {Snowflake|string} [integrationId] The id of the integration this role belongs to
145
+ * @property {true} [premiumSubscriberRole] Whether this is the guild's premium subscription role
146
+ * @property {Snowflake} [subscriptionListingId] The id of this role's subscription SKU and listing
147
+ * @property {true} [availableForPurchase] Whether this role is available for purchase
148
+ * @property {true} [guildConnections] Whether this role is a guild's linked role
149
+ */
150
+ this.tags = data.tags ? {} : null;
151
+ if (data.tags) {
152
+ if ('bot_id' in data.tags) {
153
+ this.tags.botId = data.tags.bot_id;
154
+ }
155
+ if ('integration_id' in data.tags) {
156
+ this.tags.integrationId = data.tags.integration_id;
157
+ }
158
+ if ('premium_subscriber' in data.tags) {
159
+ this.tags.premiumSubscriberRole = true;
160
+ }
161
+ if ('subscription_listing_id' in data.tags) {
162
+ this.tags.subscriptionListingId = data.tags.subscription_listing_id;
163
+ }
164
+ if ('available_for_purchase' in data.tags) {
165
+ this.tags.availableForPurchase = true;
166
+ }
167
+ if ('guild_connections' in data.tags) {
168
+ this.tags.guildConnections = true;
169
+ }
170
+ }
171
+
172
+ if ('flags' in data) {
173
+ /**
174
+ * The flags of this role
175
+ * @type {Readonly<RoleFlags>}
176
+ */
177
+ this.flags = new RoleFlags(data.flags).freeze();
178
+ } else {
179
+ this.flags ??= new RoleFlags().freeze();
180
+ }
181
+ }
182
+
183
+ /**
184
+ * The timestamp the role was created at
185
+ * @type {number}
186
+ * @readonly
187
+ */
188
+ get createdTimestamp() {
189
+ return SnowflakeUtil.timestampFrom(this.id);
190
+ }
191
+
192
+ /**
193
+ * The time the role was created at
194
+ * @type {Date}
195
+ * @readonly
196
+ */
197
+ get createdAt() {
198
+ return new Date(this.createdTimestamp);
199
+ }
200
+
201
+ /**
202
+ * Whether or not the role has been deleted
203
+ * @type {boolean}
204
+ * @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091
205
+ */
206
+ get deleted() {
207
+ if (!deprecationEmittedForDeleted) {
208
+ deprecationEmittedForDeleted = true;
209
+ process.emitWarning(
210
+ 'Role#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
211
+ 'DeprecationWarning',
212
+ );
213
+ }
214
+
215
+ return deletedRoles.has(this);
216
+ }
217
+
218
+ set deleted(value) {
219
+ if (!deprecationEmittedForDeleted) {
220
+ deprecationEmittedForDeleted = true;
221
+ process.emitWarning(
222
+ 'Role#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
223
+ 'DeprecationWarning',
224
+ );
225
+ }
226
+
227
+ if (value) deletedRoles.add(this);
228
+ else deletedRoles.delete(this);
229
+ }
230
+
231
+ /**
232
+ * The hexadecimal version of the role color, with a leading hashtag
233
+ * @type {string}
234
+ * @readonly
235
+ */
236
+ get hexColor() {
237
+ return `#${this.colors.primaryColor.toString(16).padStart(6, '0')}`;
238
+ }
239
+
240
+ /**
241
+ * The cached guild members that have this role
242
+ * @type {Collection<Snowflake, GuildMember>}
243
+ * @readonly
244
+ */
245
+ get members() {
246
+ return this.guild.members.cache.filter(m => m.roles.cache.has(this.id));
247
+ }
248
+
249
+ /**
250
+ * Whether the role is editable by the client user
251
+ * @type {boolean}
252
+ * @readonly
253
+ */
254
+ get editable() {
255
+ if (this.managed) return false;
256
+ const clientMember = this.guild.members.resolve(this.client.user);
257
+ if (!clientMember.permissions.has(Permissions.FLAGS.MANAGE_ROLES)) return false;
258
+ return clientMember.roles.highest.comparePositionTo(this) > 0;
259
+ }
260
+
261
+ /**
262
+ * The position of the role in the role manager
263
+ * @type {number}
264
+ * @readonly
265
+ */
266
+ get position() {
267
+ let count = 0;
268
+ for (const role of this.guild.roles.cache.values()) {
269
+ if (this.rawPosition > role.rawPosition) count++;
270
+ else if (this.rawPosition === role.rawPosition && BigInt(this.id) < BigInt(role.id)) count++;
271
+ }
272
+
273
+ return count;
274
+ }
275
+
276
+ /**
277
+ * Compares this role's position to another role's.
278
+ * @param {RoleResolvable} role Role to compare to this one
279
+ * @returns {number} Negative number if this role's position is lower (other role's is higher),
280
+ * positive number if this one is higher (other's is lower), 0 if equal
281
+ * @example
282
+ * // Compare the position of a role to another
283
+ * const roleCompare = role.comparePositionTo(otherRole);
284
+ * if (roleCompare >= 1) console.log(`${role.name} is higher than ${otherRole.name}`);
285
+ */
286
+ comparePositionTo(role) {
287
+ return this.guild.roles.comparePositions(this, role);
288
+ }
289
+
290
+ /**
291
+ * The data for a role.
292
+ * @typedef {Object} RoleData
293
+ * @property {string} [name] The name of the role
294
+ * @property {ColorResolvable} [color] The color of the role, either a hex string or a base 10 number
295
+ * <warn>This property is deprecated. Use `colors` instead.</warn>
296
+ * @property {RoleColorsResolvable} [colors] The colors of the role
297
+ * @property {boolean} [hoist] Whether or not the role should be hoisted
298
+ * @property {number} [position] The position of the role
299
+ * @property {PermissionResolvable} [permissions] The permissions of the role
300
+ * @property {boolean} [mentionable] Whether or not the role should be mentionable
301
+ * @property {?(BufferResolvable|Base64Resolvable|EmojiResolvable)} [icon] The icon for the role
302
+ * <warn>The `EmojiResolvable` should belong to the same guild as the role.
303
+ * If not, pass the emoji's URL directly</warn>
304
+ * @property {?string} [unicodeEmoji] The unicode emoji for the role
305
+ */
306
+
307
+ /**
308
+ * Edits the role.
309
+ * @param {RoleData} data The new data for the role
310
+ * @param {string} [reason] Reason for editing this role
311
+ * @returns {Promise<Role>}
312
+ * @example
313
+ * // Edit a role
314
+ * role.edit({ name: 'new role' })
315
+ * .then(updated => console.log(`Edited role name to ${updated.name}`))
316
+ * .catch(console.error);
317
+ */
318
+ edit(data, reason) {
319
+ return this.guild.roles.edit(this, data, reason);
320
+ }
321
+
322
+ /**
323
+ * Returns `channel.permissionsFor(role)`. Returns permissions for a role in a guild channel,
324
+ * taking into account permission overwrites.
325
+ * @param {GuildChannel|Snowflake} channel The guild channel to use as context
326
+ * @param {boolean} [checkAdmin=true] Whether having `ADMINISTRATOR` will return all permissions
327
+ * @returns {Readonly<Permissions>}
328
+ */
329
+ permissionsIn(channel, checkAdmin = true) {
330
+ channel = this.guild.channels.resolve(channel);
331
+ if (!channel) throw new Error('GUILD_CHANNEL_RESOLVE');
332
+ return channel.rolePermissions(this, checkAdmin);
333
+ }
334
+
335
+ /**
336
+ * Sets a new name for the role.
337
+ * @param {string} name The new name of the role
338
+ * @param {string} [reason] Reason for changing the role's name
339
+ * @returns {Promise<Role>}
340
+ * @example
341
+ * // Set the name of the role
342
+ * role.setName('new role')
343
+ * .then(updated => console.log(`Updated role name to ${updated.name}`))
344
+ * .catch(console.error);
345
+ */
346
+ setName(name, reason) {
347
+ return this.edit({ name }, reason);
348
+ }
349
+
350
+ /**
351
+ * Sets a new color for the role.
352
+ * @param {ColorResolvable} color The color of the role
353
+ * @param {string} [reason] Reason for changing the role's color
354
+ * @returns {Promise<Role>}
355
+ * @deprecated Use {@link Role#setColors} instead.
356
+ */
357
+ setColor(color, reason) {
358
+ return this.edit({ color }, reason);
359
+ }
360
+
361
+ /**
362
+ * Sets new colors for the role.
363
+ *
364
+ * @param {RoleColorsResolvable} colors The colors of the role
365
+ * @param {string} [reason] Reason for changing the role's colors
366
+ * @returns {Promise<Role>}
367
+ * @example
368
+ * // Set the colors of a role
369
+ * role.setColors({ primaryColor: '#FF0000', secondaryColor: '#00FF00', tertiaryColor: '#0000FF' })
370
+ * .then(updated => console.log(`Set colors of role to ${updated.colors}`))
371
+ * .catch(console.error);
372
+ * @example
373
+ * // Set holographic colors using constants
374
+ * role.setColors({
375
+ * primaryColor: Constants.HolographicStyle.Primary,
376
+ * secondaryColor: Constants.HolographicStyle.Secondary,
377
+ * tertiaryColor: Constants.HolographicStyle.Tertiary,
378
+ * })
379
+ * .then(updated => console.log(`Set holographic colors for role ${updated.name}`))
380
+ * .catch(console.error);
381
+ */
382
+ setColors(colors, reason) {
383
+ return this.edit({ colors, reason });
384
+ }
385
+
386
+ /**
387
+ * Sets whether or not the role should be hoisted.
388
+ * @param {boolean} [hoist=true] Whether or not to hoist the role
389
+ * @param {string} [reason] Reason for setting whether or not the role should be hoisted
390
+ * @returns {Promise<Role>}
391
+ * @example
392
+ * // Set the hoist of the role
393
+ * role.setHoist(true)
394
+ * .then(updated => console.log(`Role hoisted: ${updated.hoist}`))
395
+ * .catch(console.error);
396
+ */
397
+ setHoist(hoist = true, reason) {
398
+ return this.edit({ hoist }, reason);
399
+ }
400
+
401
+ /**
402
+ * Sets the permissions of the role.
403
+ * @param {PermissionResolvable} permissions The permissions of the role
404
+ * @param {string} [reason] Reason for changing the role's permissions
405
+ * @returns {Promise<Role>}
406
+ * @example
407
+ * // Set the permissions of the role
408
+ * role.setPermissions([Permissions.FLAGS.KICK_MEMBERS, Permissions.FLAGS.BAN_MEMBERS])
409
+ * .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))
410
+ * .catch(console.error);
411
+ * @example
412
+ * // Remove all permissions from a role
413
+ * role.setPermissions(0n)
414
+ * .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))
415
+ * .catch(console.error);
416
+ */
417
+ setPermissions(permissions, reason) {
418
+ return this.edit({ permissions }, reason);
419
+ }
420
+
421
+ /**
422
+ * Sets whether this role is mentionable.
423
+ * @param {boolean} [mentionable=true] Whether this role should be mentionable
424
+ * @param {string} [reason] Reason for setting whether or not this role should be mentionable
425
+ * @returns {Promise<Role>}
426
+ * @example
427
+ * // Make the role mentionable
428
+ * role.setMentionable(true)
429
+ * .then(updated => console.log(`Role updated ${updated.name}`))
430
+ * .catch(console.error);
431
+ */
432
+ setMentionable(mentionable = true, reason) {
433
+ return this.edit({ mentionable }, reason);
434
+ }
435
+
436
+ /**
437
+ * Sets a new icon for the role.
438
+ * @param {?(BufferResolvable|Base64Resolvable|EmojiResolvable)} icon The icon for the role
439
+ * <warn>The `EmojiResolvable` should belong to the same guild as the role.
440
+ * If not, pass the emoji's URL directly</warn>
441
+ * @param {string} [reason] Reason for changing the role's icon
442
+ * @returns {Promise<Role>}
443
+ */
444
+ setIcon(icon, reason) {
445
+ return this.edit({ icon }, reason);
446
+ }
447
+
448
+ /**
449
+ * Sets a new unicode emoji for the role.
450
+ * @param {?string} unicodeEmoji The new unicode emoji for the role
451
+ * @param {string} [reason] Reason for changing the role's unicode emoji
452
+ * @returns {Promise<Role>}
453
+ * @example
454
+ * // Set a new unicode emoji for the role
455
+ * role.setUnicodeEmoji('🤖')
456
+ * .then(updated => console.log(`Set unicode emoji for the role to ${updated.unicodeEmoji}`))
457
+ * .catch(console.error);
458
+ */
459
+ setUnicodeEmoji(unicodeEmoji, reason) {
460
+ return this.edit({ unicodeEmoji }, reason);
461
+ }
462
+
463
+ /**
464
+ * Options used to set the position of a role.
465
+ * @typedef {Object} SetRolePositionOptions
466
+ * @property {boolean} [relative=false] Whether to change the position relative to its current value or not
467
+ * @property {string} [reason] The reason for changing the position
468
+ */
469
+
470
+ /**
471
+ * Sets the new position of the role.
472
+ * @param {number} position The new position for the role
473
+ * @param {SetRolePositionOptions} [options] Options for setting the position
474
+ * @returns {Promise<Role>}
475
+ * @example
476
+ * // Set the position of the role
477
+ * role.setPosition(1)
478
+ * .then(updated => console.log(`Role position: ${updated.position}`))
479
+ * .catch(console.error);
480
+ */
481
+ setPosition(position, options = {}) {
482
+ return this.guild.roles.setPosition(this, position, options);
483
+ }
484
+
485
+ /**
486
+ * Deletes the role.
487
+ * @param {string} [reason] Reason for deleting this role
488
+ * @returns {Promise<Role>}
489
+ * @example
490
+ * // Delete a role
491
+ * role.delete('The role needed to go')
492
+ * .then(deleted => console.log(`Deleted role ${deleted.name}`))
493
+ * .catch(console.error);
494
+ */
495
+ async delete(reason) {
496
+ await this.guild.roles.delete(this.id, reason);
497
+ return this;
498
+ }
499
+
500
+ /**
501
+ * Fetches the member ids for this role in the guild.
502
+ * <info>This only returns 100 member ids</info>
503
+ * @returns {Promise<Snowflake[]>}
504
+ */
505
+ fetchMemberIds() {
506
+ return this.guild.roles.fetchMemberIds(this.id);
507
+ }
508
+
509
+ /**
510
+ * A link to the role's icon
511
+ * @param {StaticImageURLOptions} [options={}] Options for the image URL
512
+ * @returns {?string}
513
+ */
514
+ iconURL({ format, size } = {}) {
515
+ if (!this.icon) return null;
516
+ return this.client.rest.cdn.RoleIcon(this.id, this.icon, format, size);
517
+ }
518
+
519
+ /**
520
+ * Whether this role equals another role. It compares all properties, so for most operations
521
+ * it is advisable to just compare `role.id === role2.id` as it is much faster and is often
522
+ * what most users need.
523
+ * @param {Role} role Role to compare with
524
+ * @returns {boolean}
525
+ */
526
+ equals(role) {
527
+ return (
528
+ role &&
529
+ this.id === role.id &&
530
+ this.name === role.name &&
531
+ this.colors.primaryColor === role.colors.primaryColor &&
532
+ this.colors.secondaryColor === role.colors.secondaryColor &&
533
+ this.colors.tertiaryColor === role.colors.tertiaryColor &&
534
+ this.hoist === role.hoist &&
535
+ this.position === role.position &&
536
+ this.permissions.bitfield === role.permissions.bitfield &&
537
+ this.managed === role.managed &&
538
+ this.icon === role.icon &&
539
+ this.unicodeEmoji === role.unicodeEmoji
540
+ );
541
+ }
542
+
543
+ /**
544
+ * When concatenated with a string, this automatically returns the role's mention instead of the Role object.
545
+ * @returns {string}
546
+ * @example
547
+ * // Logs: Role: <@&123456789012345678>
548
+ * console.log(`Role: ${role}`);
549
+ */
550
+ toString() {
551
+ if (this.id === this.guild.id) return '@everyone';
552
+ return `<@&${this.id}>`;
553
+ }
554
+
555
+ toJSON() {
556
+ return {
557
+ ...super.toJSON({ createdTimestamp: true }),
558
+ permissions: this.permissions.toJSON(),
559
+ };
560
+ }
561
+
562
+ /**
563
+ * Compares the positions of two roles.
564
+ * @param {Role} role1 First role to compare
565
+ * @param {Role} role2 Second role to compare
566
+ * @returns {number} Negative number if the first role's position is lower (second role's is higher),
567
+ * positive number if the first's is higher (second's is lower), 0 if equal
568
+ * @deprecated Use {@link RoleManager#comparePositions} instead.
569
+ */
570
+ static comparePositions(role1, role2) {
571
+ if (!deprecationEmittedForComparePositions) {
572
+ process.emitWarning(
573
+ 'The Role.comparePositions method is deprecated. Use RoleManager#comparePositions instead.',
574
+ 'DeprecationWarning',
575
+ );
576
+
577
+ deprecationEmittedForComparePositions = true;
578
+ }
579
+
580
+ return role1.guild.roles.comparePositions(role1, role2);
581
+ }
582
+ }
583
+
584
+ exports.Role = Role;
585
+ exports.deletedRoles = deletedRoles;
586
+
587
+ /**
588
+ * @external APIRole
589
+ * @see {@link https://discord.com/developers/docs/topics/permissions#role-object}
590
+ */