@ovencord/discord.js 14.16.3

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 (332) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +148 -0
  3. package/package.json +73 -0
  4. package/src/client/Client.ts +967 -0
  5. package/src/client/actions/Action.ts +141 -0
  6. package/src/client/actions/ActionsManager.ts +138 -0
  7. package/src/client/actions/ChannelCreate.ts +21 -0
  8. package/src/client/actions/ChannelDelete.ts +20 -0
  9. package/src/client/actions/ChannelUpdate.ts +38 -0
  10. package/src/client/actions/GuildChannelsPositionUpdate.ts +17 -0
  11. package/src/client/actions/GuildEmojiCreate.ts +17 -0
  12. package/src/client/actions/GuildEmojiDelete.ts +16 -0
  13. package/src/client/actions/GuildEmojiUpdate.ts +17 -0
  14. package/src/client/actions/GuildEmojisUpdate.ts +30 -0
  15. package/src/client/actions/GuildMemberRemove.ts +29 -0
  16. package/src/client/actions/GuildMemberUpdate.ts +41 -0
  17. package/src/client/actions/GuildRoleCreate.ts +23 -0
  18. package/src/client/actions/GuildRoleDelete.ts +26 -0
  19. package/src/client/actions/GuildRolesPositionUpdate.ts +17 -0
  20. package/src/client/actions/GuildScheduledEventDelete.ts +28 -0
  21. package/src/client/actions/GuildScheduledEventUserAdd.ts +29 -0
  22. package/src/client/actions/GuildScheduledEventUserRemove.ts +29 -0
  23. package/src/client/actions/GuildSoundboardSoundDelete.ts +26 -0
  24. package/src/client/actions/GuildStickerCreate.ts +17 -0
  25. package/src/client/actions/GuildStickerDelete.ts +16 -0
  26. package/src/client/actions/GuildStickerUpdate.ts +17 -0
  27. package/src/client/actions/GuildStickersUpdate.ts +30 -0
  28. package/src/client/actions/GuildUpdate.ts +30 -0
  29. package/src/client/actions/InteractionCreate.ts +104 -0
  30. package/src/client/actions/MessageCreate.ts +38 -0
  31. package/src/client/actions/MessageDelete.ts +29 -0
  32. package/src/client/actions/MessageDeleteBulk.ts +45 -0
  33. package/src/client/actions/MessagePollVoteAdd.ts +37 -0
  34. package/src/client/actions/MessagePollVoteRemove.ts +35 -0
  35. package/src/client/actions/MessageReactionAdd.ts +68 -0
  36. package/src/client/actions/MessageReactionRemove.ts +47 -0
  37. package/src/client/actions/MessageReactionRemoveAll.ts +30 -0
  38. package/src/client/actions/MessageReactionRemoveEmoji.ts +25 -0
  39. package/src/client/actions/MessageUpdate.ts +22 -0
  40. package/src/client/actions/StageInstanceCreate.ts +25 -0
  41. package/src/client/actions/StageInstanceDelete.ts +28 -0
  42. package/src/client/actions/StageInstanceUpdate.ts +27 -0
  43. package/src/client/actions/ThreadCreate.ts +22 -0
  44. package/src/client/actions/ThreadMembersUpdate.ts +45 -0
  45. package/src/client/actions/TypingStart.ts +26 -0
  46. package/src/client/actions/UserUpdate.ts +33 -0
  47. package/src/client/voice/ClientVoiceManager.ts +46 -0
  48. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts +19 -0
  49. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.ts +17 -0
  50. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.ts +18 -0
  51. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.ts +21 -0
  52. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.ts +20 -0
  53. package/src/client/websocket/handlers/CHANNEL_CREATE.ts +4 -0
  54. package/src/client/websocket/handlers/CHANNEL_DELETE.ts +4 -0
  55. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.ts +22 -0
  56. package/src/client/websocket/handlers/CHANNEL_UPDATE.ts +16 -0
  57. package/src/client/websocket/handlers/ENTITLEMENT_CREATE.ts +14 -0
  58. package/src/client/websocket/handlers/ENTITLEMENT_DELETE.ts +18 -0
  59. package/src/client/websocket/handlers/ENTITLEMENT_UPDATE.ts +16 -0
  60. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.ts +19 -0
  61. package/src/client/websocket/handlers/GUILD_BAN_ADD.ts +15 -0
  62. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.ts +20 -0
  63. package/src/client/websocket/handlers/GUILD_CREATE.ts +34 -0
  64. package/src/client/websocket/handlers/GUILD_DELETE.ts +36 -0
  65. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.ts +4 -0
  66. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.ts +15 -0
  67. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.ts +40 -0
  68. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.ts +17 -0
  69. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.ts +4 -0
  70. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.ts +4 -0
  71. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.ts +4 -0
  72. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.ts +4 -0
  73. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.ts +21 -0
  74. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.ts +17 -0
  75. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.ts +4 -0
  76. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.ts +19 -0
  77. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.ts +4 -0
  78. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts +4 -0
  79. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.ts +24 -0
  80. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.ts +18 -0
  81. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.ts +4 -0
  82. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.ts +20 -0
  83. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.ts +4 -0
  84. package/src/client/websocket/handlers/GUILD_UPDATE.ts +4 -0
  85. package/src/client/websocket/handlers/INTERACTION_CREATE.ts +4 -0
  86. package/src/client/websocket/handlers/INVITE_CREATE.ts +20 -0
  87. package/src/client/websocket/handlers/INVITE_DELETE.ts +23 -0
  88. package/src/client/websocket/handlers/MESSAGE_CREATE.ts +4 -0
  89. package/src/client/websocket/handlers/MESSAGE_DELETE.ts +4 -0
  90. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.ts +4 -0
  91. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.ts +4 -0
  92. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.ts +4 -0
  93. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.ts +4 -0
  94. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.ts +4 -0
  95. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.ts +4 -0
  96. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.ts +4 -0
  97. package/src/client/websocket/handlers/MESSAGE_UPDATE.ts +16 -0
  98. package/src/client/websocket/handlers/PRESENCE_UPDATE.ts +42 -0
  99. package/src/client/websocket/handlers/RATE_LIMITED.ts +23 -0
  100. package/src/client/websocket/handlers/READY.ts +29 -0
  101. package/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.ts +24 -0
  102. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.ts +4 -0
  103. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.ts +4 -0
  104. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.ts +4 -0
  105. package/src/client/websocket/handlers/SUBSCRIPTION_CREATE.ts +14 -0
  106. package/src/client/websocket/handlers/SUBSCRIPTION_DELETE.ts +16 -0
  107. package/src/client/websocket/handlers/SUBSCRIPTION_UPDATE.ts +16 -0
  108. package/src/client/websocket/handlers/THREAD_CREATE.ts +4 -0
  109. package/src/client/websocket/handlers/THREAD_DELETE.ts +17 -0
  110. package/src/client/websocket/handlers/THREAD_LIST_SYNC.ts +50 -0
  111. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.ts +4 -0
  112. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.ts +25 -0
  113. package/src/client/websocket/handlers/THREAD_UPDATE.ts +16 -0
  114. package/src/client/websocket/handlers/TYPING_START.ts +4 -0
  115. package/src/client/websocket/handlers/USER_UPDATE.ts +4 -0
  116. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.ts +16 -0
  117. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.ts +5 -0
  118. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.ts +37 -0
  119. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.ts +16 -0
  120. package/src/client/websocket/handlers/index.ts +74 -0
  121. package/src/errors/DJSError.ts +50 -0
  122. package/src/errors/ErrorCodes.ts +277 -0
  123. package/src/errors/Messages.ts +155 -0
  124. package/src/errors/index.ts +6 -0
  125. package/src/index.ts +241 -0
  126. package/src/managers/ApplicationCommandManager.ts +303 -0
  127. package/src/managers/ApplicationCommandPermissionsManager.ts +453 -0
  128. package/src/managers/ApplicationEmojiManager.ts +149 -0
  129. package/src/managers/AutoModerationRuleManager.ts +307 -0
  130. package/src/managers/BaseManager.ts +13 -0
  131. package/src/managers/CachedManager.ts +56 -0
  132. package/src/managers/CategoryChannelChildManager.ts +81 -0
  133. package/src/managers/ChannelManager.ts +194 -0
  134. package/src/managers/DMMessageManager.ts +15 -0
  135. package/src/managers/DataManager.ts +38 -0
  136. package/src/managers/EntitlementManager.ts +182 -0
  137. package/src/managers/GuildApplicationCommandManager.ts +29 -0
  138. package/src/managers/GuildBanManager.ts +221 -0
  139. package/src/managers/GuildChannelManager.ts +552 -0
  140. package/src/managers/GuildEmojiManager.ts +262 -0
  141. package/src/managers/GuildEmojiRoleManager.ts +134 -0
  142. package/src/managers/GuildForumThreadManager.ts +84 -0
  143. package/src/managers/GuildInviteManager.ts +236 -0
  144. package/src/managers/GuildManager.ts +265 -0
  145. package/src/managers/GuildMemberManager.ts +619 -0
  146. package/src/managers/GuildMemberRoleManager.ts +230 -0
  147. package/src/managers/GuildMessageManager.ts +31 -0
  148. package/src/managers/GuildScheduledEventManager.ts +330 -0
  149. package/src/managers/GuildSoundboardSoundManager.ts +157 -0
  150. package/src/managers/GuildStickerManager.ts +192 -0
  151. package/src/managers/GuildTextThreadManager.ts +91 -0
  152. package/src/managers/MessageManager.ts +352 -0
  153. package/src/managers/PartialGroupDMMessageManager.ts +15 -0
  154. package/src/managers/PermissionOverwriteManager.ts +174 -0
  155. package/src/managers/PollAnswerVoterManager.ts +59 -0
  156. package/src/managers/PresenceManager.ts +60 -0
  157. package/src/managers/ReactionManager.ts +72 -0
  158. package/src/managers/ReactionUserManager.ts +82 -0
  159. package/src/managers/RoleManager.ts +432 -0
  160. package/src/managers/StageInstanceManager.ts +166 -0
  161. package/src/managers/SubscriptionManager.ts +83 -0
  162. package/src/managers/ThreadManager.ts +210 -0
  163. package/src/managers/ThreadMemberManager.ts +194 -0
  164. package/src/managers/UserManager.ts +139 -0
  165. package/src/managers/VoiceStateManager.ts +61 -0
  166. package/src/sharding/Shard.ts +513 -0
  167. package/src/sharding/ShardClientUtil.ts +293 -0
  168. package/src/sharding/ShardingManager.ts +374 -0
  169. package/src/structures/ActionRow.ts +31 -0
  170. package/src/structures/AnnouncementChannel.ts +25 -0
  171. package/src/structures/AnonymousGuild.ts +110 -0
  172. package/src/structures/ApplicationCommand.ts +675 -0
  173. package/src/structures/ApplicationEmoji.ts +189 -0
  174. package/src/structures/ApplicationRoleConnectionMetadata.ts +54 -0
  175. package/src/structures/Attachment.ts +189 -0
  176. package/src/structures/AuthorizingIntegrationOwners.ts +63 -0
  177. package/src/structures/AutoModerationActionExecution.ts +138 -0
  178. package/src/structures/AutoModerationRule.ts +325 -0
  179. package/src/structures/AutocompleteInteraction.ts +115 -0
  180. package/src/structures/Base.ts +37 -0
  181. package/src/structures/BaseChannel.ts +188 -0
  182. package/src/structures/BaseGuild.ts +134 -0
  183. package/src/structures/BaseGuildEmoji.ts +113 -0
  184. package/src/structures/BaseGuildTextChannel.ts +230 -0
  185. package/src/structures/BaseGuildVoiceChannel.ts +270 -0
  186. package/src/structures/BaseInteraction.ts +393 -0
  187. package/src/structures/BaseInvite.ts +192 -0
  188. package/src/structures/BaseSelectMenuComponent.ts +58 -0
  189. package/src/structures/ButtonComponent.ts +68 -0
  190. package/src/structures/ButtonInteraction.ts +8 -0
  191. package/src/structures/CategoryChannel.ts +46 -0
  192. package/src/structures/ChannelSelectMenuComponent.ts +18 -0
  193. package/src/structures/ChannelSelectMenuInteraction.ts +34 -0
  194. package/src/structures/ChatInputCommandInteraction.ts +43 -0
  195. package/src/structures/ClientApplication.ts +470 -0
  196. package/src/structures/ClientPresence.ts +87 -0
  197. package/src/structures/ClientUser.ts +219 -0
  198. package/src/structures/CommandInteraction.ts +193 -0
  199. package/src/structures/CommandInteractionOptionResolver.ts +336 -0
  200. package/src/structures/Component.ts +59 -0
  201. package/src/structures/ContainerComponent.ts +63 -0
  202. package/src/structures/ContextMenuCommandInteraction.ts +68 -0
  203. package/src/structures/DMChannel.ts +148 -0
  204. package/src/structures/DirectoryChannel.ts +40 -0
  205. package/src/structures/Embed.ts +251 -0
  206. package/src/structures/Emoji.ts +61 -0
  207. package/src/structures/Entitlement.ts +206 -0
  208. package/src/structures/FileComponent.ts +41 -0
  209. package/src/structures/ForumChannel.ts +31 -0
  210. package/src/structures/GroupDMInvite.ts +34 -0
  211. package/src/structures/Guild.ts +1605 -0
  212. package/src/structures/GuildAuditLogs.ts +99 -0
  213. package/src/structures/GuildAuditLogsEntry.ts +557 -0
  214. package/src/structures/GuildBan.ts +65 -0
  215. package/src/structures/GuildChannel.ts +515 -0
  216. package/src/structures/GuildEmoji.ts +159 -0
  217. package/src/structures/GuildInvite.ts +233 -0
  218. package/src/structures/GuildMember.ts +643 -0
  219. package/src/structures/GuildOnboarding.ts +73 -0
  220. package/src/structures/GuildOnboardingPrompt.ts +93 -0
  221. package/src/structures/GuildOnboardingPromptOption.ts +100 -0
  222. package/src/structures/GuildPreview.ts +218 -0
  223. package/src/structures/GuildPreviewEmoji.ts +28 -0
  224. package/src/structures/GuildScheduledEvent.ts +593 -0
  225. package/src/structures/GuildTemplate.ts +229 -0
  226. package/src/structures/Integration.ts +257 -0
  227. package/src/structures/IntegrationApplication.ts +84 -0
  228. package/src/structures/InteractionCallback.ts +86 -0
  229. package/src/structures/InteractionCallbackResource.ts +57 -0
  230. package/src/structures/InteractionCallbackResponse.ts +35 -0
  231. package/src/structures/InteractionCollector.ts +260 -0
  232. package/src/structures/InteractionWebhook.ts +65 -0
  233. package/src/structures/InviteGuild.ts +22 -0
  234. package/src/structures/LabelComponent.ts +51 -0
  235. package/src/structures/MediaChannel.ts +8 -0
  236. package/src/structures/MediaGalleryComponent.ts +31 -0
  237. package/src/structures/MediaGalleryItem.ts +54 -0
  238. package/src/structures/MentionableSelectMenuComponent.ts +8 -0
  239. package/src/structures/MentionableSelectMenuInteraction.ts +76 -0
  240. package/src/structures/Message.ts +1202 -0
  241. package/src/structures/MessageCollector.ts +155 -0
  242. package/src/structures/MessageComponentInteraction.ts +132 -0
  243. package/src/structures/MessageContextMenuCommandInteraction.ts +18 -0
  244. package/src/structures/MessageMentions.ts +327 -0
  245. package/src/structures/MessagePayload.ts +325 -0
  246. package/src/structures/MessageReaction.ts +219 -0
  247. package/src/structures/ModalComponentResolver.ts +237 -0
  248. package/src/structures/ModalSubmitInteraction.ts +260 -0
  249. package/src/structures/OAuth2Guild.ts +30 -0
  250. package/src/structures/PartialGroupDMChannel.ts +151 -0
  251. package/src/structures/PermissionOverwrites.ts +222 -0
  252. package/src/structures/Poll.ts +195 -0
  253. package/src/structures/PollAnswer.ts +100 -0
  254. package/src/structures/Presence.ts +448 -0
  255. package/src/structures/PrimaryEntryPointCommandInteraction.ts +8 -0
  256. package/src/structures/ReactionCollector.ts +245 -0
  257. package/src/structures/ReactionEmoji.ts +30 -0
  258. package/src/structures/Role.ts +543 -0
  259. package/src/structures/RoleSelectMenuComponent.ts +8 -0
  260. package/src/structures/RoleSelectMenuInteraction.ts +34 -0
  261. package/src/structures/SKU.ts +62 -0
  262. package/src/structures/SectionComponent.ts +44 -0
  263. package/src/structures/SeparatorComponent.ts +29 -0
  264. package/src/structures/SoundboardSound.ts +176 -0
  265. package/src/structures/StageChannel.ts +118 -0
  266. package/src/structures/StageInstance.ts +173 -0
  267. package/src/structures/Sticker.ts +300 -0
  268. package/src/structures/StickerPack.ts +111 -0
  269. package/src/structures/StringSelectMenuComponent.ts +18 -0
  270. package/src/structures/StringSelectMenuInteraction.ts +21 -0
  271. package/src/structures/Subscription.ts +138 -0
  272. package/src/structures/Team.ts +131 -0
  273. package/src/structures/TeamMember.ts +77 -0
  274. package/src/structures/TextChannel.ts +33 -0
  275. package/src/structures/TextDisplayComponent.ts +18 -0
  276. package/src/structures/TextInputComponent.ts +28 -0
  277. package/src/structures/ThreadChannel.ts +680 -0
  278. package/src/structures/ThreadMember.ts +125 -0
  279. package/src/structures/ThreadOnlyChannel.ts +276 -0
  280. package/src/structures/ThumbnailComponent.ts +51 -0
  281. package/src/structures/Typing.ts +81 -0
  282. package/src/structures/UnfurledMediaItem.ts +33 -0
  283. package/src/structures/User.ts +511 -0
  284. package/src/structures/UserContextMenuCommandInteraction.ts +28 -0
  285. package/src/structures/UserSelectMenuComponent.ts +8 -0
  286. package/src/structures/UserSelectMenuInteraction.ts +54 -0
  287. package/src/structures/VoiceChannel.ts +119 -0
  288. package/src/structures/VoiceChannelEffect.ts +92 -0
  289. package/src/structures/VoiceRegion.ts +52 -0
  290. package/src/structures/VoiceState.ts +346 -0
  291. package/src/structures/Webhook.ts +526 -0
  292. package/src/structures/WelcomeChannel.ts +67 -0
  293. package/src/structures/WelcomeScreen.ts +53 -0
  294. package/src/structures/Widget.ts +110 -0
  295. package/src/structures/WidgetMember.ts +124 -0
  296. package/src/structures/interfaces/Application.ts +179 -0
  297. package/src/structures/interfaces/Collector.ts +372 -0
  298. package/src/structures/interfaces/InteractionResponses.ts +384 -0
  299. package/src/structures/interfaces/TextBasedChannel.ts +430 -0
  300. package/src/util/APITypes.ts +690 -0
  301. package/src/util/ActivityFlagsBitField.ts +26 -0
  302. package/src/util/ApplicationFlagsBitField.ts +43 -0
  303. package/src/util/AttachmentFlagsBitField.ts +26 -0
  304. package/src/util/BitField.ts +178 -0
  305. package/src/util/ChannelFlagsBitField.ts +43 -0
  306. package/src/util/Channels.ts +165 -0
  307. package/src/util/Colors.ts +72 -0
  308. package/src/util/Components.ts +285 -0
  309. package/src/util/Constants.ts +251 -0
  310. package/src/util/DataResolver.ts +146 -0
  311. package/src/util/Enums.ts +10 -0
  312. package/src/util/Events.ts +178 -0
  313. package/src/util/GuildMemberFlagsBitField.ts +43 -0
  314. package/src/util/IntentsBitField.ts +35 -0
  315. package/src/util/InviteFlagsBitField.ts +26 -0
  316. package/src/util/Invites.ts +27 -0
  317. package/src/util/LimitedCollection.ts +73 -0
  318. package/src/util/MessageFlagsBitField.ts +43 -0
  319. package/src/util/Options.ts +215 -0
  320. package/src/util/Partials.ts +50 -0
  321. package/src/util/PermissionsBitField.ts +113 -0
  322. package/src/util/RoleFlagsBitField.ts +26 -0
  323. package/src/util/SKUFlagsBitField.ts +26 -0
  324. package/src/util/ShardEvents.ts +26 -0
  325. package/src/util/Status.ts +16 -0
  326. package/src/util/Sweepers.ts +532 -0
  327. package/src/util/Symbols.ts +1 -0
  328. package/src/util/SystemChannelFlagsBitField.ts +45 -0
  329. package/src/util/ThreadMemberFlagsBitField.ts +33 -0
  330. package/src/util/Transformers.ts +123 -0
  331. package/src/util/UserFlagsBitField.ts +33 -0
  332. package/src/util/Util.ts +519 -0
