@velliajs/discord 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 +191 -0
- package/README.md +133 -0
- package/package.json +82 -0
- package/src/client/BaseClient.js +83 -0
- package/src/client/Client.js +591 -0
- package/src/client/WebhookClient.js +103 -0
- package/src/client/actions/Action.js +119 -0
- package/src/client/actions/ActionsManager.js +79 -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 +23 -0
- package/src/client/actions/ChannelUpdate.js +33 -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 +44 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +19 -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 +31 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +29 -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 +19 -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 +101 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +37 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +47 -0
- package/src/client/actions/MessageReactionAdd.js +55 -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 +42 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +31 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +26 -0
- package/src/client/actions/ThreadListSync.js +60 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +47 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +36 -0
- package/src/client/actions/VoiceStateUpdate.js +43 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +44 -0
- package/src/client/websocket/WebSocketManager.js +393 -0
- package/src/client/websocket/WebSocketShard.js +231 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -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/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_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 +26 -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_CREATE.js +5 -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_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 +27 -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_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 +64 -0
- package/src/errors/DJSError.js +48 -0
- package/src/errors/ErrorCodes.js +319 -0
- package/src/errors/Messages.js +170 -0
- package/src/errors/index.js +5 -0
- package/src/index.js +213 -0
- package/src/managers/ApplicationCommandManager.js +263 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
- package/src/managers/AutoModerationRuleManager.js +288 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/CachedManager.js +57 -0
- package/src/managers/CategoryChannelChildManager.js +77 -0
- package/src/managers/ChannelManager.js +128 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/GuildApplicationCommandManager.js +28 -0
- package/src/managers/GuildBanManager.js +204 -0
- package/src/managers/GuildChannelManager.js +494 -0
- package/src/managers/GuildEmojiManager.js +174 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +83 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +283 -0
- package/src/managers/GuildMemberManager.js +540 -0
- package/src/managers/GuildMemberRoleManager.js +204 -0
- package/src/managers/GuildScheduledEventManager.js +297 -0
- package/src/managers/GuildStickerManager.js +182 -0
- package/src/managers/GuildTextThreadManager.js +91 -0
- package/src/managers/MessageManager.js +259 -0
- package/src/managers/PermissionOverwriteManager.js +168 -0
- package/src/managers/PresenceManager.js +58 -0
- package/src/managers/ReactionManager.js +68 -0
- package/src/managers/ReactionUserManager.js +77 -0
- package/src/managers/RoleManager.js +360 -0
- package/src/managers/StageInstanceManager.js +154 -0
- package/src/managers/ThreadManager.js +204 -0
- package/src/managers/ThreadMemberManager.js +182 -0
- package/src/managers/UserManager.js +139 -0
- package/src/managers/VoiceStateManager.js +37 -0
- package/src/sharding/Shard.js +457 -0
- package/src/sharding/ShardClientUtil.js +285 -0
- package/src/sharding/ShardingManager.js +326 -0
- package/src/structures/ActionRow.js +46 -0
- package/src/structures/ActionRowBuilder.js +35 -0
- package/src/structures/AnonymousGuild.js +97 -0
- package/src/structures/ApplicationCommand.js +606 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
- package/src/structures/Attachment.js +140 -0
- package/src/structures/AttachmentBuilder.js +116 -0
- package/src/structures/AutoModerationActionExecution.js +116 -0
- package/src/structures/AutoModerationRule.js +284 -0
- package/src/structures/AutocompleteInteraction.js +97 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseChannel.js +160 -0
- package/src/structures/BaseGuild.js +119 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +186 -0
- package/src/structures/BaseGuildVoiceChannel.js +234 -0
- package/src/structures/BaseInteraction.js +344 -0
- package/src/structures/BaseSelectMenuComponent.js +56 -0
- package/src/structures/ButtonBuilder.js +44 -0
- package/src/structures/ButtonComponent.js +65 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CategoryChannel.js +45 -0
- package/src/structures/ChannelSelectMenuBuilder.js +31 -0
- package/src/structures/ChannelSelectMenuComponent.js +20 -0
- package/src/structures/ChannelSelectMenuInteraction.js +33 -0
- package/src/structures/ChatInputCommandInteraction.js +41 -0
- package/src/structures/ClientApplication.js +193 -0
- package/src/structures/ClientPresence.js +82 -0
- package/src/structures/ClientUser.js +185 -0
- package/src/structures/CommandInteraction.js +224 -0
- package/src/structures/CommandInteractionOptionResolver.js +308 -0
- package/src/structures/Component.js +47 -0
- package/src/structures/ContextMenuCommandInteraction.js +64 -0
- package/src/structures/DMChannel.js +129 -0
- package/src/structures/DirectoryChannel.js +36 -0
- package/src/structures/Embed.js +220 -0
- package/src/structures/EmbedBuilder.js +41 -0
- package/src/structures/Emoji.js +108 -0
- package/src/structures/ForumChannel.js +264 -0
- package/src/structures/Guild.js +1361 -0
- package/src/structures/GuildAuditLogs.js +91 -0
- package/src/structures/GuildAuditLogsEntry.js +527 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildChannel.js +457 -0
- package/src/structures/GuildEmoji.js +148 -0
- package/src/structures/GuildMember.js +518 -0
- package/src/structures/GuildPreview.js +193 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +439 -0
- package/src/structures/GuildTemplate.js +241 -0
- package/src/structures/Integration.js +220 -0
- package/src/structures/IntegrationApplication.js +85 -0
- package/src/structures/InteractionCollector.js +263 -0
- package/src/structures/InteractionResponse.js +102 -0
- package/src/structures/InteractionWebhook.js +59 -0
- package/src/structures/Invite.js +322 -0
- package/src/structures/InviteGuild.js +22 -0
- package/src/structures/InviteStageInstance.js +87 -0
- package/src/structures/MentionableSelectMenuBuilder.js +32 -0
- package/src/structures/MentionableSelectMenuComponent.js +11 -0
- package/src/structures/MentionableSelectMenuInteraction.js +71 -0
- package/src/structures/Message.js +997 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +107 -0
- package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
- package/src/structures/MessageMentions.js +297 -0
- package/src/structures/MessagePayload.js +299 -0
- package/src/structures/MessageReaction.js +142 -0
- package/src/structures/ModalBuilder.js +34 -0
- package/src/structures/ModalSubmitFields.js +55 -0
- package/src/structures/ModalSubmitInteraction.js +121 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PartialGroupDMChannel.js +60 -0
- package/src/structures/PermissionOverwrites.js +196 -0
- package/src/structures/Presence.js +372 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +458 -0
- package/src/structures/RoleSelectMenuBuilder.js +31 -0
- package/src/structures/RoleSelectMenuComponent.js +11 -0
- package/src/structures/RoleSelectMenuInteraction.js +33 -0
- package/src/structures/SelectMenuBuilder.js +26 -0
- package/src/structures/SelectMenuComponent.js +26 -0
- package/src/structures/SelectMenuInteraction.js +26 -0
- package/src/structures/SelectMenuOptionBuilder.js +26 -0
- package/src/structures/StageChannel.js +112 -0
- package/src/structures/StageInstance.js +167 -0
- package/src/structures/Sticker.js +272 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StringSelectMenuBuilder.js +79 -0
- package/src/structures/StringSelectMenuComponent.js +20 -0
- package/src/structures/StringSelectMenuInteraction.js +21 -0
- package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
- package/src/structures/Team.js +117 -0
- package/src/structures/TeamMember.js +70 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextInputBuilder.js +31 -0
- package/src/structures/TextInputComponent.js +29 -0
- package/src/structures/ThreadChannel.js +606 -0
- package/src/structures/ThreadMember.js +113 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/User.js +331 -0
- package/src/structures/UserContextMenuCommandInteraction.js +29 -0
- package/src/structures/UserSelectMenuBuilder.js +31 -0
- package/src/structures/UserSelectMenuComponent.js +11 -0
- package/src/structures/UserSelectMenuInteraction.js +51 -0
- package/src/structures/VoiceChannel.js +96 -0
- package/src/structures/VoiceRegion.js +46 -0
- package/src/structures/VoiceState.js +303 -0
- package/src/structures/Webhook.js +481 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +49 -0
- package/src/structures/Widget.js +88 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +108 -0
- package/src/structures/interfaces/Collector.js +335 -0
- package/src/structures/interfaces/InteractionResponses.js +320 -0
- package/src/structures/interfaces/TextBasedChannel.js +413 -0
- package/src/util/APITypes.js +456 -0
- package/src/util/ActivityFlagsBitField.js +26 -0
- package/src/util/ApplicationFlagsBitField.js +26 -0
- package/src/util/BitField.js +176 -0
- package/src/util/ChannelFlagsBitField.js +41 -0
- package/src/util/Channels.js +150 -0
- package/src/util/Colors.js +73 -0
- package/src/util/Components.js +152 -0
- package/src/util/Constants.js +230 -0
- package/src/util/DataResolver.js +140 -0
- package/src/util/Enums.js +13 -0
- package/src/util/Events.js +160 -0
- package/src/util/Formatters.js +413 -0
- package/src/util/GuildMemberFlagsBitField.js +41 -0
- package/src/util/IntentsBitField.js +34 -0
- package/src/util/LimitedCollection.js +68 -0
- package/src/util/MessageFlagsBitField.js +32 -0
- package/src/util/Options.js +216 -0
- package/src/util/Partials.js +44 -0
- package/src/util/PermissionsBitField.js +104 -0
- package/src/util/ShardEvents.js +27 -0
- package/src/util/Status.js +33 -0
- package/src/util/Sweepers.js +467 -0
- package/src/util/SystemChannelFlagsBitField.js +43 -0
- package/src/util/ThreadMemberFlagsBitField.js +31 -0
- package/src/util/Transformers.js +36 -0
- package/src/util/UserFlagsBitField.js +32 -0
- package/src/util/Util.js +394 -0
- package/src/util/WebSocketShardEvents.js +25 -0
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { PermissionFlagsBits } = require('discord-api-types/v10');
|
|
4
|
+
const Base = require('./Base');
|
|
5
|
+
const VoiceState = require('./VoiceState');
|
|
6
|
+
const TextBasedChannel = require('./interfaces/TextBasedChannel');
|
|
7
|
+
const { DiscordjsError, ErrorCodes } = require('../errors');
|
|
8
|
+
const GuildMemberRoleManager = require('../managers/GuildMemberRoleManager');
|
|
9
|
+
const { GuildMemberFlagsBitField } = require('../util/GuildMemberFlagsBitField');
|
|
10
|
+
const PermissionsBitField = require('../util/PermissionsBitField');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Represents a member of a guild on Discord.
|
|
14
|
+
* @implements {TextBasedChannel}
|
|
15
|
+
* @extends {Base}
|
|
16
|
+
*/
|
|
17
|
+
class GuildMember extends Base {
|
|
18
|
+
constructor(client, data, guild) {
|
|
19
|
+
super(client);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The guild that this member is part of
|
|
23
|
+
* @type {Guild}
|
|
24
|
+
*/
|
|
25
|
+
this.guild = guild;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The timestamp the member joined the guild at
|
|
29
|
+
* @type {?number}
|
|
30
|
+
*/
|
|
31
|
+
this.joinedTimestamp = null;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The last timestamp this member started boosting the guild
|
|
35
|
+
* @type {?number}
|
|
36
|
+
*/
|
|
37
|
+
this.premiumSinceTimestamp = null;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The nickname of this member, if they have one
|
|
41
|
+
* @type {?string}
|
|
42
|
+
*/
|
|
43
|
+
this.nickname = null;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Whether this member has yet to pass the guild's membership gate
|
|
47
|
+
* @type {?boolean}
|
|
48
|
+
*/
|
|
49
|
+
this.pending = null;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The timestamp this member's timeout will be removed
|
|
53
|
+
* @type {?number}
|
|
54
|
+
*/
|
|
55
|
+
this.communicationDisabledUntilTimestamp = null;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The role ids of the member
|
|
59
|
+
* @type {Snowflake[]}
|
|
60
|
+
* @private
|
|
61
|
+
*/
|
|
62
|
+
this._roles = [];
|
|
63
|
+
if (data) this._patch(data);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
_patch(data) {
|
|
67
|
+
if ('user' in data) {
|
|
68
|
+
/**
|
|
69
|
+
* The user that this guild member instance represents
|
|
70
|
+
* @type {?User}
|
|
71
|
+
*/
|
|
72
|
+
this.user = this.client.users._add(data.user, true);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if ('nick' in data) this.nickname = data.nick;
|
|
76
|
+
if ('avatar' in data) {
|
|
77
|
+
/**
|
|
78
|
+
* The guild member's avatar hash
|
|
79
|
+
* @type {?string}
|
|
80
|
+
*/
|
|
81
|
+
this.avatar = data.avatar;
|
|
82
|
+
} else if (typeof this.avatar !== 'string') {
|
|
83
|
+
this.avatar = null;
|
|
84
|
+
}
|
|
85
|
+
if ('joined_at' in data) this.joinedTimestamp = Date.parse(data.joined_at);
|
|
86
|
+
if ('premium_since' in data) {
|
|
87
|
+
this.premiumSinceTimestamp = data.premium_since ? Date.parse(data.premium_since) : null;
|
|
88
|
+
}
|
|
89
|
+
if ('roles' in data) this._roles = data.roles;
|
|
90
|
+
|
|
91
|
+
if ('pending' in data) {
|
|
92
|
+
this.pending = data.pending;
|
|
93
|
+
} else if (!this.partial) {
|
|
94
|
+
// See https://github.com/discordjs/discord.js/issues/6546 for more info.
|
|
95
|
+
this.pending ??= false;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if ('communication_disabled_until' in data) {
|
|
99
|
+
this.communicationDisabledUntilTimestamp =
|
|
100
|
+
data.communication_disabled_until && Date.parse(data.communication_disabled_until);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if ('flags' in data) {
|
|
104
|
+
/**
|
|
105
|
+
* The flags of this member
|
|
106
|
+
* @type {Readonly<GuildMemberFlagsBitField>}
|
|
107
|
+
*/
|
|
108
|
+
this.flags = new GuildMemberFlagsBitField(data.flags).freeze();
|
|
109
|
+
} else {
|
|
110
|
+
this.flags ??= new GuildMemberFlagsBitField().freeze();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
_clone() {
|
|
115
|
+
const clone = super._clone();
|
|
116
|
+
clone._roles = this._roles.slice();
|
|
117
|
+
return clone;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Whether this GuildMember is a partial
|
|
122
|
+
* @type {boolean}
|
|
123
|
+
* @readonly
|
|
124
|
+
*/
|
|
125
|
+
get partial() {
|
|
126
|
+
return this.joinedTimestamp === null;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* A manager for the roles belonging to this member
|
|
131
|
+
* @type {GuildMemberRoleManager}
|
|
132
|
+
* @readonly
|
|
133
|
+
*/
|
|
134
|
+
get roles() {
|
|
135
|
+
return new GuildMemberRoleManager(this);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* The voice state of this member
|
|
140
|
+
* @type {VoiceState}
|
|
141
|
+
* @readonly
|
|
142
|
+
*/
|
|
143
|
+
get voice() {
|
|
144
|
+
return this.guild.voiceStates.cache.get(this.id) ?? new VoiceState(this.guild, { user_id: this.id });
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* A link to the member's guild avatar.
|
|
149
|
+
* @param {ImageURLOptions} [options={}] Options for the image URL
|
|
150
|
+
* @returns {?string}
|
|
151
|
+
*/
|
|
152
|
+
avatarURL(options = {}) {
|
|
153
|
+
return this.avatar && this.client.rest.cdn.guildMemberAvatar(this.guild.id, this.id, this.avatar, options);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* A link to the member's guild avatar if they have one.
|
|
158
|
+
* Otherwise, a link to their {@link User#displayAvatarURL} will be returned.
|
|
159
|
+
* @param {ImageURLOptions} [options={}] Options for the Image URL
|
|
160
|
+
* @returns {string}
|
|
161
|
+
*/
|
|
162
|
+
displayAvatarURL(options) {
|
|
163
|
+
return this.avatarURL(options) ?? this.user.displayAvatarURL(options);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* The time this member joined the guild
|
|
168
|
+
* @type {?Date}
|
|
169
|
+
* @readonly
|
|
170
|
+
*/
|
|
171
|
+
get joinedAt() {
|
|
172
|
+
return this.joinedTimestamp && new Date(this.joinedTimestamp);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* The time this member's timeout will be removed
|
|
177
|
+
* @type {?Date}
|
|
178
|
+
* @readonly
|
|
179
|
+
*/
|
|
180
|
+
get communicationDisabledUntil() {
|
|
181
|
+
return this.communicationDisabledUntilTimestamp && new Date(this.communicationDisabledUntilTimestamp);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* The last time this member started boosting the guild
|
|
186
|
+
* @type {?Date}
|
|
187
|
+
* @readonly
|
|
188
|
+
*/
|
|
189
|
+
get premiumSince() {
|
|
190
|
+
return this.premiumSinceTimestamp && new Date(this.premiumSinceTimestamp);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* The presence of this guild member
|
|
195
|
+
* @type {?Presence}
|
|
196
|
+
* @readonly
|
|
197
|
+
*/
|
|
198
|
+
get presence() {
|
|
199
|
+
return this.guild.presences.resolve(this.id);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* The displayed color of this member in base 10
|
|
204
|
+
* @type {number}
|
|
205
|
+
* @readonly
|
|
206
|
+
*/
|
|
207
|
+
get displayColor() {
|
|
208
|
+
return this.roles.color?.color ?? 0;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* The displayed color of this member in hexadecimal
|
|
213
|
+
* @type {string}
|
|
214
|
+
* @readonly
|
|
215
|
+
*/
|
|
216
|
+
get displayHexColor() {
|
|
217
|
+
return this.roles.color?.hexColor ?? '#000000';
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* The member's id
|
|
222
|
+
* @type {Snowflake}
|
|
223
|
+
* @readonly
|
|
224
|
+
*/
|
|
225
|
+
get id() {
|
|
226
|
+
return this.user.id;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* The DM between the client's user and this member
|
|
231
|
+
* @type {?DMChannel}
|
|
232
|
+
* @readonly
|
|
233
|
+
*/
|
|
234
|
+
get dmChannel() {
|
|
235
|
+
return this.client.users.dmChannel(this.id);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* The nickname of this member, or their username if they don't have one
|
|
240
|
+
* @type {?string}
|
|
241
|
+
* @readonly
|
|
242
|
+
*/
|
|
243
|
+
get displayName() {
|
|
244
|
+
return this.nickname ?? this.user.username;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* The overall set of permissions for this member, taking only roles and owner status into account
|
|
249
|
+
* @type {Readonly<PermissionsBitField>}
|
|
250
|
+
* @readonly
|
|
251
|
+
*/
|
|
252
|
+
get permissions() {
|
|
253
|
+
if (this.user.id === this.guild.ownerId) return new PermissionsBitField(PermissionsBitField.All).freeze();
|
|
254
|
+
return new PermissionsBitField(this.roles.cache.map(role => role.permissions)).freeze();
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Whether the client user is above this user in the hierarchy, according to role position and guild ownership.
|
|
259
|
+
* This is a prerequisite for many moderative actions.
|
|
260
|
+
* @type {boolean}
|
|
261
|
+
* @readonly
|
|
262
|
+
*/
|
|
263
|
+
get manageable() {
|
|
264
|
+
if (this.user.id === this.guild.ownerId) return false;
|
|
265
|
+
if (this.user.id === this.client.user.id) return false;
|
|
266
|
+
if (this.client.user.id === this.guild.ownerId) return true;
|
|
267
|
+
if (!this.guild.members.me) throw new DiscordjsError(ErrorCodes.GuildUncachedMe);
|
|
268
|
+
return this.guild.members.me.roles.highest.comparePositionTo(this.roles.highest) > 0;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Whether this member is kickable by the client user
|
|
273
|
+
* @type {boolean}
|
|
274
|
+
* @readonly
|
|
275
|
+
*/
|
|
276
|
+
get kickable() {
|
|
277
|
+
if (!this.guild.members.me) throw new DiscordjsError(ErrorCodes.GuildUncachedMe);
|
|
278
|
+
return this.manageable && this.guild.members.me.permissions.has(PermissionFlagsBits.KickMembers);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Whether this member is bannable by the client user
|
|
283
|
+
* @type {boolean}
|
|
284
|
+
* @readonly
|
|
285
|
+
*/
|
|
286
|
+
get bannable() {
|
|
287
|
+
if (!this.guild.members.me) throw new DiscordjsError(ErrorCodes.GuildUncachedMe);
|
|
288
|
+
return this.manageable && this.guild.members.me.permissions.has(PermissionFlagsBits.BanMembers);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Whether this member is moderatable by the client user
|
|
293
|
+
* @type {boolean}
|
|
294
|
+
* @readonly
|
|
295
|
+
*/
|
|
296
|
+
get moderatable() {
|
|
297
|
+
return (
|
|
298
|
+
!this.permissions.has(PermissionFlagsBits.Administrator) &&
|
|
299
|
+
this.manageable &&
|
|
300
|
+
(this.guild.members.me?.permissions.has(PermissionFlagsBits.ModerateMembers) ?? false)
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Whether this member is currently timed out
|
|
306
|
+
* @returns {boolean}
|
|
307
|
+
*/
|
|
308
|
+
isCommunicationDisabled() {
|
|
309
|
+
return this.communicationDisabledUntilTimestamp > Date.now();
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,
|
|
314
|
+
* taking into account roles and permission overwrites.
|
|
315
|
+
* @param {GuildChannelResolvable} channel The guild channel to use as context
|
|
316
|
+
* @returns {Readonly<PermissionsBitField>}
|
|
317
|
+
*/
|
|
318
|
+
permissionsIn(channel) {
|
|
319
|
+
channel = this.guild.channels.resolve(channel);
|
|
320
|
+
if (!channel) throw new DiscordjsError(ErrorCodes.GuildChannelResolve);
|
|
321
|
+
return channel.permissionsFor(this);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Edits this member.
|
|
326
|
+
* @param {GuildMemberEditOptions} options The options to provide
|
|
327
|
+
* @returns {Promise<GuildMember>}
|
|
328
|
+
*/
|
|
329
|
+
edit(options) {
|
|
330
|
+
return this.guild.members.edit(this, options);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Sets the flags for this member.
|
|
335
|
+
* @param {GuildMemberFlagsResolvable} flags The flags to set
|
|
336
|
+
* @param {string} [reason] Reason for setting the flags
|
|
337
|
+
* @returns {Promise<GuildMember>}
|
|
338
|
+
*/
|
|
339
|
+
setFlags(flags, reason) {
|
|
340
|
+
return this.edit({ flags, reason });
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Sets the nickname for this member.
|
|
345
|
+
* @param {?string} nick The nickname for the guild member, or `null` if you want to reset their nickname
|
|
346
|
+
* @param {string} [reason] Reason for setting the nickname
|
|
347
|
+
* @returns {Promise<GuildMember>}
|
|
348
|
+
* @example
|
|
349
|
+
* // Set a nickname for a guild member
|
|
350
|
+
* guildMember.setNickname('cool nickname', 'Needed a new nickname')
|
|
351
|
+
* .then(member => console.log(`Set nickname of ${member.user.username}`))
|
|
352
|
+
* .catch(console.error);
|
|
353
|
+
* @example
|
|
354
|
+
* // Remove a nickname for a guild member
|
|
355
|
+
* guildMember.setNickname(null, 'No nicknames allowed!')
|
|
356
|
+
* .then(member => console.log(`Removed nickname for ${member.user.username}`))
|
|
357
|
+
* .catch(console.error);
|
|
358
|
+
*/
|
|
359
|
+
setNickname(nick, reason) {
|
|
360
|
+
return this.edit({ nick, reason });
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Creates a DM channel between the client and this member.
|
|
365
|
+
* @param {boolean} [force=false] Whether to skip the cache check and request the API
|
|
366
|
+
* @returns {Promise<DMChannel>}
|
|
367
|
+
*/
|
|
368
|
+
createDM(force = false) {
|
|
369
|
+
return this.user.createDM(force);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Deletes any DMs with this member.
|
|
374
|
+
* @returns {Promise<DMChannel>}
|
|
375
|
+
*/
|
|
376
|
+
deleteDM() {
|
|
377
|
+
return this.user.deleteDM();
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Kicks this member from the guild.
|
|
382
|
+
* @param {string} [reason] Reason for kicking user
|
|
383
|
+
* @returns {Promise<GuildMember>}
|
|
384
|
+
*/
|
|
385
|
+
kick(reason) {
|
|
386
|
+
return this.guild.members.kick(this, reason);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Bans this guild member.
|
|
391
|
+
* @param {BanOptions} [options] Options for the ban
|
|
392
|
+
* @returns {Promise<GuildMember>}
|
|
393
|
+
* @example
|
|
394
|
+
* // Ban a guild member, deleting a week's worth of messages
|
|
395
|
+
* guildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })
|
|
396
|
+
* .then(console.log)
|
|
397
|
+
* .catch(console.error);
|
|
398
|
+
*/
|
|
399
|
+
ban(options) {
|
|
400
|
+
return this.guild.bans.create(this, options);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Times this guild member out.
|
|
405
|
+
* @param {DateResolvable|null} communicationDisabledUntil The date or timestamp
|
|
406
|
+
* for the member's communication to be disabled until. Provide `null` to remove the timeout.
|
|
407
|
+
* @param {string} [reason] The reason for this timeout.
|
|
408
|
+
* @returns {Promise<GuildMember>}
|
|
409
|
+
* @example
|
|
410
|
+
* // Time a guild member out for 5 minutes
|
|
411
|
+
* guildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')
|
|
412
|
+
* .then(console.log)
|
|
413
|
+
* .catch(console.error);
|
|
414
|
+
* @example
|
|
415
|
+
* // Remove the timeout of a guild member
|
|
416
|
+
* guildMember.disableCommunicationUntil(null)
|
|
417
|
+
* .then(member => console.log(`Removed timeout for ${member.displayName}`))
|
|
418
|
+
* .catch(console.error);
|
|
419
|
+
*/
|
|
420
|
+
disableCommunicationUntil(communicationDisabledUntil, reason) {
|
|
421
|
+
return this.edit({ communicationDisabledUntil, reason });
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Times this guild member out.
|
|
426
|
+
* @param {number|null} timeout The time in milliseconds
|
|
427
|
+
* for the member's communication to be disabled until. Provide `null` to remove the timeout.
|
|
428
|
+
* @param {string} [reason] The reason for this timeout.
|
|
429
|
+
* @returns {Promise<GuildMember>}
|
|
430
|
+
* @example
|
|
431
|
+
* // Time a guild member out for 5 minutes
|
|
432
|
+
* guildMember.timeout(5 * 60 * 1000, 'They deserved it')
|
|
433
|
+
* .then(console.log)
|
|
434
|
+
* .catch(console.error);
|
|
435
|
+
*/
|
|
436
|
+
timeout(timeout, reason) {
|
|
437
|
+
return this.disableCommunicationUntil(timeout && Date.now() + timeout, reason);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Fetches this GuildMember.
|
|
442
|
+
* @param {boolean} [force=true] Whether to skip the cache check and request the API
|
|
443
|
+
* @returns {Promise<GuildMember>}
|
|
444
|
+
*/
|
|
445
|
+
fetch(force = true) {
|
|
446
|
+
return this.guild.members.fetch({ user: this.id, cache: true, force });
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Whether this guild member equals another guild member. It compares all properties, so for most
|
|
451
|
+
* comparison it is advisable to just compare `member.id === member2.id` as it is significantly faster
|
|
452
|
+
* and is often what most users need.
|
|
453
|
+
* @param {GuildMember} member The member to compare with
|
|
454
|
+
* @returns {boolean}
|
|
455
|
+
*/
|
|
456
|
+
equals(member) {
|
|
457
|
+
return (
|
|
458
|
+
member instanceof this.constructor &&
|
|
459
|
+
this.id === member.id &&
|
|
460
|
+
this.partial === member.partial &&
|
|
461
|
+
this.guild.id === member.guild.id &&
|
|
462
|
+
this.joinedTimestamp === member.joinedTimestamp &&
|
|
463
|
+
this.nickname === member.nickname &&
|
|
464
|
+
this.avatar === member.avatar &&
|
|
465
|
+
this.pending === member.pending &&
|
|
466
|
+
this.communicationDisabledUntilTimestamp === member.communicationDisabledUntilTimestamp &&
|
|
467
|
+
this.flags.bitfield === member.flags.bitfield &&
|
|
468
|
+
(this._roles === member._roles ||
|
|
469
|
+
(this._roles.length === member._roles.length && this._roles.every((role, i) => role === member._roles[i])))
|
|
470
|
+
);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.
|
|
475
|
+
* @returns {string}
|
|
476
|
+
* @example
|
|
477
|
+
* // Logs: Hello from <@123456789012345678>!
|
|
478
|
+
* console.log(`Hello from ${member}!`);
|
|
479
|
+
*/
|
|
480
|
+
toString() {
|
|
481
|
+
return this.user.toString();
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
toJSON() {
|
|
485
|
+
const json = super.toJSON({
|
|
486
|
+
guild: 'guildId',
|
|
487
|
+
user: 'userId',
|
|
488
|
+
displayName: true,
|
|
489
|
+
roles: true,
|
|
490
|
+
});
|
|
491
|
+
json.avatarURL = this.avatarURL();
|
|
492
|
+
json.displayAvatarURL = this.displayAvatarURL();
|
|
493
|
+
return json;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* Sends a message to this user.
|
|
499
|
+
* @method send
|
|
500
|
+
* @memberof GuildMember
|
|
501
|
+
* @instance
|
|
502
|
+
* @param {string|MessagePayload|MessageCreateOptions} options The options to provide
|
|
503
|
+
* @returns {Promise<Message>}
|
|
504
|
+
* @example
|
|
505
|
+
* // Send a direct message
|
|
506
|
+
* guildMember.send('Hello!')
|
|
507
|
+
* .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))
|
|
508
|
+
* .catch(console.error);
|
|
509
|
+
*/
|
|
510
|
+
|
|
511
|
+
TextBasedChannel.applyToClass(GuildMember);
|
|
512
|
+
|
|
513
|
+
exports.GuildMember = GuildMember;
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* @external APIGuildMember
|
|
517
|
+
* @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object}
|
|
518
|
+
*/
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const { DiscordSnowflake } = require('@sapphire/snowflake');
|
|
5
|
+
const { Routes } = require('discord-api-types/v10');
|
|
6
|
+
const Base = require('./Base');
|
|
7
|
+
const GuildPreviewEmoji = require('./GuildPreviewEmoji');
|
|
8
|
+
const { Sticker } = require('./Sticker');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Represents the data about the guild any bot can preview, connected to the specified guild.
|
|
12
|
+
* @extends {Base}
|
|
13
|
+
*/
|
|
14
|
+
class GuildPreview extends Base {
|
|
15
|
+
constructor(client, data) {
|
|
16
|
+
super(client);
|
|
17
|
+
|
|
18
|
+
if (!data) return;
|
|
19
|
+
|
|
20
|
+
this._patch(data);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
_patch(data) {
|
|
24
|
+
/**
|
|
25
|
+
* The id of this guild
|
|
26
|
+
* @type {string}
|
|
27
|
+
*/
|
|
28
|
+
this.id = data.id;
|
|
29
|
+
|
|
30
|
+
if ('name' in data) {
|
|
31
|
+
/**
|
|
32
|
+
* The name of this guild
|
|
33
|
+
* @type {string}
|
|
34
|
+
*/
|
|
35
|
+
this.name = data.name;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if ('icon' in data) {
|
|
39
|
+
/**
|
|
40
|
+
* The icon of this guild
|
|
41
|
+
* @type {?string}
|
|
42
|
+
*/
|
|
43
|
+
this.icon = data.icon;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if ('splash' in data) {
|
|
47
|
+
/**
|
|
48
|
+
* The splash icon of this guild
|
|
49
|
+
* @type {?string}
|
|
50
|
+
*/
|
|
51
|
+
this.splash = data.splash;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if ('discovery_splash' in data) {
|
|
55
|
+
/**
|
|
56
|
+
* The discovery splash icon of this guild
|
|
57
|
+
* @type {?string}
|
|
58
|
+
*/
|
|
59
|
+
this.discoverySplash = data.discovery_splash;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if ('features' in data) {
|
|
63
|
+
/**
|
|
64
|
+
* An array of enabled guild features
|
|
65
|
+
* @type {GuildFeature[]}
|
|
66
|
+
*/
|
|
67
|
+
this.features = data.features;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if ('approximate_member_count' in data) {
|
|
71
|
+
/**
|
|
72
|
+
* The approximate count of members in this guild
|
|
73
|
+
* @type {number}
|
|
74
|
+
*/
|
|
75
|
+
this.approximateMemberCount = data.approximate_member_count;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if ('approximate_presence_count' in data) {
|
|
79
|
+
/**
|
|
80
|
+
* The approximate count of online members in this guild
|
|
81
|
+
* @type {number}
|
|
82
|
+
*/
|
|
83
|
+
this.approximatePresenceCount = data.approximate_presence_count;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if ('description' in data) {
|
|
87
|
+
/**
|
|
88
|
+
* The description for this guild
|
|
89
|
+
* @type {?string}
|
|
90
|
+
*/
|
|
91
|
+
this.description = data.description;
|
|
92
|
+
} else {
|
|
93
|
+
this.description ??= null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (!this.emojis) {
|
|
97
|
+
/**
|
|
98
|
+
* Collection of emojis belonging to this guild
|
|
99
|
+
* @type {Collection<Snowflake, GuildPreviewEmoji>}
|
|
100
|
+
*/
|
|
101
|
+
this.emojis = new Collection();
|
|
102
|
+
} else {
|
|
103
|
+
this.emojis.clear();
|
|
104
|
+
}
|
|
105
|
+
for (const emoji of data.emojis) {
|
|
106
|
+
this.emojis.set(emoji.id, new GuildPreviewEmoji(this.client, emoji, this));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Collection of stickers belonging to this guild
|
|
111
|
+
* @type {Collection<Snowflake, Sticker>}
|
|
112
|
+
*/
|
|
113
|
+
this.stickers = data.stickers.reduce(
|
|
114
|
+
(stickers, sticker) => stickers.set(sticker.id, new Sticker(this.client, sticker)),
|
|
115
|
+
new Collection(),
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* The timestamp this guild was created at
|
|
121
|
+
* @type {number}
|
|
122
|
+
* @readonly
|
|
123
|
+
*/
|
|
124
|
+
get createdTimestamp() {
|
|
125
|
+
return DiscordSnowflake.timestampFrom(this.id);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* The time this guild was created at
|
|
130
|
+
* @type {Date}
|
|
131
|
+
* @readonly
|
|
132
|
+
*/
|
|
133
|
+
get createdAt() {
|
|
134
|
+
return new Date(this.createdTimestamp);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* The URL to this guild's splash.
|
|
139
|
+
* @param {ImageURLOptions} [options={}] Options for the image URL
|
|
140
|
+
* @returns {?string}
|
|
141
|
+
*/
|
|
142
|
+
splashURL(options = {}) {
|
|
143
|
+
return this.splash && this.client.rest.cdn.splash(this.id, this.splash, options);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* The URL to this guild's discovery splash.
|
|
148
|
+
* @param {ImageURLOptions} [options={}] Options for the image URL
|
|
149
|
+
* @returns {?string}
|
|
150
|
+
*/
|
|
151
|
+
discoverySplashURL(options = {}) {
|
|
152
|
+
return this.discoverySplash && this.client.rest.cdn.discoverySplash(this.id, this.discoverySplash, options);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* The URL to this guild's icon.
|
|
157
|
+
* @param {ImageURLOptions} [options={}] Options for the image URL
|
|
158
|
+
* @returns {?string}
|
|
159
|
+
*/
|
|
160
|
+
iconURL(options = {}) {
|
|
161
|
+
return this.icon && this.client.rest.cdn.icon(this.id, this.icon, options);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Fetches this guild.
|
|
166
|
+
* @returns {Promise<GuildPreview>}
|
|
167
|
+
*/
|
|
168
|
+
async fetch() {
|
|
169
|
+
const data = await this.client.rest.get(Routes.guildPreview(this.id));
|
|
170
|
+
this._patch(data);
|
|
171
|
+
return this;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* When concatenated with a string, this automatically returns the guild's name instead of the Guild object.
|
|
176
|
+
* @returns {string}
|
|
177
|
+
* @example
|
|
178
|
+
* // Logs: Hello from My Guild!
|
|
179
|
+
* console.log(`Hello from ${previewGuild}!`);
|
|
180
|
+
*/
|
|
181
|
+
toString() {
|
|
182
|
+
return this.name;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
toJSON() {
|
|
186
|
+
const json = super.toJSON();
|
|
187
|
+
json.iconURL = this.iconURL();
|
|
188
|
+
json.splashURL = this.splashURL();
|
|
189
|
+
return json;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
module.exports = GuildPreview;
|