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