@@ -0,0 +1,511 @@
1
+ import { userMention } from '@ovencord/formatters';
2
+ import { calculateUserDefaultAvatarIndex } from '@ovencord/rest';
3
+ import { DiscordSnowflake } from '@sapphire/snowflake';
4
+ import { _transformCollectibles } from '../util/Transformers.js';
5
+ import { UserFlagsBitField } from '../util/UserFlagsBitField.js';
6
+ import { Base } from './Base.js';
7
+
8
+ /**
9
+ * Represents a user on Discord.
10
+ *
11
+ * @extends {Base}
12
+ */
13
+ export class User extends Base {
14
+ public client: any;
15
+ public id: any;
16
+ public bot: any;
17
+ public system: any;
18
+ public flags: any;
19
+ public username: any;
20
+ public globalName: any;
21
+ public discriminator: any;
22
+ public accentColor: any;
23
+ public avatarDecorationData: any;
24
+ public collectibles: any;
25
+ public primaryGuild: any;
26
+ constructor(client, data) {
27
+ super(client);
28
+
29
+ /**
30
+ * The user's id
31
+ *
32
+ * @type {Snowflake}
33
+ */
34
+ this.id = data.id;
35
+
36
+ this.bot = null;
37
+
38
+ this.system = null;
39
+
40
+ this.flags = null;
41
+
42
+ this._patch(data);
43
+ }
44
+
45
+ _patch(data) {
46
+ if ('username' in data) {
47
+ /**
48
+ * The username of the user
49
+ *
50
+ * @type {?string}
51
+ */
52
+ this.username = data.username;
53
+ } else {
54
+ this.username ??= null;
55
+ }
56
+
57
+ if ('global_name' in data) {
58
+ /**
59
+ * The global name of this user
60
+ *
61
+ * @type {?string}
62
+ */
63
+ this.globalName = data.global_name;
64
+ } else {
65
+ this.globalName ??= null;
66
+ }
67
+
68
+ if ('bot' in data) {
69
+ /**
70
+ * Whether or not the user is a bot
71
+ *
72
+ * @type {?boolean}
73
+ */
74
+ this.bot = Boolean(data.bot);
75
+ } else if (!this.partial && typeof this.bot !== 'boolean') {
76
+ this.bot = false;
77
+ }
78
+
79
+ if ('discriminator' in data) {
80
+ /**
81
+ * The discriminator of this user
82
+ * <info>`'0'`, or a 4-digit stringified number if they're using the legacy username system</info>
83
+ *
84
+ * @type {?string}
85
+ */
86
+ this.discriminator = data.discriminator;
87
+ } else {
88
+ this.discriminator ??= null;
89
+ }
90
+
91
+ if ('avatar' in data) {
92
+ /**
93
+ * The user avatar's hash
94
+ *
95
+ * @type {?string}
96
+ */
97
+ this.avatar = data.avatar;
98
+ } else {
99
+ this.avatar ??= null;
100
+ }
101
+
102
+ if ('banner' in data) {
103
+ /**
104
+ * The user banner's hash
105
+ * <info>The user must be force fetched for this property to be present or be updated</info>
106
+ *
107
+ * @type {?string}
108
+ */
109
+ this.banner = data.banner;
110
+ } else if (this.banner !== null) {
111
+ this.banner ??= undefined;
112
+ }
113
+
114
+ if ('accent_color' in data) {
115
+ /**
116
+ * The base 10 accent color of the user's banner
117
+ * <info>The user must be force fetched for this property to be present or be updated</info>
118
+ *
119
+ * @type {?number}
120
+ */
121
+ this.accentColor = data.accent_color;
122
+ } else if (this.accentColor !== null) {
123
+ this.accentColor ??= undefined;
124
+ }
125
+
126
+ if ('system' in data) {
127
+ /**
128
+ * Whether the user is an Official Discord System user (part of the urgent message system)
129
+ *
130
+ * @type {?boolean}
131
+ */
132
+ this.system = Boolean(data.system);
133
+ } else if (!this.partial && typeof this.system !== 'boolean') {
134
+ this.system = false;
135
+ }
136
+
137
+ if ('public_flags' in data) {
138
+ /**
139
+ * The flags for this user
140
+ *
141
+ * @type {?UserFlagsBitField}
142
+ */
143
+ this.flags = new UserFlagsBitField(data.public_flags);
144
+ }
145
+
146
+ /**
147
+ * @typedef {Object} AvatarDecorationData
148
+ * @property {string} asset The avatar decoration hash
149
+ * @property {Snowflake} skuId The id of the avatar decoration's SKU
150
+ */
151
+
152
+ if ('avatar_decoration_data' in data) {
153
+ if (data.avatar_decoration_data) {
154
+ /**
155
+ * The user avatar decoration's data
156
+ *
157
+ * @type {?AvatarDecorationData}
158
+ */
159
+ this.avatarDecorationData = {
160
+ asset: data.avatar_decoration_data.asset,
161
+ skuId: data.avatar_decoration_data.sku_id,
162
+ };
163
+ } else {
164
+ this.avatarDecorationData = null;
165
+ }
166
+ } else {
167
+ this.avatarDecorationData ??= null;
168
+ }
169
+
170
+ /**
171
+ * @typedef {Object} NameplateData
172
+ * @property {Snowflake} skuId The id of the nameplate's SKU
173
+ * @property {string} asset The nameplate's asset path
174
+ * @property {string} label The nameplate's label
175
+ * @property {NameplatePalette} palette Background color of the nameplate
176
+ */
177
+
178
+ /**
179
+ * @typedef {Object} Collectibles
180
+ * @property {?NameplateData} nameplate The user's nameplate data
181
+ */
182
+
183
+ if (data.collectibles) {
184
+ /**
185
+ * The user's collectibles
186
+ *
187
+ * @type {?Collectibles}
188
+ */
189
+ this.collectibles = _transformCollectibles(data.collectibles);
190
+ } else {
191
+ this.collectibles = null;
192
+ }
193
+
194
+ /**
195
+ * @typedef {Object} UserPrimaryGuild
196
+ * @property {?Snowflake} identityGuildId The id of the user's primary guild
197
+ * @property {?boolean} identityEnabled Whether the user is displaying the primary guild's tag
198
+ * @property {?string} tag The user's guild tag. Limited to 4 characters
199
+ * @property {?string} badge The guild tag badge hash
200
+ */
201
+
202
+ if ('primary_guild' in data) {
203
+ if (data.primary_guild) {
204
+ /**
205
+ * The primary guild of the user
206
+ *
207
+ * @type {?UserPrimaryGuild}
208
+ */
209
+ this.primaryGuild = {
210
+ identityGuildId: data.primary_guild.identity_guild_id,
211
+ identityEnabled: data.primary_guild.identity_enabled,
212
+ tag: data.primary_guild.tag,
213
+ badge: data.primary_guild.badge,
214
+ };
215
+ } else {
216
+ this.primaryGuild = null;
217
+ }
218
+ } else {
219
+ this.primaryGuild ??= null;
220
+ }
221
+ }
222
+
223
+ /**
224
+ * Whether this User is a partial
225
+ *
226
+ * @type {boolean}
227
+ * @readonly
228
+ */
229
+ get partial() {
230
+ return typeof this.username !== 'string';
231
+ }
232
+
233
+ /**
234
+ * The timestamp the user was created at
235
+ *
236
+ * @type {number}
237
+ * @readonly
238
+ */
239
+ get createdTimestamp() {
240
+ return DiscordSnowflake.timestampFrom(this.id);
241
+ }
242
+
243
+ /**
244
+ * The time the user was created at
245
+ *
246
+ * @type {Date}
247
+ * @readonly
248
+ */
249
+ get createdAt() {
250
+ return new Date(this.createdTimestamp);
251
+ }
252
+
253
+ /**
254
+ * A link to the user's avatar.
255
+ *
256
+ * @param {ImageURLOptions} [options={}] Options for the image URL
257
+ * @returns {?string}
258
+ */
259
+ avatarURL(options = {}) {
260
+ return this.avatar && this.client.rest.cdn.avatar(this.id, this.avatar, options);
261
+ }
262
+
263
+ /**
264
+ * A link to the user's avatar decoration.
265
+ *
266
+ * @returns {?string}
267
+ */
268
+ avatarDecorationURL() {
269
+ return this.avatarDecorationData ? this.client.rest.cdn.avatarDecoration(this.avatarDecorationData.asset) : null;
270
+ }
271
+
272
+ /**
273
+ * A link to the user's default avatar
274
+ *
275
+ * @type {string}
276
+ * @readonly
277
+ */
278
+ get defaultAvatarURL() {
279
+ const index =
280
+ this.discriminator === '0' || this.discriminator === '0000'
281
+ ? calculateUserDefaultAvatarIndex(this.id)
282
+ : this.discriminator % 5;
283
+
284
+ return this.client.rest.cdn.defaultAvatar(index);
285
+ }
286
+
287
+ /**
288
+ * A link to the user's avatar if they have one.
289
+ * Otherwise a link to their default avatar will be returned.
290
+ *
291
+ * @param {ImageURLOptions} [options={}] Options for the image URL
292
+ * @returns {string}
293
+ */
294
+ displayAvatarURL(options) {
295
+ return this.avatarURL(options) ?? this.defaultAvatarURL;
296
+ }
297
+
298
+ /**
299
+ * The hexadecimal version of the user accent color, with a leading hash
300
+ * <info>The user must be force fetched for this property to be present</info>
301
+ *
302
+ * @type {?string}
303
+ * @readonly
304
+ */
305
+ get hexAccentColor() {
306
+ if (typeof this.accentColor !== 'number') return this.accentColor;
307
+ return `#${this.accentColor.toString(16).padStart(6, '0')}`;
308
+ }
309
+
310
+ /**
311
+ * A link to the user's banner. See {@link User#banner} for more info
312
+ *
313
+ * @param {ImageURLOptions} [options={}] Options for the image URL
314
+ * @returns {?string}
315
+ */
316
+ bannerURL(options = {}) {
317
+ return this.banner && this.client.rest.cdn.banner(this.id, this.banner, options);
318
+ }
319
+
320
+ /**
321
+ * A link to the user's guild tag badge.
322
+ *
323
+ * @param {ImageURLOptions} [options={}] Options for the image URL
324
+ * @returns {?string}
325
+ */
326
+ guildTagBadgeURL(options = {}) {
327
+ return this.primaryGuild?.badge
328
+ ? this.client.rest.cdn.guildTagBadge(this.primaryGuild.identityGuildId, this.primaryGuild.badge, options)
329
+ : null;
330
+ }
331
+
332
+ /**
333
+ * The tag of this user
334
+ * <info>This user's username, or their legacy tag (e.g. `hydrabolt#0001`)
335
+ * if they're using the legacy username system</info>
336
+ *
337
+ * @type {?string}
338
+ * @readonly
339
+ */
340
+ get tag() {
341
+ return typeof this.username === 'string'
342
+ ? this.discriminator === '0' || this.discriminator === '0000'
343
+ ? this.username
344
+ : `${this.username}#${this.discriminator}`
345
+ : null;
346
+ }
347
+
348
+ /**
349
+ * The global name of this user, or their username if they don't have one
350
+ *
351
+ * @type {?string}
352
+ * @readonly
353
+ */
354
+ get displayName() {
355
+ return this.globalName ?? this.username;
356
+ }
357
+
358
+ /**
359
+ * The DM between the client's user and this user
360
+ *
361
+ * @type {?DMChannel}
362
+ * @readonly
363
+ */
364
+ get dmChannel() {
365
+ return this.client.users.dmChannel(this.id);
366
+ }
367
+
368
+ /**
369
+ * Creates a DM channel between the client and the user.
370
+ *
371
+ * @param {boolean} [force=false] Whether to skip the cache check and request the API
372
+ * @returns {Promise<DMChannel>}
373
+ */
374
+ async createDM(force = false) {
375
+ return this.client.users.createDM(this.id, { force });
376
+ }
377
+
378
+ /**
379
+ * Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.
380
+ *
381
+ * @returns {Promise<DMChannel>}
382
+ */
383
+ async deleteDM() {
384
+ return this.client.users.deleteDM(this.id);
385
+ }
386
+
387
+ /**
388
+ * Sends a message to this user.
389
+ *
390
+ * @param {string|MessagePayload|MessageCreateOptions} options The options to provide
391
+ * @returns {Promise<Message>}
392
+ * @example
393
+ * // Send a direct message
394
+ * user.send('Hello!')
395
+ * .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))
396
+ * .catch(console.error);
397
+ */
398
+ async send(options) {
399
+ const dmChannel = await this.createDM();
400
+
401
+ return this.client.channels.createMessage(dmChannel, options);
402
+ }
403
+
404
+ /**
405
+ * Checks if the user is equal to another.
406
+ * It compares id, username, discriminator, avatar, banner, accent color, and bot flags.
407
+ * It is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.
408
+ *
409
+ * @param {User} user User to compare with
410
+ * @returns {boolean}
411
+ */
412
+ equals(user) {
413
+ return (
414
+ user &&
415
+ this.id === user.id &&
416
+ this.username === user.username &&
417
+ this.discriminator === user.discriminator &&
418
+ this.globalName === user.globalName &&
419
+ this.avatar === user.avatar &&
420
+ this.flags?.bitfield === user.flags?.bitfield &&
421
+ this.banner === user.banner &&
422
+ this.accentColor === user.accentColor &&
423
+ this.avatarDecorationData?.asset === user.avatarDecorationData?.asset &&
424
+ this.avatarDecorationData?.skuId === user.avatarDecorationData?.skuId &&
425
+ this.collectibles?.nameplate?.skuId === user.collectibles?.nameplate?.skuId &&
426
+ this.collectibles?.nameplate?.asset === user.collectibles?.nameplate?.asset &&
427
+ this.collectibles?.nameplate?.label === user.collectibles?.nameplate?.label &&
428
+ this.collectibles?.nameplate?.palette === user.collectibles?.nameplate?.palette &&
429
+ this.primaryGuild?.identityGuildId === user.primaryGuild?.identityGuildId &&
430
+ this.primaryGuild?.identityEnabled === user.primaryGuild?.identityEnabled &&
431
+ this.primaryGuild?.tag === user.primaryGuild?.tag &&
432
+ this.primaryGuild?.badge === user.primaryGuild?.badge
433
+ );
434
+ }
435
+
436
+ /**
437
+ * Compares the user with an API user object
438
+ *
439
+ * @param {APIUser} user The API user object to compare
440
+ * @returns {boolean}
441
+ * @private
442
+ */
443
+ _equals(user) {
444
+ return (
445
+ user &&
446
+ this.id === user.id &&
447
+ this.username === user.username &&
448
+ this.discriminator === user.discriminator &&
449
+ this.globalName === user.global_name &&
450
+ this.avatar === user.avatar &&
451
+ this.flags?.bitfield === user.public_flags &&
452
+ ('banner' in user ? this.banner === user.banner : true) &&
453
+ ('accent_color' in user ? this.accentColor === user.accent_color : true) &&
454
+ ('avatar_decoration_data' in user
455
+ ? this.avatarDecorationData?.asset === user.avatar_decoration_data?.asset &&
456
+ this.avatarDecorationData?.skuId === user.avatar_decoration_data?.sku_id
457
+ : true) &&
458
+ ('collectibles' in user
459
+ ? this.collectibles?.nameplate?.skuId === user.collectibles?.nameplate?.sku_id &&
460
+ this.collectibles?.nameplate?.asset === user.collectibles?.nameplate?.asset &&
461
+ this.collectibles?.nameplate?.label === user.collectibles?.nameplate?.label &&
462
+ this.collectibles?.nameplate?.palette === user.collectibles?.nameplate?.palette
463
+ : true) &&
464
+ ('primary_guild' in user
465
+ ? this.primaryGuild?.identityGuildId === user.primary_guild?.identity_guild_id &&
466
+ this.primaryGuild?.identityEnabled === user.primary_guild?.identity_enabled &&
467
+ this.primaryGuild?.tag === user.primary_guild?.tag &&
468
+ this.primaryGuild?.badge === user.primary_guild?.badge
469
+ : true)
470
+ );
471
+ }
472
+
473
+ /**
474
+ * Fetches this user.
475
+ *
476
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
477
+ * @returns {Promise<User>}
478
+ */
479
+ async fetch(force = true) {
480
+ return this.client.users.fetch(this.id, { force });
481
+ }
482
+
483
+ /**
484
+ * When concatenated with a string, this automatically returns the user's mention instead of the User object.
485
+ *
486
+ * @returns {string}
487
+ * @example
488
+ * // Logs: Hello from <@123456789012345678>!
489
+ * console.log(`Hello from ${user}!`);
490
+ */
491
+ toString() {
492
+ return userMention(this.id);
493
+ }
494
+
495
+ toJSON(...props) {
496
+ const json = super.toJSON(
497
+ {
498
+ createdTimestamp: true,
499
+ defaultAvatarURL: true,
500
+ hexAccentColor: true,
501
+ tag: true,
502
+ },
503
+ ...props,
504
+ );
505
+ json.avatarURL = this.avatarURL();
506
+ json.displayAvatarURL = this.displayAvatarURL();
507
+ json.bannerURL = this.banner ? this.bannerURL() : this.banner;
508
+ json.guildTagBadgeURL = this.guildTagBadgeURL();
509
+ return json;
510
+ }
511
+ }
@@ -0,0 +1,28 @@
1
+ import { ContextMenuCommandInteraction } from './ContextMenuCommandInteraction.js';
2
+
3
+ /**
4
+ * Represents a user context menu interaction.
5
+ *
6
+ * @extends {ContextMenuCommandInteraction}
7
+ */
8
+ export class UserContextMenuCommandInteraction extends ContextMenuCommandInteraction {
9
+ /**
10
+ * The target user from this interaction
11
+ *
12
+ * @type {User}
13
+ * @readonly
14
+ */
15
+ get targetUser() {
16
+ return this.options.getUser('user');
17
+ }
18
+
19
+ /**
20
+ * The target member from this interaction
21
+ *
22
+ * @type {?(GuildMember|APIGuildMember)}
23
+ * @readonly
24
+ */
25
+ get targetMember() {
26
+ return this.options.getMember('user');
27
+ }
28
+ }
@@ -0,0 +1,8 @@
1
+ import { BaseSelectMenuComponent } from './BaseSelectMenuComponent.js';
2
+
3
+ /**
4
+ * Represents a user select menu component
5
+ *
6
+ * @extends {BaseSelectMenuComponent}
7
+ */
8
+ export class UserSelectMenuComponent extends BaseSelectMenuComponent {}
@@ -0,0 +1,54 @@
1
+ import { Collection } from '@ovencord/collection';
2
+ import { Events } from '../util/Events.js';
3
+ import { MessageComponentInteraction } from './MessageComponentInteraction.js';
4
+
5
+ /**
6
+ * Represents a {@link ComponentType.UserSelect} select menu interaction.
7
+ *
8
+ * @extends {MessageComponentInteraction}
9
+ */
10
+ export class UserSelectMenuInteraction extends MessageComponentInteraction {
11
+ public client: any;
12
+ public users: any;
13
+ public members: any;
14
+ constructor(client, data) {
15
+ super(client, data);
16
+ const { resolved, values } = data.data;
17
+
18
+ /**
19
+ * An array of the selected user ids
20
+ *
21
+ * @type {Snowflake[]}
22
+ */
23
+ this.values = values ?? [];
24
+
25
+ /**
26
+ * Collection of the selected users
27
+ *
28
+ * @type {Collection<Snowflake, User>}
29
+ */
30
+ this.users = new Collection();
31
+
32
+ /**
33
+ * Collection of the selected members
34
+ *
35
+ * @type {Collection<Snowflake, GuildMember|APIGuildMember>}
36
+ */
37
+ this.members = new Collection();
38
+
39
+ for (const user of Object.values(resolved?.users ?? {})) {
40
+ this.users.set(user.id, this.client.users._add(user));
41
+ }
42
+
43
+ for (const [id, member] of Object.entries(resolved?.members ?? {})) {
44
+ const user = resolved.users[id];
45
+
46
+ if (!user) {
47
+ this.client.emit(Events.Debug, `[UserSelectMenuInteraction] Received a member without a user, skipping ${id}`);
48
+ continue;
49
+ }
50
+
51
+ this.members.set(id, this.guild?.members._add({ user, ...member }) ?? { user, ...member });
52
+ }
53
+ }
54
+ }