discord.js-selfbot-v13-new 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +124 -0
- package/package.json +89 -0
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +86 -0
- package/src/client/Client.js +934 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +116 -0
- package/src/client/actions/ActionsManager.js +80 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +27 -0
- package/src/client/actions/AutoModerationRuleCreate.js +28 -0
- package/src/client/actions/AutoModerationRuleDelete.js +32 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +43 -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/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/MessagePollVoteAdd.js +33 -0
- package/src/client/actions/MessagePollVoteRemove.js +33 -0
- package/src/client/actions/MessageReactionAdd.js +68 -0
- package/src/client/actions/MessageReactionRemove.js +50 -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 +50 -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 +50 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +151 -0
- 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 -0
- package/src/client/websocket/WebSocketShard.js +907 -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 +19 -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_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 +52 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.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 +121 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -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 +6 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -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 +84 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +217 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +172 -0
- package/src/managers/ApplicationCommandManager.js +264 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +417 -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 +148 -0
- package/src/managers/ClientUserSettingManager.js +372 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/GuildBanManager.js +250 -0
- package/src/managers/GuildChannelManager.js +488 -0
- package/src/managers/GuildEmojiManager.js +171 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +108 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +338 -0
- package/src/managers/GuildMemberManager.js +599 -0
- package/src/managers/GuildMemberRoleManager.js +195 -0
- package/src/managers/GuildScheduledEventManager.js +314 -0
- package/src/managers/GuildSettingManager.js +155 -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 +423 -0
- package/src/managers/PermissionOverwriteManager.js +164 -0
- package/src/managers/PresenceManager.js +71 -0
- package/src/managers/ReactionManager.js +67 -0
- package/src/managers/ReactionUserManager.js +73 -0
- package/src/managers/RelationshipManager.js +278 -0
- package/src/managers/RoleManager.js +448 -0
- package/src/managers/SessionManager.js +66 -0
- package/src/managers/StageInstanceManager.js +162 -0
- package/src/managers/ThreadManager.js +175 -0
- package/src/managers/ThreadMemberManager.js +186 -0
- package/src/managers/UserManager.js +136 -0
- package/src/managers/UserNoteManager.js +53 -0
- package/src/managers/VoiceStateManager.js +59 -0
- package/src/rest/APIRequest.js +154 -0
- package/src/rest/APIRouter.js +53 -0
- package/src/rest/DiscordAPIError.js +119 -0
- package/src/rest/HTTPError.js +62 -0
- package/src/rest/RESTManager.js +67 -0
- package/src/rest/RateLimitError.js +55 -0
- package/src/rest/RequestHandler.js +466 -0
- package/src/sharding/Shard.js +444 -0
- package/src/sharding/ShardClientUtil.js +279 -0
- package/src/sharding/ShardingManager.js +319 -0
- package/src/structures/AnonymousGuild.js +98 -0
- package/src/structures/ApplicationCommand.js +593 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
- package/src/structures/AutoModerationActionExecution.js +89 -0
- package/src/structures/AutoModerationRule.js +294 -0
- package/src/structures/AutocompleteInteraction.js +107 -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 +191 -0
- package/src/structures/BaseGuildVoiceChannel.js +241 -0
- package/src/structures/BaseMessageComponent.js +181 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CallState.js +63 -0
- package/src/structures/CategoryChannel.js +85 -0
- package/src/structures/Channel.js +284 -0
- package/src/structures/ClientPresence.js +77 -0
- package/src/structures/ClientUser.js +449 -0
- package/src/structures/CommandInteraction.js +41 -0
- package/src/structures/CommandInteractionOptionResolver.js +276 -0
- package/src/structures/ContainerComponent.js +68 -0
- package/src/structures/ContextMenuInteraction.js +65 -0
- package/src/structures/DMChannel.js +219 -0
- package/src/structures/DirectoryChannel.js +20 -0
- package/src/structures/Emoji.js +148 -0
- package/src/structures/FileComponent.js +49 -0
- package/src/structures/ForumChannel.js +31 -0
- package/src/structures/GroupDMChannel.js +394 -0
- package/src/structures/Guild.js +1638 -0
- package/src/structures/GuildAuditLogs.js +746 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildBoost.js +108 -0
- package/src/structures/GuildChannel.js +470 -0
- package/src/structures/GuildEmoji.js +161 -0
- package/src/structures/GuildMember.js +636 -0
- package/src/structures/GuildPreview.js +191 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +536 -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 +290 -0
- package/src/structures/InteractionCollector.js +248 -0
- package/src/structures/InteractionWebhook.js +43 -0
- package/src/structures/Invite.js +358 -0
- package/src/structures/InviteGuild.js +23 -0
- package/src/structures/InviteStageInstance.js +86 -0
- 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 -0
- package/src/structures/MessageActionRow.js +105 -0
- package/src/structures/MessageAttachment.js +216 -0
- package/src/structures/MessageButton.js +166 -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 +596 -0
- package/src/structures/MessageMentions.js +273 -0
- package/src/structures/MessagePayload.js +354 -0
- package/src/structures/MessageReaction.js +181 -0
- package/src/structures/MessageSelectMenu.js +141 -0
- package/src/structures/Modal.js +161 -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/PermissionOverwrites.js +198 -0
- package/src/structures/Poll.js +108 -0
- package/src/structures/PollAnswer.js +88 -0
- package/src/structures/Presence.js +1105 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +590 -0
- package/src/structures/SectionComponent.js +48 -0
- package/src/structures/SelectMenuInteraction.js +21 -0
- package/src/structures/SeparatorComponent.js +48 -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 +118 -0
- package/src/structures/TeamMember.js +80 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextDisplayComponent.js +40 -0
- package/src/structures/TextInputComponent.js +132 -0
- package/src/structures/ThreadChannel.js +605 -0
- package/src/structures/ThreadMember.js +105 -0
- package/src/structures/ThreadOnlyChannel.js +249 -0
- package/src/structures/ThumbnailComponent.js +57 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/UnfurledMediaItem.js +29 -0
- package/src/structures/User.js +622 -0
- package/src/structures/UserContextMenuInteraction.js +29 -0
- package/src/structures/VoiceChannel.js +110 -0
- package/src/structures/VoiceChannelEffect.js +69 -0
- package/src/structures/VoiceRegion.js +53 -0
- package/src/structures/VoiceState.js +354 -0
- package/src/structures/WebEmbed.js +373 -0
- package/src/structures/Webhook.js +478 -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 +825 -0
- package/src/structures/interfaces/Collector.js +300 -0
- package/src/structures/interfaces/InteractionResponses.js +313 -0
- package/src/structures/interfaces/TextBasedChannel.js +759 -0
- package/src/util/APITypes.js +59 -0
- package/src/util/ActivityFlags.js +44 -0
- package/src/util/ApplicationFlags.js +76 -0
- package/src/util/AttachmentFlags.js +38 -0
- package/src/util/BitField.js +170 -0
- package/src/util/ChannelFlags.js +45 -0
- package/src/util/Constants.js +1914 -0
- package/src/util/DataResolver.js +146 -0
- package/src/util/Formatters.js +228 -0
- package/src/util/GuildMemberFlags.js +43 -0
- package/src/util/Intents.js +74 -0
- package/src/util/InviteFlags.js +34 -0
- package/src/util/LimitedCollection.js +131 -0
- package/src/util/MessageFlags.js +63 -0
- package/src/util/Options.js +358 -0
- package/src/util/Permissions.js +202 -0
- package/src/util/PremiumUsageFlags.js +31 -0
- package/src/util/PurchasedFlags.js +33 -0
- package/src/util/RemoteAuth.js +382 -0
- package/src/util/RoleFlags.js +37 -0
- package/src/util/SnowflakeUtil.js +92 -0
- package/src/util/Speaking.js +33 -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 +1048 -0
- package/typings/enums.d.ts +439 -0
- package/typings/index.d.ts +8247 -0
- package/typings/index.test-d.ts +0 -0
- package/typings/rawDataTypes.d.ts +403 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const BaseManager = require('./BaseManager');
|
|
5
|
+
const { TypeError } = require('../errors/DJSError');
|
|
6
|
+
const { CustomStatus } = require('../structures/Presence');
|
|
7
|
+
const { ActivityTypes } = require('../util/Constants');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Manages API methods for users and stores their cache.
|
|
11
|
+
* @extends {BaseManager}
|
|
12
|
+
* @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}
|
|
13
|
+
*/
|
|
14
|
+
class ClientUserSettingManager extends BaseManager {
|
|
15
|
+
#rawSetting = {};
|
|
16
|
+
constructor(client) {
|
|
17
|
+
super(client);
|
|
18
|
+
/**
|
|
19
|
+
* WHO CAN ADD YOU AS A FRIEND ?
|
|
20
|
+
* @type {?object}
|
|
21
|
+
* @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html#friend-source-flags-structure}
|
|
22
|
+
*/
|
|
23
|
+
this.addFriendFrom = {
|
|
24
|
+
all: null,
|
|
25
|
+
mutual_friends: null,
|
|
26
|
+
mutual_guilds: null,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Patch data file
|
|
31
|
+
* https://luna.gitlab.io/discord-unofficial-docs/docs/user_settings
|
|
32
|
+
* @private
|
|
33
|
+
* @param {Object} data Raw Data to patch
|
|
34
|
+
*/
|
|
35
|
+
_patch(data = {}) {
|
|
36
|
+
this.#rawSetting = Object.assign(this.#rawSetting, data);
|
|
37
|
+
this.client.emit('debug', `[SETTING > ClientUser] Sync setting`);
|
|
38
|
+
if ('locale' in data) {
|
|
39
|
+
/**
|
|
40
|
+
* The user's chosen language option
|
|
41
|
+
* @type {?string}
|
|
42
|
+
* @see {@link https://discord.com/developers/docs/reference#locales}
|
|
43
|
+
*/
|
|
44
|
+
this.locale = data.locale;
|
|
45
|
+
}
|
|
46
|
+
if ('show_current_game' in data) {
|
|
47
|
+
/**
|
|
48
|
+
* Show playing status for detected/added games
|
|
49
|
+
* <info>Setting => ACTIVITY SETTINGS => Activity Status => Display current activity as a status message</info>
|
|
50
|
+
* @type {?boolean}
|
|
51
|
+
*/
|
|
52
|
+
this.activityDisplay = data.show_current_game;
|
|
53
|
+
}
|
|
54
|
+
if ('default_guilds_restricted' in data) {
|
|
55
|
+
/**
|
|
56
|
+
* Allow DMs from guild members by default on guild join
|
|
57
|
+
* @type {?boolean}
|
|
58
|
+
*/
|
|
59
|
+
this.allowDMsFromGuild = data.default_guilds_restricted;
|
|
60
|
+
}
|
|
61
|
+
if ('inline_attachment_media' in data) {
|
|
62
|
+
/**
|
|
63
|
+
* Display images and video when uploaded directly
|
|
64
|
+
* @type {?boolean}
|
|
65
|
+
*/
|
|
66
|
+
this.displayImage = data.inline_attachment_media;
|
|
67
|
+
}
|
|
68
|
+
if ('inline_embed_media' in data) {
|
|
69
|
+
/**
|
|
70
|
+
* Display images and video when linked
|
|
71
|
+
* @type {?boolean}
|
|
72
|
+
*/
|
|
73
|
+
this.linkedImageDisplay = data.inline_embed_media;
|
|
74
|
+
}
|
|
75
|
+
if ('gif_auto_play' in data) {
|
|
76
|
+
/**
|
|
77
|
+
* Play GIFs without hovering over them
|
|
78
|
+
* <info>Setting => APP SETTINGS => Accessibility => Automatically play GIFs when Discord is focused.</info>
|
|
79
|
+
* @type {?boolean}
|
|
80
|
+
*/
|
|
81
|
+
this.autoplayGIF = data.gif_auto_play;
|
|
82
|
+
}
|
|
83
|
+
if ('render_embeds' in data) {
|
|
84
|
+
/**
|
|
85
|
+
* Show embeds and preview website links pasted into chat
|
|
86
|
+
* @type {?boolean}
|
|
87
|
+
*/
|
|
88
|
+
this.previewLink = data.render_embeds;
|
|
89
|
+
}
|
|
90
|
+
if ('animate_emoji' in data) {
|
|
91
|
+
/**
|
|
92
|
+
* Play animated emoji without hovering over them
|
|
93
|
+
* <info>Setting => APP SETTINGS => Accessibility => Play Animated Emojis</info>
|
|
94
|
+
* @type {?boolean}
|
|
95
|
+
*/
|
|
96
|
+
this.animatedEmoji = data.animate_emoji;
|
|
97
|
+
}
|
|
98
|
+
if ('enable_tts_command' in data) {
|
|
99
|
+
/**
|
|
100
|
+
* Enable /tts command and playback
|
|
101
|
+
* <info>Setting => APP SETTINGS => Accessibility => Text-to-speech => Allow playback</info>
|
|
102
|
+
* @type {?boolean}
|
|
103
|
+
*/
|
|
104
|
+
this.allowTTS = data.enable_tts_command;
|
|
105
|
+
}
|
|
106
|
+
if ('message_display_compact' in data) {
|
|
107
|
+
/**
|
|
108
|
+
* Use compact mode
|
|
109
|
+
* <info>Setting => APP SETTINGS => Appearance => Message Display => Compact Mode</info>
|
|
110
|
+
* @type {?boolean}
|
|
111
|
+
*/
|
|
112
|
+
this.compactMode = data.message_display_compact;
|
|
113
|
+
}
|
|
114
|
+
if ('convert_emoticons' in data) {
|
|
115
|
+
/**
|
|
116
|
+
* Convert "old fashioned" emoticons to emojis
|
|
117
|
+
* <info>Setting => APP SETTINGS => Text & Images => Emoji => Convert Emoticons</info>
|
|
118
|
+
* @type {?boolean}
|
|
119
|
+
*/
|
|
120
|
+
this.convertEmoticons = data.convert_emoticons;
|
|
121
|
+
}
|
|
122
|
+
if ('explicit_content_filter' in data) {
|
|
123
|
+
/**
|
|
124
|
+
* Content filter level
|
|
125
|
+
* <info>
|
|
126
|
+
* * `0`: Off
|
|
127
|
+
* * `1`: Friends excluded
|
|
128
|
+
* * `2`: Scan everyone
|
|
129
|
+
* </info>
|
|
130
|
+
* @type {?number}
|
|
131
|
+
*/
|
|
132
|
+
this.DMScanLevel = data.explicit_content_filter;
|
|
133
|
+
}
|
|
134
|
+
if ('theme' in data) {
|
|
135
|
+
/**
|
|
136
|
+
* Client theme
|
|
137
|
+
* <info>Setting => APP SETTINGS => Appearance => Theme
|
|
138
|
+
* * `dark`
|
|
139
|
+
* * `light`
|
|
140
|
+
* </info>
|
|
141
|
+
* @type {?string}
|
|
142
|
+
*/
|
|
143
|
+
this.theme = data.theme;
|
|
144
|
+
}
|
|
145
|
+
if ('developer_mode' in data) {
|
|
146
|
+
/**
|
|
147
|
+
* Show the option to copy ids in right click menus
|
|
148
|
+
* @type {?boolean}
|
|
149
|
+
*/
|
|
150
|
+
this.developerMode = data.developer_mode;
|
|
151
|
+
}
|
|
152
|
+
if ('afk_timeout' in data) {
|
|
153
|
+
/**
|
|
154
|
+
* How many seconds being idle before the user is marked as "AFK"; this handles when push notifications are sent
|
|
155
|
+
* @type {?number}
|
|
156
|
+
*/
|
|
157
|
+
this.afkTimeout = data.afk_timeout;
|
|
158
|
+
}
|
|
159
|
+
if ('animate_stickers' in data) {
|
|
160
|
+
/**
|
|
161
|
+
* When stickers animate
|
|
162
|
+
* <info>
|
|
163
|
+
* * `0`: Always
|
|
164
|
+
* * `1`: On hover/focus
|
|
165
|
+
* * `2`: Never
|
|
166
|
+
* </info>
|
|
167
|
+
* @type {?number}
|
|
168
|
+
*/
|
|
169
|
+
this.stickerAnimationMode = data.animate_stickers;
|
|
170
|
+
}
|
|
171
|
+
if ('render_reactions' in data) {
|
|
172
|
+
/**
|
|
173
|
+
* Display reactions
|
|
174
|
+
* <info>Setting => APP SETTINGS => Text & Images => Emoji => Show emoji reactions</info>
|
|
175
|
+
* @type {?boolean}
|
|
176
|
+
*/
|
|
177
|
+
this.showEmojiReactions = data.render_reactions;
|
|
178
|
+
}
|
|
179
|
+
if ('status' in data) {
|
|
180
|
+
this.client.presence.status = data.status;
|
|
181
|
+
if (!('custom_status' in data)) {
|
|
182
|
+
this.client.emit('debug', '[SETTING > ClientUser] Sync status');
|
|
183
|
+
this.client.user.setStatus(data.status);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if ('custom_status' in data) {
|
|
187
|
+
this.customStatus = data.custom_status;
|
|
188
|
+
const activities = this.client.presence.activities.filter(
|
|
189
|
+
a => ![ActivityTypes.CUSTOM, 'CUSTOM'].includes(a.type),
|
|
190
|
+
);
|
|
191
|
+
if (data.custom_status) {
|
|
192
|
+
const custom = new CustomStatus(this.client);
|
|
193
|
+
custom.setState(data.custom_status.text);
|
|
194
|
+
let emoji;
|
|
195
|
+
if (data.custom_status.emoji_id) {
|
|
196
|
+
emoji = this.client.emojis.cache.get(data.custom_status.emoji_id);
|
|
197
|
+
} else if (data.custom_status.emoji_name) {
|
|
198
|
+
emoji = `:${data.custom_status.emoji_name}:`;
|
|
199
|
+
}
|
|
200
|
+
if (emoji) custom.setEmoji(emoji);
|
|
201
|
+
activities.push(custom);
|
|
202
|
+
}
|
|
203
|
+
this.client.emit('debug', '[SETTING > ClientUser] Sync activities & status');
|
|
204
|
+
this.client.user.setPresence({ activities });
|
|
205
|
+
}
|
|
206
|
+
if ('friend_source_flags' in data) {
|
|
207
|
+
// Todo
|
|
208
|
+
}
|
|
209
|
+
if ('restricted_guilds' in data) {
|
|
210
|
+
/**
|
|
211
|
+
* Disable Direct Message from servers
|
|
212
|
+
* @type {Collection<Snowflake, Guild>}
|
|
213
|
+
*/
|
|
214
|
+
this.disableDMfromGuilds = new Collection(
|
|
215
|
+
data.restricted_guilds.map(guildId => [guildId, this.client.guilds.cache.get(guildId)]),
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Raw data
|
|
222
|
+
* @type {Object}
|
|
223
|
+
*/
|
|
224
|
+
get raw() {
|
|
225
|
+
return this.#rawSetting;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
async fetch() {
|
|
229
|
+
const data = await this.client.api.users('@me').settings.get();
|
|
230
|
+
this._patch(data);
|
|
231
|
+
return this;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Edit data
|
|
236
|
+
* @param {any} data Data to edit
|
|
237
|
+
*/
|
|
238
|
+
async edit(data) {
|
|
239
|
+
const res = await this.client.api.users('@me').settings.patch({ data });
|
|
240
|
+
this._patch(res);
|
|
241
|
+
return this;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Toggle compact mode
|
|
246
|
+
* @returns {Promise<this>}
|
|
247
|
+
*/
|
|
248
|
+
toggleCompactMode() {
|
|
249
|
+
return this.edit({ message_display_compact: !this.compactMode });
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Discord Theme
|
|
253
|
+
* @param {string} value Theme to set (dark | light)
|
|
254
|
+
* @returns {Promise<this>}
|
|
255
|
+
*/
|
|
256
|
+
setTheme(value) {
|
|
257
|
+
const validValues = ['dark', 'light'];
|
|
258
|
+
if (!validValues.includes(value)) {
|
|
259
|
+
throw new TypeError('INVALID_TYPE', 'value', 'dark | light', true);
|
|
260
|
+
}
|
|
261
|
+
return this.edit({ theme: value });
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* CustomStatus Object
|
|
266
|
+
* @typedef {Object} CustomStatusOption
|
|
267
|
+
* @property {string | null} text Text to set
|
|
268
|
+
* @property {string | null} status The status to set: 'online', 'idle', 'dnd', 'invisible' or null.
|
|
269
|
+
* @property {EmojiResolvable | null} emoji UnicodeEmoji, DiscordEmoji, or null.
|
|
270
|
+
* @property {number | null} expires The number of seconds until the status expires, or null.
|
|
271
|
+
*/
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Set custom status
|
|
275
|
+
* @param {?CustomStatus | CustomStatusOption} options CustomStatus
|
|
276
|
+
* @returns {Promise<this>}
|
|
277
|
+
*/
|
|
278
|
+
setCustomStatus(options) {
|
|
279
|
+
if (typeof options !== 'object') {
|
|
280
|
+
return this.edit({ custom_status: null });
|
|
281
|
+
} else if (options instanceof CustomStatus) {
|
|
282
|
+
options = options.toJSON();
|
|
283
|
+
let data = {
|
|
284
|
+
emoji_name: null,
|
|
285
|
+
expires_at: null,
|
|
286
|
+
text: null,
|
|
287
|
+
};
|
|
288
|
+
if (typeof options.state === 'string') {
|
|
289
|
+
data.text = options.state;
|
|
290
|
+
}
|
|
291
|
+
if (options.emoji) {
|
|
292
|
+
if (options.emoji?.id) {
|
|
293
|
+
data.emoji_name = options.emoji?.name;
|
|
294
|
+
data.emoji_id = options.emoji?.id;
|
|
295
|
+
} else {
|
|
296
|
+
data.emoji_name = typeof options.emoji?.name === 'string' ? options.emoji?.name : null;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return this.edit({ custom_status: data });
|
|
300
|
+
} else {
|
|
301
|
+
let data = {
|
|
302
|
+
emoji_name: null,
|
|
303
|
+
expires_at: null,
|
|
304
|
+
text: null,
|
|
305
|
+
};
|
|
306
|
+
if (typeof options.text === 'string') {
|
|
307
|
+
if (options.text.length > 128) {
|
|
308
|
+
throw new RangeError('[INVALID_VALUE] Custom status text must be less than 128 characters');
|
|
309
|
+
}
|
|
310
|
+
data.text = options.text;
|
|
311
|
+
}
|
|
312
|
+
if (options.emoji) {
|
|
313
|
+
const emoji = this.client.emojis.resolve(options.emoji);
|
|
314
|
+
if (emoji) {
|
|
315
|
+
data.emoji_name = emoji.name;
|
|
316
|
+
data.emoji_id = emoji.id;
|
|
317
|
+
} else {
|
|
318
|
+
data.emoji_name = typeof options.emoji === 'string' ? options.emoji : null;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
if (typeof options.expires === 'number') {
|
|
322
|
+
if (options.expires < Date.now()) {
|
|
323
|
+
throw new RangeError(`[INVALID_VALUE] Custom status expiration must be greater than ${Date.now()}`);
|
|
324
|
+
}
|
|
325
|
+
data.expires_at = new Date(options.expires).toISOString();
|
|
326
|
+
}
|
|
327
|
+
if (['online', 'idle', 'dnd', 'invisible'].includes(options.status)) this.edit({ status: options.status });
|
|
328
|
+
return this.edit({ custom_status: data });
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Restricted guilds setting
|
|
334
|
+
* @param {boolean} status Restricted status
|
|
335
|
+
* @returns {Promise}
|
|
336
|
+
*/
|
|
337
|
+
restrictedGuilds(status) {
|
|
338
|
+
if (typeof status !== 'boolean') {
|
|
339
|
+
throw new TypeError('INVALID_TYPE', 'status', 'boolean', true);
|
|
340
|
+
}
|
|
341
|
+
return this.edit({
|
|
342
|
+
default_guilds_restricted: status,
|
|
343
|
+
restricted_guilds: status ? this.client.guilds.cache.map(v => v.id) : [],
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Add a guild to the list of restricted guilds.
|
|
348
|
+
* @param {GuildIDResolve} guildId The guild to add
|
|
349
|
+
* @returns {Promise}
|
|
350
|
+
*/
|
|
351
|
+
addRestrictedGuild(guildId) {
|
|
352
|
+
const temp = Object.assign(
|
|
353
|
+
[],
|
|
354
|
+
this.disableDMfromServer.map((v, k) => k),
|
|
355
|
+
);
|
|
356
|
+
if (temp.includes(guildId)) throw new Error('Guild is already restricted');
|
|
357
|
+
temp.push(guildId);
|
|
358
|
+
return this.edit({ restricted_guilds: temp });
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Remove a guild from the list of restricted guilds.
|
|
363
|
+
* @param {GuildIDResolve} guildId The guild to remove
|
|
364
|
+
* @returns {Promise}
|
|
365
|
+
*/
|
|
366
|
+
removeRestrictedGuild(guildId) {
|
|
367
|
+
if (!this.disableDMfromServer.delete(guildId)) throw new Error('Guild is already restricted');
|
|
368
|
+
return this.edit({ restricted_guilds: this.disableDMfromServer.map((v, k) => k) });
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
module.exports = ClientUserSettingManager;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const BaseManager = require('./BaseManager');
|
|
4
|
+
const { Error } = require('../errors');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Manages the API methods of a data model along with a collection of instances.
|
|
8
|
+
* @extends {BaseManager}
|
|
9
|
+
* @abstract
|
|
10
|
+
*/
|
|
11
|
+
class DataManager extends BaseManager {
|
|
12
|
+
constructor(client, holds) {
|
|
13
|
+
super(client);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The data structure belonging to this manager.
|
|
17
|
+
* @name DataManager#holds
|
|
18
|
+
* @type {Function}
|
|
19
|
+
* @private
|
|
20
|
+
* @readonly
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(this, 'holds', { value: holds });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The cache of items for this manager.
|
|
27
|
+
* @type {Collection}
|
|
28
|
+
* @abstract
|
|
29
|
+
*/
|
|
30
|
+
get cache() {
|
|
31
|
+
throw new Error('NOT_IMPLEMENTED', 'get cache', this.constructor.name);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Resolves a data entry to a data Object.
|
|
36
|
+
* @param {string|Object} idOrInstance The id or instance of something in this Manager
|
|
37
|
+
* @returns {?Object} An instance from this Manager
|
|
38
|
+
*/
|
|
39
|
+
resolve(idOrInstance) {
|
|
40
|
+
if (idOrInstance instanceof this.holds) return idOrInstance;
|
|
41
|
+
if (typeof idOrInstance === 'string') return this.cache.get(idOrInstance) ?? null;
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Resolves a data entry to an instance id.
|
|
47
|
+
* @param {string|Object} idOrInstance The id or instance of something in this Manager
|
|
48
|
+
* @returns {?Snowflake}
|
|
49
|
+
*/
|
|
50
|
+
resolveId(idOrInstance) {
|
|
51
|
+
if (idOrInstance instanceof this.holds) return idOrInstance.id;
|
|
52
|
+
if (typeof idOrInstance === 'string') return idOrInstance;
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
valueOf() {
|
|
57
|
+
return this.cache;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
module.exports = DataManager;
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const process = require('node:process');
|
|
4
|
+
const { Collection } = require('@discordjs/collection');
|
|
5
|
+
const CachedManager = require('./CachedManager');
|
|
6
|
+
const { TypeError, Error } = require('../errors');
|
|
7
|
+
const GuildBan = require('../structures/GuildBan');
|
|
8
|
+
const { GuildMember } = require('../structures/GuildMember');
|
|
9
|
+
|
|
10
|
+
let deprecationEmittedForDays = false;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Manages API methods for GuildBans and stores their cache.
|
|
14
|
+
* @extends {CachedManager}
|
|
15
|
+
*/
|
|
16
|
+
class GuildBanManager extends CachedManager {
|
|
17
|
+
constructor(guild, iterable) {
|
|
18
|
+
super(guild.client, GuildBan, iterable);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The guild this Manager belongs to
|
|
22
|
+
* @type {Guild}
|
|
23
|
+
*/
|
|
24
|
+
this.guild = guild;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The cache of this Manager
|
|
29
|
+
* @type {Collection<Snowflake, GuildBan>}
|
|
30
|
+
* @name GuildBanManager#cache
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
_add(data, cache) {
|
|
34
|
+
return super._add(data, cache, { id: data.user.id, extras: [this.guild] });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Data that resolves to give a GuildBan object. This can be:
|
|
39
|
+
* * A GuildBan object
|
|
40
|
+
* * A User resolvable
|
|
41
|
+
* @typedef {GuildBan|UserResolvable} GuildBanResolvable
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Resolves a GuildBanResolvable to a GuildBan object.
|
|
46
|
+
* @param {GuildBanResolvable} ban The ban that is in the guild
|
|
47
|
+
* @returns {?GuildBan}
|
|
48
|
+
*/
|
|
49
|
+
resolve(ban) {
|
|
50
|
+
return super.resolve(ban) ?? super.resolve(this.client.users.resolveId(ban));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Options used to fetch a single ban from a guild.
|
|
55
|
+
* @typedef {BaseFetchOptions} FetchBanOptions
|
|
56
|
+
* @property {UserResolvable} user The ban to fetch
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Options used to fetch multiple bans from a guild.
|
|
61
|
+
* @typedef {Object} FetchBansOptions
|
|
62
|
+
* @property {number} [limit] The maximum number of bans to return
|
|
63
|
+
* @property {Snowflake} [before] Consider only bans before this id
|
|
64
|
+
* @property {Snowflake} [after] Consider only bans after this id
|
|
65
|
+
* @property {boolean} [cache] Whether to cache the fetched bans
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Fetches ban(s) from Discord.
|
|
70
|
+
* @param {UserResolvable|FetchBanOptions|FetchBansOptions} [options] Options for fetching guild ban(s)
|
|
71
|
+
* @returns {Promise<GuildBan|Collection<Snowflake, GuildBan>>}
|
|
72
|
+
* @example
|
|
73
|
+
* // Fetch multiple bans from a guild
|
|
74
|
+
* guild.bans.fetch()
|
|
75
|
+
* .then(console.log)
|
|
76
|
+
* .catch(console.error);
|
|
77
|
+
* @example
|
|
78
|
+
* // Fetch a maximum of 5 bans from a guild without caching
|
|
79
|
+
* guild.bans.fetch({ limit: 5, cache: false })
|
|
80
|
+
* .then(console.log)
|
|
81
|
+
* .catch(console.error);
|
|
82
|
+
* @example
|
|
83
|
+
* // Fetch a single ban
|
|
84
|
+
* guild.bans.fetch('351871113346809860')
|
|
85
|
+
* .then(console.log)
|
|
86
|
+
* .catch(console.error);
|
|
87
|
+
* @example
|
|
88
|
+
* // Fetch a single ban without checking cache
|
|
89
|
+
* guild.bans.fetch({ user, force: true })
|
|
90
|
+
* .then(console.log)
|
|
91
|
+
* .catch(console.error)
|
|
92
|
+
* @example
|
|
93
|
+
* // Fetch a single ban without caching
|
|
94
|
+
* guild.bans.fetch({ user, cache: false })
|
|
95
|
+
* .then(console.log)
|
|
96
|
+
* .catch(console.error);
|
|
97
|
+
*/
|
|
98
|
+
async fetch(options) {
|
|
99
|
+
if (!options) return this._fetchMany();
|
|
100
|
+
const { user, cache, force, limit, before, after } = options;
|
|
101
|
+
const resolvedUser = this.client.users.resolveId(user ?? options);
|
|
102
|
+
if (resolvedUser) return this._fetchSingle({ user: resolvedUser, cache, force });
|
|
103
|
+
|
|
104
|
+
if (!before && !after && !limit && typeof cache === 'undefined') {
|
|
105
|
+
throw new Error('FETCH_BAN_RESOLVE_ID');
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return this._fetchMany(options);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async _fetchSingle({ user, cache, force = false }) {
|
|
112
|
+
if (!force) {
|
|
113
|
+
const existing = this.cache.get(user);
|
|
114
|
+
if (existing && !existing.partial) return existing;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const data = await this.client.api.guilds(this.guild.id).bans(user).get();
|
|
118
|
+
return this._add(data, cache);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
async _fetchMany(options = {}) {
|
|
122
|
+
const data = await this.client.api.guilds(this.guild.id).bans.get({
|
|
123
|
+
query: options,
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
return data.reduce((col, ban) => col.set(ban.user.id, this._add(ban, options.cache)), new Collection());
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Options used to ban a user from a guild.
|
|
130
|
+
* @typedef {Object} BanOptions
|
|
131
|
+
* @property {number} [days=0] Number of days of messages to delete, must be between 0 and 7, inclusive
|
|
132
|
+
* <warn>This property is deprecated. Use `deleteMessageSeconds` instead.</warn>
|
|
133
|
+
* @property {number} [deleteMessageSeconds] Number of seconds of messages to delete,
|
|
134
|
+
* must be between 0 and 604800 (7 days), inclusive
|
|
135
|
+
* @property {string} [reason] The reason for the ban
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Bans a user from the guild.
|
|
140
|
+
* @param {UserResolvable} user The user to ban
|
|
141
|
+
* @param {BanOptions} [options] Options for the ban
|
|
142
|
+
* @returns {Promise<GuildMember|User|Snowflake>} Result object will be resolved as specifically as possible.
|
|
143
|
+
* If the GuildMember cannot be resolved, the User will instead be attempted to be resolved. If that also cannot
|
|
144
|
+
* be resolved, the user id will be the result.
|
|
145
|
+
* @example
|
|
146
|
+
* // Ban a user by id (or with a user/guild member object)
|
|
147
|
+
* guild.bans.create('84484653687267328')
|
|
148
|
+
* .then(banInfo => console.log(`Banned ${banInfo.user?.tag ?? banInfo.tag ?? banInfo}`))
|
|
149
|
+
* .catch(console.error);
|
|
150
|
+
*/
|
|
151
|
+
async create(user, options = {}) {
|
|
152
|
+
if (typeof options !== 'object') throw new TypeError('INVALID_TYPE', 'options', 'object', true);
|
|
153
|
+
const id = this.client.users.resolveId(user);
|
|
154
|
+
if (!id) throw new Error('BAN_RESOLVE_ID', true);
|
|
155
|
+
|
|
156
|
+
if (typeof options.days !== 'undefined' && !deprecationEmittedForDays) {
|
|
157
|
+
process.emitWarning(
|
|
158
|
+
'The days option for GuildBanManager#create() is deprecated. Use the deleteMessageSeconds option instead.',
|
|
159
|
+
'DeprecationWarning',
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
deprecationEmittedForDays = true;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
await this.client.api
|
|
166
|
+
.guilds(this.guild.id)
|
|
167
|
+
.bans(id)
|
|
168
|
+
.put({
|
|
169
|
+
data: {
|
|
170
|
+
delete_message_seconds:
|
|
171
|
+
typeof options.deleteMessageSeconds !== 'undefined'
|
|
172
|
+
? options.deleteMessageSeconds
|
|
173
|
+
: (options.days ?? 0) * 24 * 60 * 60,
|
|
174
|
+
},
|
|
175
|
+
reason: options.reason,
|
|
176
|
+
});
|
|
177
|
+
if (user instanceof GuildMember) return user;
|
|
178
|
+
const _user = this.client.users.cache.get(id);
|
|
179
|
+
if (_user) {
|
|
180
|
+
return this.guild.members.resolve(_user) ?? _user;
|
|
181
|
+
}
|
|
182
|
+
return id;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Unbans a user from the guild.
|
|
187
|
+
* @param {UserResolvable} user The user to unban
|
|
188
|
+
* @param {string} [reason] Reason for unbanning user
|
|
189
|
+
* @returns {Promise<?User>}
|
|
190
|
+
* @example
|
|
191
|
+
* // Unban a user by id (or with a user/guild member object)
|
|
192
|
+
* guild.bans.remove('84484653687267328')
|
|
193
|
+
* .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`))
|
|
194
|
+
* .catch(console.error);
|
|
195
|
+
*/
|
|
196
|
+
async remove(user, reason) {
|
|
197
|
+
const id = this.client.users.resolveId(user);
|
|
198
|
+
if (!id) throw new Error('BAN_RESOLVE_ID');
|
|
199
|
+
await this.client.api.guilds(this.guild.id).bans(id).delete({ reason });
|
|
200
|
+
return this.client.users.resolve(user);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Options used for bulk banning users from a guild.
|
|
205
|
+
* @typedef {Object} BulkBanOptions
|
|
206
|
+
* @property {number} [deleteMessageSeconds] Number of seconds of messages to delete,
|
|
207
|
+
* must be between 0 and 604800 (7 days), inclusive
|
|
208
|
+
* @property {string} [reason] The reason for the bans
|
|
209
|
+
*/
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Result of bulk banning users from a guild.
|
|
213
|
+
* @typedef {Object} BulkBanResult
|
|
214
|
+
* @property {Snowflake[]} bannedUsers IDs of the banned users
|
|
215
|
+
* @property {Snowflake[]} failedUsers IDs of the users that could not be banned or were already banned
|
|
216
|
+
*/
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Bulk ban users from a guild, and optionally delete previous messages sent by them.
|
|
220
|
+
* @param {Collection<Snowflake, UserResolvable>|UserResolvable[]} users The users to ban
|
|
221
|
+
* @param {BulkBanOptions} [options] The options for bulk banning users
|
|
222
|
+
* @returns {Promise<BulkBanResult>} Returns an object with `bannedUsers` key containing the IDs of the banned users
|
|
223
|
+
* and the key `failedUsers` with the IDs that could not be banned or were already banned.
|
|
224
|
+
* @example
|
|
225
|
+
* // Bulk ban users by ids (or with user/guild member objects) and delete all their messages from the past 7 days
|
|
226
|
+
* guild.bans.bulkCreate(['84484653687267328'], { deleteMessageSeconds: 7 * 24 * 60 * 60 })
|
|
227
|
+
* .then(result => {
|
|
228
|
+
* console.log(`Banned ${result.bannedUsers.length} users, failed to ban ${result.failedUsers.length} users.`)
|
|
229
|
+
* })
|
|
230
|
+
* .catch(console.error);
|
|
231
|
+
* @deprecated This method will not be usable until an effective MFA implementation is in place.
|
|
232
|
+
*/
|
|
233
|
+
async bulkCreate(users, options = {}) {
|
|
234
|
+
if (!users || !(Array.isArray(users) || users instanceof Collection)) {
|
|
235
|
+
throw new TypeError('INVALID_TYPE', 'users', 'Array or Collection of UserResolvable', true);
|
|
236
|
+
}
|
|
237
|
+
if (typeof options !== 'object') throw new TypeError('INVALID_TYPE', 'options', 'object', true);
|
|
238
|
+
|
|
239
|
+
const userIds = users.map(user => this.client.users.resolveId(user));
|
|
240
|
+
if (userIds.length === 0) throw new Error('BULK_BAN_USERS_OPTION_EMPTY');
|
|
241
|
+
|
|
242
|
+
const result = await this.client.api.guilds(this.guild.id)['bulk-ban'].post({
|
|
243
|
+
data: { delete_message_days: options.deleteMessageSeconds, user_ids: userIds },
|
|
244
|
+
reason: options.reason,
|
|
245
|
+
});
|
|
246
|
+
return { bannedUsers: result.banned_users, failedUsers: result.failed_users };
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
module.exports = GuildBanManager;
|