@biggy1337/discord-sbjs 1.3.11

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 (373) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +147 -0
  3. package/package.json +80 -0
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +110 -0
  6. package/src/client/Client.js +1076 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +133 -0
  9. package/src/client/actions/ActionsManager.js +80 -0
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  11. package/src/client/actions/AutoModerationActionExecution.js +27 -0
  12. package/src/client/actions/AutoModerationRuleCreate.js +28 -0
  13. package/src/client/actions/AutoModerationRuleDelete.js +32 -0
  14. package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
  15. package/src/client/actions/ChannelCreate.js +23 -0
  16. package/src/client/actions/ChannelDelete.js +39 -0
  17. package/src/client/actions/ChannelUpdate.js +43 -0
  18. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  19. package/src/client/actions/GuildBanAdd.js +20 -0
  20. package/src/client/actions/GuildBanRemove.js +25 -0
  21. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  22. package/src/client/actions/GuildDelete.js +65 -0
  23. package/src/client/actions/GuildEmojiCreate.js +20 -0
  24. package/src/client/actions/GuildEmojiDelete.js +21 -0
  25. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  26. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  27. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  28. package/src/client/actions/GuildMemberRemove.js +33 -0
  29. package/src/client/actions/GuildMemberUpdate.js +44 -0
  30. package/src/client/actions/GuildRoleCreate.js +25 -0
  31. package/src/client/actions/GuildRoleDelete.js +31 -0
  32. package/src/client/actions/GuildRoleUpdate.js +39 -0
  33. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  34. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  35. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  36. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  37. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  38. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  39. package/src/client/actions/GuildStickerCreate.js +20 -0
  40. package/src/client/actions/GuildStickerDelete.js +21 -0
  41. package/src/client/actions/GuildStickerUpdate.js +20 -0
  42. package/src/client/actions/GuildStickersUpdate.js +34 -0
  43. package/src/client/actions/GuildUpdate.js +33 -0
  44. package/src/client/actions/InviteCreate.js +28 -0
  45. package/src/client/actions/InviteDelete.js +30 -0
  46. package/src/client/actions/MessageCreate.js +50 -0
  47. package/src/client/actions/MessageDelete.js +34 -0
  48. package/src/client/actions/MessageDeleteBulk.js +43 -0
  49. package/src/client/actions/MessagePollVoteAdd.js +33 -0
  50. package/src/client/actions/MessagePollVoteRemove.js +33 -0
  51. package/src/client/actions/MessageReactionAdd.js +71 -0
  52. package/src/client/actions/MessageReactionRemove.js +39 -0
  53. package/src/client/actions/MessageReactionRemoveAll.js +36 -0
  54. package/src/client/actions/MessageReactionRemoveEmoji.js +30 -0
  55. package/src/client/actions/MessageUpdate.js +28 -0
  56. package/src/client/actions/PresenceUpdate.js +55 -0
  57. package/src/client/actions/StageInstanceCreate.js +28 -0
  58. package/src/client/actions/StageInstanceDelete.js +33 -0
  59. package/src/client/actions/StageInstanceUpdate.js +30 -0
  60. package/src/client/actions/ThreadCreate.js +24 -0
  61. package/src/client/actions/ThreadDelete.js +32 -0
  62. package/src/client/actions/ThreadListSync.js +60 -0
  63. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  64. package/src/client/actions/ThreadMembersUpdate.js +38 -0
  65. package/src/client/actions/TypingStart.js +31 -0
  66. package/src/client/actions/UserUpdate.js +35 -0
  67. package/src/client/actions/VoiceStateUpdate.js +63 -0
  68. package/src/client/actions/WebhooksUpdate.js +20 -0
  69. package/src/client/voice/ClientVoiceManager.js +162 -0
  70. package/src/client/voice/StreamEventRouter.js +60 -0
  71. package/src/client/voice/VoiceConnection.js +1173 -0
  72. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  73. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  74. package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
  75. package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
  76. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  77. package/src/client/voice/networking/VoiceUDPClient.js +187 -0
  78. package/src/client/voice/networking/VoiceWebSocket.js +347 -0
  79. package/src/client/voice/player/MediaPlayer.js +321 -0
  80. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  81. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  82. package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
  83. package/src/client/voice/receiver/PacketHandler.js +260 -0
  84. package/src/client/voice/receiver/Receiver.js +96 -0
  85. package/src/client/voice/receiver/Recorder.js +191 -0
  86. package/src/client/voice/util/Function.js +116 -0
  87. package/src/client/voice/util/PlayInterface.js +122 -0
  88. package/src/client/voice/util/Secretbox.js +64 -0
  89. package/src/client/voice/util/Silence.js +16 -0
  90. package/src/client/voice/util/Socket.js +62 -0
  91. package/src/client/voice/util/VolumeInterface.js +104 -0
  92. package/src/client/websocket/DispatchTable.js +7 -0
  93. package/src/client/websocket/GatewaySendScheduler.js +122 -0
  94. package/src/client/websocket/WebSocketManager.js +439 -0
  95. package/src/client/websocket/WebSocketShard.js +1085 -0
  96. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  97. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  98. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  99. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  100. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  101. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  102. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  103. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  104. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  105. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  106. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  107. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  108. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  109. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  110. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  111. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  112. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  113. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  114. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  115. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  116. package/src/client/websocket/handlers/GUILD_CREATE.js +51 -0
  117. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  118. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  119. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  120. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +45 -0
  121. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  122. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  128. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  129. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  130. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  131. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  132. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  133. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  134. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  135. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  136. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  140. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
  141. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
  142. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  143. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  144. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  145. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  146. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  147. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  148. package/src/client/websocket/handlers/READY.js +156 -0
  149. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  150. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  151. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  152. package/src/client/websocket/handlers/RESUMED.js +14 -0
  153. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  154. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  155. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  156. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  157. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  158. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  159. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  160. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  161. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  162. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  163. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  164. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  165. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +82 -0
  166. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  167. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  168. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  169. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  170. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +12 -0
  171. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  172. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  173. package/src/client/websocket/handlers/index.js +84 -0
  174. package/src/errors/DJSError.js +61 -0
  175. package/src/errors/Messages.js +218 -0
  176. package/src/errors/index.js +4 -0
  177. package/src/index.js +172 -0
  178. package/src/managers/ApplicationCommandManager.js +264 -0
  179. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  180. package/src/managers/AutoModerationRuleManager.js +296 -0
  181. package/src/managers/BaseGuildEmojiManager.js +80 -0
  182. package/src/managers/BaseManager.js +19 -0
  183. package/src/managers/BillingManager.js +66 -0
  184. package/src/managers/CachedManager.js +72 -0
  185. package/src/managers/ChannelManager.js +148 -0
  186. package/src/managers/ClientUserSettingManager.js +372 -0
  187. package/src/managers/DataManager.js +61 -0
  188. package/src/managers/DeveloperManager.js +265 -0
  189. package/src/managers/GuildBanManager.js +252 -0
  190. package/src/managers/GuildChannelManager.js +488 -0
  191. package/src/managers/GuildEmojiManager.js +171 -0
  192. package/src/managers/GuildEmojiRoleManager.js +118 -0
  193. package/src/managers/GuildForumThreadManager.js +108 -0
  194. package/src/managers/GuildInviteManager.js +213 -0
  195. package/src/managers/GuildManager.js +401 -0
  196. package/src/managers/GuildMemberManager.js +608 -0
  197. package/src/managers/GuildMemberRoleManager.js +195 -0
  198. package/src/managers/GuildScheduledEventManager.js +314 -0
  199. package/src/managers/GuildSettingManager.js +155 -0
  200. package/src/managers/GuildStickerManager.js +179 -0
  201. package/src/managers/GuildTextThreadManager.js +98 -0
  202. package/src/managers/InteractionManager.js +39 -0
  203. package/src/managers/MessageManager.js +457 -0
  204. package/src/managers/PermissionOverwriteManager.js +169 -0
  205. package/src/managers/PresenceManager.js +71 -0
  206. package/src/managers/QuestManager.js +391 -0
  207. package/src/managers/ReactionManager.js +67 -0
  208. package/src/managers/ReactionUserManager.js +73 -0
  209. package/src/managers/RelationshipManager.js +341 -0
  210. package/src/managers/RoleManager.js +448 -0
  211. package/src/managers/SessionManager.js +66 -0
  212. package/src/managers/StageInstanceManager.js +162 -0
  213. package/src/managers/ThreadManager.js +175 -0
  214. package/src/managers/ThreadMemberManager.js +186 -0
  215. package/src/managers/UserManager.js +274 -0
  216. package/src/managers/UserNoteManager.js +53 -0
  217. package/src/managers/VoiceStateManager.js +59 -0
  218. package/src/rest/APIRequest.js +198 -0
  219. package/src/rest/APIRouter.js +94 -0
  220. package/src/rest/DiscordAPIError.js +120 -0
  221. package/src/rest/HTTPError.js +62 -0
  222. package/src/rest/RESTManager.js +203 -0
  223. package/src/rest/RateLimitCoordinator.js +156 -0
  224. package/src/rest/RateLimitError.js +55 -0
  225. package/src/rest/RequestHandler.js +552 -0
  226. package/src/sharding/Shard.js +444 -0
  227. package/src/sharding/ShardClientUtil.js +279 -0
  228. package/src/sharding/ShardingManager.js +319 -0
  229. package/src/structures/AnonymousGuild.js +98 -0
  230. package/src/structures/ApplicationCommand.js +593 -0
  231. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
  232. package/src/structures/AutoModerationActionExecution.js +89 -0
  233. package/src/structures/AutoModerationRule.js +294 -0
  234. package/src/structures/AutocompleteInteraction.js +107 -0
  235. package/src/structures/Base.js +43 -0
  236. package/src/structures/BaseCommandInteraction.js +211 -0
  237. package/src/structures/BaseGuild.js +124 -0
  238. package/src/structures/BaseGuildEmoji.js +56 -0
  239. package/src/structures/BaseGuildTextChannel.js +191 -0
  240. package/src/structures/BaseGuildVoiceChannel.js +241 -0
  241. package/src/structures/BaseMessageComponent.js +181 -0
  242. package/src/structures/ButtonInteraction.js +11 -0
  243. package/src/structures/CallState.js +63 -0
  244. package/src/structures/CategoryChannel.js +85 -0
  245. package/src/structures/Channel.js +284 -0
  246. package/src/structures/ClientPresence.js +77 -0
  247. package/src/structures/ClientUser.js +706 -0
  248. package/src/structures/CommandInteraction.js +41 -0
  249. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  250. package/src/structures/ContainerComponent.js +68 -0
  251. package/src/structures/ContextMenuInteraction.js +65 -0
  252. package/src/structures/DMChannel.js +222 -0
  253. package/src/structures/DirectoryChannel.js +20 -0
  254. package/src/structures/Emoji.js +148 -0
  255. package/src/structures/FileComponent.js +49 -0
  256. package/src/structures/ForumChannel.js +31 -0
  257. package/src/structures/GroupDMChannel.js +415 -0
  258. package/src/structures/Guild.js +1804 -0
  259. package/src/structures/GuildAuditLogs.js +746 -0
  260. package/src/structures/GuildBan.js +59 -0
  261. package/src/structures/GuildBoost.js +108 -0
  262. package/src/structures/GuildChannel.js +470 -0
  263. package/src/structures/GuildEmoji.js +161 -0
  264. package/src/structures/GuildMember.js +636 -0
  265. package/src/structures/GuildPreview.js +191 -0
  266. package/src/structures/GuildPreviewEmoji.js +27 -0
  267. package/src/structures/GuildScheduledEvent.js +536 -0
  268. package/src/structures/GuildTemplate.js +236 -0
  269. package/src/structures/Integration.js +188 -0
  270. package/src/structures/IntegrationApplication.js +96 -0
  271. package/src/structures/Interaction.js +290 -0
  272. package/src/structures/InteractionCollector.js +248 -0
  273. package/src/structures/InteractionWebhook.js +43 -0
  274. package/src/structures/Invite.js +358 -0
  275. package/src/structures/InviteGuild.js +23 -0
  276. package/src/structures/InviteStageInstance.js +86 -0
  277. package/src/structures/MediaChannel.js +11 -0
  278. package/src/structures/MediaGalleryComponent.js +41 -0
  279. package/src/structures/MediaGalleryItem.js +47 -0
  280. package/src/structures/Message.js +1272 -0
  281. package/src/structures/MessageActionRow.js +105 -0
  282. package/src/structures/MessageAttachment.js +216 -0
  283. package/src/structures/MessageButton.js +166 -0
  284. package/src/structures/MessageCollector.js +146 -0
  285. package/src/structures/MessageComponentInteraction.js +120 -0
  286. package/src/structures/MessageContextMenuInteraction.js +20 -0
  287. package/src/structures/MessageEmbed.js +596 -0
  288. package/src/structures/MessageMentions.js +273 -0
  289. package/src/structures/MessagePayload.js +354 -0
  290. package/src/structures/MessageReaction.js +181 -0
  291. package/src/structures/MessageSelectMenu.js +141 -0
  292. package/src/structures/Modal.js +161 -0
  293. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  294. package/src/structures/ModalSubmitInteraction.js +119 -0
  295. package/src/structures/NewsChannel.js +32 -0
  296. package/src/structures/OAuth2Guild.js +28 -0
  297. package/src/structures/PermissionOverwrites.js +198 -0
  298. package/src/structures/Poll.js +108 -0
  299. package/src/structures/PollAnswer.js +88 -0
  300. package/src/structures/Presence.js +1165 -0
  301. package/src/structures/ReactionCollector.js +229 -0
  302. package/src/structures/ReactionEmoji.js +31 -0
  303. package/src/structures/Role.js +590 -0
  304. package/src/structures/SectionComponent.js +48 -0
  305. package/src/structures/SelectMenuInteraction.js +21 -0
  306. package/src/structures/SeparatorComponent.js +48 -0
  307. package/src/structures/Session.js +81 -0
  308. package/src/structures/StageChannel.js +104 -0
  309. package/src/structures/StageInstance.js +208 -0
  310. package/src/structures/Sticker.js +310 -0
  311. package/src/structures/StickerPack.js +95 -0
  312. package/src/structures/StoreChannel.js +56 -0
  313. package/src/structures/Team.js +118 -0
  314. package/src/structures/TeamMember.js +80 -0
  315. package/src/structures/TextChannel.js +33 -0
  316. package/src/structures/TextDisplayComponent.js +40 -0
  317. package/src/structures/TextInputComponent.js +132 -0
  318. package/src/structures/ThreadChannel.js +605 -0
  319. package/src/structures/ThreadMember.js +105 -0
  320. package/src/structures/ThreadOnlyChannel.js +249 -0
  321. package/src/structures/ThumbnailComponent.js +57 -0
  322. package/src/structures/Typing.js +74 -0
  323. package/src/structures/UnfurledMediaItem.js +29 -0
  324. package/src/structures/User.js +992 -0
  325. package/src/structures/UserContextMenuInteraction.js +29 -0
  326. package/src/structures/VoiceChannel.js +110 -0
  327. package/src/structures/VoiceChannelEffect.js +69 -0
  328. package/src/structures/VoiceRegion.js +53 -0
  329. package/src/structures/VoiceState.js +354 -0
  330. package/src/structures/WebEmbed.js +373 -0
  331. package/src/structures/Webhook.js +478 -0
  332. package/src/structures/WelcomeChannel.js +60 -0
  333. package/src/structures/WelcomeScreen.js +48 -0
  334. package/src/structures/Widget.js +87 -0
  335. package/src/structures/WidgetMember.js +100 -0
  336. package/src/structures/interfaces/Application.js +953 -0
  337. package/src/structures/interfaces/Collector.js +301 -0
  338. package/src/structures/interfaces/InteractionResponses.js +313 -0
  339. package/src/structures/interfaces/TextBasedChannel.js +821 -0
  340. package/src/util/APITypes.js +59 -0
  341. package/src/util/ActivityFlags.js +44 -0
  342. package/src/util/ApplicationFlags.js +76 -0
  343. package/src/util/AttachmentFlags.js +38 -0
  344. package/src/util/BitField.js +170 -0
  345. package/src/util/ChannelFlags.js +45 -0
  346. package/src/util/Constants.js +1953 -0
  347. package/src/util/DataResolver.js +162 -0
  348. package/src/util/FastQueue.js +93 -0
  349. package/src/util/FetchUtil.js +77 -0
  350. package/src/util/Formatters.js +228 -0
  351. package/src/util/GuildMemberFlags.js +43 -0
  352. package/src/util/Intents.js +74 -0
  353. package/src/util/InviteFlags.js +34 -0
  354. package/src/util/LimitedCollection.js +131 -0
  355. package/src/util/ListenerUtil.js +12 -0
  356. package/src/util/MessageFlags.js +63 -0
  357. package/src/util/Options.js +431 -0
  358. package/src/util/Permissions.js +202 -0
  359. package/src/util/PremiumUsageFlags.js +31 -0
  360. package/src/util/PurchasedFlags.js +33 -0
  361. package/src/util/RemoteAuth.js +425 -0
  362. package/src/util/RoleFlags.js +37 -0
  363. package/src/util/SnowflakeUtil.js +92 -0
  364. package/src/util/Speaking.js +33 -0
  365. package/src/util/Sweepers.js +493 -0
  366. package/src/util/SystemChannelFlags.js +55 -0
  367. package/src/util/ThreadMemberFlags.js +30 -0
  368. package/src/util/UserFlags.js +104 -0
  369. package/src/util/Util.js +1144 -0
  370. package/typings/enums.d.ts +437 -0
  371. package/typings/index.d.ts +8857 -0
  372. package/typings/index.test-d.ts +0 -0
  373. package/typings/rawDataTypes.d.ts +403 -0
