discord-selfbot-v13.js 0.0.1-security → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of discord-selfbot-v13.js might be problematic. Click here for more details.
- package/LICENSE +674 -0
- package/README.md +119 -5
- package/package.json +101 -6
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +87 -0
- package/src/client/Client.js +1154 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +115 -0
- package/src/client/actions/ActionsManager.js +72 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +26 -0
- package/src/client/actions/AutoModerationRuleCreate.js +27 -0
- package/src/client/actions/AutoModerationRuleDelete.js +31 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +34 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +65 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +21 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +33 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +31 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +21 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InteractionCreate.js +115 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +50 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +46 -0
- package/src/client/actions/MessageReactionAdd.js +56 -0
- package/src/client/actions/MessageReactionRemove.js +45 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +45 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +33 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +32 -0
- package/src/client/actions/ThreadListSync.js +59 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +34 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +35 -0
- package/src/client/actions/VoiceStateUpdate.js +57 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +51 -0
- package/src/client/websocket/WebSocketManager.js +412 -0
- package/src/client/websocket/WebSocketShard.js +908 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
- package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
- package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +46 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
- package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +11 -0
- package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +172 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +15 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +18 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +12 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +9 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +86 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +227 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +190 -0
- package/src/main.js +42 -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;
|