djs-selfbot-v13 3.1.8 → 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/LICENSE +1 -1
- package/README.md +48 -37
- package/package.json +44 -26
- package/src/WebSocket.js +39 -39
- package/src/client/BaseClient.js +86 -86
- package/src/client/Client.js +934 -765
- 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 -33
- package/src/client/actions/GuildMemberUpdate.js +44 -44
- 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 -53
- 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 -20
- 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 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
- 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 -80
- 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 -81
- package/src/errors/DJSError.js +61 -61
- package/src/errors/Messages.js +217 -182
- package/src/errors/index.js +4 -4
- package/src/index.js +172 -158
- 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 -204
- package/src/managers/GuildChannelManager.js +488 -504
- 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 -593
- 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 -154
- 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 -88
- package/src/structures/ClientUser.js +479 -450
- 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 -1236
- 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 -316
- package/src/structures/MessageReaction.js +181 -171
- package/src/structures/MessageSelectMenu.js +141 -140
- package/src/structures/Modal.js +161 -174
- 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 -443
- 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 -509
- 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 -721
- 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 -1760
- 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 -342
- package/src/util/Permissions.js +202 -192
- 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 -803
- package/typings/enums.d.ts +439 -291
- package/typings/index.d.ts +8247 -7390
- package/typings/rawDataTypes.d.ts +403 -342
- package/src/structures/RichPresence.js +0 -702
|
@@ -1,372 +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/
|
|
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();
|
|
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;
|
|
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;
|