@@ -0,0 +1,706 @@
1
+ 'use strict';
2
+
3
+ const { setInterval } = require('node:timers');
4
+ const { Collection } = require('@discordjs/collection');
5
+ const Invite = require('./Invite');
6
+ const User = require('./User');
7
+ const { Error, TypeError } = require('../errors');
8
+ const DataResolver = require('../util/DataResolver');
9
+ const PremiumUsageFlags = require('../util/PremiumUsageFlags');
10
+ const PurchasedFlags = require('../util/PurchasedFlags');
11
+ const Util = require('../util/Util');
12
+
13
+ /**
14
+ * Represents the logged in client's Discord user.
15
+ * @extends {User}
16
+ */
17
+ class ClientUser extends User {
18
+ #packageName = null;
19
+ #intervalSamsungPresence = setInterval(() => {
20
+ this.client.emit('debug', `[UPDATE] Samsung Presence: ${this.#packageName}`);
21
+ if (!this.#packageName) return;
22
+ this.setSamsungActivity(this.#packageName, 'UPDATE');
23
+ }, 1000 * 60 * 10).unref();
24
+
25
+ _patch(data) {
26
+ super._patch(data);
27
+
28
+ if ('verified' in data) {
29
+ /**
30
+ * Whether or not this account has been verified
31
+ * @type {boolean}
32
+ */
33
+ this.verified = data.verified;
34
+ }
35
+
36
+ if ('mfa_enabled' in data) {
37
+ /**
38
+ * If the bot's {@link Application#owner Owner} has MFA enabled on their account
39
+ * @type {?boolean}
40
+ */
41
+ this.mfaEnabled = typeof data.mfa_enabled === 'boolean' ? data.mfa_enabled : null;
42
+ } else {
43
+ this.mfaEnabled ??= null;
44
+ }
45
+
46
+ if ('token' in data) this.client.token = data.token;
47
+
48
+ if ('purchased_flags' in data) {
49
+ /**
50
+ * Purchased state of the client user.
51
+ * @type {Readonly<PurchasedFlags>}
52
+ */
53
+ this.purchasedFlags = new PurchasedFlags(data.purchased_flags || 0).freeze();
54
+ } else {
55
+ this.purchasedFlags = new PurchasedFlags().freeze();
56
+ }
57
+
58
+ if ('premium_usage_flags' in data) {
59
+ /**
60
+ * Premium usage state of the client user.
61
+ * @type {Readonly<PremiumUsageFlags>}
62
+ */
63
+ this.premiumUsageFlags = new PremiumUsageFlags(data.premium_usage_flags || 0);
64
+ } else {
65
+ this.premiumUsageFlags = new PremiumUsageFlags().freeze();
66
+ }
67
+
68
+ if ('phone' in data) {
69
+ /**
70
+ * Phone number of the client user.
71
+ * @type {?string}
72
+ */
73
+ this.phone = data.phone;
74
+ }
75
+
76
+ if ('nsfw_allowed' in data) {
77
+ /**
78
+ * Whether or not the client user is allowed to send NSFW messages [iOS device].
79
+ * @type {?boolean}
80
+ */
81
+ this.nsfwAllowed = data.nsfw_allowed;
82
+ }
83
+
84
+ if ('email' in data) {
85
+ /**
86
+ * Email address of the client user.
87
+ * @type {?string}
88
+ */
89
+ this.email = data.email;
90
+ }
91
+
92
+ if ('bio' in data) {
93
+ /**
94
+ * About me (User)
95
+ * <info>The user must be force fetched for this property to be present or be updated</info>
96
+ * @type {?string}
97
+ */
98
+ this.bio = data.bio;
99
+ }
100
+
101
+ if ('pronouns' in data) {
102
+ /**
103
+ * Pronouns (User)
104
+ * <info>The user must be force fetched for this property to be present or be updated</info>
105
+ * @type {?string}
106
+ */
107
+ this.pronouns = data.pronouns;
108
+ }
109
+
110
+ if ('premium_type' in data) {
111
+ /**
112
+ * Premium types denote the level of premium a user has.
113
+ * @type {number}
114
+ * @see {@link https://discord-userdoccers.vercel.app/resources/user#premium-type}
115
+ */
116
+ this.premiumType = data.premium_type;
117
+ }
118
+ }
119
+
120
+ /**
121
+ * A collection of friends for the logged in user (user accounts only).
122
+ * @type {Collection<Snowflake, User>}
123
+ * @readonly
124
+ * @deprecated Use {@link Client#relationships} for the full API surface.
125
+ */
126
+ get friends() {
127
+ return this.client.relationships.friendCache;
128
+ }
129
+
130
+ /**
131
+ * A collection of blocked users for the logged in user (user accounts only).
132
+ * @type {Collection<Snowflake, User>}
133
+ * @readonly
134
+ * @deprecated Use {@link Client#relationships} for the full API surface.
135
+ */
136
+ get blocked() {
137
+ return this.client.relationships.blockedCache;
138
+ }
139
+
140
+ /**
141
+ * A collection of pending incoming friend requests for the logged in user (user accounts only).
142
+ * @type {Collection<Snowflake, User>}
143
+ * @readonly
144
+ * @deprecated Use {@link Client#relationships} for the full API surface.
145
+ */
146
+ get pending() {
147
+ return this.client.relationships.incomingCache;
148
+ }
149
+
150
+ /**
151
+ * A collection of outgoing friend requests for the logged in user (user accounts only).
152
+ * @type {Collection<Snowflake, User>}
153
+ * @readonly
154
+ * @deprecated Use {@link Client#relationships} for the full API surface.
155
+ */
156
+ get outgoing() {
157
+ return this.client.relationships.outgoingCache;
158
+ }
159
+
160
+ /**
161
+ * Represents the client user's presence
162
+ * @type {ClientPresence}
163
+ * @readonly
164
+ */
165
+ get presence() {
166
+ return this.client.presence;
167
+ }
168
+
169
+ /**
170
+ * Data used to edit the logged in client
171
+ * @typedef {Object} ClientUserEditData
172
+ * @property {string} [username] The new username
173
+ * @property {?(BufferResolvable|Base64Resolvable)} [avatar] The new avatar
174
+ * @property {?(BufferResolvable|Base64Resolvable)} [banner] The new banner
175
+ * @property {?string} [bio] The new bio
176
+ */
177
+
178
+ /**
179
+ * Edits the logged in client.
180
+ * @param {ClientUserEditData} options The new data
181
+ * @returns {Promise<ClientUser>}
182
+ */
183
+ async edit(options = {}) {
184
+ const data = await this.client.api.users('@me').patch({ data: options });
185
+ const { updated } = this.client.actions.UserUpdate.handle(data);
186
+ return updated ?? this;
187
+ }
188
+
189
+ /**
190
+ * Sets the username of the logged in client.
191
+ * <info>Changing usernames in Discord is heavily rate limited, with only 2 requests
192
+ * every hour. Use this sparingly!</info>
193
+ * @param {string} username The new username
194
+ * @param {string} password Current Password
195
+ * @returns {Promise<ClientUser>}
196
+ * @example
197
+ * // Set username
198
+ * client.user.setUsername('discordjs', 'passw@rd')
199
+ * .then(user => console.log(`My new username is ${user.username}`))
200
+ * .catch(console.error);
201
+ */
202
+ setUsername(username, password) {
203
+ return this.edit({ username, password });
204
+ }
205
+
206
+ /**
207
+ * Sets the avatar of the logged in client.
208
+ * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
209
+ * @returns {Promise<ClientUser>}
210
+ * @example
211
+ * // Set avatar
212
+ * client.user.setAvatar('./avatar.png')
213
+ * .then(user => console.log(`New avatar set!`))
214
+ * .catch(console.error);
215
+ */
216
+ async setAvatar(avatar) {
217
+ avatar = avatar && (await DataResolver.resolveImage(avatar));
218
+ return this.edit({ avatar });
219
+ }
220
+
221
+ /**
222
+ * Options for setting activities
223
+ * @typedef {Object} ActivitiesOptions
224
+ * @property {string} name Name of the activity
225
+ * @property {string} [state] State of the activity
226
+ * @property {ActivityType|number} [type] Type of the activity
227
+ * @property {string} [url] Twitch / YouTube stream URL
228
+ */
229
+
230
+ /**
231
+ * Data resembling a raw Discord presence.
232
+ * @typedef {Object} PresenceData
233
+ * @property {PresenceStatusData} [status] Status of the user
234
+ * @property {boolean} [afk] Whether the user is AFK
235
+ * @property {ActivitiesOptions[]|CustomStatus[]|RichPresence[]|SpotifyRPC[]} [activities] Activity the user is playing
236
+ * @property {number|number[]} [shardId] Shard id(s) to have the activity set on
237
+ */
238
+
239
+ /**
240
+ * Sets the full presence of the client user.
241
+ * @param {PresenceData} data Data for the presence
242
+ * @returns {ClientPresence}
243
+ * @example
244
+ * // Set the client user's presence
245
+ * client.user.setPresence({ activities: [{ name: 'with discord.js' }], status: 'idle' });
246
+ * @see {@link https://github.com/aiko-chan-ai/discord-selfbot.js/blob/main/Document/RichPresence.md}
247
+ */
248
+ setPresence(data) {
249
+ return this.client.presence.set(data);
250
+ }
251
+
252
+ /**
253
+ * A user's status. Must be one of:
254
+ * * `online`
255
+ * * `idle`
256
+ * * `invisible`
257
+ * * `dnd` (do not disturb)
258
+ * @typedef {string} PresenceStatusData
259
+ */
260
+
261
+ /**
262
+ * Sets the status of the client user.
263
+ * @param {PresenceStatusData} status Status to change to
264
+ * @param {number|number[]} [shardId] Shard id(s) to have the activity set on
265
+ * @returns {ClientPresence}
266
+ * @example
267
+ * // Set the client user's status
268
+ * client.user.setStatus('idle');
269
+ */
270
+ setStatus(status, shardId) {
271
+ return this.setPresence({ status, shardId });
272
+ }
273
+
274
+ /**
275
+ * Options for setting an activity.
276
+ * @typedef {Object} ActivityOptions
277
+ * @property {string} name Name of the activity
278
+ * @property {string} [url] Twitch / YouTube stream URL
279
+ * @property {ActivityType|number} [type] Type of the activity
280
+ * @property {number|number[]} [shardId] Shard Id(s) to have the activity set on
281
+ */
282
+
283
+ /**
284
+ * Sets the activity the client user is playing.
285
+ * @param {string|ActivityOptions} name Activity being played, or options for setting the activity
286
+ * @param {ActivityOptions} [options] Options for setting the activity
287
+ * @returns {ClientPresence}
288
+ * @example
289
+ * // Set the client user's activity
290
+ * client.user.setActivity('discord.js', { type: 'WATCHING' });
291
+ * @see {@link https://github.com/aiko-chan-ai/discord-selfbot.js/blob/main/Document/RichPresence.md}
292
+ */
293
+ setActivity(name, options = {}) {
294
+ if (!name) return this.setPresence({ activities: [], shardId: options.shardId });
295
+
296
+ const activity = Object.assign({}, options, typeof name === 'object' ? name : { name });
297
+ return this.setPresence({ activities: [activity], shardId: activity.shardId });
298
+ }
299
+
300
+ /**
301
+ * Sets/removes the AFK flag for the client user.
302
+ * @param {boolean} [afk=true] Whether or not the user is AFK
303
+ * @param {number|number[]} [shardId] Shard Id(s) to have the AFK flag set on
304
+ * @returns {ClientPresence}
305
+ */
306
+ setAFK(afk = true, shardId) {
307
+ return this.setPresence({ afk, shardId });
308
+ }
309
+
310
+ /**
311
+ * Sets the banner of the logged in client.
312
+ * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner
313
+ * @returns {Promise<ClientUser>}
314
+ * @example
315
+ * // Set banner
316
+ * client.user.setBanner('./banner.png')
317
+ * .then(user => console.log(`New banner set!`))
318
+ * .catch(console.error);
319
+ */
320
+ async setBanner(banner) {
321
+ banner = banner && (await DataResolver.resolveImage(banner));
322
+ return this.edit({ banner });
323
+ }
324
+
325
+ /**
326
+ * Set HyperSquad House
327
+ * @param {string|number} type
328
+ * * `LEAVE`: 0
329
+ * * `HOUSE_BRAVERY`: 1
330
+ * * `HOUSE_BRILLIANCE`: 2
331
+ * * `HOUSE_BALANCE`: 3
332
+ * @returns {Promise<void>}
333
+ * @example
334
+ * // Set HyperSquad HOUSE_BRAVERY
335
+ * client.user.setHypeSquad(1); || client.user.setHypeSquad('HOUSE_BRAVERY');
336
+ * // Leave
337
+ * client.user.setHypeSquad(0);
338
+ */
339
+ setHypeSquad(type) {
340
+ switch (type) {
341
+ case 'LEAVE': {
342
+ type = 0;
343
+ break;
344
+ }
345
+ case 'HOUSE_BRAVERY': {
346
+ type = 1;
347
+ break;
348
+ }
349
+ case 'HOUSE_BRILLIANCE': {
350
+ type = 2;
351
+ break;
352
+ }
353
+ case 'HOUSE_BALANCE': {
354
+ type = 3;
355
+ break;
356
+ }
357
+ }
358
+ if (type == 0) {
359
+ return this.client.api.hypesquad.online.delete();
360
+ } else {
361
+ return this.client.api.hypesquad.online.post({
362
+ data: { house_id: type },
363
+ });
364
+ }
365
+ }
366
+
367
+ /**
368
+ * Set Accent color
369
+ * @param {ColorResolvable} color Color to set
370
+ * @returns {Promise<ClientUser>}
371
+ */
372
+ setAccentColor(color = null) {
373
+ return this.edit({ accent_color: color ? Util.resolveColor(color) : null });
374
+ }
375
+
376
+ /**
377
+ * Set About me
378
+ * @param {string} [bio=null] Bio to set
379
+ * @returns {Promise<ClientUser>}
380
+ */
381
+ setAboutMe(bio = null) {
382
+ return this.edit({ bio });
383
+ }
384
+
385
+ /**
386
+ * Create an invite [Friend Invites]
387
+ * maxAge: 604800 | maxUses: 1
388
+ * @returns {Promise<Invite>}
389
+ * @see {@link https://github.com/13-05/hidden-disc-docs#js-snippet-for-creating-friend-invites}
390
+ * @example
391
+ * // Options not working
392
+ * client.user.createFriendInvite();
393
+ * .then(console.log)
394
+ * .catch(console.error);
395
+ */
396
+ async createFriendInvite() {
397
+ const data = await this.client.api.users['@me'].invites.post({
398
+ data: {},
399
+ });
400
+ return new Invite(this.client, data);
401
+ }
402
+
403
+ /**
404
+ * Get all friend invites
405
+ * @returns {Promise<Collection<string, Invite>>}
406
+ */
407
+ async getAllFriendInvites() {
408
+ const data = await this.client.api.users['@me'].invites.get();
409
+ const collection = new Collection();
410
+ for (const invite of data) {
411
+ collection.set(invite.code, new Invite(this.client, invite));
412
+ }
413
+ return collection;
414
+ }
415
+
416
+ /**
417
+ * Revoke all friend invites
418
+ * @returns {Promise<void>}
419
+ */
420
+ revokeAllFriendInvites() {
421
+ return this.client.api.users['@me'].invites.delete();
422
+ }
423
+
424
+ /**
425
+ * Sets Discord Playing status to "Playing on Samsung Galaxy". Only selected gamss from discords database works
426
+ * @param {string} packageName Android package name
427
+ * @param {?string} type Must be START, UPDATE, or STOP
428
+ * @returns {Promise<ClientUser>}
429
+ * @example
430
+ * // Set the client user's status
431
+ * client.user.setSamsungActivity('com.YostarJP.BlueArchive', 'START');
432
+ * // Update
433
+ * client.user.setSamsungActivity('com.miHoYo.bh3oversea', 'UPDATE');
434
+ * // Stop
435
+ * client.user.setSamsungActivity('com.miHoYo.GenshinImpact', 'STOP');
436
+ */
437
+ async setSamsungActivity(packageName, type = 'START') {
438
+ type = type.toUpperCase();
439
+ if (!packageName || typeof packageName !== 'string') throw new Error('Package name is required.');
440
+ if (!['START', 'UPDATE', 'STOP'].includes(type)) throw new Error('Invalid type (Must be START, UPDATE, or STOP)');
441
+ await this.client.api.presences.post({
442
+ data: {
443
+ package_name: packageName,
444
+ update: type,
445
+ },
446
+ });
447
+ if (type !== 'STOP') this.#packageName = packageName;
448
+ else this.#packageName = null;
449
+ return this;
450
+ }
451
+
452
+ /**
453
+ * Stop ringing
454
+ * @param {ChannelResolvable} channel DMChannel | GroupDMChannel
455
+ * @returns {Promise<void>}
456
+ */
457
+ stopRinging(channel) {
458
+ return this.client.api.channels(this.client.channels.resolveId(channel)).call['stop-ringing'].post({
459
+ data: {},
460
+ });
461
+ }
462
+
463
+ /**
464
+ * Super Reactions
465
+ * @returns {Promise<number>}
466
+ */
467
+ fetchBurstCredit() {
468
+ return this.client.api.users['@me']['burst-credits'].get().then(d => d.amount);
469
+ }
470
+
471
+ /**
472
+ * Set global display name
473
+ * @param {string} globalName The new display name
474
+ * @returns {Promise<ClientUser>}
475
+ */
476
+ setGlobalName(globalName = '') {
477
+ return this.edit({ global_name: globalName });
478
+ }
479
+
480
+ /**
481
+ * Set pronouns
482
+ * @param {?string} pronouns Your pronouns
483
+ * @returns {Promise<ClientUser>}
484
+ */
485
+ setPronouns(pronouns = '') {
486
+ return this.edit({ pronouns });
487
+ }
488
+
489
+ /**
490
+ * Fetches all of the logged-in user's connected accounts (Spotify, Steam, etc.).
491
+ * @param {Object} [options] Options for fetching connections
492
+ * @param {boolean} [options.includeMetadata=true] Whether to include provider metadata when available
493
+ * @returns {Promise<Object[]>}
494
+ */
495
+ async fetchConnections({ includeMetadata = true } = {}) {
496
+ const query = includeMetadata ? { include_metadata: true } : {};
497
+ return this.client.api.users['@me'].connections.get({ query });
498
+ }
499
+
500
+ /**
501
+ * Add a widget to the user's profile
502
+ * @param {string} type Widget type (favorite_games, current_games, played_games, want_to_play_games)
503
+ * @param {string} gameId The game ID to add
504
+ * @param {string} [comment] Optional comment for the game
505
+ * @param {string[]} [tags] Optional tags for the game
506
+ * @returns {Promise<Object>}
507
+ */
508
+ async addWidget(type, gameId, comment = null, tags = []) {
509
+ if (!type || !gameId) {
510
+ throw new TypeError('Widget type and game ID are required');
511
+ }
512
+
513
+ const validTypes = ['favorite_games', 'current_games', 'played_games', 'want_to_play_games'];
514
+ if (!validTypes.includes(type)) {
515
+ throw new TypeError(`Invalid widget type. Must be one of: ${validTypes.join(', ')}`);
516
+ }
517
+
518
+ // Get current widgets first
519
+ const currentWidgets = await this.widgetsList();
520
+
521
+ // Find existing widget of this type or create new one
522
+ let targetWidget = currentWidgets.widgets.find(w => w.data.type === type);
523
+
524
+ if (!targetWidget) {
525
+ // Create new widget if it doesn't exist
526
+ targetWidget = {
527
+ id: Date.now().toString(), // Generate temporary ID
528
+ data: {
529
+ type: type,
530
+ games: [],
531
+ },
532
+ };
533
+ currentWidgets.widgets.push(targetWidget);
534
+ }
535
+
536
+ // Add the game if it doesn't already exist
537
+ const existingGame = targetWidget.data.games.find(g => g.game_id === gameId);
538
+ if (!existingGame) {
539
+ const gameData = { game_id: gameId };
540
+ if (comment !== null) gameData.comment = comment;
541
+ if (tags.length > 0) gameData.tags = tags;
542
+
543
+ targetWidget.data.games.push(gameData);
544
+ }
545
+
546
+ // Update widgets via API
547
+ return this.client.api.users['@me'].profile.patch({
548
+ data: { widgets: currentWidgets.widgets },
549
+ });
550
+ }
551
+
552
+ /**
553
+ * Delete a widget or remove a game from a widget
554
+ * @param {string} type Widget type to modify
555
+ * @param {string} [gameId] Optional game ID to remove (if not provided, removes entire widget)
556
+ * @returns {Promise<Object>}
557
+ */
558
+ async delWidget(type, gameId = null) {
559
+ if (!type) {
560
+ throw new TypeError('Widget type is required');
561
+ }
562
+
563
+ const validTypes = ['favorite_games', 'current_games', 'played_games', 'want_to_play_games'];
564
+ if (!validTypes.includes(type)) {
565
+ throw new TypeError(`Invalid widget type. Must be one of: ${validTypes.join(', ')}`);
566
+ }
567
+
568
+ // Get current widgets
569
+ const currentWidgets = await this.widgetsList();
570
+
571
+ if (gameId) {
572
+ // Remove specific game from widget
573
+ const targetWidget = currentWidgets.widgets.find(w => w.data.type === type);
574
+ if (targetWidget) {
575
+ targetWidget.data.games = targetWidget.data.games.filter(g => g.game_id !== gameId);
576
+ }
577
+ } else {
578
+ // Remove entire widget
579
+ currentWidgets.widgets = currentWidgets.widgets.filter(w => w.data.type !== type);
580
+ }
581
+
582
+ // Update widgets via API
583
+ return this.client.api.users['@me'].profile.patch({
584
+ data: { widgets: currentWidgets.widgets },
585
+ });
586
+ }
587
+
588
+ /**
589
+ * Get the list of all widgets for the user
590
+ * @returns {Promise<Object>} Object containing widgets array
591
+ */
592
+ async widgetsList() {
593
+ try {
594
+ const data = await this.client.api.users['@me'].profile.get();
595
+ return data.widgets ? { widgets: data.widgets } : { widgets: [] };
596
+ } catch (error) {
597
+ // If profile endpoint doesn't exist or fails, return empty widgets
598
+ return { widgets: [] };
599
+ }
600
+ }
601
+
602
+ /**
603
+ * Set display name style with font, effect, and colors
604
+ * @param {string|number} fontName Font name or ID
605
+ * @param {string|number} effectName Effect name or ID
606
+ * @param {number|string} color1 Primary color (hex or decimal)
607
+ * @param {number|string} [color2] Secondary color for gradient effects (hex or decimal)
608
+ * @returns {Promise<ClientUser>}
609
+ * @example
610
+ * // Set Sans font with gradient effect
611
+ * client.user.setNameStyle('Sans', 'Gradient', 7183099, 6082490);
612
+ * // Set Tempo font with solid effect
613
+ * client.user.setNameStyle('Tempo', 'Solid', 7183099);
614
+ * // Using IDs directly
615
+ * client.user.setNameStyle(11, 2, 7183099, 6082490);
616
+ */
617
+ async setNameStyle(fontName, effectName, color1, color2 = null) {
618
+ // Font name/ID mapping
619
+ const fontMap = {
620
+ Sans: 11,
621
+ Tempo: 12,
622
+ Sakura: 3,
623
+ JellyBean: 4,
624
+ Modern: 6,
625
+ Medieval: 7,
626
+ '8Bit': 8,
627
+ Vampire: 10,
628
+ };
629
+
630
+ // Effect name/ID mapping
631
+ const effectMap = {
632
+ Solid: 1,
633
+ Gradient: 2,
634
+ Neon: 3,
635
+ Toon: 4,
636
+ Pop: 5,
637
+ };
638
+
639
+ // Resolve font ID
640
+ let fontId = typeof fontName === 'string' ? fontMap[fontName] : fontName;
641
+ if (!fontId) {
642
+ throw new TypeError(`Invalid font name. Must be one of: ${Object.keys(fontMap).join(', ')} or a valid font ID`);
643
+ }
644
+
645
+ // Resolve effect ID
646
+ let effectId = typeof effectName === 'string' ? effectMap[effectName] : effectName;
647
+ if (!effectId) {
648
+ throw new TypeError(
649
+ `Invalid effect name. Must be one of: ${Object.keys(effectMap).join(', ')} or a valid effect ID`,
650
+ );
651
+ }
652
+
653
+ // Resolve colors
654
+ const resolveColor = color => {
655
+ if (typeof color === 'string') {
656
+ // Handle hex colors
657
+ if (color.startsWith('#')) {
658
+ return parseInt(color.slice(1), 16);
659
+ }
660
+ return parseInt(color, 16);
661
+ }
662
+ return color;
663
+ };
664
+
665
+ const primaryColor = resolveColor(color1);
666
+ const colors = [primaryColor];
667
+
668
+ if (color2 !== null) {
669
+ const secondaryColor = resolveColor(color2);
670
+ colors.push(secondaryColor);
671
+ }
672
+
673
+ // Build the data object
674
+ const data = {
675
+ display_name_font_id: fontId,
676
+ display_name_effect_id: effectId,
677
+ display_name_colors: colors,
678
+ };
679
+
680
+ // Send PATCH request to Discord API
681
+ await this.client.api.users('@me').patch({ data });
682
+ return this;
683
+ }
684
+
685
+ /**
686
+ * Set the TAG of a guild.
687
+ * @param {GuildIDResolve} guild The guild with the tag
688
+ * @returns {Promise<ClientUser>}
689
+ */
690
+ setClan(guild) {
691
+ const id = this.client.guilds.resolveId(guild);
692
+ if (!id) throw new TypeError('INVALID_TYPE', 'guild', 'GuildResolvable');
693
+
694
+ return this.client.api.users['@me'].clan.put({ data: { identity_guild_id: id, identity_enabled: true } });
695
+ }
696
+
697
+ /**
698
+ * Remove the TAG from your profile
699
+ * @returns {Promise<ClientUser>}
700
+ */
701
+ deleteClan() {
702
+ return this.client.api.users['@me'].clan.put({ data: { identity_guild_id: null, identity_enabled: false } });
703
+ }
704
+ }
705
+
706
+ module.exports = ClientUser;