@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,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const BaseGuildEmoji = require('./BaseGuildEmoji');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Represents an instance of an emoji belonging to a public guild obtained through Discord's preview endpoint.
|
|
7
|
+
* @extends {BaseGuildEmoji}
|
|
8
|
+
*/
|
|
9
|
+
class GuildPreviewEmoji extends BaseGuildEmoji {
|
|
10
|
+
/**
|
|
11
|
+
* The public guild this emoji is part of
|
|
12
|
+
* @type {GuildPreview}
|
|
13
|
+
* @name GuildPreviewEmoji#guild
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
constructor(client, data, guild) {
|
|
17
|
+
super(client, data, guild);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The roles this emoji is active for
|
|
21
|
+
* @type {Snowflake[]}
|
|
22
|
+
*/
|
|
23
|
+
this.roles = data.roles;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
module.exports = GuildPreviewEmoji;
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { DiscordSnowflake } = require('@sapphire/snowflake');
|
|
4
|
+
const { GuildScheduledEventStatus, GuildScheduledEventEntityType, RouteBases } = require('discord-api-types/v10');
|
|
5
|
+
const Base = require('./Base');
|
|
6
|
+
const { DiscordjsError, ErrorCodes } = require('../errors');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Represents a scheduled event in a {@link Guild}.
|
|
10
|
+
* @extends {Base}
|
|
11
|
+
*/
|
|
12
|
+
class GuildScheduledEvent extends Base {
|
|
13
|
+
constructor(client, data) {
|
|
14
|
+
super(client);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The id of the guild scheduled event
|
|
18
|
+
* @type {Snowflake}
|
|
19
|
+
*/
|
|
20
|
+
this.id = data.id;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The id of the guild this guild scheduled event belongs to
|
|
24
|
+
* @type {Snowflake}
|
|
25
|
+
*/
|
|
26
|
+
this.guildId = data.guild_id;
|
|
27
|
+
|
|
28
|
+
this._patch(data);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
_patch(data) {
|
|
32
|
+
if ('channel_id' in data) {
|
|
33
|
+
/**
|
|
34
|
+
* The channel id in which the scheduled event will be hosted,
|
|
35
|
+
* or `null` if entity type is {@link GuildScheduledEventEntityType.External}
|
|
36
|
+
* @type {?Snowflake}
|
|
37
|
+
*/
|
|
38
|
+
this.channelId = data.channel_id;
|
|
39
|
+
} else {
|
|
40
|
+
this.channelId ??= null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if ('creator_id' in data) {
|
|
44
|
+
/**
|
|
45
|
+
* The id of the user that created this guild scheduled event
|
|
46
|
+
* @type {?Snowflake}
|
|
47
|
+
*/
|
|
48
|
+
this.creatorId = data.creator_id;
|
|
49
|
+
} else {
|
|
50
|
+
this.creatorId ??= null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The name of the guild scheduled event
|
|
55
|
+
* @type {string}
|
|
56
|
+
*/
|
|
57
|
+
this.name = data.name;
|
|
58
|
+
|
|
59
|
+
if ('description' in data) {
|
|
60
|
+
/**
|
|
61
|
+
* The description of the guild scheduled event
|
|
62
|
+
* @type {?string}
|
|
63
|
+
*/
|
|
64
|
+
this.description = data.description;
|
|
65
|
+
} else {
|
|
66
|
+
this.description ??= null;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The timestamp the guild scheduled event will start at
|
|
71
|
+
* <info>This can be potentially `null` only when it's an {@link AuditLogEntryTarget}</info>
|
|
72
|
+
* @type {?number}
|
|
73
|
+
*/
|
|
74
|
+
this.scheduledStartTimestamp = data.scheduled_start_time ? Date.parse(data.scheduled_start_time) : null;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The timestamp the guild scheduled event will end at,
|
|
78
|
+
* or `null` if the event does not have a scheduled time to end
|
|
79
|
+
* @type {?number}
|
|
80
|
+
*/
|
|
81
|
+
this.scheduledEndTimestamp = data.scheduled_end_time ? Date.parse(data.scheduled_end_time) : null;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The privacy level of the guild scheduled event
|
|
85
|
+
* @type {GuildScheduledEventPrivacyLevel}
|
|
86
|
+
*/
|
|
87
|
+
this.privacyLevel = data.privacy_level;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The status of the guild scheduled event
|
|
91
|
+
* @type {GuildScheduledEventStatus}
|
|
92
|
+
*/
|
|
93
|
+
this.status = data.status;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The type of hosting entity associated with the scheduled event
|
|
97
|
+
* @type {GuildScheduledEventEntityType}
|
|
98
|
+
*/
|
|
99
|
+
this.entityType = data.entity_type;
|
|
100
|
+
|
|
101
|
+
if ('entity_id' in data) {
|
|
102
|
+
/**
|
|
103
|
+
* The id of the hosting entity associated with the scheduled event
|
|
104
|
+
* @type {?Snowflake}
|
|
105
|
+
*/
|
|
106
|
+
this.entityId = data.entity_id;
|
|
107
|
+
} else {
|
|
108
|
+
this.entityId ??= null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if ('user_count' in data) {
|
|
112
|
+
/**
|
|
113
|
+
* The number of users who are subscribed to this guild scheduled event
|
|
114
|
+
* @type {?number}
|
|
115
|
+
*/
|
|
116
|
+
this.userCount = data.user_count;
|
|
117
|
+
} else {
|
|
118
|
+
this.userCount ??= null;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if ('creator' in data) {
|
|
122
|
+
/**
|
|
123
|
+
* The user that created this guild scheduled event
|
|
124
|
+
* @type {?User}
|
|
125
|
+
*/
|
|
126
|
+
this.creator = this.client.users._add(data.creator);
|
|
127
|
+
} else {
|
|
128
|
+
this.creator ??= this.client.users.resolve(this.creatorId);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* eslint-disable max-len */
|
|
132
|
+
/**
|
|
133
|
+
* Represents the additional metadata for a {@link GuildScheduledEvent}
|
|
134
|
+
* @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata}
|
|
135
|
+
* @typedef {Object} GuildScheduledEventEntityMetadata
|
|
136
|
+
* @property {?string} location The location of the guild scheduled event
|
|
137
|
+
*/
|
|
138
|
+
/* eslint-enable max-len */
|
|
139
|
+
|
|
140
|
+
if ('entity_metadata' in data) {
|
|
141
|
+
if (data.entity_metadata) {
|
|
142
|
+
/**
|
|
143
|
+
* Additional metadata
|
|
144
|
+
* @type {?GuildScheduledEventEntityMetadata}
|
|
145
|
+
*/
|
|
146
|
+
this.entityMetadata = {
|
|
147
|
+
location: data.entity_metadata.location ?? this.entityMetadata?.location ?? null,
|
|
148
|
+
};
|
|
149
|
+
} else {
|
|
150
|
+
this.entityMetadata = null;
|
|
151
|
+
}
|
|
152
|
+
} else {
|
|
153
|
+
this.entityMetadata ??= null;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if ('image' in data) {
|
|
157
|
+
/**
|
|
158
|
+
* The cover image hash for this scheduled event
|
|
159
|
+
* @type {?string}
|
|
160
|
+
*/
|
|
161
|
+
this.image = data.image;
|
|
162
|
+
} else {
|
|
163
|
+
this.image ??= null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* The URL of this scheduled event's cover image
|
|
169
|
+
* @param {BaseImageURLOptions} [options={}] Options for image URL
|
|
170
|
+
* @returns {?string}
|
|
171
|
+
*/
|
|
172
|
+
coverImageURL(options = {}) {
|
|
173
|
+
return this.image && this.client.rest.cdn.guildScheduledEventCover(this.id, this.image, options);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* The timestamp the guild scheduled event was created at
|
|
178
|
+
* @type {number}
|
|
179
|
+
* @readonly
|
|
180
|
+
*/
|
|
181
|
+
get createdTimestamp() {
|
|
182
|
+
return DiscordSnowflake.timestampFrom(this.id);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* The time the guild scheduled event was created at
|
|
187
|
+
* @type {Date}
|
|
188
|
+
* @readonly
|
|
189
|
+
*/
|
|
190
|
+
get createdAt() {
|
|
191
|
+
return new Date(this.createdTimestamp);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* The time the guild scheduled event will start at
|
|
196
|
+
* <info>This can be potentially `null` only when it's an {@link AuditLogEntryTarget}</info>
|
|
197
|
+
* @type {?Date}
|
|
198
|
+
* @readonly
|
|
199
|
+
*/
|
|
200
|
+
get scheduledStartAt() {
|
|
201
|
+
return this.scheduledStartTimestamp && new Date(this.scheduledStartTimestamp);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* The time the guild scheduled event will end at,
|
|
206
|
+
* or `null` if the event does not have a scheduled time to end
|
|
207
|
+
* @type {?Date}
|
|
208
|
+
* @readonly
|
|
209
|
+
*/
|
|
210
|
+
get scheduledEndAt() {
|
|
211
|
+
return this.scheduledEndTimestamp && new Date(this.scheduledEndTimestamp);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* The channel associated with this scheduled event
|
|
216
|
+
* @type {?(VoiceChannel|StageChannel)}
|
|
217
|
+
* @readonly
|
|
218
|
+
*/
|
|
219
|
+
get channel() {
|
|
220
|
+
return this.client.channels.resolve(this.channelId);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* The guild this scheduled event belongs to
|
|
225
|
+
* @type {?Guild}
|
|
226
|
+
* @readonly
|
|
227
|
+
*/
|
|
228
|
+
get guild() {
|
|
229
|
+
return this.client.guilds.resolve(this.guildId);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* The URL to the guild scheduled event
|
|
234
|
+
* @type {string}
|
|
235
|
+
* @readonly
|
|
236
|
+
*/
|
|
237
|
+
get url() {
|
|
238
|
+
return `${RouteBases.scheduledEvent}/${this.guildId}/${this.id}`;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Options used to create an invite URL to a {@link GuildScheduledEvent}
|
|
243
|
+
* @typedef {InviteCreateOptions} GuildScheduledEventInviteURLCreateOptions
|
|
244
|
+
* @property {GuildInvitableChannelResolvable} [channel] The channel to create the invite in.
|
|
245
|
+
* <warn>This is required when the `entityType` of `GuildScheduledEvent` is
|
|
246
|
+
* {@link GuildScheduledEventEntityType.External}, gets ignored otherwise</warn>
|
|
247
|
+
*/
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Creates an invite URL to this guild scheduled event.
|
|
251
|
+
* @param {GuildScheduledEventInviteURLCreateOptions} [options] The options to create the invite
|
|
252
|
+
* @returns {Promise<string>}
|
|
253
|
+
*/
|
|
254
|
+
async createInviteURL(options) {
|
|
255
|
+
let channelId = this.channelId;
|
|
256
|
+
if (this.entityType === GuildScheduledEventEntityType.External) {
|
|
257
|
+
if (!options?.channel) throw new DiscordjsError(ErrorCodes.InviteOptionsMissingChannel);
|
|
258
|
+
channelId = this.guild.channels.resolveId(options.channel);
|
|
259
|
+
if (!channelId) throw new DiscordjsError(ErrorCodes.GuildChannelResolve);
|
|
260
|
+
}
|
|
261
|
+
const invite = await this.guild.invites.create(channelId, options);
|
|
262
|
+
return `${RouteBases.invite}/${invite.code}?event=${this.id}`;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Edits this guild scheduled event.
|
|
267
|
+
* @param {GuildScheduledEventEditOptions} options The options to edit the guild scheduled event
|
|
268
|
+
* @returns {Promise<GuildScheduledEvent>}
|
|
269
|
+
* @example
|
|
270
|
+
* // Edit a guild scheduled event
|
|
271
|
+
* guildScheduledEvent.edit({ name: 'Party' })
|
|
272
|
+
* .then(guildScheduledEvent => console.log(guildScheduledEvent))
|
|
273
|
+
* .catch(console.error);
|
|
274
|
+
*/
|
|
275
|
+
edit(options) {
|
|
276
|
+
return this.guild.scheduledEvents.edit(this.id, options);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Deletes this guild scheduled event.
|
|
281
|
+
* @returns {Promise<GuildScheduledEvent>}
|
|
282
|
+
* @example
|
|
283
|
+
* // Delete a guild scheduled event
|
|
284
|
+
* guildScheduledEvent.delete()
|
|
285
|
+
* .then(guildScheduledEvent => console.log(guildScheduledEvent))
|
|
286
|
+
* .catch(console.error);
|
|
287
|
+
*/
|
|
288
|
+
async delete() {
|
|
289
|
+
await this.guild.scheduledEvents.delete(this.id);
|
|
290
|
+
return this;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Sets a new name for the guild scheduled event.
|
|
295
|
+
* @param {string} name The new name of the guild scheduled event
|
|
296
|
+
* @param {string} [reason] The reason for changing the name
|
|
297
|
+
* @returns {Promise<GuildScheduledEvent>}
|
|
298
|
+
* @example
|
|
299
|
+
* // Set name of a guild scheduled event
|
|
300
|
+
* guildScheduledEvent.setName('Birthday Party')
|
|
301
|
+
* .then(guildScheduledEvent => console.log(`Set the name to: ${guildScheduledEvent.name}`))
|
|
302
|
+
* .catch(console.error);
|
|
303
|
+
*/
|
|
304
|
+
setName(name, reason) {
|
|
305
|
+
return this.edit({ name, reason });
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Sets a new time to schedule the event at.
|
|
310
|
+
* @param {DateResolvable} scheduledStartTime The time to schedule the event at
|
|
311
|
+
* @param {string} [reason] The reason for changing the scheduled start time
|
|
312
|
+
* @returns {Promise<GuildScheduledEvent>}
|
|
313
|
+
* @example
|
|
314
|
+
* // Set start time of a guild scheduled event
|
|
315
|
+
* guildScheduledEvent.setScheduledStartTime('2022-09-24T00:00:00+05:30')
|
|
316
|
+
* .then(guildScheduledEvent => console.log(`Set the start time to: ${guildScheduledEvent.scheduledStartTime}`))
|
|
317
|
+
* .catch(console.error);
|
|
318
|
+
*/
|
|
319
|
+
setScheduledStartTime(scheduledStartTime, reason) {
|
|
320
|
+
return this.edit({ scheduledStartTime, reason });
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// TODO: scheduledEndTime gets reset on passing null but it hasn't been documented
|
|
324
|
+
/**
|
|
325
|
+
* Sets a new time to end the event at.
|
|
326
|
+
* @param {DateResolvable} scheduledEndTime The time to end the event at
|
|
327
|
+
* @param {string} [reason] The reason for changing the scheduled end time
|
|
328
|
+
* @returns {Promise<GuildScheduledEvent>}
|
|
329
|
+
* @example
|
|
330
|
+
* // Set end time of a guild scheduled event
|
|
331
|
+
* guildScheduledEvent.setScheduledEndTime('2022-09-25T00:00:00+05:30')
|
|
332
|
+
* .then(guildScheduledEvent => console.log(`Set the end time to: ${guildScheduledEvent.scheduledEndTime}`))
|
|
333
|
+
* .catch(console.error);
|
|
334
|
+
*/
|
|
335
|
+
setScheduledEndTime(scheduledEndTime, reason) {
|
|
336
|
+
return this.edit({ scheduledEndTime, reason });
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Sets the new description of the guild scheduled event.
|
|
341
|
+
* @param {string} description The description of the guild scheduled event
|
|
342
|
+
* @param {string} [reason] The reason for changing the description
|
|
343
|
+
* @returns {Promise<GuildScheduledEvent>}
|
|
344
|
+
* @example
|
|
345
|
+
* // Set description of a guild scheduled event
|
|
346
|
+
* guildScheduledEvent.setDescription('A virtual birthday party')
|
|
347
|
+
* .then(guildScheduledEvent => console.log(`Set the description to: ${guildScheduledEvent.description}`))
|
|
348
|
+
* .catch(console.error);
|
|
349
|
+
*/
|
|
350
|
+
setDescription(description, reason) {
|
|
351
|
+
return this.edit({ description, reason });
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Sets the new status of the guild scheduled event.
|
|
356
|
+
* <info>If you're working with TypeScript, use this method in conjunction with status type-guards
|
|
357
|
+
* like {@link GuildScheduledEvent#isScheduled} to get only valid status as suggestion</info>
|
|
358
|
+
* @param {GuildScheduledEventStatus} status The status of the guild scheduled event
|
|
359
|
+
* @param {string} [reason] The reason for changing the status
|
|
360
|
+
* @returns {Promise<GuildScheduledEvent>}
|
|
361
|
+
* @example
|
|
362
|
+
* // Set status of a guild scheduled event
|
|
363
|
+
* guildScheduledEvent.setStatus(GuildScheduledEventStatus.Active)
|
|
364
|
+
* .then(guildScheduledEvent => console.log(`Set the status to: ${guildScheduledEvent.status}`))
|
|
365
|
+
* .catch(console.error);
|
|
366
|
+
*/
|
|
367
|
+
setStatus(status, reason) {
|
|
368
|
+
return this.edit({ status, reason });
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Sets the new location of the guild scheduled event.
|
|
373
|
+
* @param {string} location The location of the guild scheduled event
|
|
374
|
+
* @param {string} [reason] The reason for changing the location
|
|
375
|
+
* @returns {Promise<GuildScheduledEvent>}
|
|
376
|
+
* @example
|
|
377
|
+
* // Set location of a guild scheduled event
|
|
378
|
+
* guildScheduledEvent.setLocation('Earth')
|
|
379
|
+
* .then(guildScheduledEvent => console.log(`Set the location to: ${guildScheduledEvent.entityMetadata.location}`))
|
|
380
|
+
* .catch(console.error);
|
|
381
|
+
*/
|
|
382
|
+
setLocation(location, reason) {
|
|
383
|
+
return this.edit({ entityMetadata: { location }, reason });
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Fetches subscribers of this guild scheduled event.
|
|
388
|
+
* @param {FetchGuildScheduledEventSubscribersOptions} [options] Options for fetching the subscribers
|
|
389
|
+
* @returns {Promise<Collection<Snowflake, GuildScheduledEventUser>>}
|
|
390
|
+
*/
|
|
391
|
+
fetchSubscribers(options) {
|
|
392
|
+
return this.guild.scheduledEvents.fetchSubscribers(this.id, options);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* When concatenated with a string, this automatically concatenates the event's URL instead of the object.
|
|
397
|
+
* @returns {string}
|
|
398
|
+
* @example
|
|
399
|
+
* // Logs: Event: https://discord.com/events/412345678901234567/499876543211234567
|
|
400
|
+
* console.log(`Event: ${guildScheduledEvent}`);
|
|
401
|
+
*/
|
|
402
|
+
toString() {
|
|
403
|
+
return this.url;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Indicates whether this guild scheduled event has an {@link GuildScheduledEventStatus.Active} status.
|
|
408
|
+
* @returns {boolean}
|
|
409
|
+
*/
|
|
410
|
+
isActive() {
|
|
411
|
+
return this.status === GuildScheduledEventStatus.Active;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Indicates whether this guild scheduled event has a {@link GuildScheduledEventStatus.Canceled} status.
|
|
416
|
+
* @returns {boolean}
|
|
417
|
+
*/
|
|
418
|
+
isCanceled() {
|
|
419
|
+
return this.status === GuildScheduledEventStatus.Canceled;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Indicates whether this guild scheduled event has a {@link GuildScheduledEventStatus.Completed} status.
|
|
424
|
+
* @returns {boolean}
|
|
425
|
+
*/
|
|
426
|
+
isCompleted() {
|
|
427
|
+
return this.status === GuildScheduledEventStatus.Completed;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* Indicates whether this guild scheduled event has a {@link GuildScheduledEventStatus.Scheduled} status.
|
|
432
|
+
* @returns {boolean}
|
|
433
|
+
*/
|
|
434
|
+
isScheduled() {
|
|
435
|
+
return this.status === GuildScheduledEventStatus.Scheduled;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
exports.GuildScheduledEvent = GuildScheduledEvent;
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { setTimeout, clearTimeout } = require('node:timers');
|
|
4
|
+
const { RouteBases, Routes } = require('discord-api-types/v10');
|
|
5
|
+
const Base = require('./Base');
|
|
6
|
+
const DataResolver = require('../util/DataResolver');
|
|
7
|
+
const Events = require('../util/Events');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Represents the template for a guild.
|
|
11
|
+
* @extends {Base}
|
|
12
|
+
*/
|
|
13
|
+
class GuildTemplate extends Base {
|
|
14
|
+
/**
|
|
15
|
+
* A regular expression that matches guild template links.
|
|
16
|
+
* The `code` group property is present on the `exec()` result of this expression.
|
|
17
|
+
* @type {RegExp}
|
|
18
|
+
* @memberof GuildTemplate
|
|
19
|
+
*/
|
|
20
|
+
static GuildTemplatesPattern = /discord(?:app)?\.(?:com\/template|new)\/(?<code>[\w-]{2,255})/i;
|
|
21
|
+
|
|
22
|
+
constructor(client, data) {
|
|
23
|
+
super(client);
|
|
24
|
+
this._patch(data);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
_patch(data) {
|
|
28
|
+
if ('code' in data) {
|
|
29
|
+
/**
|
|
30
|
+
* The unique code of this template
|
|
31
|
+
* @type {string}
|
|
32
|
+
*/
|
|
33
|
+
this.code = data.code;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if ('name' in data) {
|
|
37
|
+
/**
|
|
38
|
+
* The name of this template
|
|
39
|
+
* @type {string}
|
|
40
|
+
*/
|
|
41
|
+
this.name = data.name;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if ('description' in data) {
|
|
45
|
+
/**
|
|
46
|
+
* The description of this template
|
|
47
|
+
* @type {?string}
|
|
48
|
+
*/
|
|
49
|
+
this.description = data.description;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if ('usage_count' in data) {
|
|
53
|
+
/**
|
|
54
|
+
* The amount of times this template has been used
|
|
55
|
+
* @type {number}
|
|
56
|
+
*/
|
|
57
|
+
this.usageCount = data.usage_count;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if ('creator_id' in data) {
|
|
61
|
+
/**
|
|
62
|
+
* The id of the user that created this template
|
|
63
|
+
* @type {Snowflake}
|
|
64
|
+
*/
|
|
65
|
+
this.creatorId = data.creator_id;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if ('creator' in data) {
|
|
69
|
+
/**
|
|
70
|
+
* The user that created this template
|
|
71
|
+
* @type {User}
|
|
72
|
+
*/
|
|
73
|
+
this.creator = this.client.users._add(data.creator);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if ('created_at' in data) {
|
|
77
|
+
/**
|
|
78
|
+
* The timestamp of when this template was created at
|
|
79
|
+
* @type {number}
|
|
80
|
+
*/
|
|
81
|
+
this.createdTimestamp = Date.parse(data.created_at);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if ('updated_at' in data) {
|
|
85
|
+
/**
|
|
86
|
+
* The timestamp of when this template was last synced to the guild
|
|
87
|
+
* @type {number}
|
|
88
|
+
*/
|
|
89
|
+
this.updatedTimestamp = Date.parse(data.updated_at);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if ('source_guild_id' in data) {
|
|
93
|
+
/**
|
|
94
|
+
* The id of the guild that this template belongs to
|
|
95
|
+
* @type {Snowflake}
|
|
96
|
+
*/
|
|
97
|
+
this.guildId = data.source_guild_id;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if ('serialized_source_guild' in data) {
|
|
101
|
+
/**
|
|
102
|
+
* The data of the guild that this template would create
|
|
103
|
+
* @type {APIGuild}
|
|
104
|
+
*/
|
|
105
|
+
this.serializedGuild = data.serialized_source_guild;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Whether this template has unsynced changes
|
|
110
|
+
* @type {?boolean}
|
|
111
|
+
*/
|
|
112
|
+
this.unSynced = 'is_dirty' in data ? Boolean(data.is_dirty) : null;
|
|
113
|
+
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Creates a guild based on this template.
|
|
119
|
+
* <warn>This is only available to bots in fewer than 10 guilds.</warn>
|
|
120
|
+
* @param {string} name The name of the guild
|
|
121
|
+
* @param {BufferResolvable|Base64Resolvable} [icon] The icon for the guild
|
|
122
|
+
* @returns {Promise<Guild>}
|
|
123
|
+
*/
|
|
124
|
+
async createGuild(name, icon) {
|
|
125
|
+
const { client } = this;
|
|
126
|
+
const data = await client.rest.post(Routes.template(this.code), {
|
|
127
|
+
body: {
|
|
128
|
+
name,
|
|
129
|
+
icon: await DataResolver.resolveImage(icon),
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
if (client.guilds.cache.has(data.id)) return client.guilds.cache.get(data.id);
|
|
134
|
+
|
|
135
|
+
return new Promise(resolve => {
|
|
136
|
+
const resolveGuild = guild => {
|
|
137
|
+
client.off(Events.GuildCreate, handleGuild);
|
|
138
|
+
client.decrementMaxListeners();
|
|
139
|
+
resolve(guild);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const handleGuild = guild => {
|
|
143
|
+
if (guild.id === data.id) {
|
|
144
|
+
clearTimeout(timeout);
|
|
145
|
+
resolveGuild(guild);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
client.incrementMaxListeners();
|
|
150
|
+
client.on(Events.GuildCreate, handleGuild);
|
|
151
|
+
|
|
152
|
+
const timeout = setTimeout(() => resolveGuild(client.guilds._add(data)), 10_000).unref();
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Options used to edit a guild template.
|
|
158
|
+
* @typedef {Object} GuildTemplateEditOptions
|
|
159
|
+
* @property {string} [name] The name of this template
|
|
160
|
+
* @property {string} [description] The description of this template
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Updates the metadata of this template.
|
|
165
|
+
* @param {GuildTemplateEditOptions} [options] Options for editing the template
|
|
166
|
+
* @returns {Promise<GuildTemplate>}
|
|
167
|
+
*/
|
|
168
|
+
async edit({ name, description } = {}) {
|
|
169
|
+
const data = await this.client.rest.patch(Routes.guildTemplate(this.guildId, this.code), {
|
|
170
|
+
body: { name, description },
|
|
171
|
+
});
|
|
172
|
+
return this._patch(data);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Deletes this template.
|
|
177
|
+
* @returns {Promise<GuildTemplate>}
|
|
178
|
+
*/
|
|
179
|
+
async delete() {
|
|
180
|
+
await this.client.rest.delete(Routes.guildTemplate(this.guildId, this.code));
|
|
181
|
+
return this;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Syncs this template to the current state of the guild.
|
|
186
|
+
* @returns {Promise<GuildTemplate>}
|
|
187
|
+
*/
|
|
188
|
+
async sync() {
|
|
189
|
+
const data = await this.client.rest.put(Routes.guildTemplate(this.guildId, this.code));
|
|
190
|
+
return this._patch(data);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* The time when this template was created at
|
|
195
|
+
* @type {Date}
|
|
196
|
+
* @readonly
|
|
197
|
+
*/
|
|
198
|
+
get createdAt() {
|
|
199
|
+
return new Date(this.createdTimestamp);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* The time when this template was last synced to the guild
|
|
204
|
+
* @type {Date}
|
|
205
|
+
* @readonly
|
|
206
|
+
*/
|
|
207
|
+
get updatedAt() {
|
|
208
|
+
return new Date(this.updatedTimestamp);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* The guild that this template belongs to
|
|
213
|
+
* @type {?Guild}
|
|
214
|
+
* @readonly
|
|
215
|
+
*/
|
|
216
|
+
get guild() {
|
|
217
|
+
return this.client.guilds.resolve(this.guildId);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* The URL of this template
|
|
222
|
+
* @type {string}
|
|
223
|
+
* @readonly
|
|
224
|
+
*/
|
|
225
|
+
get url() {
|
|
226
|
+
return `${RouteBases.template}/${this.code}`;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* When concatenated with a string, this automatically returns the template's code instead of the template object.
|
|
231
|
+
* @returns {string}
|
|
232
|
+
* @example
|
|
233
|
+
* // Logs: Template: FKvmczH2HyUf
|
|
234
|
+
* console.log(`Template: ${guildTemplate}!`);
|
|
235
|
+
*/
|
|
236
|
+
toString() {
|
|
237
|
+
return this.code;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
module.exports = GuildTemplate;
|