discord.js-selfbot-dmallfriends-v13 0.0.1-security → 2.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of discord.js-selfbot-dmallfriends-v13 might be problematic. Click here for more details.
- package/LICENSE +674 -0
- package/README.md +127 -5
- package/package.json +101 -6
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +87 -0
- package/src/client/Client.js +1154 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +115 -0
- package/src/client/actions/ActionsManager.js +72 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +26 -0
- package/src/client/actions/AutoModerationRuleCreate.js +27 -0
- package/src/client/actions/AutoModerationRuleDelete.js +31 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +34 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +65 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +21 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +33 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +31 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +21 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InteractionCreate.js +115 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +50 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +46 -0
- package/src/client/actions/MessageReactionAdd.js +56 -0
- package/src/client/actions/MessageReactionRemove.js +45 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +45 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +33 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +32 -0
- package/src/client/actions/ThreadListSync.js +59 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +34 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +35 -0
- package/src/client/actions/VoiceStateUpdate.js +57 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +51 -0
- package/src/client/websocket/WebSocketManager.js +412 -0
- package/src/client/websocket/WebSocketShard.js +908 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
- package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
- package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +46 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
- package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +11 -0
- package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +170 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +15 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +18 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +12 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +9 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +86 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +227 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +189 -0
- package/src/managers/ApplicationCommandManager.js +267 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
- package/src/managers/AutoModerationRuleManager.js +296 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/BillingManager.js +66 -0
- package/src/managers/CachedManager.js +71 -0
- package/src/managers/ChannelManager.js +139 -0
- package/src/managers/ClientUserSettingManager.js +490 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/DeveloperPortalManager.js +104 -0
- package/src/managers/GuildApplicationCommandManager.js +28 -0
- package/src/managers/GuildBanManager.js +204 -0
- package/src/managers/GuildChannelManager.js +502 -0
- package/src/managers/GuildEmojiManager.js +171 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildFolderManager.js +24 -0
- package/src/managers/GuildForumThreadManager.js +114 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +304 -0
- package/src/managers/GuildMemberManager.js +724 -0
- package/src/managers/GuildMemberRoleManager.js +191 -0
- package/src/managers/GuildScheduledEventManager.js +296 -0
- package/src/managers/GuildSettingManager.js +148 -0
- package/src/managers/GuildStickerManager.js +179 -0
- package/src/managers/GuildTextThreadManager.js +98 -0
- package/src/managers/InteractionManager.js +39 -0
- package/src/managers/MessageManager.js +393 -0
- package/src/managers/PermissionOverwriteManager.js +166 -0
- package/src/managers/PresenceManager.js +58 -0
- package/src/managers/ReactionManager.js +67 -0
- package/src/managers/ReactionUserManager.js +71 -0
- package/src/managers/RelationshipManager.js +258 -0
- package/src/managers/RoleManager.js +352 -0
- package/src/managers/SessionManager.js +57 -0
- package/src/managers/StageInstanceManager.js +162 -0
- package/src/managers/ThreadManager.js +207 -0
- package/src/managers/ThreadMemberManager.js +186 -0
- package/src/managers/UserManager.js +150 -0
- package/src/managers/VoiceStateManager.js +37 -0
- package/src/rest/APIRequest.js +136 -0
- package/src/rest/APIRouter.js +53 -0
- package/src/rest/CaptchaSolver.js +78 -0
- package/src/rest/DiscordAPIError.js +103 -0
- package/src/rest/HTTPError.js +62 -0
- package/src/rest/RESTManager.js +81 -0
- package/src/rest/RateLimitError.js +55 -0
- package/src/rest/RequestHandler.js +446 -0
- package/src/sharding/Shard.js +443 -0
- package/src/sharding/ShardClientUtil.js +275 -0
- package/src/sharding/ShardingManager.js +318 -0
- package/src/structures/AnonymousGuild.js +98 -0
- package/src/structures/ApplicationCommand.js +1028 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
- package/src/structures/AutoModerationActionExecution.js +89 -0
- package/src/structures/AutoModerationRule.js +294 -0
- package/src/structures/AutocompleteInteraction.js +106 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseCommandInteraction.js +211 -0
- package/src/structures/BaseGuild.js +116 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +193 -0
- package/src/structures/BaseGuildVoiceChannel.js +243 -0
- package/src/structures/BaseMessageComponent.js +114 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/Call.js +58 -0
- package/src/structures/CategoryChannel.js +83 -0
- package/src/structures/Channel.js +271 -0
- package/src/structures/ClientApplication.js +204 -0
- package/src/structures/ClientPresence.js +84 -0
- package/src/structures/ClientUser.js +624 -0
- package/src/structures/CommandInteraction.js +41 -0
- package/src/structures/CommandInteractionOptionResolver.js +276 -0
- package/src/structures/ContextMenuInteraction.js +65 -0
- package/src/structures/DMChannel.js +280 -0
- package/src/structures/DeveloperPortalApplication.js +520 -0
- package/src/structures/DirectoryChannel.js +20 -0
- package/src/structures/Emoji.js +148 -0
- package/src/structures/ForumChannel.js +271 -0
- package/src/structures/Guild.js +1744 -0
- package/src/structures/GuildAuditLogs.js +734 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildBoost.js +108 -0
- package/src/structures/GuildChannel.js +454 -0
- package/src/structures/GuildEmoji.js +161 -0
- package/src/structures/GuildFolder.js +75 -0
- package/src/structures/GuildMember.js +686 -0
- package/src/structures/GuildPreview.js +191 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +441 -0
- package/src/structures/GuildTemplate.js +236 -0
- package/src/structures/Integration.js +188 -0
- package/src/structures/IntegrationApplication.js +96 -0
- package/src/structures/Interaction.js +351 -0
- package/src/structures/InteractionCollector.js +248 -0
- package/src/structures/InteractionResponse.js +114 -0
- package/src/structures/InteractionWebhook.js +43 -0
- package/src/structures/Invite.js +375 -0
- package/src/structures/InviteGuild.js +23 -0
- package/src/structures/InviteStageInstance.js +86 -0
- package/src/structures/Message.js +1188 -0
- package/src/structures/MessageActionRow.js +103 -0
- package/src/structures/MessageAttachment.js +193 -0
- package/src/structures/MessageButton.js +231 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +120 -0
- package/src/structures/MessageContextMenuInteraction.js +20 -0
- package/src/structures/MessageEmbed.js +586 -0
- package/src/structures/MessageMentions.js +272 -0
- package/src/structures/MessagePayload.js +358 -0
- package/src/structures/MessageReaction.js +171 -0
- package/src/structures/MessageSelectMenu.js +391 -0
- package/src/structures/Modal.js +279 -0
- package/src/structures/ModalSubmitFieldsResolver.js +53 -0
- package/src/structures/ModalSubmitInteraction.js +119 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PartialGroupDMChannel.js +430 -0
- package/src/structures/PermissionOverwrites.js +196 -0
- package/src/structures/Presence.js +441 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/RichPresence.js +722 -0
- package/src/structures/Role.js +515 -0
- package/src/structures/SelectMenuInteraction.js +170 -0
- package/src/structures/Session.js +81 -0
- package/src/structures/StageChannel.js +104 -0
- package/src/structures/StageInstance.js +208 -0
- package/src/structures/Sticker.js +310 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StoreChannel.js +56 -0
- package/src/structures/Team.js +167 -0
- package/src/structures/TeamMember.js +71 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextInputComponent.js +201 -0
- package/src/structures/ThreadChannel.js +626 -0
- package/src/structures/ThreadMember.js +105 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/User.js +697 -0
- package/src/structures/UserContextMenuInteraction.js +29 -0
- package/src/structures/VoiceChannel.js +110 -0
- package/src/structures/VoiceRegion.js +53 -0
- package/src/structures/VoiceState.js +306 -0
- package/src/structures/WebEmbed.js +401 -0
- package/src/structures/Webhook.js +461 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +48 -0
- package/src/structures/Widget.js +87 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +190 -0
- package/src/structures/interfaces/Collector.js +300 -0
- package/src/structures/interfaces/InteractionResponses.js +313 -0
- package/src/structures/interfaces/TextBasedChannel.js +566 -0
- package/src/util/ActivityFlags.js +44 -0
- package/src/util/ApplicationFlags.js +74 -0
- package/src/util/BitField.js +170 -0
- package/src/util/ChannelFlags.js +45 -0
- package/src/util/Constants.js +1917 -0
- package/src/util/DataResolver.js +145 -0
- package/src/util/Formatters.js +214 -0
- package/src/util/GuildMemberFlags.js +43 -0
- package/src/util/Intents.js +74 -0
- package/src/util/LimitedCollection.js +131 -0
- package/src/util/MessageFlags.js +54 -0
- package/src/util/Options.js +360 -0
- package/src/util/Permissions.js +187 -0
- package/src/util/PremiumUsageFlags.js +31 -0
- package/src/util/PurchasedFlags.js +31 -0
- package/src/util/RemoteAuth.js +522 -0
- package/src/util/SnowflakeUtil.js +92 -0
- package/src/util/Sweepers.js +466 -0
- package/src/util/SystemChannelFlags.js +55 -0
- package/src/util/ThreadMemberFlags.js +30 -0
- package/src/util/UserFlags.js +104 -0
- package/src/util/Util.js +741 -0
- package/src/util/Voice.js +1456 -0
- package/src/util/arRPC/index.js +229 -0
- package/src/util/arRPC/process/detectable.json +1 -0
- package/src/util/arRPC/process/index.js +102 -0
- package/src/util/arRPC/process/native/index.js +5 -0
- package/src/util/arRPC/process/native/linux.js +37 -0
- package/src/util/arRPC/process/native/win32.js +25 -0
- package/src/util/arRPC/transports/ipc.js +281 -0
- package/src/util/arRPC/transports/websocket.js +128 -0
- package/typings/enums.d.ts +346 -0
- package/typings/index.d.ts +7725 -0
- package/typings/index.test-d.ts +0 -0
- package/typings/rawDataTypes.d.ts +283 -0
@@ -0,0 +1,171 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const BaseGuildEmojiManager = require('./BaseGuildEmojiManager');
|
5
|
+
const { Error, TypeError } = require('../errors');
|
6
|
+
const DataResolver = require('../util/DataResolver');
|
7
|
+
const Permissions = require('../util/Permissions');
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Manages API methods for GuildEmojis and stores their cache.
|
11
|
+
* @extends {BaseGuildEmojiManager}
|
12
|
+
*/
|
13
|
+
class GuildEmojiManager extends BaseGuildEmojiManager {
|
14
|
+
constructor(guild, iterable) {
|
15
|
+
super(guild.client, iterable);
|
16
|
+
|
17
|
+
/**
|
18
|
+
* The guild this manager belongs to
|
19
|
+
* @type {Guild}
|
20
|
+
*/
|
21
|
+
this.guild = guild;
|
22
|
+
}
|
23
|
+
|
24
|
+
_add(data, cache) {
|
25
|
+
return super._add(data, cache, { extras: [this.guild] });
|
26
|
+
}
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Options used for creating an emoji in a guild.
|
30
|
+
* @typedef {Object} GuildEmojiCreateOptions
|
31
|
+
* @property {Collection<Snowflake, Role>|RoleResolvable[]} [roles] The roles to limit the emoji to
|
32
|
+
* @property {string} [reason] The reason for creating the emoji
|
33
|
+
*/
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Creates a new custom emoji in the guild.
|
37
|
+
* @param {BufferResolvable|Base64Resolvable} attachment The image for the emoji
|
38
|
+
* @param {string} name The name for the emoji
|
39
|
+
* @param {GuildEmojiCreateOptions} [options] Options for creating the emoji
|
40
|
+
* @returns {Promise<Emoji>} The created emoji
|
41
|
+
* @example
|
42
|
+
* // Create a new emoji from a URL
|
43
|
+
* guild.emojis.create('https://i.imgur.com/w3duR07.png', 'rip')
|
44
|
+
* .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
|
45
|
+
* .catch(console.error);
|
46
|
+
* @example
|
47
|
+
* // Create a new emoji from a file on your computer
|
48
|
+
* guild.emojis.create('./memes/banana.png', 'banana')
|
49
|
+
* .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
|
50
|
+
* .catch(console.error);
|
51
|
+
*/
|
52
|
+
async create(attachment, name, { roles, reason } = {}) {
|
53
|
+
attachment = await DataResolver.resolveImage(attachment);
|
54
|
+
if (!attachment) throw new TypeError('REQ_RESOURCE_TYPE');
|
55
|
+
|
56
|
+
const data = { image: attachment, name };
|
57
|
+
if (roles) {
|
58
|
+
if (!Array.isArray(roles) && !(roles instanceof Collection)) {
|
59
|
+
throw new TypeError('INVALID_TYPE', 'options.roles', 'Array or Collection of Roles or Snowflakes', true);
|
60
|
+
}
|
61
|
+
data.roles = [];
|
62
|
+
for (const role of roles.values()) {
|
63
|
+
const resolvedRole = this.guild.roles.resolveId(role);
|
64
|
+
if (!resolvedRole) throw new TypeError('INVALID_ELEMENT', 'Array or Collection', 'options.roles', role);
|
65
|
+
data.roles.push(resolvedRole);
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
const emoji = await this.client.api.guilds(this.guild.id).emojis.post({ data, reason });
|
70
|
+
return this.client.actions.GuildEmojiCreate.handle(this.guild, emoji).emoji;
|
71
|
+
}
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Obtains one or more emojis from Discord, or the emoji cache if they're already available.
|
75
|
+
* @param {Snowflake} [id] The emoji's id
|
76
|
+
* @param {BaseFetchOptions} [options] Additional options for this fetch
|
77
|
+
* @returns {Promise<GuildEmoji|Collection<Snowflake, GuildEmoji>>}
|
78
|
+
* @example
|
79
|
+
* // Fetch all emojis from the guild
|
80
|
+
* message.guild.emojis.fetch()
|
81
|
+
* .then(emojis => console.log(`There are ${emojis.size} emojis.`))
|
82
|
+
* .catch(console.error);
|
83
|
+
* @example
|
84
|
+
* // Fetch a single emoji
|
85
|
+
* message.guild.emojis.fetch('222078108977594368')
|
86
|
+
* .then(emoji => console.log(`The emoji name is: ${emoji.name}`))
|
87
|
+
* .catch(console.error);
|
88
|
+
*/
|
89
|
+
async fetch(id, { cache = true, force = false } = {}) {
|
90
|
+
if (id) {
|
91
|
+
if (!force) {
|
92
|
+
const existing = this.cache.get(id);
|
93
|
+
if (existing) return existing;
|
94
|
+
}
|
95
|
+
const emoji = await this.client.api.guilds(this.guild.id).emojis(id).get();
|
96
|
+
return this._add(emoji, cache);
|
97
|
+
}
|
98
|
+
|
99
|
+
const data = await this.client.api.guilds(this.guild.id).emojis.get();
|
100
|
+
const emojis = new Collection();
|
101
|
+
for (const emoji of data) emojis.set(emoji.id, this._add(emoji, cache));
|
102
|
+
return emojis;
|
103
|
+
}
|
104
|
+
|
105
|
+
/**
|
106
|
+
* Deletes an emoji.
|
107
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to delete
|
108
|
+
* @param {string} [reason] Reason for deleting the emoji
|
109
|
+
* @returns {Promise<void>}
|
110
|
+
*/
|
111
|
+
async delete(emoji, reason) {
|
112
|
+
const id = this.resolveId(emoji);
|
113
|
+
if (!id) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true);
|
114
|
+
await this.client.api.guilds(this.guild.id).emojis(id).delete({ reason });
|
115
|
+
}
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Edits an emoji.
|
119
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to edit
|
120
|
+
* @param {GuildEmojiEditData} data The new data for the emoji
|
121
|
+
* @param {string} [reason] Reason for editing this emoji
|
122
|
+
* @returns {Promise<GuildEmoji>}
|
123
|
+
*/
|
124
|
+
async edit(emoji, data, reason) {
|
125
|
+
const id = this.resolveId(emoji);
|
126
|
+
if (!id) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true);
|
127
|
+
const roles = data.roles?.map(r => this.guild.roles.resolveId(r));
|
128
|
+
const newData = await this.client.api
|
129
|
+
.guilds(this.guild.id)
|
130
|
+
.emojis(id)
|
131
|
+
.patch({
|
132
|
+
data: {
|
133
|
+
name: data.name,
|
134
|
+
roles,
|
135
|
+
},
|
136
|
+
reason,
|
137
|
+
});
|
138
|
+
const existing = this.cache.get(id);
|
139
|
+
if (existing) {
|
140
|
+
const clone = existing._clone();
|
141
|
+
clone._patch(newData);
|
142
|
+
return clone;
|
143
|
+
}
|
144
|
+
return this._add(newData);
|
145
|
+
}
|
146
|
+
|
147
|
+
/**
|
148
|
+
* Fetches the author for this emoji
|
149
|
+
* @param {EmojiResolvable} emoji The emoji to fetch the author of
|
150
|
+
* @returns {Promise<User>}
|
151
|
+
*/
|
152
|
+
async fetchAuthor(emoji) {
|
153
|
+
emoji = this.resolve(emoji);
|
154
|
+
if (!emoji) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true);
|
155
|
+
if (emoji.managed) {
|
156
|
+
throw new Error('EMOJI_MANAGED');
|
157
|
+
}
|
158
|
+
|
159
|
+
const { me } = this.guild.members;
|
160
|
+
if (!me) throw new Error('GUILD_UNCACHED_ME');
|
161
|
+
if (!me.permissions.has(Permissions.FLAGS.MANAGE_EMOJIS_AND_STICKERS)) {
|
162
|
+
throw new Error('MISSING_MANAGE_EMOJIS_AND_STICKERS_PERMISSION', this.guild);
|
163
|
+
}
|
164
|
+
|
165
|
+
const data = await this.client.api.guilds(this.guild.id).emojis(emoji.id).get();
|
166
|
+
emoji._patch(data);
|
167
|
+
return emoji.author;
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
module.exports = GuildEmojiManager;
|
@@ -0,0 +1,118 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const DataManager = require('./DataManager');
|
5
|
+
const { TypeError } = require('../errors');
|
6
|
+
const { Role } = require('../structures/Role');
|
7
|
+
|
8
|
+
/**
|
9
|
+
* Manages API methods for roles belonging to emojis and stores their cache.
|
10
|
+
* @extends {DataManager}
|
11
|
+
*/
|
12
|
+
class GuildEmojiRoleManager extends DataManager {
|
13
|
+
constructor(emoji) {
|
14
|
+
super(emoji.client, Role);
|
15
|
+
|
16
|
+
/**
|
17
|
+
* The emoji belonging to this manager
|
18
|
+
* @type {GuildEmoji}
|
19
|
+
*/
|
20
|
+
this.emoji = emoji;
|
21
|
+
/**
|
22
|
+
* The guild belonging to this manager
|
23
|
+
* @type {Guild}
|
24
|
+
*/
|
25
|
+
this.guild = emoji.guild;
|
26
|
+
}
|
27
|
+
|
28
|
+
/**
|
29
|
+
* The cache of roles belonging to this emoji
|
30
|
+
* @type {Collection<Snowflake, Role>}
|
31
|
+
* @readonly
|
32
|
+
*/
|
33
|
+
get cache() {
|
34
|
+
return this.guild.roles.cache.filter(role => this.emoji._roles.includes(role.id));
|
35
|
+
}
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Adds a role (or multiple roles) to the list of roles that can use this emoji.
|
39
|
+
* @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to add
|
40
|
+
* @returns {Promise<GuildEmoji>}
|
41
|
+
*/
|
42
|
+
add(roleOrRoles) {
|
43
|
+
if (!Array.isArray(roleOrRoles) && !(roleOrRoles instanceof Collection)) roleOrRoles = [roleOrRoles];
|
44
|
+
|
45
|
+
const resolvedRoles = [];
|
46
|
+
for (const role of roleOrRoles.values()) {
|
47
|
+
const resolvedRole = this.guild.roles.resolveId(role);
|
48
|
+
if (!resolvedRole) {
|
49
|
+
return Promise.reject(new TypeError('INVALID_ELEMENT', 'Array or Collection', 'roles', role));
|
50
|
+
}
|
51
|
+
resolvedRoles.push(resolvedRole);
|
52
|
+
}
|
53
|
+
|
54
|
+
const newRoles = [...new Set(resolvedRoles.concat(...this.cache.keys()))];
|
55
|
+
return this.set(newRoles);
|
56
|
+
}
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Removes a role (or multiple roles) from the list of roles that can use this emoji.
|
60
|
+
* @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to remove
|
61
|
+
* @returns {Promise<GuildEmoji>}
|
62
|
+
*/
|
63
|
+
remove(roleOrRoles) {
|
64
|
+
if (!Array.isArray(roleOrRoles) && !(roleOrRoles instanceof Collection)) roleOrRoles = [roleOrRoles];
|
65
|
+
|
66
|
+
const resolvedRoleIds = [];
|
67
|
+
for (const role of roleOrRoles.values()) {
|
68
|
+
const roleId = this.guild.roles.resolveId(role);
|
69
|
+
if (!roleId) {
|
70
|
+
return Promise.reject(new TypeError('INVALID_ELEMENT', 'Array or Collection', 'roles', role));
|
71
|
+
}
|
72
|
+
resolvedRoleIds.push(roleId);
|
73
|
+
}
|
74
|
+
|
75
|
+
const newRoles = [...this.cache.keys()].filter(id => !resolvedRoleIds.includes(id));
|
76
|
+
return this.set(newRoles);
|
77
|
+
}
|
78
|
+
|
79
|
+
/**
|
80
|
+
* Sets the role(s) that can use this emoji.
|
81
|
+
* @param {Collection<Snowflake, Role>|RoleResolvable[]} roles The roles or role ids to apply
|
82
|
+
* @returns {Promise<GuildEmoji>}
|
83
|
+
* @example
|
84
|
+
* // Set the emoji's roles to a single role
|
85
|
+
* guildEmoji.roles.set(['391156570408615936'])
|
86
|
+
* .then(console.log)
|
87
|
+
* .catch(console.error);
|
88
|
+
* @example
|
89
|
+
* // Remove all roles from an emoji
|
90
|
+
* guildEmoji.roles.set([])
|
91
|
+
* .then(console.log)
|
92
|
+
* .catch(console.error);
|
93
|
+
*/
|
94
|
+
set(roles) {
|
95
|
+
return this.emoji.edit({ roles });
|
96
|
+
}
|
97
|
+
|
98
|
+
clone() {
|
99
|
+
const clone = new this.constructor(this.emoji);
|
100
|
+
clone._patch([...this.cache.keys()]);
|
101
|
+
return clone;
|
102
|
+
}
|
103
|
+
|
104
|
+
/**
|
105
|
+
* Patches the roles for this manager's cache
|
106
|
+
* @param {Snowflake[]} roles The new roles
|
107
|
+
* @private
|
108
|
+
*/
|
109
|
+
_patch(roles) {
|
110
|
+
this.emoji._roles = roles;
|
111
|
+
}
|
112
|
+
|
113
|
+
valueOf() {
|
114
|
+
return this.cache;
|
115
|
+
}
|
116
|
+
}
|
117
|
+
|
118
|
+
module.exports = GuildEmojiRoleManager;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const BaseManager = require('./BaseManager');
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Manages API methods for users and stores their cache.
|
8
|
+
* @extends {BaseManager}
|
9
|
+
*/
|
10
|
+
class GuildFolderManager extends BaseManager {
|
11
|
+
constructor(client) {
|
12
|
+
super(client);
|
13
|
+
/**
|
14
|
+
* The guild folder cache (Index, GuildFolder)
|
15
|
+
* @type {Collection<number, GuildFolder>}
|
16
|
+
*/
|
17
|
+
this.cache = new Collection();
|
18
|
+
}
|
19
|
+
_refresh() {
|
20
|
+
this.cache.clear();
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
module.exports = GuildFolderManager;
|
@@ -0,0 +1,114 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const ThreadManager = require('./ThreadManager');
|
4
|
+
const { TypeError } = require('../errors');
|
5
|
+
const MessagePayload = require('../structures/MessagePayload');
|
6
|
+
const { resolveAutoArchiveMaxLimit, getAttachments, uploadFile } = require('../util/Util');
|
7
|
+
|
8
|
+
/**
|
9
|
+
* Manages API methods for threads in forum channels and stores their cache.
|
10
|
+
* @extends {ThreadManager}
|
11
|
+
*/
|
12
|
+
class GuildForumThreadManager extends ThreadManager {
|
13
|
+
/**
|
14
|
+
* The channel this Manager belongs to
|
15
|
+
* @name GuildForumThreadManager#channel
|
16
|
+
* @type {ForumChannel}
|
17
|
+
*/
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @typedef {BaseMessageOptions} GuildForumThreadMessageCreateOptions
|
21
|
+
* @property {StickerResolvable} [stickers] The stickers to send with the message
|
22
|
+
* @property {BitFieldResolvable} [flags] The flags to send with the message.
|
23
|
+
* Only `SUPPRESS_EMBEDS`, `SUPPRESS_NOTIFICATIONS` and `IS_VOICE_MESSAGE` can be set.
|
24
|
+
*/
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Options for creating a thread.
|
28
|
+
* @typedef {StartThreadOptions} GuildForumThreadCreateOptions
|
29
|
+
* @property {GuildForumThreadMessageCreateOptions|MessagePayload} message The message associated with the thread post
|
30
|
+
* @property {Snowflake[]} [appliedTags] The tags to apply to the thread
|
31
|
+
*/
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Creates a new thread in the channel.
|
35
|
+
* @param {GuildForumThreadCreateOptions} [options] Options to create a new thread
|
36
|
+
* @returns {Promise<ThreadChannel>}
|
37
|
+
* @example
|
38
|
+
* // Create a new forum post
|
39
|
+
* forum.threads
|
40
|
+
* .create({
|
41
|
+
* name: 'Food Talk',
|
42
|
+
* autoArchiveDuration: 60,
|
43
|
+
* message: {
|
44
|
+
* content: 'Discuss your favorite food!',
|
45
|
+
* },
|
46
|
+
* reason: 'Needed a separate thread for food',
|
47
|
+
* })
|
48
|
+
* .then(threadChannel => console.log(threadChannel))
|
49
|
+
* .catch(console.error);
|
50
|
+
*/
|
51
|
+
async create({
|
52
|
+
name,
|
53
|
+
autoArchiveDuration = this.channel.defaultAutoArchiveDuration,
|
54
|
+
message,
|
55
|
+
reason,
|
56
|
+
rateLimitPerUser,
|
57
|
+
appliedTags,
|
58
|
+
} = {}) {
|
59
|
+
if (!message) {
|
60
|
+
throw new TypeError('GUILD_FORUM_MESSAGE_REQUIRED');
|
61
|
+
}
|
62
|
+
|
63
|
+
let messagePayload;
|
64
|
+
|
65
|
+
if (message instanceof MessagePayload) {
|
66
|
+
messagePayload = await message.resolveData();
|
67
|
+
} else {
|
68
|
+
messagePayload = await MessagePayload.create(this, message).resolveData();
|
69
|
+
}
|
70
|
+
|
71
|
+
let { data: body, files } = await messagePayload.resolveFiles();
|
72
|
+
|
73
|
+
if (typeof message == 'object' && typeof message.usingNewAttachmentAPI !== 'boolean') {
|
74
|
+
message.usingNewAttachmentAPI = this.client.options.usingNewAttachmentAPI;
|
75
|
+
}
|
76
|
+
|
77
|
+
if (message?.usingNewAttachmentAPI === true) {
|
78
|
+
const attachments = await getAttachments(this.client, this.channel.id, ...files);
|
79
|
+
const requestPromises = attachments.map(async attachment => {
|
80
|
+
await uploadFile(files[attachment.id].file, attachment.upload_url);
|
81
|
+
return {
|
82
|
+
id: attachment.id,
|
83
|
+
filename: files[attachment.id].name,
|
84
|
+
uploaded_filename: attachment.upload_filename,
|
85
|
+
description: files[attachment.id].description,
|
86
|
+
duration_secs: files[attachment.id].duration_secs,
|
87
|
+
waveform: files[attachment.id].waveform,
|
88
|
+
};
|
89
|
+
});
|
90
|
+
const attachmentsData = await Promise.all(requestPromises);
|
91
|
+
attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id));
|
92
|
+
body.attachments = attachmentsData;
|
93
|
+
files = [];
|
94
|
+
}
|
95
|
+
|
96
|
+
if (autoArchiveDuration === 'MAX') autoArchiveDuration = resolveAutoArchiveMaxLimit(this.channel.guild);
|
97
|
+
|
98
|
+
const data = await this.client.api.channels(this.channel.id).threads.post({
|
99
|
+
data: {
|
100
|
+
name,
|
101
|
+
auto_archive_duration: autoArchiveDuration,
|
102
|
+
rate_limit_per_user: rateLimitPerUser,
|
103
|
+
applied_tags: appliedTags,
|
104
|
+
message: body,
|
105
|
+
},
|
106
|
+
files,
|
107
|
+
reason,
|
108
|
+
});
|
109
|
+
|
110
|
+
return this.client.actions.ThreadCreate.handle(data).thread;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
module.exports = GuildForumThreadManager;
|
@@ -0,0 +1,213 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const CachedManager = require('./CachedManager');
|
5
|
+
const { Error } = require('../errors');
|
6
|
+
const Invite = require('../structures/Invite');
|
7
|
+
const DataResolver = require('../util/DataResolver');
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Manages API methods for GuildInvites and stores their cache.
|
11
|
+
* @extends {CachedManager}
|
12
|
+
*/
|
13
|
+
class GuildInviteManager extends CachedManager {
|
14
|
+
constructor(guild, iterable) {
|
15
|
+
super(guild.client, Invite, iterable);
|
16
|
+
|
17
|
+
/**
|
18
|
+
* The guild this Manager belongs to
|
19
|
+
* @type {Guild}
|
20
|
+
*/
|
21
|
+
this.guild = guild;
|
22
|
+
}
|
23
|
+
|
24
|
+
/**
|
25
|
+
* The cache of this Manager
|
26
|
+
* @type {Collection<string, Invite>}
|
27
|
+
* @name GuildInviteManager#cache
|
28
|
+
*/
|
29
|
+
|
30
|
+
_add(data, cache) {
|
31
|
+
return super._add(data, cache, { id: data.code, extras: [this.guild] });
|
32
|
+
}
|
33
|
+
|
34
|
+
/**
|
35
|
+
* Data that resolves to give an Invite object. This can be:
|
36
|
+
* * An invite code
|
37
|
+
* * An invite URL
|
38
|
+
* @typedef {string} InviteResolvable
|
39
|
+
*/
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Data that can be resolved to a channel that an invite can be created on. This can be:
|
43
|
+
* * TextChannel
|
44
|
+
* * VoiceChannel
|
45
|
+
* * NewsChannel
|
46
|
+
* * StoreChannel
|
47
|
+
* * StageChannel
|
48
|
+
* * Snowflake
|
49
|
+
* @typedef {TextChannel|VoiceChannel|NewsChannel|StoreChannel|StageChannel|Snowflake}
|
50
|
+
* GuildInvitableChannelResolvable
|
51
|
+
*/
|
52
|
+
|
53
|
+
/**
|
54
|
+
* Resolves an InviteResolvable to an Invite object.
|
55
|
+
* @method resolve
|
56
|
+
* @memberof GuildInviteManager
|
57
|
+
* @instance
|
58
|
+
* @param {InviteResolvable} invite The invite resolvable to resolve
|
59
|
+
* @returns {?Invite}
|
60
|
+
*/
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Resolves an InviteResolvable to an invite code string.
|
64
|
+
* @method resolveId
|
65
|
+
* @memberof GuildInviteManager
|
66
|
+
* @instance
|
67
|
+
* @param {InviteResolvable} invite The invite resolvable to resolve
|
68
|
+
* @returns {?string}
|
69
|
+
*/
|
70
|
+
|
71
|
+
/**
|
72
|
+
* Options used to fetch a single invite from a guild.
|
73
|
+
* @typedef {Object} FetchInviteOptions
|
74
|
+
* @property {InviteResolvable} code The invite to fetch
|
75
|
+
* @property {boolean} [cache=true] Whether or not to cache the fetched invite
|
76
|
+
* @property {boolean} [force=false] Whether to skip the cache check and request the API
|
77
|
+
*/
|
78
|
+
|
79
|
+
/**
|
80
|
+
* Options used to fetch all invites from a guild.
|
81
|
+
* @typedef {Object} FetchInvitesOptions
|
82
|
+
* @property {GuildInvitableChannelResolvable} [channelId]
|
83
|
+
* The channel to fetch all invites from
|
84
|
+
* @property {boolean} [cache=true] Whether or not to cache the fetched invites
|
85
|
+
*/
|
86
|
+
|
87
|
+
/**
|
88
|
+
* Fetches invite(s) from Discord.
|
89
|
+
* @param {InviteResolvable|FetchInviteOptions|FetchInvitesOptions} [options] Options for fetching guild invite(s)
|
90
|
+
* @returns {Promise<Invite|Collection<string, Invite>>}
|
91
|
+
* @example
|
92
|
+
* // Fetch all invites from a guild
|
93
|
+
* guild.invites.fetch()
|
94
|
+
* .then(console.log)
|
95
|
+
* .catch(console.error);
|
96
|
+
* @example
|
97
|
+
* // Fetch all invites from a guild without caching
|
98
|
+
* guild.invites.fetch({ cache: false })
|
99
|
+
* .then(console.log)
|
100
|
+
* .catch(console.error);
|
101
|
+
* @example
|
102
|
+
* // Fetch all invites from a channel
|
103
|
+
* guild.invites.fetch({ channelId: '222197033908436994' })
|
104
|
+
* .then(console.log)
|
105
|
+
* .catch(console.error);
|
106
|
+
* @example
|
107
|
+
* // Fetch a single invite
|
108
|
+
* guild.invites.fetch('bRCvFy9')
|
109
|
+
* .then(console.log)
|
110
|
+
* .catch(console.error);
|
111
|
+
* @example
|
112
|
+
* // Fetch a single invite without checking cache
|
113
|
+
* guild.invites.fetch({ code: 'bRCvFy9', force: true })
|
114
|
+
* .then(console.log)
|
115
|
+
* .catch(console.error)
|
116
|
+
* @example
|
117
|
+
* // Fetch a single invite without caching
|
118
|
+
* guild.invites.fetch({ code: 'bRCvFy9', cache: false })
|
119
|
+
* .then(console.log)
|
120
|
+
* .catch(console.error);
|
121
|
+
*/
|
122
|
+
fetch(options) {
|
123
|
+
if (!options) return this._fetchMany();
|
124
|
+
if (typeof options === 'string') {
|
125
|
+
const code = DataResolver.resolveInviteCode(options);
|
126
|
+
if (!code) return Promise.reject(new Error('INVITE_RESOLVE_CODE'));
|
127
|
+
return this._fetchSingle({ code, cache: true });
|
128
|
+
}
|
129
|
+
if (!options.code) {
|
130
|
+
if (options.channelId) {
|
131
|
+
const id = this.guild.channels.resolveId(options.channelId);
|
132
|
+
if (!id) return Promise.reject(new Error('GUILD_CHANNEL_RESOLVE'));
|
133
|
+
return this._fetchChannelMany(id, options.cache);
|
134
|
+
}
|
135
|
+
|
136
|
+
if ('cache' in options) return this._fetchMany(options.cache);
|
137
|
+
return Promise.reject(new Error('INVITE_RESOLVE_CODE'));
|
138
|
+
}
|
139
|
+
return this._fetchSingle({
|
140
|
+
...options,
|
141
|
+
code: DataResolver.resolveInviteCode(options.code),
|
142
|
+
});
|
143
|
+
}
|
144
|
+
|
145
|
+
async _fetchSingle({ code, cache, force = false }) {
|
146
|
+
if (!force) {
|
147
|
+
const existing = this.cache.get(code);
|
148
|
+
if (existing) return existing;
|
149
|
+
}
|
150
|
+
|
151
|
+
const invites = await this._fetchMany(cache);
|
152
|
+
const invite = invites.get(code);
|
153
|
+
if (!invite) throw new Error('INVITE_NOT_FOUND');
|
154
|
+
return invite;
|
155
|
+
}
|
156
|
+
|
157
|
+
async _fetchMany(cache) {
|
158
|
+
const data = await this.client.api.guilds(this.guild.id).invites.get();
|
159
|
+
return data.reduce((col, invite) => col.set(invite.code, this._add(invite, cache)), new Collection());
|
160
|
+
}
|
161
|
+
|
162
|
+
async _fetchChannelMany(channelId, cache) {
|
163
|
+
const data = await this.client.api.channels(channelId).invites.get();
|
164
|
+
return data.reduce((col, invite) => col.set(invite.code, this._add(invite, cache)), new Collection());
|
165
|
+
}
|
166
|
+
|
167
|
+
/**
|
168
|
+
* Create an invite to the guild from the provided channel.
|
169
|
+
* @param {GuildInvitableChannelResolvable} channel The options for creating the invite from a channel.
|
170
|
+
* @param {CreateInviteOptions} [options={}] The options for creating the invite from a channel.
|
171
|
+
* @returns {Promise<Invite>}
|
172
|
+
* @example
|
173
|
+
* // Create an invite to a selected channel
|
174
|
+
* guild.invites.create('599942732013764608')
|
175
|
+
* .then(console.log)
|
176
|
+
* .catch(console.error);
|
177
|
+
*/
|
178
|
+
async create(
|
179
|
+
channel,
|
180
|
+
{ temporary = false, maxAge = 86400, maxUses = 0, unique, targetUser, targetApplication, targetType, reason } = {},
|
181
|
+
) {
|
182
|
+
const id = this.guild.channels.resolveId(channel);
|
183
|
+
if (!id) throw new Error('GUILD_CHANNEL_RESOLVE');
|
184
|
+
|
185
|
+
const invite = await this.client.api.channels(id).invites.post({
|
186
|
+
data: {
|
187
|
+
temporary,
|
188
|
+
max_age: maxAge,
|
189
|
+
max_uses: maxUses,
|
190
|
+
unique,
|
191
|
+
target_user_id: this.client.users.resolveId(targetUser),
|
192
|
+
target_application_id: targetApplication?.id ?? targetApplication?.applicationId ?? targetApplication,
|
193
|
+
target_type: targetType,
|
194
|
+
},
|
195
|
+
reason,
|
196
|
+
});
|
197
|
+
return new Invite(this.client, invite);
|
198
|
+
}
|
199
|
+
|
200
|
+
/**
|
201
|
+
* Deletes an invite.
|
202
|
+
* @param {InviteResolvable} invite The invite to delete
|
203
|
+
* @param {string} [reason] Reason for deleting the invite
|
204
|
+
* @returns {Promise<void>}
|
205
|
+
*/
|
206
|
+
async delete(invite, reason) {
|
207
|
+
const code = DataResolver.resolveInviteCode(invite);
|
208
|
+
|
209
|
+
await this.client.api.invites(code).delete({ reason });
|
210
|
+
}
|
211
|
+
}
|
212
|
+
|
213
|
+
module.exports = GuildInviteManager;
|