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,296 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const CachedManager = require('./CachedManager');
|
5
|
+
const AutoModerationRule = require('../structures/AutoModerationRule');
|
6
|
+
const {
|
7
|
+
AutoModerationRuleEventTypes,
|
8
|
+
AutoModerationRuleTriggerTypes,
|
9
|
+
AutoModerationActionTypes,
|
10
|
+
AutoModerationRuleKeywordPresetTypes,
|
11
|
+
} = require('../util/Constants');
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Manages API methods for auto moderation rules and stores their cache.
|
15
|
+
* @extends {CachedManager}
|
16
|
+
*/
|
17
|
+
class AutoModerationRuleManager extends CachedManager {
|
18
|
+
constructor(guild, iterable) {
|
19
|
+
super(guild.client, AutoModerationRule, iterable);
|
20
|
+
|
21
|
+
/**
|
22
|
+
* The guild this manager belongs to.
|
23
|
+
* @type {Guild}
|
24
|
+
*/
|
25
|
+
this.guild = guild;
|
26
|
+
}
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Resolves an {@link AutoModerationRuleResolvable} to an {@link AutoModerationRule} object.
|
30
|
+
* @method resolve
|
31
|
+
* @memberof AutoModerationRuleManager
|
32
|
+
* @instance
|
33
|
+
* @param {AutoModerationRuleResolvable} autoModerationRule The AutoModerationRule resolvable to resolve
|
34
|
+
* @returns {?AutoModerationRule}
|
35
|
+
*/
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Resolves an {@link AutoModerationRuleResolvable} to a {@link AutoModerationRule} id.
|
39
|
+
* @method resolveId
|
40
|
+
* @memberof AutoModerationRuleManager
|
41
|
+
* @instance
|
42
|
+
* @param {AutoModerationRuleResolvable} autoModerationRule The AutoModerationRule resolvable to resolve
|
43
|
+
* @returns {?Snowflake}
|
44
|
+
*/
|
45
|
+
|
46
|
+
_add(data, cache) {
|
47
|
+
return super._add(data, cache, { extras: [this.guild] });
|
48
|
+
}
|
49
|
+
|
50
|
+
/**
|
51
|
+
* Options used to set the trigger metadata of an auto moderation rule.
|
52
|
+
* @typedef {Object} AutoModerationTriggerMetadataOptions
|
53
|
+
* @property {string[]} [keywordFilter] The substrings that will be searched for in the content
|
54
|
+
* @property {string[]} [regexPatterns] The regular expression patterns which will be matched against the content
|
55
|
+
* <info>Only Rust-flavored regular expressions are supported.</info>
|
56
|
+
* @property {AutoModerationRuleKeywordPresetType[]} [presets]
|
57
|
+
* The internally pre-defined wordsets which will be searched for in the content
|
58
|
+
* @property {string[]} [allowList] The substrings that will be exempt from triggering
|
59
|
+
* {@link AutoModerationRuleTriggerType.KEYWORD} and {@link AutoModerationRuleTriggerType.KEYWORD_PRESET}
|
60
|
+
* @property {?number} [mentionTotalLimit] The total number of role & user mentions allowed per message
|
61
|
+
* @property {boolean} [mentionRaidProtectionEnabled] Whether to automatically detect mention raids
|
62
|
+
*/
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Options used to set the actions of an auto moderation rule.
|
66
|
+
* @typedef {Object} AutoModerationActionOptions
|
67
|
+
* @property {AutoModerationActionType} type The type of this auto moderation rule action
|
68
|
+
* @property {AutoModerationActionMetadataOptions} [metadata] Additional metadata needed during execution
|
69
|
+
* <info>This property is required if using a `type` of
|
70
|
+
* {@link AutoModerationActionType.SEND_ALERT_MESSAGE} or {@link AutoModerationActionType.TIMEOUT}.</info>
|
71
|
+
*/
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Options used to set the metadata of an auto moderation rule action.
|
75
|
+
* @typedef {Object} AutoModerationActionMetadataOptions
|
76
|
+
* @property {GuildTextChannelResolvable|ThreadChannel} [channel] The channel to which content will be logged
|
77
|
+
* @property {number} [durationSeconds] The timeout duration in seconds
|
78
|
+
* @property {string} [customMessage] The custom message that is shown whenever a message is blocked
|
79
|
+
*/
|
80
|
+
|
81
|
+
/**
|
82
|
+
* Options used to create an auto moderation rule.
|
83
|
+
* @typedef {Object} AutoModerationRuleCreateOptions
|
84
|
+
* @property {string} name The name of the auto moderation rule
|
85
|
+
* @property {AutoModerationRuleEventType} eventType The event type of the auto moderation rule
|
86
|
+
* @property {AutoModerationRuleTriggerType} triggerType The trigger type of the auto moderation rule
|
87
|
+
* @property {AutoModerationTriggerMetadataOptions} [triggerMetadata] The trigger metadata of the auto moderation rule
|
88
|
+
* <info>This property is required if the following `triggerType`s are used:
|
89
|
+
* * {@link AutoModerationRuleTriggerType.KEYWORD KEYWORD}
|
90
|
+
* * {@link AutoModerationRuleTriggerType.KEYWORD_PRESET KEYWORD_PRESET}
|
91
|
+
* * {@link AutoModerationRuleTriggerType.MENTION_SPAM MENTION_SPAM}
|
92
|
+
* </info>
|
93
|
+
* @property {AutoModerationActionOptions[]} actions
|
94
|
+
* The actions that will execute when the auto moderation rule is triggered
|
95
|
+
* @property {boolean} [enabled] Whether the auto moderation rule should be enabled
|
96
|
+
* @property {Collection<Snowflake, Role>|RoleResolvable[]} [exemptRoles]
|
97
|
+
* The roles that should not be affected by the auto moderation rule
|
98
|
+
* @property {Collection<Snowflake, GuildChannel|ThreadChannel>|GuildChannelResolvable[]} [exemptChannels]
|
99
|
+
* The channels that should not be affected by the auto moderation rule
|
100
|
+
* @property {string} [reason] The reason for creating the auto moderation rule
|
101
|
+
*/
|
102
|
+
|
103
|
+
/**
|
104
|
+
* Creates a new auto moderation rule.
|
105
|
+
* @param {AutoModerationRuleCreateOptions} options Options for creating the auto moderation rule
|
106
|
+
* @returns {Promise<AutoModerationRule>}
|
107
|
+
*/
|
108
|
+
async create({
|
109
|
+
name,
|
110
|
+
eventType,
|
111
|
+
triggerType,
|
112
|
+
triggerMetadata,
|
113
|
+
actions,
|
114
|
+
enabled,
|
115
|
+
exemptRoles,
|
116
|
+
exemptChannels,
|
117
|
+
reason,
|
118
|
+
}) {
|
119
|
+
const data = await this.client.api.guilds(this.guild.id)['auto-moderation'].rules.post({
|
120
|
+
data: {
|
121
|
+
name,
|
122
|
+
event_type: typeof eventType === 'number' ? eventType : AutoModerationRuleEventTypes[eventType],
|
123
|
+
trigger_type: typeof triggerType === 'number' ? triggerType : AutoModerationRuleTriggerTypes[triggerType],
|
124
|
+
trigger_metadata: triggerMetadata && {
|
125
|
+
keyword_filter: triggerMetadata.keywordFilter,
|
126
|
+
regex_patterns: triggerMetadata.regexPatterns,
|
127
|
+
presets: triggerMetadata.presets?.map(preset =>
|
128
|
+
typeof preset === 'number' ? preset : AutoModerationRuleKeywordPresetTypes[preset],
|
129
|
+
),
|
130
|
+
allow_list: triggerMetadata.allowList,
|
131
|
+
mention_total_limit: triggerMetadata.mentionTotalLimit,
|
132
|
+
mention_raid_protection_enabled: triggerMetadata.mentionRaidProtectionEnabled,
|
133
|
+
},
|
134
|
+
actions: actions.map(action => ({
|
135
|
+
type: typeof action.type === 'number' ? action.type : AutoModerationActionTypes[action.type],
|
136
|
+
metadata: {
|
137
|
+
duration_seconds: action.metadata?.durationSeconds,
|
138
|
+
channel_id: action.metadata?.channel && this.guild.channels.resolveId(action.metadata.channel),
|
139
|
+
custom_message: action.metadata?.customMessage,
|
140
|
+
},
|
141
|
+
})),
|
142
|
+
enabled,
|
143
|
+
exempt_roles: exemptRoles?.map(exemptRole => this.guild.roles.resolveId(exemptRole)),
|
144
|
+
exempt_channels: exemptChannels?.map(exemptChannel => this.guild.channels.resolveId(exemptChannel)),
|
145
|
+
},
|
146
|
+
reason,
|
147
|
+
});
|
148
|
+
|
149
|
+
return this._add(data);
|
150
|
+
}
|
151
|
+
|
152
|
+
/**
|
153
|
+
* Options used to edit an auto moderation rule.
|
154
|
+
* @typedef {Object} AutoModerationRuleEditOptions
|
155
|
+
* @property {string} [name] The name of the auto moderation rule
|
156
|
+
* @property {AutoModerationRuleEventType} [eventType] The event type of the auto moderation rule
|
157
|
+
* @property {AutoModerationTriggerMetadataOptions} [triggerMetadata] The trigger metadata of the auto moderation rule
|
158
|
+
* @property {AutoModerationActionOptions[]} [actions]
|
159
|
+
* The actions that will execute when the auto moderation rule is triggered
|
160
|
+
* @property {boolean} [enabled] Whether the auto moderation rule should be enabled
|
161
|
+
* @property {Collection<Snowflake, Role>|RoleResolvable[]} [exemptRoles]
|
162
|
+
* The roles that should not be affected by the auto moderation rule
|
163
|
+
* @property {Collection<Snowflake, GuildChannel|ThreadChannel>|GuildChannelResolvable[]} [exemptChannels]
|
164
|
+
* The channels that should not be affected by the auto moderation rule
|
165
|
+
* @property {string} [reason] The reason for creating the auto moderation rule
|
166
|
+
*/
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Edits an auto moderation rule.
|
170
|
+
* @param {AutoModerationRuleResolvable} autoModerationRule The auto moderation rule to edit
|
171
|
+
* @param {AutoModerationRuleEditOptions} options Options for editing the auto moderation rule
|
172
|
+
* @returns {Promise<AutoModerationRule>}
|
173
|
+
*/
|
174
|
+
async edit(
|
175
|
+
autoModerationRule,
|
176
|
+
{ name, eventType, triggerMetadata, actions, enabled, exemptRoles, exemptChannels, reason },
|
177
|
+
) {
|
178
|
+
const autoModerationRuleId = this.resolveId(autoModerationRule);
|
179
|
+
|
180
|
+
const data = await this.client.api
|
181
|
+
.guilds(this.guild.id)('auto-moderation')
|
182
|
+
.rules(autoModerationRuleId)
|
183
|
+
.patch({
|
184
|
+
data: {
|
185
|
+
name,
|
186
|
+
event_type: typeof eventType === 'number' ? eventType : AutoModerationRuleEventTypes[eventType],
|
187
|
+
trigger_metadata: triggerMetadata && {
|
188
|
+
keyword_filter: triggerMetadata.keywordFilter,
|
189
|
+
regex_patterns: triggerMetadata.regexPatterns,
|
190
|
+
presets: triggerMetadata.presets?.map(preset =>
|
191
|
+
typeof preset === 'number' ? preset : AutoModerationRuleKeywordPresetTypes[preset],
|
192
|
+
),
|
193
|
+
allow_list: triggerMetadata.allowList,
|
194
|
+
mention_total_limit: triggerMetadata.mentionTotalLimit,
|
195
|
+
mention_raid_protection_enabled: triggerMetadata.mentionRaidProtectionEnabled,
|
196
|
+
},
|
197
|
+
actions: actions?.map(action => ({
|
198
|
+
type: typeof action.type === 'number' ? action.type : AutoModerationActionTypes[action.type],
|
199
|
+
metadata: {
|
200
|
+
duration_seconds: action.metadata?.durationSeconds,
|
201
|
+
channel_id: action.metadata?.channel && this.guild.channels.resolveId(action.metadata.channel),
|
202
|
+
custom_message: action.metadata?.customMessage,
|
203
|
+
},
|
204
|
+
})),
|
205
|
+
enabled,
|
206
|
+
exempt_roles: exemptRoles?.map(exemptRole => this.guild.roles.resolveId(exemptRole)),
|
207
|
+
exempt_channels: exemptChannels?.map(exemptChannel => this.guild.channels.resolveId(exemptChannel)),
|
208
|
+
},
|
209
|
+
reason,
|
210
|
+
});
|
211
|
+
|
212
|
+
return this._add(data);
|
213
|
+
}
|
214
|
+
|
215
|
+
/**
|
216
|
+
* Data that can be resolved to give an AutoModerationRule object. This can be:
|
217
|
+
* * An AutoModerationRule
|
218
|
+
* * A Snowflake
|
219
|
+
* @typedef {AutoModerationRule|Snowflake} AutoModerationRuleResolvable
|
220
|
+
*/
|
221
|
+
|
222
|
+
/**
|
223
|
+
* Options used to fetch a single auto moderation rule from a guild.
|
224
|
+
* @typedef {BaseFetchOptions} FetchAutoModerationRuleOptions
|
225
|
+
* @property {AutoModerationRuleResolvable} autoModerationRule The auto moderation rule to fetch
|
226
|
+
*/
|
227
|
+
|
228
|
+
/**
|
229
|
+
* Options used to fetch all auto moderation rules from a guild.
|
230
|
+
* @typedef {Object} FetchAutoModerationRulesOptions
|
231
|
+
* @property {boolean} [cache] Whether to cache the fetched auto moderation rules
|
232
|
+
*/
|
233
|
+
|
234
|
+
/**
|
235
|
+
* Fetches auto moderation rules from Discord.
|
236
|
+
* @param {AutoModerationRuleResolvable|FetchAutoModerationRuleOptions|FetchAutoModerationRulesOptions} [options]
|
237
|
+
* Options for fetching auto moderation rule(s)
|
238
|
+
* @returns {Promise<AutoModerationRule|Collection<Snowflake, AutoModerationRule>>}
|
239
|
+
* @example
|
240
|
+
* // Fetch all auto moderation rules from a guild without caching
|
241
|
+
* guild.autoModerationRules.fetch({ cache: false })
|
242
|
+
* .then(console.log)
|
243
|
+
* .catch(console.error);
|
244
|
+
* @example
|
245
|
+
* // Fetch a single auto moderation rule
|
246
|
+
* guild.autoModerationRules.fetch('979083472868098119')
|
247
|
+
* .then(console.log)
|
248
|
+
* .catch(console.error);
|
249
|
+
* @example
|
250
|
+
* // Fetch a single auto moderation rule without checking cache and without caching
|
251
|
+
* guild.autoModerationRules.fetch({ autoModerationRule: '979083472868098119', cache: false, force: true })
|
252
|
+
* .then(console.log)
|
253
|
+
* .catch(console.error)
|
254
|
+
*/
|
255
|
+
fetch(options) {
|
256
|
+
if (!options) return this._fetchMany();
|
257
|
+
const { autoModerationRule, cache, force } = options;
|
258
|
+
const resolvedAutoModerationRule = this.resolveId(autoModerationRule ?? options);
|
259
|
+
if (resolvedAutoModerationRule) {
|
260
|
+
return this._fetchSingle({ autoModerationRule: resolvedAutoModerationRule, cache, force });
|
261
|
+
}
|
262
|
+
return this._fetchMany(options);
|
263
|
+
}
|
264
|
+
|
265
|
+
async _fetchSingle({ autoModerationRule, cache, force = false }) {
|
266
|
+
if (!force) {
|
267
|
+
const existing = this.cache.get(autoModerationRule);
|
268
|
+
if (existing) return existing;
|
269
|
+
}
|
270
|
+
|
271
|
+
const data = await this.client.api.guilds(this.guild.id)('auto-moderation').rules(autoModerationRule).get();
|
272
|
+
return this._add(data, cache);
|
273
|
+
}
|
274
|
+
|
275
|
+
async _fetchMany(options = {}) {
|
276
|
+
const data = await this.client.api.guilds(this.guild.id)('auto-moderation').rules.get();
|
277
|
+
|
278
|
+
return data.reduce(
|
279
|
+
(col, autoModerationRule) => col.set(autoModerationRule.id, this._add(autoModerationRule, options.cache)),
|
280
|
+
new Collection(),
|
281
|
+
);
|
282
|
+
}
|
283
|
+
|
284
|
+
/**
|
285
|
+
* Deletes an auto moderation rule.
|
286
|
+
* @param {AutoModerationRuleResolvable} autoModerationRule The auto moderation rule to delete
|
287
|
+
* @param {string} [reason] The reason for deleting the auto moderation rule
|
288
|
+
* @returns {Promise<void>}
|
289
|
+
*/
|
290
|
+
async delete(autoModerationRule, reason) {
|
291
|
+
const autoModerationRuleId = this.resolveId(autoModerationRule);
|
292
|
+
await this.client.api.guilds(this.guild.id)('auto-moderation').rules(autoModerationRuleId).delete({ reason });
|
293
|
+
}
|
294
|
+
}
|
295
|
+
|
296
|
+
module.exports = AutoModerationRuleManager;
|
@@ -0,0 +1,80 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const CachedManager = require('./CachedManager');
|
4
|
+
const GuildEmoji = require('../structures/GuildEmoji');
|
5
|
+
const ReactionEmoji = require('../structures/ReactionEmoji');
|
6
|
+
const { parseEmoji } = require('../util/Util');
|
7
|
+
|
8
|
+
/**
|
9
|
+
* Holds methods to resolve GuildEmojis and stores their cache.
|
10
|
+
* @extends {CachedManager}
|
11
|
+
*/
|
12
|
+
class BaseGuildEmojiManager extends CachedManager {
|
13
|
+
constructor(client, iterable) {
|
14
|
+
super(client, GuildEmoji, iterable);
|
15
|
+
}
|
16
|
+
|
17
|
+
/**
|
18
|
+
* The cache of GuildEmojis
|
19
|
+
* @type {Collection<Snowflake, GuildEmoji>}
|
20
|
+
* @name BaseGuildEmojiManager#cache
|
21
|
+
*/
|
22
|
+
|
23
|
+
/**
|
24
|
+
* Data that can be resolved into a GuildEmoji object. This can be:
|
25
|
+
* * A Snowflake
|
26
|
+
* * A GuildEmoji object
|
27
|
+
* * A ReactionEmoji object
|
28
|
+
* @typedef {Snowflake|GuildEmoji|ReactionEmoji} EmojiResolvable
|
29
|
+
*/
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Resolves an EmojiResolvable to an Emoji object.
|
33
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to identify
|
34
|
+
* @returns {?GuildEmoji}
|
35
|
+
*/
|
36
|
+
resolve(emoji) {
|
37
|
+
if (emoji instanceof ReactionEmoji) return super.resolve(emoji.id);
|
38
|
+
return super.resolve(emoji);
|
39
|
+
}
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Resolves an EmojiResolvable to an Emoji id string.
|
43
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to identify
|
44
|
+
* @returns {?Snowflake}
|
45
|
+
*/
|
46
|
+
resolveId(emoji) {
|
47
|
+
if (emoji instanceof ReactionEmoji) return emoji.id;
|
48
|
+
return super.resolveId(emoji);
|
49
|
+
}
|
50
|
+
|
51
|
+
/**
|
52
|
+
* Data that can be resolved to give an emoji identifier. This can be:
|
53
|
+
* * An EmojiResolvable
|
54
|
+
* * The `<a:name:id>`, `<:name:id>`, `a:name:id` or `name:id` emoji identifier string of an emoji
|
55
|
+
* * The Unicode representation of an emoji
|
56
|
+
* @typedef {string|EmojiResolvable} EmojiIdentifierResolvable
|
57
|
+
*/
|
58
|
+
|
59
|
+
/**
|
60
|
+
* Resolves an EmojiResolvable to an emoji identifier.
|
61
|
+
* @param {EmojiIdentifierResolvable} emoji The emoji resolvable to resolve
|
62
|
+
* @returns {?string}
|
63
|
+
*/
|
64
|
+
resolveIdentifier(emoji) {
|
65
|
+
const emojiResolvable = this.resolve(emoji);
|
66
|
+
if (emojiResolvable) return emojiResolvable.identifier;
|
67
|
+
if (emoji instanceof ReactionEmoji) return emoji.identifier;
|
68
|
+
if (typeof emoji === 'string') {
|
69
|
+
const res = parseEmoji(emoji);
|
70
|
+
if (res?.name.length) {
|
71
|
+
emoji = `${res.animated ? 'a:' : ''}${res.name}${res.id ? `:${res.id}` : ''}`;
|
72
|
+
}
|
73
|
+
if (!emoji.includes('%')) return encodeURIComponent(emoji);
|
74
|
+
return emoji;
|
75
|
+
}
|
76
|
+
return null;
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
module.exports = BaseGuildEmojiManager;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Manages the API methods of a data model.
|
5
|
+
* @abstract
|
6
|
+
*/
|
7
|
+
class BaseManager {
|
8
|
+
constructor(client) {
|
9
|
+
/**
|
10
|
+
* The client that instantiated this Manager
|
11
|
+
* @name BaseManager#client
|
12
|
+
* @type {Client}
|
13
|
+
* @readonly
|
14
|
+
*/
|
15
|
+
Object.defineProperty(this, 'client', { value: client });
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
module.exports = BaseManager;
|
@@ -0,0 +1,66 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const BaseManager = require('./BaseManager');
|
5
|
+
const GuildBoost = require('../structures/GuildBoost');
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Manages the API methods of a data model.
|
9
|
+
* @extends {CachedManager}
|
10
|
+
*/
|
11
|
+
class BillingManager extends BaseManager {
|
12
|
+
constructor(client) {
|
13
|
+
super(client);
|
14
|
+
/**
|
15
|
+
* All the payment sources of the client
|
16
|
+
* @type {Collection<Snowflake, Object>}
|
17
|
+
*/
|
18
|
+
this.paymentSources = new Collection();
|
19
|
+
/**
|
20
|
+
* All the guild boosts of the client
|
21
|
+
* @type {Collection<Snowflake, GuildBoost>}
|
22
|
+
*/
|
23
|
+
this.guildBoosts = new Collection();
|
24
|
+
/**
|
25
|
+
* The current subscription of the client
|
26
|
+
* @type {Collection<Snowflake, Object>}
|
27
|
+
*/
|
28
|
+
this.currentSubscription = new Collection();
|
29
|
+
}
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Fetches all the payment sources of the client
|
33
|
+
* @returns {Collection<Snowflake, Object>}
|
34
|
+
*/
|
35
|
+
async fetchPaymentSources() {
|
36
|
+
// https://discord.com/api/v9/users/@me/billing/payment-sources
|
37
|
+
const d = await this.client.api.users('@me').billing['payment-sources'].get();
|
38
|
+
// ! TODO: Create a PaymentSource class
|
39
|
+
this.paymentSources = new Collection(d.map(s => [s.id, s]));
|
40
|
+
return this.paymentSources;
|
41
|
+
}
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Fetches all the guild boosts of the client
|
45
|
+
* @returns {Collection<Snowflake, GuildBoost>}
|
46
|
+
*/
|
47
|
+
async fetchGuildBoosts() {
|
48
|
+
// https://discord.com/api/v9/users/@me/guilds/premium/subscription-slots
|
49
|
+
const d = await this.client.api.users('@me').guilds.premium['subscription-slots'].get();
|
50
|
+
this.guildBoosts = new Collection(d.map(s => [s.id, new GuildBoost(this.client, s)]));
|
51
|
+
return this.guildBoosts;
|
52
|
+
}
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Fetches the current subscription of the client
|
56
|
+
* @returns {Collection<Snowflake, Object>}
|
57
|
+
*/
|
58
|
+
async fetchCurrentSubscription() {
|
59
|
+
// https://discord.com/api/v9/users/@me/billing/subscriptions
|
60
|
+
const d = await this.client.api.users('@me').billing.subscriptions.get();
|
61
|
+
this.currentSubscription = new Collection(d.map(s => [s.id, s]));
|
62
|
+
return this.currentSubscription;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
module.exports = BillingManager;
|
@@ -0,0 +1,71 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const DataManager = require('./DataManager');
|
4
|
+
const { _cleanupSymbol } = require('../util/Constants');
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Manages the API methods of a data model with a mutable cache of instances.
|
8
|
+
* @extends {DataManager}
|
9
|
+
* @abstract
|
10
|
+
*/
|
11
|
+
class CachedManager extends DataManager {
|
12
|
+
constructor(client, holds, iterable) {
|
13
|
+
super(client, holds);
|
14
|
+
|
15
|
+
/**
|
16
|
+
* The private cache of items for this manager.
|
17
|
+
* @type {Collection}
|
18
|
+
* @private
|
19
|
+
* @readonly
|
20
|
+
* @name CachedManager#_cache
|
21
|
+
*/
|
22
|
+
Object.defineProperty(this, '_cache', { value: this.client.options.makeCache(this.constructor, this.holds) });
|
23
|
+
|
24
|
+
let cleanup = this._cache[_cleanupSymbol]?.();
|
25
|
+
if (cleanup) {
|
26
|
+
cleanup = cleanup.bind(this._cache);
|
27
|
+
client._cleanups.add(cleanup);
|
28
|
+
client._finalizers.register(this, {
|
29
|
+
cleanup,
|
30
|
+
message:
|
31
|
+
`Garbage collection completed on ${this.constructor.name}, ` +
|
32
|
+
`which had a ${this._cache.constructor.name} of ${this.holds.name}.`,
|
33
|
+
name: this.constructor.name,
|
34
|
+
});
|
35
|
+
}
|
36
|
+
|
37
|
+
if (iterable) {
|
38
|
+
for (const item of iterable) {
|
39
|
+
this._add(item);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
/**
|
45
|
+
* The cache of items for this manager.
|
46
|
+
* @type {Collection}
|
47
|
+
* @abstract
|
48
|
+
*/
|
49
|
+
get cache() {
|
50
|
+
return this._cache;
|
51
|
+
}
|
52
|
+
|
53
|
+
_add(data, cache = true, { id, extras = [] } = {}) {
|
54
|
+
const existing = this.cache.get(id ?? data.id);
|
55
|
+
if (existing) {
|
56
|
+
if (cache) {
|
57
|
+
existing._patch(data);
|
58
|
+
return existing;
|
59
|
+
}
|
60
|
+
const clone = existing._clone();
|
61
|
+
clone._patch(data);
|
62
|
+
return clone;
|
63
|
+
}
|
64
|
+
|
65
|
+
const entry = this.holds ? new this.holds(this.client, data, ...extras) : data;
|
66
|
+
if (cache) this.cache.set(id ?? entry.id, entry);
|
67
|
+
return entry;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
module.exports = CachedManager;
|
@@ -0,0 +1,139 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const process = require('node:process');
|
4
|
+
const CachedManager = require('./CachedManager');
|
5
|
+
const { Channel } = require('../structures/Channel');
|
6
|
+
const { Events, ThreadChannelTypes, RelationshipTypes } = require('../util/Constants');
|
7
|
+
|
8
|
+
let cacheWarningEmitted = false;
|
9
|
+
|
10
|
+
/**
|
11
|
+
* A manager of channels belonging to a client
|
12
|
+
* @extends {CachedManager}
|
13
|
+
*/
|
14
|
+
class ChannelManager extends CachedManager {
|
15
|
+
constructor(client, iterable) {
|
16
|
+
super(client, Channel, iterable);
|
17
|
+
const defaultCaching =
|
18
|
+
this._cache.constructor.name === 'Collection' ||
|
19
|
+
((this._cache.maxSize === undefined || this._cache.maxSize === Infinity) &&
|
20
|
+
(this._cache.sweepFilter === undefined || this._cache.sweepFilter.isDefault));
|
21
|
+
if (!cacheWarningEmitted && !defaultCaching) {
|
22
|
+
cacheWarningEmitted = true;
|
23
|
+
process.emitWarning(
|
24
|
+
`Overriding the cache handling for ${this.constructor.name} is unsupported and breaks functionality.`,
|
25
|
+
'UnsupportedCacheOverwriteWarning',
|
26
|
+
);
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
/**
|
31
|
+
* The cache of Channels
|
32
|
+
* @type {Collection<Snowflake, Channel>}
|
33
|
+
* @name ChannelManager#cache
|
34
|
+
*/
|
35
|
+
|
36
|
+
_add(data, guild, { cache = true, allowUnknownGuild = false } = {}) {
|
37
|
+
const existing = this.cache.get(data.id);
|
38
|
+
if (existing) {
|
39
|
+
if (cache) existing._patch(data);
|
40
|
+
guild?.channels?._add(existing);
|
41
|
+
if (ThreadChannelTypes.includes(existing.type)) {
|
42
|
+
existing.parent?.threads?._add(existing);
|
43
|
+
}
|
44
|
+
return existing;
|
45
|
+
}
|
46
|
+
|
47
|
+
const channel = Channel.create(this.client, data, guild, { allowUnknownGuild });
|
48
|
+
|
49
|
+
if (!channel) {
|
50
|
+
this.client.emit(Events.DEBUG, `Failed to find guild, or unknown type for channel ${data.id} ${data.type}`);
|
51
|
+
return null;
|
52
|
+
}
|
53
|
+
|
54
|
+
if (cache && !allowUnknownGuild) this.cache.set(channel.id, channel);
|
55
|
+
|
56
|
+
return channel;
|
57
|
+
}
|
58
|
+
|
59
|
+
_remove(id) {
|
60
|
+
const channel = this.cache.get(id);
|
61
|
+
channel?.guild?.channels.cache.delete(id);
|
62
|
+
channel?.parent?.threads?.cache.delete(id);
|
63
|
+
this.cache.delete(id);
|
64
|
+
}
|
65
|
+
|
66
|
+
/**
|
67
|
+
* Data that can be resolved to give a Channel object. This can be:
|
68
|
+
* * A Channel object
|
69
|
+
* * A Snowflake
|
70
|
+
* @typedef {Channel|Snowflake} ChannelResolvable
|
71
|
+
*/
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Resolves a ChannelResolvable to a Channel object.
|
75
|
+
* @method resolve
|
76
|
+
* @memberof ChannelManager
|
77
|
+
* @instance
|
78
|
+
* @param {ChannelResolvable} channel The channel resolvable to resolve
|
79
|
+
* @returns {?Channel}
|
80
|
+
*/
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Resolves a ChannelResolvable to a channel id string.
|
84
|
+
* @method resolveId
|
85
|
+
* @memberof ChannelManager
|
86
|
+
* @instance
|
87
|
+
* @param {ChannelResolvable} channel The channel resolvable to resolve
|
88
|
+
* @returns {?Snowflake}
|
89
|
+
*/
|
90
|
+
|
91
|
+
/**
|
92
|
+
* Options for fetching a channel from Discord
|
93
|
+
* @typedef {BaseFetchOptions} FetchChannelOptions
|
94
|
+
* @property {boolean} [allowUnknownGuild=false] Allows the channel to be returned even if the guild is not in cache,
|
95
|
+
* it will not be cached. <warn>Many of the properties and methods on the returned channel will throw errors</warn>
|
96
|
+
*/
|
97
|
+
|
98
|
+
/**
|
99
|
+
* Obtains a channel from Discord, or the channel cache if it's already available.
|
100
|
+
* @param {Snowflake} id The channel's id
|
101
|
+
* @param {FetchChannelOptions} [options] Additional options for this fetch
|
102
|
+
* @returns {Promise<?Channel>}
|
103
|
+
* @example
|
104
|
+
* // Fetch a channel by its id
|
105
|
+
* client.channels.fetch('222109930545610754')
|
106
|
+
* .then(channel => console.log(channel.name))
|
107
|
+
* .catch(console.error);
|
108
|
+
*/
|
109
|
+
async fetch(id, { allowUnknownGuild = false, cache = true, force = false } = {}) {
|
110
|
+
if (!force) {
|
111
|
+
const existing = this.cache.get(id);
|
112
|
+
if (existing && !existing.partial) return existing;
|
113
|
+
}
|
114
|
+
|
115
|
+
const data = await this.client.api.channels(id).get();
|
116
|
+
// Delete in cache
|
117
|
+
this._remove(id);
|
118
|
+
return this._add(data, null, { cache, allowUnknownGuild });
|
119
|
+
}
|
120
|
+
/**
|
121
|
+
* Create Group DM
|
122
|
+
* @param {UserResolvable[]} recipients Array of recipients
|
123
|
+
* @returns {Promise<PartialGroupDMChannel>} Channel
|
124
|
+
*/
|
125
|
+
async createGroupDM(recipients) {
|
126
|
+
// Check
|
127
|
+
if (!Array.isArray(recipients)) throw new Error(`Expected an array of recipients (got ${typeof recipients})`);
|
128
|
+
recipients = recipients
|
129
|
+
.map(r => this.client.users.resolveId(r))
|
130
|
+
.filter(r => r && this.client.relationships.cache.get(r) == RelationshipTypes.FRIEND);
|
131
|
+
if (recipients.length < 2 || recipients.length > 9) throw new Error('Invalid Users length (2 - 9)');
|
132
|
+
const data = await this.client.api.users['@me'].channels.post({
|
133
|
+
data: { recipients },
|
134
|
+
});
|
135
|
+
return this._add(data, null, { cache: true, allowUnknownGuild: true });
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
module.exports = ChannelManager;
|