discord-sb.js 1.0.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.
- package/LICENSE +674 -0
- package/README.md +2 -0
- package/package.json +91 -0
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +86 -0
- package/src/client/Client.js +978 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +116 -0
- package/src/client/actions/ActionsManager.js +80 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +27 -0
- package/src/client/actions/AutoModerationRuleCreate.js +28 -0
- package/src/client/actions/AutoModerationRuleDelete.js +32 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +43 -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/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/MessagePollVoteAdd.js +33 -0
- package/src/client/actions/MessagePollVoteRemove.js +33 -0
- package/src/client/actions/MessageReactionAdd.js +68 -0
- package/src/client/actions/MessageReactionRemove.js +50 -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 +50 -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 +50 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +151 -0
- package/src/client/voice/VoiceConnection.js +1249 -0
- package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
- package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
- package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
- package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
- package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
- package/src/client/voice/networking/VoiceUDPClient.js +173 -0
- package/src/client/voice/networking/VoiceWebSocket.js +286 -0
- package/src/client/voice/player/MediaPlayer.js +321 -0
- package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
- package/src/client/voice/player/processing/IvfSplitter.js +106 -0
- package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
- package/src/client/voice/receiver/PacketHandler.js +260 -0
- package/src/client/voice/receiver/Receiver.js +96 -0
- package/src/client/voice/receiver/Recorder.js +173 -0
- package/src/client/voice/util/Function.js +116 -0
- package/src/client/voice/util/PlayInterface.js +122 -0
- package/src/client/voice/util/Secretbox.js +64 -0
- package/src/client/voice/util/Silence.js +16 -0
- package/src/client/voice/util/Socket.js +62 -0
- package/src/client/voice/util/VolumeInterface.js +104 -0
- package/src/client/websocket/WebSocketManager.js +392 -0
- package/src/client/websocket/WebSocketShard.js +907 -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 +19 -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_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 +52 -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_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_MODAL_CREATE.js +12 -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_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_POLL_VOTE_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.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 +121 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -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 +6 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -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 +84 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +217 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +172 -0
- package/src/managers/ApplicationCommandManager.js +264 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +417 -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 +148 -0
- package/src/managers/ClientUserSettingManager.js +372 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/DeveloperManager.js +254 -0
- package/src/managers/GuildBanManager.js +250 -0
- package/src/managers/GuildChannelManager.js +488 -0
- package/src/managers/GuildEmojiManager.js +171 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +108 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +338 -0
- package/src/managers/GuildMemberManager.js +599 -0
- package/src/managers/GuildMemberRoleManager.js +195 -0
- package/src/managers/GuildScheduledEventManager.js +314 -0
- package/src/managers/GuildSettingManager.js +155 -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 +423 -0
- package/src/managers/PermissionOverwriteManager.js +164 -0
- package/src/managers/PresenceManager.js +71 -0
- package/src/managers/QuestManager.js +353 -0
- package/src/managers/ReactionManager.js +67 -0
- package/src/managers/ReactionUserManager.js +73 -0
- package/src/managers/RelationshipManager.js +278 -0
- package/src/managers/RoleManager.js +448 -0
- package/src/managers/SessionManager.js +66 -0
- package/src/managers/StageInstanceManager.js +162 -0
- package/src/managers/ThreadManager.js +175 -0
- package/src/managers/ThreadMemberManager.js +186 -0
- package/src/managers/UserManager.js +136 -0
- package/src/managers/UserNoteManager.js +53 -0
- package/src/managers/VoiceStateManager.js +59 -0
- package/src/rest/APIRequest.js +154 -0
- package/src/rest/APIRouter.js +53 -0
- package/src/rest/DiscordAPIError.js +119 -0
- package/src/rest/HTTPError.js +62 -0
- package/src/rest/RESTManager.js +67 -0
- package/src/rest/RateLimitError.js +55 -0
- package/src/rest/RequestHandler.js +466 -0
- package/src/sharding/Shard.js +444 -0
- package/src/sharding/ShardClientUtil.js +279 -0
- package/src/sharding/ShardingManager.js +319 -0
- package/src/structures/AnonymousGuild.js +98 -0
- package/src/structures/ApplicationCommand.js +593 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
- package/src/structures/AutoModerationActionExecution.js +89 -0
- package/src/structures/AutoModerationRule.js +294 -0
- package/src/structures/AutocompleteInteraction.js +107 -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 +191 -0
- package/src/structures/BaseGuildVoiceChannel.js +241 -0
- package/src/structures/BaseMessageComponent.js +181 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CallState.js +63 -0
- package/src/structures/CategoryChannel.js +85 -0
- package/src/structures/Channel.js +284 -0
- package/src/structures/ClientPresence.js +77 -0
- package/src/structures/ClientUser.js +655 -0
- package/src/structures/CommandInteraction.js +41 -0
- package/src/structures/CommandInteractionOptionResolver.js +276 -0
- package/src/structures/ContainerComponent.js +68 -0
- package/src/structures/ContextMenuInteraction.js +65 -0
- package/src/structures/DMChannel.js +219 -0
- package/src/structures/DirectoryChannel.js +20 -0
- package/src/structures/Emoji.js +148 -0
- package/src/structures/FileComponent.js +49 -0
- package/src/structures/ForumChannel.js +31 -0
- package/src/structures/GroupDMChannel.js +394 -0
- package/src/structures/Guild.js +1791 -0
- package/src/structures/GuildAuditLogs.js +746 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildBoost.js +108 -0
- package/src/structures/GuildChannel.js +470 -0
- package/src/structures/GuildEmoji.js +161 -0
- package/src/structures/GuildMember.js +636 -0
- package/src/structures/GuildPreview.js +191 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +536 -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 +290 -0
- package/src/structures/InteractionCollector.js +248 -0
- package/src/structures/InteractionWebhook.js +43 -0
- package/src/structures/Invite.js +358 -0
- package/src/structures/InviteGuild.js +23 -0
- package/src/structures/InviteStageInstance.js +86 -0
- package/src/structures/MediaChannel.js +11 -0
- package/src/structures/MediaGalleryComponent.js +41 -0
- package/src/structures/MediaGalleryItem.js +47 -0
- package/src/structures/Message.js +1252 -0
- package/src/structures/MessageActionRow.js +105 -0
- package/src/structures/MessageAttachment.js +216 -0
- package/src/structures/MessageButton.js +166 -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 +596 -0
- package/src/structures/MessageMentions.js +273 -0
- package/src/structures/MessagePayload.js +354 -0
- package/src/structures/MessageReaction.js +181 -0
- package/src/structures/MessageSelectMenu.js +141 -0
- package/src/structures/Modal.js +161 -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/PermissionOverwrites.js +198 -0
- package/src/structures/Poll.js +108 -0
- package/src/structures/PollAnswer.js +88 -0
- package/src/structures/Presence.js +1157 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +590 -0
- package/src/structures/SectionComponent.js +48 -0
- package/src/structures/SelectMenuInteraction.js +21 -0
- package/src/structures/SeparatorComponent.js +48 -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 +118 -0
- package/src/structures/TeamMember.js +80 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextDisplayComponent.js +40 -0
- package/src/structures/TextInputComponent.js +132 -0
- package/src/structures/ThreadChannel.js +605 -0
- package/src/structures/ThreadMember.js +105 -0
- package/src/structures/ThreadOnlyChannel.js +249 -0
- package/src/structures/ThumbnailComponent.js +57 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/UnfurledMediaItem.js +29 -0
- package/src/structures/User.js +640 -0
- package/src/structures/UserContextMenuInteraction.js +29 -0
- package/src/structures/VoiceChannel.js +110 -0
- package/src/structures/VoiceChannelEffect.js +69 -0
- package/src/structures/VoiceRegion.js +53 -0
- package/src/structures/VoiceState.js +354 -0
- package/src/structures/WebEmbed.js +373 -0
- package/src/structures/Webhook.js +478 -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 +953 -0
- package/src/structures/interfaces/Collector.js +300 -0
- package/src/structures/interfaces/InteractionResponses.js +313 -0
- package/src/structures/interfaces/TextBasedChannel.js +821 -0
- package/src/util/APITypes.js +59 -0
- package/src/util/ActivityFlags.js +44 -0
- package/src/util/ApplicationFlags.js +76 -0
- package/src/util/AttachmentFlags.js +38 -0
- package/src/util/BitField.js +170 -0
- package/src/util/ChannelFlags.js +45 -0
- package/src/util/Constants.js +1914 -0
- package/src/util/DataResolver.js +146 -0
- package/src/util/Formatters.js +228 -0
- package/src/util/GuildMemberFlags.js +43 -0
- package/src/util/Intents.js +74 -0
- package/src/util/InviteFlags.js +34 -0
- package/src/util/LimitedCollection.js +131 -0
- package/src/util/MessageFlags.js +63 -0
- package/src/util/Options.js +358 -0
- package/src/util/Permissions.js +202 -0
- package/src/util/PremiumUsageFlags.js +31 -0
- package/src/util/PurchasedFlags.js +33 -0
- package/src/util/RemoteAuth.js +415 -0
- package/src/util/RoleFlags.js +37 -0
- package/src/util/SnowflakeUtil.js +92 -0
- package/src/util/Speaking.js +33 -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 +1048 -0
- package/typings/enums.d.ts +439 -0
- package/typings/index.d.ts +8505 -0
- package/typings/index.test-d.ts +0 -0
- package/typings/rawDataTypes.d.ts +403 -0
|
@@ -0,0 +1,636 @@
|
|
|
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
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @type {WeakSet<GuildMember>}
|
|
14
|
+
* @private
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
const deletedGuildMembers = new WeakSet();
|
|
18
|
+
let deprecationEmittedForDeleted = false;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Represents a member of a guild on Discord.
|
|
22
|
+
* @implements {TextBasedChannel}
|
|
23
|
+
* @extends {Base}
|
|
24
|
+
*/
|
|
25
|
+
class GuildMember extends Base {
|
|
26
|
+
constructor(client, data, guild) {
|
|
27
|
+
super(client);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The guild that this member is part of
|
|
31
|
+
* @type {Guild}
|
|
32
|
+
*/
|
|
33
|
+
this.guild = guild;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The timestamp the member joined the guild at
|
|
37
|
+
* @type {?number}
|
|
38
|
+
*/
|
|
39
|
+
this.joinedTimestamp = null;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The last timestamp this member started boosting the guild
|
|
43
|
+
* @type {?number}
|
|
44
|
+
*/
|
|
45
|
+
this.premiumSinceTimestamp = null;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The nickname of this member, if they have one
|
|
49
|
+
* @type {?string}
|
|
50
|
+
*/
|
|
51
|
+
this.nickname = null;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Whether this member has yet to pass the guild's membership gate
|
|
55
|
+
* @type {boolean}
|
|
56
|
+
*/
|
|
57
|
+
this.pending = false;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The timestamp this member's timeout will be removed
|
|
61
|
+
* @type {?number}
|
|
62
|
+
*/
|
|
63
|
+
this.communicationDisabledUntilTimestamp = null;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The role ids of the member
|
|
67
|
+
* @type {Snowflake[]}
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
this._roles = [];
|
|
71
|
+
if (data) this._patch(data);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
_patch(data) {
|
|
75
|
+
if ('user' in data) {
|
|
76
|
+
/**
|
|
77
|
+
* The user that this guild member instance represents
|
|
78
|
+
* @type {?User}
|
|
79
|
+
*/
|
|
80
|
+
this.user = this.client.users._add(data.user, true);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if ('nick' in data) this.nickname = data.nick;
|
|
84
|
+
if ('avatar' in data) {
|
|
85
|
+
/**
|
|
86
|
+
* The guild member's avatar hash
|
|
87
|
+
* @type {?string}
|
|
88
|
+
*/
|
|
89
|
+
this.avatar = data.avatar;
|
|
90
|
+
} else if (typeof this.avatar !== 'string') {
|
|
91
|
+
this.avatar = null;
|
|
92
|
+
}
|
|
93
|
+
if ('banner' in data) {
|
|
94
|
+
/**
|
|
95
|
+
* The guild member's banner hash.
|
|
96
|
+
* @type {?string}
|
|
97
|
+
*/
|
|
98
|
+
this.banner = data.banner;
|
|
99
|
+
} else {
|
|
100
|
+
this.banner ??= null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if ('joined_at' in data) this.joinedTimestamp = new Date(data.joined_at).getTime();
|
|
104
|
+
if ('premium_since' in data) {
|
|
105
|
+
this.premiumSinceTimestamp = data.premium_since ? new Date(data.premium_since).getTime() : null;
|
|
106
|
+
}
|
|
107
|
+
if ('roles' in data) this._roles = data.roles;
|
|
108
|
+
this.pending = data.pending ?? false;
|
|
109
|
+
|
|
110
|
+
if ('communication_disabled_until' in data) {
|
|
111
|
+
this.communicationDisabledUntilTimestamp =
|
|
112
|
+
data.communication_disabled_until && Date.parse(data.communication_disabled_until);
|
|
113
|
+
}
|
|
114
|
+
if ('flags' in data) {
|
|
115
|
+
/**
|
|
116
|
+
* The flags of this member
|
|
117
|
+
* @type {Readonly<GuildMemberFlags>}
|
|
118
|
+
*/
|
|
119
|
+
this.flags = new GuildMemberFlags(data.flags).freeze();
|
|
120
|
+
} else {
|
|
121
|
+
this.flags ??= new GuildMemberFlags().freeze();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (data.avatar_decoration_data) {
|
|
125
|
+
/**
|
|
126
|
+
* The member avatar decoration's data
|
|
127
|
+
* @type {?AvatarDecorationData}
|
|
128
|
+
*/
|
|
129
|
+
this.avatarDecorationData = {
|
|
130
|
+
asset: data.avatar_decoration_data.asset,
|
|
131
|
+
skuId: data.avatar_decoration_data.sku_id,
|
|
132
|
+
};
|
|
133
|
+
} else {
|
|
134
|
+
this.avatarDecorationData = null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
_clone() {
|
|
139
|
+
const clone = super._clone();
|
|
140
|
+
clone._roles = this._roles.slice();
|
|
141
|
+
return clone;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Whether or not the structure has been deleted
|
|
146
|
+
* @type {boolean}
|
|
147
|
+
* @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091
|
|
148
|
+
*/
|
|
149
|
+
get deleted() {
|
|
150
|
+
if (!deprecationEmittedForDeleted) {
|
|
151
|
+
deprecationEmittedForDeleted = true;
|
|
152
|
+
process.emitWarning(
|
|
153
|
+
'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
|
|
154
|
+
'DeprecationWarning',
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return deletedGuildMembers.has(this);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
set deleted(value) {
|
|
162
|
+
if (!deprecationEmittedForDeleted) {
|
|
163
|
+
deprecationEmittedForDeleted = true;
|
|
164
|
+
process.emitWarning(
|
|
165
|
+
'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
|
|
166
|
+
'DeprecationWarning',
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (value) deletedGuildMembers.add(this);
|
|
171
|
+
else deletedGuildMembers.delete(this);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Whether this GuildMember is a partial
|
|
176
|
+
* @type {boolean}
|
|
177
|
+
* @readonly
|
|
178
|
+
*/
|
|
179
|
+
get partial() {
|
|
180
|
+
return this.joinedTimestamp === null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* A manager for the roles belonging to this member
|
|
185
|
+
* @type {GuildMemberRoleManager}
|
|
186
|
+
* @readonly
|
|
187
|
+
*/
|
|
188
|
+
get roles() {
|
|
189
|
+
return new GuildMemberRoleManager(this);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* The voice state of this member
|
|
194
|
+
* @type {VoiceState}
|
|
195
|
+
* @readonly
|
|
196
|
+
*/
|
|
197
|
+
get voice() {
|
|
198
|
+
return this.guild.voiceStates.cache.get(this.id) ?? new VoiceState(this.guild, { user_id: this.id });
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* A link to the user's avatar decoration.
|
|
203
|
+
* @returns {?string}
|
|
204
|
+
*/
|
|
205
|
+
avatarDecorationURL() {
|
|
206
|
+
if (!this.avatarDecorationData) return null;
|
|
207
|
+
return this.client.rest.cdn.AvatarDecoration(this.avatarDecorationData.asset);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* A link to the member's guild avatar.
|
|
212
|
+
* @param {ImageURLOptions} [options={}] Options for the Image URL
|
|
213
|
+
* @returns {?string}
|
|
214
|
+
*/
|
|
215
|
+
avatarURL({ format, size, dynamic } = {}) {
|
|
216
|
+
if (!this.avatar) return null;
|
|
217
|
+
return this.client.rest.cdn.GuildMemberAvatar(this.guild.id, this.id, this.avatar, format, size, dynamic);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* A link to the member's banner.
|
|
222
|
+
* @param {ImageURLOptions} [options={}] Options for the banner URL
|
|
223
|
+
* @returns {?string}
|
|
224
|
+
*/
|
|
225
|
+
bannerURL({ format, size, dynamic } = {}) {
|
|
226
|
+
return (
|
|
227
|
+
this.banner && this.client.rest.cdn.GuildMemberBanner(this.guild.id, this.id, this.banner, format, size, dynamic)
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* A link to the member's guild avatar decoration if they have one.
|
|
233
|
+
* Otherwise, a link to their {@link User#avatarDecorationURL} will be returned.
|
|
234
|
+
* @returns {?string}
|
|
235
|
+
*/
|
|
236
|
+
displayAvatarDecorationURL() {
|
|
237
|
+
return this.avatarDecorationURL() ?? this.user.avatarDecorationURL();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* A link to the member's guild avatar if they have one.
|
|
242
|
+
* Otherwise, a link to their {@link User#displayAvatarURL} will be returned.
|
|
243
|
+
* @param {ImageURLOptions} [options={}] Options for the Image URL
|
|
244
|
+
* @returns {string}
|
|
245
|
+
*/
|
|
246
|
+
displayAvatarURL(options) {
|
|
247
|
+
return this.avatarURL(options) ?? this.user.displayAvatarURL(options);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* A link to the member's guild banner if they have one.
|
|
252
|
+
* Otherwise, a link to their {@link User#bannerURL} will be returned.
|
|
253
|
+
* @param {ImageURLOptions} [options={}] Options for the image URL
|
|
254
|
+
* @returns {?string}
|
|
255
|
+
*/
|
|
256
|
+
displayBannerURL(options) {
|
|
257
|
+
return this.bannerURL(options) ?? this.user.bannerURL(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.cache.get(this.id) ?? null;
|
|
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?.colors.primaryColor ?? 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 user display name if they don't have one
|
|
325
|
+
* @type {?string}
|
|
326
|
+
* @readonly
|
|
327
|
+
*/
|
|
328
|
+
get displayName() {
|
|
329
|
+
return this.nickname ?? this.user.displayName;
|
|
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.members.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
|
+
* Creates a DM channel between the client and this member.
|
|
449
|
+
* @param {boolean} [force=false] Whether to skip the cache check and request the API
|
|
450
|
+
* @returns {Promise<DMChannel>}
|
|
451
|
+
*/
|
|
452
|
+
createDM(force = false) {
|
|
453
|
+
return this.user.createDM(force);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Deletes any DMs with this member.
|
|
458
|
+
* @returns {Promise<DMChannel>}
|
|
459
|
+
*/
|
|
460
|
+
deleteDM() {
|
|
461
|
+
return this.user.deleteDM();
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Kicks this member from the guild.
|
|
466
|
+
* @param {string} [reason] Reason for kicking user
|
|
467
|
+
* @returns {Promise<GuildMember>}
|
|
468
|
+
*/
|
|
469
|
+
kick(reason) {
|
|
470
|
+
return this.guild.members.kick(this, reason);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Bans this guild member.
|
|
475
|
+
* @param {BanOptions} [options] Options for the ban
|
|
476
|
+
* @returns {Promise<GuildMember>}
|
|
477
|
+
* @example
|
|
478
|
+
* // Ban a guild member, deleting a week's worth of messages
|
|
479
|
+
* guildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })
|
|
480
|
+
* .then(console.log)
|
|
481
|
+
* .catch(console.error);
|
|
482
|
+
*/
|
|
483
|
+
ban(options) {
|
|
484
|
+
return this.guild.bans.create(this, options);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Times this guild member out.
|
|
489
|
+
* @param {DateResolvable|null} communicationDisabledUntil The date or timestamp
|
|
490
|
+
* for the member's communication to be disabled until. Provide `null` to remove the timeout.
|
|
491
|
+
* @param {string} [reason] The reason for this timeout.
|
|
492
|
+
* @returns {Promise<GuildMember>}
|
|
493
|
+
* @example
|
|
494
|
+
* // Time a guild member out for 5 minutes
|
|
495
|
+
* guildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')
|
|
496
|
+
* .then(console.log)
|
|
497
|
+
* .catch(console.error);
|
|
498
|
+
* @example
|
|
499
|
+
* // Remove the timeout of a guild member
|
|
500
|
+
* guildMember.disableCommunicationUntil(null)
|
|
501
|
+
* .then(member => console.log(`Removed timeout for ${member.displayName}`))
|
|
502
|
+
* .catch(console.error);
|
|
503
|
+
*/
|
|
504
|
+
disableCommunicationUntil(communicationDisabledUntil, reason) {
|
|
505
|
+
return this.edit({ communicationDisabledUntil }, reason);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Times this guild member out.
|
|
510
|
+
* @param {number|null} timeout The time in milliseconds
|
|
511
|
+
* for the member's communication to be disabled until. Provide `null` to remove the timeout.
|
|
512
|
+
* @param {string} [reason] The reason for this timeout.
|
|
513
|
+
* @returns {Promise<GuildMember>}
|
|
514
|
+
* @example
|
|
515
|
+
* // Time a guild member out for 5 minutes
|
|
516
|
+
* guildMember.timeout(5 * 60 * 1000, 'They deserved it')
|
|
517
|
+
* .then(console.log)
|
|
518
|
+
* .catch(console.error);
|
|
519
|
+
*/
|
|
520
|
+
timeout(timeout, reason) {
|
|
521
|
+
return this.disableCommunicationUntil(timeout && Date.now() + timeout, reason);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Fetches this GuildMember.
|
|
526
|
+
* @param {boolean} [force=true] Whether to skip the cache check and request the API
|
|
527
|
+
* @returns {Promise<GuildMember>}
|
|
528
|
+
*/
|
|
529
|
+
fetch(force = true) {
|
|
530
|
+
return this.guild.members.fetch({ user: this.id, cache: true, force });
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* Whether this guild member equals another guild member. It compares all properties, so for most
|
|
535
|
+
* comparison it is advisable to just compare `member.id === member2.id` as it is significantly faster
|
|
536
|
+
* and is often what most users need.
|
|
537
|
+
* @param {GuildMember} member The member to compare with
|
|
538
|
+
* @returns {boolean}
|
|
539
|
+
*/
|
|
540
|
+
equals(member) {
|
|
541
|
+
return (
|
|
542
|
+
member instanceof this.constructor &&
|
|
543
|
+
this.id === member.id &&
|
|
544
|
+
this.partial === member.partial &&
|
|
545
|
+
this.guild.id === member.guild.id &&
|
|
546
|
+
this.joinedTimestamp === member.joinedTimestamp &&
|
|
547
|
+
this.nickname === member.nickname &&
|
|
548
|
+
this.avatar === member.avatar &&
|
|
549
|
+
this.banner === member.banner &&
|
|
550
|
+
this.pending === member.pending &&
|
|
551
|
+
this.communicationDisabledUntilTimestamp === member.communicationDisabledUntilTimestamp &&
|
|
552
|
+
this.flags.equals(member.flags) &&
|
|
553
|
+
(this._roles === member._roles ||
|
|
554
|
+
(this._roles.length === member._roles.length && this._roles.every((role, i) => role === member._roles[i]))) &&
|
|
555
|
+
this.avatarDecorationData?.asset === member.avatarDecorationData?.asset &&
|
|
556
|
+
this.avatarDecorationData?.skuId === member.avatarDecorationData?.skuId
|
|
557
|
+
);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.
|
|
562
|
+
* @returns {string}
|
|
563
|
+
* @example
|
|
564
|
+
* // Logs: Hello from <@123456789012345678>!
|
|
565
|
+
* console.log(`Hello from ${member}!`);
|
|
566
|
+
*/
|
|
567
|
+
toString() {
|
|
568
|
+
return `<@${this.nickname ? '!' : ''}${this.user.id}>`;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
toJSON() {
|
|
572
|
+
const json = super.toJSON({
|
|
573
|
+
guild: 'guildId',
|
|
574
|
+
user: 'userId',
|
|
575
|
+
displayName: true,
|
|
576
|
+
roles: true,
|
|
577
|
+
});
|
|
578
|
+
json.avatarURL = this.avatarURL();
|
|
579
|
+
json.bannerURL = this.bannerURL();
|
|
580
|
+
json.displayAvatarURL = this.displayAvatarURL();
|
|
581
|
+
json.displayBannerURL = this.displayBannerURL();
|
|
582
|
+
json.avatarDecorationURL = this.avatarDecorationURL();
|
|
583
|
+
return json;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* Sets the guild avatar of the logged in client.
|
|
588
|
+
* @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
|
|
589
|
+
* @returns {Promise<GuildMember>}
|
|
590
|
+
*/
|
|
591
|
+
setAvatar(avatar) {
|
|
592
|
+
return this.edit({ avatar });
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
/**
|
|
596
|
+
* Sets the guild banner of the logged in client.
|
|
597
|
+
* @param {?(BufferResolvable|Base64Resolvable)} banner The new banner
|
|
598
|
+
* @returns {Promise<GuildMember>}
|
|
599
|
+
*/
|
|
600
|
+
setBanner(banner) {
|
|
601
|
+
return this.edit({ banner });
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Set Guild About me
|
|
606
|
+
* @param {string | null} bio Bio to set
|
|
607
|
+
* @returns {Promise<GuildMember>}
|
|
608
|
+
*/
|
|
609
|
+
setAboutMe(bio = null) {
|
|
610
|
+
return this.edit({ bio });
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
/**
|
|
615
|
+
* Sends a message to this user.
|
|
616
|
+
* @method send
|
|
617
|
+
* @memberof GuildMember
|
|
618
|
+
* @instance
|
|
619
|
+
* @param {string|MessagePayload|MessageOptions} options The options to provide
|
|
620
|
+
* @returns {Promise<Message>}
|
|
621
|
+
* @example
|
|
622
|
+
* // Send a direct message
|
|
623
|
+
* guildMember.send('Hello!')
|
|
624
|
+
* .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))
|
|
625
|
+
* .catch(console.error);
|
|
626
|
+
*/
|
|
627
|
+
|
|
628
|
+
TextBasedChannel.applyToClass(GuildMember);
|
|
629
|
+
|
|
630
|
+
exports.GuildMember = GuildMember;
|
|
631
|
+
exports.deletedGuildMembers = deletedGuildMembers;
|
|
632
|
+
|
|
633
|
+
/**
|
|
634
|
+
* @external APIGuildMember
|
|
635
|
+
* @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object}
|
|
636
|
+
*/
|