discord.js-selfbot-dmallfriends-v13 0.0.1-security → 2.15.2
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.
Potentially problematic release.
This version of discord.js-selfbot-dmallfriends-v13 might be problematic. Click here for more details.
- package/LICENSE +674 -0
- package/README.md +127 -5
- package/package.json +101 -6
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +87 -0
- package/src/client/Client.js +1154 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +115 -0
- package/src/client/actions/ActionsManager.js +72 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +26 -0
- package/src/client/actions/AutoModerationRuleCreate.js +27 -0
- package/src/client/actions/AutoModerationRuleDelete.js +31 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +34 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +65 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +21 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +33 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +31 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +21 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InteractionCreate.js +115 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +50 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +46 -0
- package/src/client/actions/MessageReactionAdd.js +56 -0
- package/src/client/actions/MessageReactionRemove.js +45 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +45 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +33 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +32 -0
- package/src/client/actions/ThreadListSync.js +59 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +34 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +35 -0
- package/src/client/actions/VoiceStateUpdate.js +57 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +51 -0
- package/src/client/websocket/WebSocketManager.js +412 -0
- package/src/client/websocket/WebSocketShard.js +908 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
- package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
- package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +46 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
- package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +11 -0
- package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +170 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +15 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +18 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +12 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +9 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +86 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +227 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +189 -0
- package/src/managers/ApplicationCommandManager.js +267 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
- package/src/managers/AutoModerationRuleManager.js +296 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/BillingManager.js +66 -0
- package/src/managers/CachedManager.js +71 -0
- package/src/managers/ChannelManager.js +139 -0
- package/src/managers/ClientUserSettingManager.js +490 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/DeveloperPortalManager.js +104 -0
- package/src/managers/GuildApplicationCommandManager.js +28 -0
- package/src/managers/GuildBanManager.js +204 -0
- package/src/managers/GuildChannelManager.js +502 -0
- package/src/managers/GuildEmojiManager.js +171 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildFolderManager.js +24 -0
- package/src/managers/GuildForumThreadManager.js +114 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +304 -0
- package/src/managers/GuildMemberManager.js +724 -0
- package/src/managers/GuildMemberRoleManager.js +191 -0
- package/src/managers/GuildScheduledEventManager.js +296 -0
- package/src/managers/GuildSettingManager.js +148 -0
- package/src/managers/GuildStickerManager.js +179 -0
- package/src/managers/GuildTextThreadManager.js +98 -0
- package/src/managers/InteractionManager.js +39 -0
- package/src/managers/MessageManager.js +393 -0
- package/src/managers/PermissionOverwriteManager.js +166 -0
- package/src/managers/PresenceManager.js +58 -0
- package/src/managers/ReactionManager.js +67 -0
- package/src/managers/ReactionUserManager.js +71 -0
- package/src/managers/RelationshipManager.js +258 -0
- package/src/managers/RoleManager.js +352 -0
- package/src/managers/SessionManager.js +57 -0
- package/src/managers/StageInstanceManager.js +162 -0
- package/src/managers/ThreadManager.js +207 -0
- package/src/managers/ThreadMemberManager.js +186 -0
- package/src/managers/UserManager.js +150 -0
- package/src/managers/VoiceStateManager.js +37 -0
- package/src/rest/APIRequest.js +136 -0
- package/src/rest/APIRouter.js +53 -0
- package/src/rest/CaptchaSolver.js +78 -0
- package/src/rest/DiscordAPIError.js +103 -0
- package/src/rest/HTTPError.js +62 -0
- package/src/rest/RESTManager.js +81 -0
- package/src/rest/RateLimitError.js +55 -0
- package/src/rest/RequestHandler.js +446 -0
- package/src/sharding/Shard.js +443 -0
- package/src/sharding/ShardClientUtil.js +275 -0
- package/src/sharding/ShardingManager.js +318 -0
- package/src/structures/AnonymousGuild.js +98 -0
- package/src/structures/ApplicationCommand.js +1028 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
- package/src/structures/AutoModerationActionExecution.js +89 -0
- package/src/structures/AutoModerationRule.js +294 -0
- package/src/structures/AutocompleteInteraction.js +106 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseCommandInteraction.js +211 -0
- package/src/structures/BaseGuild.js +116 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +193 -0
- package/src/structures/BaseGuildVoiceChannel.js +243 -0
- package/src/structures/BaseMessageComponent.js +114 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/Call.js +58 -0
- package/src/structures/CategoryChannel.js +83 -0
- package/src/structures/Channel.js +271 -0
- package/src/structures/ClientApplication.js +204 -0
- package/src/structures/ClientPresence.js +84 -0
- package/src/structures/ClientUser.js +624 -0
- package/src/structures/CommandInteraction.js +41 -0
- package/src/structures/CommandInteractionOptionResolver.js +276 -0
- package/src/structures/ContextMenuInteraction.js +65 -0
- package/src/structures/DMChannel.js +280 -0
- package/src/structures/DeveloperPortalApplication.js +520 -0
- package/src/structures/DirectoryChannel.js +20 -0
- package/src/structures/Emoji.js +148 -0
- package/src/structures/ForumChannel.js +271 -0
- package/src/structures/Guild.js +1744 -0
- package/src/structures/GuildAuditLogs.js +734 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildBoost.js +108 -0
- package/src/structures/GuildChannel.js +454 -0
- package/src/structures/GuildEmoji.js +161 -0
- package/src/structures/GuildFolder.js +75 -0
- package/src/structures/GuildMember.js +686 -0
- package/src/structures/GuildPreview.js +191 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +441 -0
- package/src/structures/GuildTemplate.js +236 -0
- package/src/structures/Integration.js +188 -0
- package/src/structures/IntegrationApplication.js +96 -0
- package/src/structures/Interaction.js +351 -0
- package/src/structures/InteractionCollector.js +248 -0
- package/src/structures/InteractionResponse.js +114 -0
- package/src/structures/InteractionWebhook.js +43 -0
- package/src/structures/Invite.js +375 -0
- package/src/structures/InviteGuild.js +23 -0
- package/src/structures/InviteStageInstance.js +86 -0
- package/src/structures/Message.js +1188 -0
- package/src/structures/MessageActionRow.js +103 -0
- package/src/structures/MessageAttachment.js +193 -0
- package/src/structures/MessageButton.js +231 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +120 -0
- package/src/structures/MessageContextMenuInteraction.js +20 -0
- package/src/structures/MessageEmbed.js +586 -0
- package/src/structures/MessageMentions.js +272 -0
- package/src/structures/MessagePayload.js +358 -0
- package/src/structures/MessageReaction.js +171 -0
- package/src/structures/MessageSelectMenu.js +391 -0
- package/src/structures/Modal.js +279 -0
- package/src/structures/ModalSubmitFieldsResolver.js +53 -0
- package/src/structures/ModalSubmitInteraction.js +119 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PartialGroupDMChannel.js +430 -0
- package/src/structures/PermissionOverwrites.js +196 -0
- package/src/structures/Presence.js +441 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/RichPresence.js +722 -0
- package/src/structures/Role.js +515 -0
- package/src/structures/SelectMenuInteraction.js +170 -0
- package/src/structures/Session.js +81 -0
- package/src/structures/StageChannel.js +104 -0
- package/src/structures/StageInstance.js +208 -0
- package/src/structures/Sticker.js +310 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StoreChannel.js +56 -0
- package/src/structures/Team.js +167 -0
- package/src/structures/TeamMember.js +71 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextInputComponent.js +201 -0
- package/src/structures/ThreadChannel.js +626 -0
- package/src/structures/ThreadMember.js +105 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/User.js +697 -0
- package/src/structures/UserContextMenuInteraction.js +29 -0
- package/src/structures/VoiceChannel.js +110 -0
- package/src/structures/VoiceRegion.js +53 -0
- package/src/structures/VoiceState.js +306 -0
- package/src/structures/WebEmbed.js +401 -0
- package/src/structures/Webhook.js +461 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +48 -0
- package/src/structures/Widget.js +87 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +190 -0
- package/src/structures/interfaces/Collector.js +300 -0
- package/src/structures/interfaces/InteractionResponses.js +313 -0
- package/src/structures/interfaces/TextBasedChannel.js +566 -0
- package/src/util/ActivityFlags.js +44 -0
- package/src/util/ApplicationFlags.js +74 -0
- package/src/util/BitField.js +170 -0
- package/src/util/ChannelFlags.js +45 -0
- package/src/util/Constants.js +1917 -0
- package/src/util/DataResolver.js +145 -0
- package/src/util/Formatters.js +214 -0
- package/src/util/GuildMemberFlags.js +43 -0
- package/src/util/Intents.js +74 -0
- package/src/util/LimitedCollection.js +131 -0
- package/src/util/MessageFlags.js +54 -0
- package/src/util/Options.js +360 -0
- package/src/util/Permissions.js +187 -0
- package/src/util/PremiumUsageFlags.js +31 -0
- package/src/util/PurchasedFlags.js +31 -0
- package/src/util/RemoteAuth.js +522 -0
- package/src/util/SnowflakeUtil.js +92 -0
- package/src/util/Sweepers.js +466 -0
- package/src/util/SystemChannelFlags.js +55 -0
- package/src/util/ThreadMemberFlags.js +30 -0
- package/src/util/UserFlags.js +104 -0
- package/src/util/Util.js +741 -0
- package/src/util/Voice.js +1456 -0
- package/src/util/arRPC/index.js +229 -0
- package/src/util/arRPC/process/detectable.json +1 -0
- package/src/util/arRPC/process/index.js +102 -0
- package/src/util/arRPC/process/native/index.js +5 -0
- package/src/util/arRPC/process/native/linux.js +37 -0
- package/src/util/arRPC/process/native/win32.js +25 -0
- package/src/util/arRPC/transports/ipc.js +281 -0
- package/src/util/arRPC/transports/websocket.js +128 -0
- package/typings/enums.d.ts +346 -0
- package/typings/index.d.ts +7725 -0
- package/typings/index.test-d.ts +0 -0
- package/typings/rawDataTypes.d.ts +283 -0
@@ -0,0 +1,697 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const Base = require('./Base');
|
5
|
+
const ClientApplication = require('./ClientApplication');
|
6
|
+
const VoiceState = require('./VoiceState');
|
7
|
+
const TextBasedChannel = require('./interfaces/TextBasedChannel');
|
8
|
+
const { Error } = require('../errors');
|
9
|
+
const { RelationshipTypes, NitroType } = require('../util/Constants');
|
10
|
+
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
11
|
+
const UserFlags = require('../util/UserFlags');
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Represents a user on Discord.
|
15
|
+
* @implements {TextBasedChannel}
|
16
|
+
* @extends {Base}
|
17
|
+
*/
|
18
|
+
class User extends Base {
|
19
|
+
constructor(client, data, application) {
|
20
|
+
super(client);
|
21
|
+
/**
|
22
|
+
* The user's id
|
23
|
+
* @type {Snowflake}
|
24
|
+
*/
|
25
|
+
this.id = data.id;
|
26
|
+
|
27
|
+
this.bot = null;
|
28
|
+
|
29
|
+
this.system = null;
|
30
|
+
|
31
|
+
this.flags = null;
|
32
|
+
|
33
|
+
/**
|
34
|
+
* An array of object (connected accounts), containing the following properties:
|
35
|
+
* @property {string} type The account type (twitch, youtube, etc)
|
36
|
+
* @property {string} name The account name
|
37
|
+
* @property {string} id The account id
|
38
|
+
* @property {boolean} verified Whether the account is verified
|
39
|
+
* @see {@link https://discord.com/developers/docs/resources/user#connection-object}
|
40
|
+
* @typedef {Object} ConnectionAccount
|
41
|
+
*/
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Accounts connected to this user
|
45
|
+
* <info>The user must be force fetched for this property to be present or be updated</info>
|
46
|
+
* @type {?ConnectionAccount[]}
|
47
|
+
*/
|
48
|
+
this.connectedAccounts = [];
|
49
|
+
/**
|
50
|
+
* Time that User has nitro (Unix Timestamp)
|
51
|
+
* <info>The user must be force fetched for this property to be present or be updated</info>
|
52
|
+
* @type {?number}
|
53
|
+
* @readonly
|
54
|
+
*/
|
55
|
+
this.premiumSince = null;
|
56
|
+
/**
|
57
|
+
* Time that User has nitro and boost server (Unix Timestamp)
|
58
|
+
* @type {?number}
|
59
|
+
* @readonly
|
60
|
+
*/
|
61
|
+
this.premiumGuildSince = null;
|
62
|
+
/**
|
63
|
+
* About me (User)
|
64
|
+
* <info>The user must be force fetched for this property to be present or be updated</info>
|
65
|
+
* @type {?string}
|
66
|
+
* @readonly
|
67
|
+
*/
|
68
|
+
this.bio = null;
|
69
|
+
/**
|
70
|
+
* This user is on the same servers as Client User
|
71
|
+
* <info>The user must be force fetched for this property to be present or be updated</info>
|
72
|
+
* @type {Collection<Snowflake, Guild>}
|
73
|
+
* @readonly
|
74
|
+
*/
|
75
|
+
this.mutualGuilds = new Collection();
|
76
|
+
/**
|
77
|
+
* [Bot] Application
|
78
|
+
* @type {?ClientApplication}
|
79
|
+
* @readonly
|
80
|
+
*/
|
81
|
+
this.application = application ? new ClientApplication(this.client, application, this) : null;
|
82
|
+
this._partial = true;
|
83
|
+
this._patch(data);
|
84
|
+
}
|
85
|
+
|
86
|
+
_patch(data) {
|
87
|
+
if ('username' in data) {
|
88
|
+
/**
|
89
|
+
* The username of the user
|
90
|
+
* @type {?string}
|
91
|
+
*/
|
92
|
+
this.username = data.username;
|
93
|
+
} else {
|
94
|
+
this.username ??= null;
|
95
|
+
}
|
96
|
+
|
97
|
+
if ('bot' in data) {
|
98
|
+
/**
|
99
|
+
* Whether or not the user is a bot
|
100
|
+
* @type {?boolean}
|
101
|
+
*/
|
102
|
+
this.bot = Boolean(data.bot);
|
103
|
+
if (this.bot === true && !this.application) {
|
104
|
+
this.application = new ClientApplication(this.client, { id: this.id }, this);
|
105
|
+
this.botInGuildsCount = null;
|
106
|
+
}
|
107
|
+
} else if (!this.partial && typeof this.bot !== 'boolean') {
|
108
|
+
this.bot = false;
|
109
|
+
}
|
110
|
+
|
111
|
+
if ('discriminator' in data) {
|
112
|
+
/**
|
113
|
+
* A discriminator based on username for the user
|
114
|
+
* @type {?string}
|
115
|
+
*/
|
116
|
+
this.discriminator = data.discriminator;
|
117
|
+
} else {
|
118
|
+
this.discriminator ??= null;
|
119
|
+
}
|
120
|
+
|
121
|
+
if ('avatar' in data) {
|
122
|
+
/**
|
123
|
+
* The user avatar's hash
|
124
|
+
* @type {?string}
|
125
|
+
*/
|
126
|
+
this.avatar = data.avatar;
|
127
|
+
} else {
|
128
|
+
this.avatar ??= null;
|
129
|
+
}
|
130
|
+
|
131
|
+
if ('banner' in data) {
|
132
|
+
/**
|
133
|
+
* The user banner's hash
|
134
|
+
* <info>The user must be force fetched for this property to be present or be updated</info>
|
135
|
+
* @type {?string}
|
136
|
+
*/
|
137
|
+
this.banner = data.banner;
|
138
|
+
} else if (this.banner !== null) {
|
139
|
+
this.banner ??= undefined;
|
140
|
+
}
|
141
|
+
|
142
|
+
if ('accent_color' in data) {
|
143
|
+
/**
|
144
|
+
* The base 10 accent color of the user's banner
|
145
|
+
* <info>The user must be force fetched for this property to be present or be updated</info>
|
146
|
+
* @type {?number}
|
147
|
+
*/
|
148
|
+
this.accentColor = data.accent_color;
|
149
|
+
} else if (this.accentColor !== null) {
|
150
|
+
this.accentColor ??= undefined;
|
151
|
+
}
|
152
|
+
|
153
|
+
if ('system' in data) {
|
154
|
+
/**
|
155
|
+
* Whether the user is an Official Discord System user (part of the urgent message system)
|
156
|
+
* @type {?boolean}
|
157
|
+
*/
|
158
|
+
this.system = Boolean(data.system);
|
159
|
+
} else if (!this.partial && typeof this.system !== 'boolean') {
|
160
|
+
this.system = false;
|
161
|
+
}
|
162
|
+
|
163
|
+
if ('public_flags' in data) {
|
164
|
+
/**
|
165
|
+
* The flags for this user
|
166
|
+
* @type {?UserFlags}
|
167
|
+
*/
|
168
|
+
this.flags = new UserFlags(data.public_flags);
|
169
|
+
}
|
170
|
+
|
171
|
+
if ('approximate_guild_count' in data) {
|
172
|
+
/**
|
173
|
+
* Check how many guilds the bot is in (Probably only approximate) (application.fetch() first)
|
174
|
+
* @type {?number}
|
175
|
+
*/
|
176
|
+
this.botInGuildsCount = data.approximate_guild_count;
|
177
|
+
}
|
178
|
+
|
179
|
+
if ('avatar_decoration' in data) {
|
180
|
+
/**
|
181
|
+
* The user avatar decoration's hash
|
182
|
+
* @type {?string}
|
183
|
+
*/
|
184
|
+
this.avatarDecoration = data.avatar_decoration;
|
185
|
+
} else {
|
186
|
+
this.avatarDecoration ??= null;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
/**
|
191
|
+
* Get all mutual friends (Client -> User)
|
192
|
+
* @type {Promise<Collection<Snowflake, User>>}
|
193
|
+
* @readonly
|
194
|
+
*/
|
195
|
+
get mutualFriends() {
|
196
|
+
// eslint-disable-next-line no-async-promise-executor
|
197
|
+
return new Promise(async resolve => {
|
198
|
+
const all = new Collection();
|
199
|
+
if (this.bot || this.client.user.id === this.id) return resolve(all);
|
200
|
+
const data = await this.client.api.users(this.id).relationships.get();
|
201
|
+
for (const u of data) {
|
202
|
+
all.set(u.id, this.client.users._add(u));
|
203
|
+
}
|
204
|
+
return resolve(all);
|
205
|
+
});
|
206
|
+
}
|
207
|
+
|
208
|
+
/**
|
209
|
+
* Check relationship status (Client -> User)
|
210
|
+
* @type {RelationshipTypes}
|
211
|
+
* @readonly
|
212
|
+
*/
|
213
|
+
get relationships() {
|
214
|
+
const i = this.client.relationships.cache.get(this.id) ?? 0;
|
215
|
+
return RelationshipTypes[parseInt(i)];
|
216
|
+
}
|
217
|
+
|
218
|
+
/**
|
219
|
+
* Check note
|
220
|
+
* @type {?string}
|
221
|
+
* @readonly
|
222
|
+
*/
|
223
|
+
get note() {
|
224
|
+
return this.client.user.notes.get(this.id);
|
225
|
+
}
|
226
|
+
|
227
|
+
/**
|
228
|
+
* Get friend nickname
|
229
|
+
* @type {?string}
|
230
|
+
* @readonly
|
231
|
+
*/
|
232
|
+
get nickname() {
|
233
|
+
return this.client.user.friendNicknames.get(this.id);
|
234
|
+
}
|
235
|
+
|
236
|
+
/**
|
237
|
+
* The voice state of this member
|
238
|
+
* @type {VoiceState}
|
239
|
+
* @readonly
|
240
|
+
*/
|
241
|
+
get voice() {
|
242
|
+
return (
|
243
|
+
this.client.voiceStates.cache.get(this.id) ??
|
244
|
+
this.client.guilds.cache.find(g => g?.voiceStates?.cache?.get(this.id))?.voiceStates?.cache?.get(this.id) ??
|
245
|
+
new VoiceState({ client: this.client }, { user_id: this.id })
|
246
|
+
);
|
247
|
+
}
|
248
|
+
|
249
|
+
_ProfilePatch(data) {
|
250
|
+
if (!data) return;
|
251
|
+
|
252
|
+
this._partial = false;
|
253
|
+
|
254
|
+
if (data.connected_accounts.length > 0) {
|
255
|
+
this.connectedAccounts = data.connected_accounts;
|
256
|
+
}
|
257
|
+
|
258
|
+
if ('premium_since' in data) {
|
259
|
+
const date = new Date(data.premium_since);
|
260
|
+
this.premiumSince = date.getTime();
|
261
|
+
}
|
262
|
+
|
263
|
+
if ('premium_guild_since' in data) {
|
264
|
+
const date = new Date(data.premium_guild_since);
|
265
|
+
this.premiumGuildSince = date.getTime();
|
266
|
+
}
|
267
|
+
|
268
|
+
if ('premium_type' in data) {
|
269
|
+
const nitro = NitroType[data.premium_type ?? 0];
|
270
|
+
/**
|
271
|
+
* Nitro type of the user.
|
272
|
+
* @type {NitroType}
|
273
|
+
*/
|
274
|
+
this.nitroType = nitro ?? `UNKNOWN_TYPE_${data.premium_type}`;
|
275
|
+
}
|
276
|
+
|
277
|
+
if ('user_profile' in data) {
|
278
|
+
this.bio = data.user_profile.bio;
|
279
|
+
/**
|
280
|
+
* The user's theme colors (Profile theme) [Primary, Accent]
|
281
|
+
* <info>The user must be force fetched for this property to be present or be updated</info>
|
282
|
+
* @type {?Array<number>}
|
283
|
+
*/
|
284
|
+
this.themeColors = data.user_profile.theme_colors;
|
285
|
+
}
|
286
|
+
|
287
|
+
if ('guild_member_profile' in data && 'guild_member' in data) {
|
288
|
+
const guild = this.client.guilds.cache.get(data.guild_member_profile.guild_id);
|
289
|
+
const member = guild?.members._add(data.guild_member);
|
290
|
+
member._ProfilePatch(data.guild_member_profile);
|
291
|
+
}
|
292
|
+
|
293
|
+
if ('application' in data) {
|
294
|
+
this.application = new ClientApplication(this.client, data.application, this);
|
295
|
+
}
|
296
|
+
|
297
|
+
if ('badges' in data) {
|
298
|
+
/**
|
299
|
+
* @callback BadgeIcon
|
300
|
+
* @returns {string}
|
301
|
+
*/
|
302
|
+
|
303
|
+
/**
|
304
|
+
* @typedef {Object} UserBadge
|
305
|
+
* @property {string} id The id of the badge
|
306
|
+
* @property {string} description The description of the badge
|
307
|
+
* @property {string} icon The icon hash of the badge
|
308
|
+
* @property {?string} link The link of the badge
|
309
|
+
* @property {BadgeIcon} iconURL The iconURL of the badge
|
310
|
+
*/
|
311
|
+
|
312
|
+
/**
|
313
|
+
* User badges (Boost, Slash, AutoMod, etc.)
|
314
|
+
* @type {?Array<UserBadge>}
|
315
|
+
*/
|
316
|
+
this.badges = data.badges.map(o => ({ ...o, iconURL: () => this.client.rest.cdn.BadgeIcon(o.icon) }));
|
317
|
+
}
|
318
|
+
|
319
|
+
if ('guild_badges' in data) {
|
320
|
+
// Unknown
|
321
|
+
}
|
322
|
+
|
323
|
+
this.mutualGuilds = new Collection(data.mutual_guilds.map(obj => [obj.id, obj]));
|
324
|
+
}
|
325
|
+
|
326
|
+
/**
|
327
|
+
* Get profile from Discord, if client is in a server with the target.
|
328
|
+
* @type {User}
|
329
|
+
* @param {Snowflake | null} guildId The guild id to get the profile from
|
330
|
+
* @returns {Promise<User>}
|
331
|
+
*/
|
332
|
+
async getProfile(guildId) {
|
333
|
+
if (this.client.bot) throw new Error('INVALID_BOT_METHOD');
|
334
|
+
const query = guildId
|
335
|
+
? {
|
336
|
+
with_mutual_guilds: true,
|
337
|
+
guild_id: guildId,
|
338
|
+
}
|
339
|
+
: {
|
340
|
+
with_mutual_guilds: true,
|
341
|
+
};
|
342
|
+
const data = await this.client.api.users(this.id).profile.get({
|
343
|
+
query,
|
344
|
+
});
|
345
|
+
this._ProfilePatch(data);
|
346
|
+
return this;
|
347
|
+
}
|
348
|
+
|
349
|
+
/**
|
350
|
+
* Friends the user [If incoming request]
|
351
|
+
* @type {boolean}
|
352
|
+
* @returns {Promise<boolean>}
|
353
|
+
*/
|
354
|
+
setFriend() {
|
355
|
+
return this.client.relationships.addFriend(this);
|
356
|
+
}
|
357
|
+
|
358
|
+
/**
|
359
|
+
* Changes the nickname of the friend
|
360
|
+
* @param {?string} nickname The nickname to change
|
361
|
+
* @type {boolean}
|
362
|
+
* @returns {Promise<boolean>}
|
363
|
+
*/
|
364
|
+
setNickname(nickname) {
|
365
|
+
return this.client.user.setNickname(this.id, nickname);
|
366
|
+
}
|
367
|
+
|
368
|
+
/**
|
369
|
+
* Send Friend Request to the user
|
370
|
+
* @type {boolean}
|
371
|
+
* @returns {Promise<boolean>}
|
372
|
+
*/
|
373
|
+
sendFriendRequest() {
|
374
|
+
return this.client.relationships.sendFriendRequest(this.username, this.discriminator);
|
375
|
+
}
|
376
|
+
/**
|
377
|
+
* Blocks the user
|
378
|
+
* @type {boolean}
|
379
|
+
* @returns {Promise<boolean>}
|
380
|
+
*/
|
381
|
+
setBlock() {
|
382
|
+
return this.client.relationships.addBlocked(this);
|
383
|
+
}
|
384
|
+
|
385
|
+
/**
|
386
|
+
* Removes the user from your blocks list
|
387
|
+
* @type {boolean}
|
388
|
+
* @returns {Promise<boolean>}
|
389
|
+
*/
|
390
|
+
unBlock() {
|
391
|
+
return this.client.relationships.deleteBlocked(this);
|
392
|
+
}
|
393
|
+
|
394
|
+
/**
|
395
|
+
* Removes the user from your friends list
|
396
|
+
* @type {boolean}
|
397
|
+
* @returns {Promise<boolean>}
|
398
|
+
*/
|
399
|
+
unFriend() {
|
400
|
+
return this.client.relationships.deleteFriend(this);
|
401
|
+
}
|
402
|
+
|
403
|
+
/**
|
404
|
+
* Whether this User is a partial
|
405
|
+
* @type {boolean}
|
406
|
+
* @readonly
|
407
|
+
*/
|
408
|
+
get partial() {
|
409
|
+
return typeof this.username !== 'string';
|
410
|
+
}
|
411
|
+
|
412
|
+
/**
|
413
|
+
* The timestamp the user was created at
|
414
|
+
* @type {number}
|
415
|
+
* @readonly
|
416
|
+
*/
|
417
|
+
get createdTimestamp() {
|
418
|
+
return SnowflakeUtil.timestampFrom(this.id);
|
419
|
+
}
|
420
|
+
|
421
|
+
/**
|
422
|
+
* The time the user was created at
|
423
|
+
* @type {Date}
|
424
|
+
* @readonly
|
425
|
+
*/
|
426
|
+
get createdAt() {
|
427
|
+
return new Date(this.createdTimestamp);
|
428
|
+
}
|
429
|
+
|
430
|
+
/**
|
431
|
+
* A link to the user's avatar.
|
432
|
+
* @param {ImageURLOptions} [options={}] Options for the Image URL
|
433
|
+
* @returns {?string}
|
434
|
+
*/
|
435
|
+
avatarURL({ format, size, dynamic } = {}) {
|
436
|
+
if (!this.avatar) return null;
|
437
|
+
return this.client.rest.cdn.Avatar(this.id, this.avatar, format, size, dynamic);
|
438
|
+
}
|
439
|
+
|
440
|
+
/**
|
441
|
+
* A link to the user's avatar decoration.
|
442
|
+
* @param {StaticImageURLOptions} [options={}] Options for the image URL
|
443
|
+
* @returns {?string}
|
444
|
+
*/
|
445
|
+
avatarDecorationURL({ format, size } = {}) {
|
446
|
+
if (!this.avatarDecoration) return null;
|
447
|
+
return this.client.rest.cdn.AvatarDecoration(this.id, this.avatarDecoration, format, size);
|
448
|
+
}
|
449
|
+
|
450
|
+
/**
|
451
|
+
* A link to the user's default avatar
|
452
|
+
* @type {string}
|
453
|
+
* @readonly
|
454
|
+
*/
|
455
|
+
get defaultAvatarURL() {
|
456
|
+
return this.client.rest.cdn.DefaultAvatar(this.discriminator % 5);
|
457
|
+
}
|
458
|
+
|
459
|
+
/**
|
460
|
+
* A link to the user's avatar if they have one.
|
461
|
+
* Otherwise a link to their default avatar will be returned.
|
462
|
+
* @param {ImageURLOptions} [options={}] Options for the Image URL
|
463
|
+
* @returns {string}
|
464
|
+
*/
|
465
|
+
displayAvatarURL(options) {
|
466
|
+
return this.avatarURL(options) ?? this.defaultAvatarURL;
|
467
|
+
}
|
468
|
+
|
469
|
+
/**
|
470
|
+
* The hexadecimal version of the user accent color, with a leading hash
|
471
|
+
* <info>The user must be force fetched for this property to be present</info>
|
472
|
+
* @type {?string}
|
473
|
+
* @readonly
|
474
|
+
*/
|
475
|
+
get hexAccentColor() {
|
476
|
+
if (typeof this.accentColor !== 'number') return this.accentColor;
|
477
|
+
return `#${this.accentColor.toString(16).padStart(6, '0')}`;
|
478
|
+
}
|
479
|
+
|
480
|
+
/**
|
481
|
+
* A link to the user's banner.
|
482
|
+
* <info>This method will throw an error if called before the user is force fetched.
|
483
|
+
* See {@link User#banner} for more info</info>
|
484
|
+
* @param {ImageURLOptions} [options={}] Options for the Image URL
|
485
|
+
* @returns {?string}
|
486
|
+
*/
|
487
|
+
bannerURL({ format, size, dynamic } = {}) {
|
488
|
+
if (typeof this.banner === 'undefined') {
|
489
|
+
throw new Error('USER_BANNER_NOT_FETCHED');
|
490
|
+
}
|
491
|
+
if (!this.banner) return null;
|
492
|
+
return this.client.rest.cdn.Banner(this.id, this.banner, format, size, dynamic);
|
493
|
+
}
|
494
|
+
|
495
|
+
/**
|
496
|
+
* Ring the user's phone / PC (call)
|
497
|
+
* @returns {Promise<boolean>}
|
498
|
+
*/
|
499
|
+
ring() {
|
500
|
+
if (this.relationships !== 'FRIEND') return Promise.reject(new Error('USER_NOT_FRIEND'));
|
501
|
+
if (!this.client.user.voice?.channelId || !this.client.callVoice) {
|
502
|
+
return Promise.reject(new Error('CLIENT_NO_CALL'));
|
503
|
+
}
|
504
|
+
return new Promise((resolve, reject) => {
|
505
|
+
this.client.api
|
506
|
+
.channels(this.dmChannel.id)
|
507
|
+
.call.ring.post({
|
508
|
+
data: {
|
509
|
+
recipients: [this.id],
|
510
|
+
},
|
511
|
+
})
|
512
|
+
.then(() => resolve(true))
|
513
|
+
.catch(e => {
|
514
|
+
reject(e);
|
515
|
+
});
|
516
|
+
});
|
517
|
+
}
|
518
|
+
|
519
|
+
/**
|
520
|
+
* The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]
|
521
|
+
* <info>The user must be force fetched for this property to be present or be updated</info>
|
522
|
+
* @type {?Array<string>}
|
523
|
+
* @readonly
|
524
|
+
*/
|
525
|
+
get hexThemeColor() {
|
526
|
+
return this.themeColors?.map(c => `#${c.toString(16).padStart(6, '0')}`) || null;
|
527
|
+
}
|
528
|
+
|
529
|
+
/**
|
530
|
+
* The Discord "tag" (e.g. `hydrabolt#0001`) for this user
|
531
|
+
* @type {?string}
|
532
|
+
* @readonly
|
533
|
+
*/
|
534
|
+
get tag() {
|
535
|
+
return typeof this.username === 'string' ? `${this.username}#${this.discriminator}` : null;
|
536
|
+
}
|
537
|
+
|
538
|
+
/**
|
539
|
+
* The DM between the client's user and this user
|
540
|
+
* @type {?DMChannel}
|
541
|
+
* @readonly
|
542
|
+
*/
|
543
|
+
get dmChannel() {
|
544
|
+
return this.client.users.dmChannel(this.id);
|
545
|
+
}
|
546
|
+
|
547
|
+
/**
|
548
|
+
* Creates a DM channel between the client and the user.
|
549
|
+
* @param {boolean} [force=false] Whether to skip the cache check and request the API
|
550
|
+
* @returns {Promise<DMChannel>}
|
551
|
+
*/
|
552
|
+
createDM(force = false) {
|
553
|
+
return this.client.users.createDM(this.id, force);
|
554
|
+
}
|
555
|
+
|
556
|
+
/**
|
557
|
+
* Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.
|
558
|
+
* @returns {Promise<DMChannel>}
|
559
|
+
*/
|
560
|
+
deleteDM() {
|
561
|
+
return this.client.users.deleteDM(this.id);
|
562
|
+
}
|
563
|
+
|
564
|
+
/**
|
565
|
+
* Checks if the user is equal to another.
|
566
|
+
* It compares id, username, discriminator, avatar, banner, accent color, and bot flags.
|
567
|
+
* It is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.
|
568
|
+
* @param {User} user User to compare with
|
569
|
+
* @returns {boolean}
|
570
|
+
*/
|
571
|
+
equals(user) {
|
572
|
+
return (
|
573
|
+
user &&
|
574
|
+
this.id === user.id &&
|
575
|
+
this.username === user.username &&
|
576
|
+
this.discriminator === user.discriminator &&
|
577
|
+
this.avatar === user.avatar &&
|
578
|
+
this.flags?.bitfield === user.flags?.bitfield &&
|
579
|
+
this.banner === user.banner &&
|
580
|
+
this.accentColor === user.accentColor &&
|
581
|
+
this.bio === user.bio
|
582
|
+
);
|
583
|
+
}
|
584
|
+
|
585
|
+
/**
|
586
|
+
* Compares the user with an API user object
|
587
|
+
* @param {APIUser} user The API user object to compare
|
588
|
+
* @returns {boolean}
|
589
|
+
* @private
|
590
|
+
*/
|
591
|
+
_equals(user) {
|
592
|
+
return (
|
593
|
+
user &&
|
594
|
+
this.id === user.id &&
|
595
|
+
this.username === user.username &&
|
596
|
+
this.discriminator === user.discriminator &&
|
597
|
+
this.avatar === user.avatar &&
|
598
|
+
this.flags?.bitfield === user.public_flags &&
|
599
|
+
('banner' in user ? this.banner === user.banner : true) &&
|
600
|
+
('accent_color' in user ? this.accentColor === user.accent_color : true)
|
601
|
+
);
|
602
|
+
}
|
603
|
+
|
604
|
+
/**
|
605
|
+
* Fetches this user's flags.
|
606
|
+
* @param {boolean} [force=false] Whether to skip the cache check and request the API
|
607
|
+
* @returns {Promise<UserFlags>}
|
608
|
+
*/
|
609
|
+
fetchFlags(force = false) {
|
610
|
+
return this.client.users.fetchFlags(this.id, { force });
|
611
|
+
}
|
612
|
+
|
613
|
+
/**
|
614
|
+
* Fetches this user.
|
615
|
+
* @param {boolean} [force=true] Whether to skip the cache check and request the API
|
616
|
+
* @returns {Promise<User>}
|
617
|
+
*/
|
618
|
+
fetch(force = true) {
|
619
|
+
return this.client.users.fetch(this.id, { force });
|
620
|
+
}
|
621
|
+
|
622
|
+
/**
|
623
|
+
* When concatenated with a string, this automatically returns the user's mention instead of the User object.
|
624
|
+
* @returns {string}
|
625
|
+
* @example
|
626
|
+
* // Logs: Hello from <@123456789012345678>!
|
627
|
+
* console.log(`Hello from ${user}!`);
|
628
|
+
*/
|
629
|
+
toString() {
|
630
|
+
return `<@${this.id}>`;
|
631
|
+
}
|
632
|
+
|
633
|
+
toJSON(...props) {
|
634
|
+
const json = super.toJSON(
|
635
|
+
{
|
636
|
+
createdTimestamp: true,
|
637
|
+
defaultAvatarURL: true,
|
638
|
+
hexAccentColor: true,
|
639
|
+
tag: true,
|
640
|
+
},
|
641
|
+
...props,
|
642
|
+
);
|
643
|
+
json.avatarURL = this.avatarURL();
|
644
|
+
json.displayAvatarURL = this.displayAvatarURL();
|
645
|
+
json.bannerURL = this.banner ? this.bannerURL() : this.banner;
|
646
|
+
return json;
|
647
|
+
}
|
648
|
+
|
649
|
+
/**
|
650
|
+
* Set note to user
|
651
|
+
* @param {string} note Note to set
|
652
|
+
* @returns {Promise<User>}
|
653
|
+
*/
|
654
|
+
async setNote(note = null) {
|
655
|
+
await this.client.api.users['@me'].notes(this.id).put({ data: { note } });
|
656
|
+
return this;
|
657
|
+
}
|
658
|
+
|
659
|
+
/**
|
660
|
+
* Get presence (~ v12)
|
661
|
+
* @returns {Promise<Presence | null>}
|
662
|
+
*/
|
663
|
+
async presenceFetch() {
|
664
|
+
let data = null;
|
665
|
+
await Promise.all(
|
666
|
+
this.client.guilds.cache.map(async guild => {
|
667
|
+
const res_ = await guild.presences.resolve(this.id);
|
668
|
+
if (res_) return (data = res_);
|
669
|
+
return true;
|
670
|
+
}),
|
671
|
+
);
|
672
|
+
return data;
|
673
|
+
}
|
674
|
+
}
|
675
|
+
|
676
|
+
/**
|
677
|
+
* Sends a message to this user.
|
678
|
+
* @method send
|
679
|
+
* @memberof User
|
680
|
+
* @instance
|
681
|
+
* @param {string|MessagePayload|MessageOptions} options The options to provide
|
682
|
+
* @returns {Promise<Message>}
|
683
|
+
* @example
|
684
|
+
* // Send a direct message
|
685
|
+
* user.send('Hello!')
|
686
|
+
* .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))
|
687
|
+
* .catch(console.error);
|
688
|
+
*/
|
689
|
+
|
690
|
+
TextBasedChannel.applyToClass(User);
|
691
|
+
|
692
|
+
module.exports = User;
|
693
|
+
|
694
|
+
/**
|
695
|
+
* @external APIUser
|
696
|
+
* @see {@link https://discord.com/developers/docs/resources/user#user-object}
|
697
|
+
*/
|
@@ -0,0 +1,29 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const ContextMenuInteraction = require('./ContextMenuInteraction');
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Represents a user context menu interaction.
|
7
|
+
* @extends {ContextMenuInteraction}
|
8
|
+
*/
|
9
|
+
class UserContextMenuInteraction extends ContextMenuInteraction {
|
10
|
+
/**
|
11
|
+
* The user this interaction was sent from
|
12
|
+
* @type {User}
|
13
|
+
* @readonly
|
14
|
+
*/
|
15
|
+
get targetUser() {
|
16
|
+
return this.options.getUser('user');
|
17
|
+
}
|
18
|
+
|
19
|
+
/**
|
20
|
+
* The member this interaction was sent from
|
21
|
+
* @type {?(GuildMember|APIGuildMember)}
|
22
|
+
* @readonly
|
23
|
+
*/
|
24
|
+
get targetMember() {
|
25
|
+
return this.options.getMember('user');
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
module.exports = UserContextMenuInteraction;
|