djs-selfbot-v13 3.2.2 → 3.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -36
- package/package.json +89 -85
- package/src/WebSocket.js +39 -39
- package/src/client/BaseClient.js +86 -86
- package/src/client/Client.js +934 -836
- package/src/client/WebhookClient.js +61 -61
- package/src/client/actions/Action.js +116 -120
- package/src/client/actions/ActionsManager.js +80 -78
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -34
- package/src/client/actions/AutoModerationActionExecution.js +27 -27
- package/src/client/actions/AutoModerationRuleCreate.js +28 -28
- package/src/client/actions/AutoModerationRuleDelete.js +32 -32
- package/src/client/actions/AutoModerationRuleUpdate.js +30 -30
- package/src/client/actions/ChannelCreate.js +23 -23
- package/src/client/actions/ChannelDelete.js +39 -39
- package/src/client/actions/ChannelUpdate.js +43 -43
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -29
- package/src/client/actions/GuildBanAdd.js +20 -20
- package/src/client/actions/GuildBanRemove.js +25 -25
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -21
- package/src/client/actions/GuildDelete.js +65 -65
- package/src/client/actions/GuildEmojiCreate.js +20 -20
- package/src/client/actions/GuildEmojiDelete.js +21 -21
- package/src/client/actions/GuildEmojiUpdate.js +20 -20
- package/src/client/actions/GuildEmojisUpdate.js +34 -34
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -19
- package/src/client/actions/GuildMemberRemove.js +33 -32
- package/src/client/actions/GuildMemberUpdate.js +44 -43
- package/src/client/actions/GuildRoleCreate.js +25 -25
- package/src/client/actions/GuildRoleDelete.js +31 -31
- package/src/client/actions/GuildRoleUpdate.js +39 -39
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -21
- package/src/client/actions/GuildScheduledEventCreate.js +27 -27
- package/src/client/actions/GuildScheduledEventDelete.js +31 -31
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -30
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -32
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -32
- package/src/client/actions/GuildStickerCreate.js +20 -20
- package/src/client/actions/GuildStickerDelete.js +21 -21
- package/src/client/actions/GuildStickerUpdate.js +20 -20
- package/src/client/actions/GuildStickersUpdate.js +34 -34
- package/src/client/actions/GuildUpdate.js +33 -33
- package/src/client/actions/InviteCreate.js +28 -28
- package/src/client/actions/InviteDelete.js +30 -30
- package/src/client/actions/MessageCreate.js +50 -46
- package/src/client/actions/MessageDelete.js +32 -32
- package/src/client/actions/MessageDeleteBulk.js +46 -46
- package/src/client/actions/MessagePollVoteAdd.js +33 -0
- package/src/client/actions/MessagePollVoteRemove.js +33 -0
- package/src/client/actions/MessageReactionAdd.js +68 -56
- package/src/client/actions/MessageReactionRemove.js +50 -45
- package/src/client/actions/MessageReactionRemoveAll.js +33 -33
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -28
- package/src/client/actions/MessageUpdate.js +26 -26
- package/src/client/actions/PresenceUpdate.js +50 -46
- package/src/client/actions/StageInstanceCreate.js +28 -28
- package/src/client/actions/StageInstanceDelete.js +33 -33
- package/src/client/actions/StageInstanceUpdate.js +30 -30
- package/src/client/actions/ThreadCreate.js +24 -24
- package/src/client/actions/ThreadDelete.js +32 -32
- package/src/client/actions/ThreadListSync.js +59 -59
- package/src/client/actions/ThreadMemberUpdate.js +30 -30
- package/src/client/actions/ThreadMembersUpdate.js +34 -34
- package/src/client/actions/TypingStart.js +29 -29
- package/src/client/actions/UserUpdate.js +35 -35
- package/src/client/actions/VoiceStateUpdate.js +50 -57
- package/src/client/actions/WebhooksUpdate.js +20 -20
- package/src/client/voice/ClientVoiceManager.js +151 -51
- package/src/client/voice/VoiceConnection.js +1249 -0
- package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
- package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
- package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
- package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
- package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
- package/src/client/voice/networking/VoiceUDPClient.js +173 -0
- package/src/client/voice/networking/VoiceWebSocket.js +286 -0
- package/src/client/voice/player/MediaPlayer.js +321 -0
- package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
- package/src/client/voice/player/processing/IvfSplitter.js +106 -0
- package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
- package/src/client/voice/receiver/PacketHandler.js +260 -0
- package/src/client/voice/receiver/Receiver.js +96 -0
- package/src/client/voice/receiver/Recorder.js +173 -0
- package/src/client/voice/util/Function.js +116 -0
- package/src/client/voice/util/PlayInterface.js +122 -0
- package/src/client/voice/util/Secretbox.js +64 -0
- package/src/client/voice/util/Silence.js +16 -0
- package/src/client/voice/util/Socket.js +62 -0
- package/src/client/voice/util/VolumeInterface.js +104 -0
- package/src/client/websocket/WebSocketManager.js +392 -392
- package/src/client/websocket/WebSocketShard.js +907 -906
- package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -18
- package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -20
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -20
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -5
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -5
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -5
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/CALL_CREATE.js +14 -14
- package/src/client/websocket/handlers/CALL_DELETE.js +11 -11
- package/src/client/websocket/handlers/CALL_UPDATE.js +11 -11
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -5
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -5
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -22
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -19
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -16
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -16
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -5
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -5
- package/src/client/websocket/handlers/GUILD_CREATE.js +52 -52
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -5
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -39
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -19
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -5
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -5
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -5
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -5
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -12
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -5
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -22
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -12
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -16
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/READY.js +121 -120
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -19
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -17
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -41
- package/src/client/websocket/handlers/RESUMED.js +14 -14
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -5
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -5
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -5
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -5
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -5
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -5
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -16
- package/src/client/websocket/handlers/TYPING_START.js +5 -5
- package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -6
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -78
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -5
- package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -12
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -6
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/index.js +84 -83
- package/src/errors/DJSError.js +61 -61
- package/src/errors/Messages.js +217 -183
- package/src/errors/index.js +4 -4
- package/src/index.js +172 -159
- package/src/managers/ApplicationCommandManager.js +264 -264
- package/src/managers/ApplicationCommandPermissionsManager.js +417 -417
- package/src/managers/AutoModerationRuleManager.js +296 -296
- package/src/managers/BaseGuildEmojiManager.js +80 -80
- package/src/managers/BaseManager.js +19 -19
- package/src/managers/BillingManager.js +66 -66
- package/src/managers/CachedManager.js +71 -71
- package/src/managers/ChannelManager.js +148 -138
- package/src/managers/ClientUserSettingManager.js +372 -372
- package/src/managers/DataManager.js +61 -61
- package/src/managers/GuildBanManager.js +250 -250
- package/src/managers/GuildChannelManager.js +488 -488
- package/src/managers/GuildEmojiManager.js +171 -171
- package/src/managers/GuildEmojiRoleManager.js +118 -118
- package/src/managers/GuildForumThreadManager.js +108 -108
- package/src/managers/GuildInviteManager.js +213 -213
- package/src/managers/GuildManager.js +338 -304
- package/src/managers/GuildMemberManager.js +599 -597
- package/src/managers/GuildMemberRoleManager.js +195 -191
- package/src/managers/GuildScheduledEventManager.js +314 -296
- package/src/managers/GuildSettingManager.js +155 -155
- package/src/managers/GuildStickerManager.js +179 -179
- package/src/managers/GuildTextThreadManager.js +98 -98
- package/src/managers/InteractionManager.js +39 -39
- package/src/managers/MessageManager.js +423 -391
- package/src/managers/PermissionOverwriteManager.js +164 -166
- package/src/managers/PresenceManager.js +71 -58
- package/src/managers/ReactionManager.js +67 -67
- package/src/managers/ReactionUserManager.js +73 -71
- package/src/managers/RelationshipManager.js +278 -265
- package/src/managers/RoleManager.js +448 -352
- package/src/managers/SessionManager.js +66 -0
- package/src/managers/StageInstanceManager.js +162 -162
- package/src/managers/ThreadManager.js +175 -174
- package/src/managers/ThreadMemberManager.js +186 -186
- package/src/managers/UserManager.js +136 -146
- package/src/managers/UserNoteManager.js +53 -53
- package/src/managers/VoiceStateManager.js +59 -37
- package/src/rest/APIRequest.js +154 -160
- package/src/rest/APIRouter.js +53 -53
- package/src/rest/DiscordAPIError.js +119 -104
- package/src/rest/HTTPError.js +62 -62
- package/src/rest/RESTManager.js +67 -62
- package/src/rest/RateLimitError.js +55 -55
- package/src/rest/RequestHandler.js +466 -444
- package/src/sharding/Shard.js +444 -443
- package/src/sharding/ShardClientUtil.js +279 -275
- package/src/sharding/ShardingManager.js +319 -318
- package/src/structures/AnonymousGuild.js +98 -98
- package/src/structures/ApplicationCommand.js +593 -593
- package/src/structures/ApplicationRoleConnectionMetadata.js +48 -48
- package/src/structures/AutoModerationActionExecution.js +89 -89
- package/src/structures/AutoModerationRule.js +294 -294
- package/src/structures/AutocompleteInteraction.js +107 -107
- package/src/structures/Base.js +43 -43
- package/src/structures/BaseCommandInteraction.js +211 -211
- package/src/structures/BaseGuild.js +116 -116
- package/src/structures/BaseGuildEmoji.js +56 -56
- package/src/structures/BaseGuildTextChannel.js +191 -191
- package/src/structures/BaseGuildVoiceChannel.js +241 -241
- package/src/structures/BaseMessageComponent.js +181 -114
- package/src/structures/ButtonInteraction.js +11 -11
- package/src/structures/CallState.js +63 -63
- package/src/structures/CategoryChannel.js +85 -85
- package/src/structures/Channel.js +284 -270
- package/src/structures/ClientPresence.js +77 -85
- package/src/structures/ClientUser.js +479 -448
- package/src/structures/CommandInteraction.js +41 -41
- package/src/structures/CommandInteractionOptionResolver.js +276 -276
- package/src/structures/ContainerComponent.js +68 -0
- package/src/structures/ContextMenuInteraction.js +65 -65
- package/src/structures/DMChannel.js +219 -217
- package/src/structures/DirectoryChannel.js +20 -20
- package/src/structures/Emoji.js +148 -148
- package/src/structures/FileComponent.js +49 -0
- package/src/structures/ForumChannel.js +31 -261
- package/src/structures/GroupDMChannel.js +394 -387
- package/src/structures/Guild.js +1643 -1608
- package/src/structures/GuildAuditLogs.js +746 -729
- package/src/structures/GuildBan.js +59 -59
- package/src/structures/GuildBoost.js +108 -108
- package/src/structures/GuildChannel.js +470 -468
- package/src/structures/GuildEmoji.js +161 -161
- package/src/structures/GuildMember.js +636 -568
- package/src/structures/GuildPreview.js +191 -191
- package/src/structures/GuildPreviewEmoji.js +27 -27
- package/src/structures/GuildScheduledEvent.js +536 -441
- package/src/structures/GuildTemplate.js +236 -236
- package/src/structures/Integration.js +188 -188
- package/src/structures/IntegrationApplication.js +96 -96
- package/src/structures/Interaction.js +290 -290
- package/src/structures/InteractionCollector.js +248 -248
- package/src/structures/InteractionWebhook.js +43 -43
- package/src/structures/Invite.js +358 -358
- package/src/structures/InviteGuild.js +23 -23
- package/src/structures/InviteStageInstance.js +86 -86
- package/src/structures/MediaChannel.js +11 -0
- package/src/structures/MediaGalleryComponent.js +41 -0
- package/src/structures/MediaGalleryItem.js +47 -0
- package/src/structures/Message.js +1252 -1227
- package/src/structures/MessageActionRow.js +105 -103
- package/src/structures/MessageAttachment.js +216 -204
- package/src/structures/MessageButton.js +166 -165
- package/src/structures/MessageCollector.js +146 -146
- package/src/structures/MessageComponentInteraction.js +120 -120
- package/src/structures/MessageContextMenuInteraction.js +20 -20
- package/src/structures/MessageEmbed.js +596 -586
- package/src/structures/MessageMentions.js +273 -273
- package/src/structures/MessagePayload.js +354 -318
- package/src/structures/MessageReaction.js +181 -171
- package/src/structures/MessageSelectMenu.js +141 -140
- package/src/structures/Modal.js +161 -161
- package/src/structures/ModalSubmitFieldsResolver.js +53 -53
- package/src/structures/ModalSubmitInteraction.js +119 -119
- package/src/structures/NewsChannel.js +32 -32
- package/src/structures/OAuth2Guild.js +28 -28
- package/src/structures/PermissionOverwrites.js +198 -196
- package/src/structures/Poll.js +108 -0
- package/src/structures/PollAnswer.js +88 -0
- package/src/structures/Presence.js +1105 -1101
- package/src/structures/ReactionCollector.js +229 -229
- package/src/structures/ReactionEmoji.js +31 -31
- package/src/structures/Role.js +590 -531
- package/src/structures/SectionComponent.js +48 -0
- package/src/structures/SelectMenuInteraction.js +21 -21
- package/src/structures/SeparatorComponent.js +48 -0
- package/src/structures/Session.js +81 -0
- package/src/structures/StageChannel.js +104 -104
- package/src/structures/StageInstance.js +208 -208
- package/src/structures/Sticker.js +310 -310
- package/src/structures/StickerPack.js +95 -95
- package/src/structures/StoreChannel.js +56 -56
- package/src/structures/Team.js +118 -118
- package/src/structures/TeamMember.js +80 -71
- package/src/structures/TextChannel.js +33 -33
- package/src/structures/TextDisplayComponent.js +40 -0
- package/src/structures/TextInputComponent.js +132 -131
- package/src/structures/ThreadChannel.js +605 -607
- package/src/structures/ThreadMember.js +105 -105
- package/src/structures/ThreadOnlyChannel.js +249 -0
- package/src/structures/ThumbnailComponent.js +57 -0
- package/src/structures/Typing.js +74 -74
- package/src/structures/UnfurledMediaItem.js +29 -0
- package/src/structures/User.js +640 -543
- package/src/structures/UserContextMenuInteraction.js +29 -29
- package/src/structures/VoiceChannel.js +110 -110
- package/src/structures/VoiceChannelEffect.js +69 -0
- package/src/structures/VoiceRegion.js +53 -53
- package/src/structures/VoiceState.js +354 -341
- package/src/structures/WebEmbed.js +373 -373
- package/src/structures/Webhook.js +478 -467
- package/src/structures/WelcomeChannel.js +60 -60
- package/src/structures/WelcomeScreen.js +48 -48
- package/src/structures/Widget.js +87 -87
- package/src/structures/WidgetMember.js +99 -99
- package/src/structures/interfaces/Application.js +825 -313
- package/src/structures/interfaces/Collector.js +300 -300
- package/src/structures/interfaces/InteractionResponses.js +313 -313
- package/src/structures/interfaces/TextBasedChannel.js +759 -719
- package/src/util/APITypes.js +59 -0
- package/src/util/ActivityFlags.js +44 -44
- package/src/util/ApplicationFlags.js +76 -76
- package/src/util/AttachmentFlags.js +38 -38
- package/src/util/BitField.js +170 -170
- package/src/util/ChannelFlags.js +45 -45
- package/src/util/Constants.js +1914 -1773
- package/src/util/DataResolver.js +146 -145
- package/src/util/Formatters.js +228 -228
- package/src/util/GuildMemberFlags.js +43 -43
- package/src/util/Intents.js +74 -74
- package/src/util/InviteFlags.js +34 -29
- package/src/util/LimitedCollection.js +131 -131
- package/src/util/MessageFlags.js +63 -54
- package/src/util/Options.js +358 -336
- package/src/util/Permissions.js +202 -202
- package/src/util/PremiumUsageFlags.js +31 -31
- package/src/util/PurchasedFlags.js +33 -33
- package/src/util/RemoteAuth.js +382 -379
- package/src/util/RoleFlags.js +37 -37
- package/src/util/SnowflakeUtil.js +92 -92
- package/src/util/Speaking.js +33 -0
- package/src/util/Sweepers.js +466 -466
- package/src/util/SystemChannelFlags.js +55 -55
- package/src/util/ThreadMemberFlags.js +30 -30
- package/src/util/UserFlags.js +104 -104
- package/src/util/Util.js +1048 -889
- package/typings/enums.d.ts +439 -297
- package/typings/index.d.ts +8247 -7432
- package/typings/rawDataTypes.d.ts +403 -342
- package/src/structures/MessagePoll.js +0 -238
|
@@ -1,296 +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;
|
|
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;
|