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,186 +1,186 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
const process = require('node:process');
|
|
3
|
-
|
|
4
|
-
const { Collection } = require('@discordjs/collection');
|
|
5
|
-
const CachedManager = require('./CachedManager');
|
|
6
|
-
const { TypeError } = require('../errors');
|
|
7
|
-
const ThreadMember = require('../structures/ThreadMember');
|
|
8
|
-
|
|
9
|
-
let deprecationEmittedForPassingBoolean = false;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Manages API methods for GuildMembers and stores their cache.
|
|
13
|
-
* @extends {CachedManager}
|
|
14
|
-
*/
|
|
15
|
-
class ThreadMemberManager extends CachedManager {
|
|
16
|
-
constructor(thread, iterable) {
|
|
17
|
-
super(thread.client, ThreadMember, iterable);
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* The thread this manager belongs to
|
|
21
|
-
* @type {ThreadChannel}
|
|
22
|
-
*/
|
|
23
|
-
this.thread = thread;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* The cache of this Manager
|
|
28
|
-
* @type {Collection<Snowflake, ThreadMember>}
|
|
29
|
-
* @name ThreadMemberManager#cache
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
_add(data, cache = true) {
|
|
33
|
-
const existing = this.cache.get(data.user_id);
|
|
34
|
-
if (cache) existing?._patch(data, { cache });
|
|
35
|
-
if (existing) return existing;
|
|
36
|
-
|
|
37
|
-
const member = new ThreadMember(this.thread, data, { cache });
|
|
38
|
-
if (cache) this.cache.set(data.user_id, member);
|
|
39
|
-
return member;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Fetches the client user as a ThreadMember of the thread.
|
|
44
|
-
* @param {BaseFetchOptions} [options] The options for fetching the member
|
|
45
|
-
* @returns {Promise<ThreadMember>}
|
|
46
|
-
*/
|
|
47
|
-
fetchMe(options) {
|
|
48
|
-
return this.fetch(this.client.user.id, options);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* The client user as a ThreadMember of this ThreadChannel
|
|
53
|
-
* @type {?ThreadMember}
|
|
54
|
-
* @readonly
|
|
55
|
-
*/
|
|
56
|
-
get me() {
|
|
57
|
-
return this.
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Data that resolves to give a ThreadMember object. This can be:
|
|
62
|
-
* * A ThreadMember object
|
|
63
|
-
* * A User resolvable
|
|
64
|
-
* @typedef {ThreadMember|UserResolvable} ThreadMemberResolvable
|
|
65
|
-
*/
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} object.
|
|
69
|
-
* @param {ThreadMemberResolvable} member The user that is part of the thread
|
|
70
|
-
* @returns {?GuildMember}
|
|
71
|
-
*/
|
|
72
|
-
resolve(member) {
|
|
73
|
-
const memberResolvable = super.resolve(member);
|
|
74
|
-
if (memberResolvable) return memberResolvable;
|
|
75
|
-
const
|
|
76
|
-
if (
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} id string.
|
|
82
|
-
* @param {ThreadMemberResolvable} member The user that is part of the guild
|
|
83
|
-
* @returns {?Snowflake}
|
|
84
|
-
*/
|
|
85
|
-
resolveId(member) {
|
|
86
|
-
const memberResolvable = super.resolveId(member);
|
|
87
|
-
if (memberResolvable) return memberResolvable;
|
|
88
|
-
const userResolvable = this.client.users.resolveId(member);
|
|
89
|
-
return this.cache.has(userResolvable) ? userResolvable : null;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Adds a member to the thread.
|
|
94
|
-
* @param {UserResolvable|'@me'} member The member to add
|
|
95
|
-
* @param {string} [reason] The reason for adding this member
|
|
96
|
-
* @returns {Promise<Snowflake>}
|
|
97
|
-
*/
|
|
98
|
-
async add(member, reason) {
|
|
99
|
-
const id = member === '@me' ? member : this.client.users.resolveId(member);
|
|
100
|
-
if (!id) throw new TypeError('INVALID_TYPE', 'member', 'UserResolvable');
|
|
101
|
-
await this.client.api.channels(this.thread.id, 'thread-members', id).put({ reason });
|
|
102
|
-
return id;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Remove a user from the thread.
|
|
107
|
-
* @param {Snowflake|'@me'} id The id of the member to remove
|
|
108
|
-
* @param {string} [reason] The reason for removing this member from the thread
|
|
109
|
-
* @returns {Promise<Snowflake>}
|
|
110
|
-
*/
|
|
111
|
-
async remove(id, reason) {
|
|
112
|
-
await this.client.api.channels(this.thread.id, 'thread-members', id).delete({ reason });
|
|
113
|
-
return id;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
async _fetchOne(memberId, { cache, force = false, withMember }) {
|
|
117
|
-
if (!force) {
|
|
118
|
-
const existing = this.cache.get(memberId);
|
|
119
|
-
if (existing) return existing;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const data = await this.client.api.channels(this.thread.id, 'thread-members', memberId).get({
|
|
123
|
-
query: { with_member: withMember },
|
|
124
|
-
});
|
|
125
|
-
return this._add(data, cache);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
async _fetchMany({ cache, limit, after, withMember } = {}) {
|
|
129
|
-
const raw = await this.client.api.channels(this.thread.id, 'thread-members').get({
|
|
130
|
-
query: { with_member: withMember, limit, after },
|
|
131
|
-
});
|
|
132
|
-
return raw.reduce((col, member) => col.set(member.user_id, this._add(member, cache)), new Collection());
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Options used to fetch a thread member.
|
|
137
|
-
* @typedef {BaseFetchOptions} FetchThreadMemberOptions
|
|
138
|
-
* @property {boolean} [withMember] Whether to also return the guild member associated with this thread member
|
|
139
|
-
*/
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Options used to fetch multiple thread members with guild member data.
|
|
143
|
-
* <info>With `withMember` set to `true`, pagination is enabled.</info>
|
|
144
|
-
* @typedef {Object} FetchThreadMembersWithGuildMemberDataOptions
|
|
145
|
-
* @property {true} withMember Whether to also return the guild member data
|
|
146
|
-
* @property {Snowflake} [after] Consider only thread members after this id
|
|
147
|
-
* @property {number} [limit] The maximum number of thread members to return
|
|
148
|
-
* @property {boolean} [cache] Whether to cache the fetched thread members and guild members
|
|
149
|
-
*/
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Options used to fetch multiple thread members without guild member data.
|
|
153
|
-
* @typedef {Object} FetchThreadMembersWithoutGuildMemberDataOptions
|
|
154
|
-
* @property {false} [withMember] Whether to also return the guild member data
|
|
155
|
-
* @property {boolean} [cache] Whether to cache the fetched thread members
|
|
156
|
-
*/
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Options used to fetch multiple thread members.
|
|
160
|
-
* @typedef {FetchThreadMembersWithGuildMemberDataOptions|
|
|
161
|
-
* FetchThreadMembersWithoutGuildMemberDataOptions} FetchThreadMembersOptions
|
|
162
|
-
*/
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Fetches member(s) for the thread from Discord.
|
|
166
|
-
* @param {UserResolvable|FetchThreadMembersOptions|boolean} [member] The member to fetch. If `undefined`, all members
|
|
167
|
-
* in the thread are fetched, and will be cached based on `options.cache`.
|
|
168
|
-
* @param {FetchThreadMemberOptions|FetchThreadMembersOptions} [options] Additional options for this fetch
|
|
169
|
-
* @returns {Promise<ThreadMember|Collection<Snowflake, ThreadMember>>}
|
|
170
|
-
*/
|
|
171
|
-
fetch(member, options = { cache: true, force: false }) {
|
|
172
|
-
if (typeof member === 'boolean' && !deprecationEmittedForPassingBoolean) {
|
|
173
|
-
process.emitWarning(
|
|
174
|
-
'Passing boolean to member option is deprecated, use cache property instead.',
|
|
175
|
-
'DeprecationWarning',
|
|
176
|
-
);
|
|
177
|
-
deprecationEmittedForPassingBoolean = true;
|
|
178
|
-
}
|
|
179
|
-
const id = this.resolveId(member);
|
|
180
|
-
return id
|
|
181
|
-
? this._fetchOne(id, options)
|
|
182
|
-
: this._fetchMany(typeof member === 'boolean' ? { ...options, cache: member } : options);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
module.exports = ThreadMemberManager;
|
|
1
|
+
'use strict';
|
|
2
|
+
const process = require('node:process');
|
|
3
|
+
|
|
4
|
+
const { Collection } = require('@discordjs/collection');
|
|
5
|
+
const CachedManager = require('./CachedManager');
|
|
6
|
+
const { TypeError } = require('../errors');
|
|
7
|
+
const ThreadMember = require('../structures/ThreadMember');
|
|
8
|
+
|
|
9
|
+
let deprecationEmittedForPassingBoolean = false;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Manages API methods for GuildMembers and stores their cache.
|
|
13
|
+
* @extends {CachedManager}
|
|
14
|
+
*/
|
|
15
|
+
class ThreadMemberManager extends CachedManager {
|
|
16
|
+
constructor(thread, iterable) {
|
|
17
|
+
super(thread.client, ThreadMember, iterable);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The thread this manager belongs to
|
|
21
|
+
* @type {ThreadChannel}
|
|
22
|
+
*/
|
|
23
|
+
this.thread = thread;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The cache of this Manager
|
|
28
|
+
* @type {Collection<Snowflake, ThreadMember>}
|
|
29
|
+
* @name ThreadMemberManager#cache
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
_add(data, cache = true) {
|
|
33
|
+
const existing = this.cache.get(data.user_id);
|
|
34
|
+
if (cache) existing?._patch(data, { cache });
|
|
35
|
+
if (existing) return existing;
|
|
36
|
+
|
|
37
|
+
const member = new ThreadMember(this.thread, data, { cache });
|
|
38
|
+
if (cache) this.cache.set(data.user_id, member);
|
|
39
|
+
return member;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Fetches the client user as a ThreadMember of the thread.
|
|
44
|
+
* @param {BaseFetchOptions} [options] The options for fetching the member
|
|
45
|
+
* @returns {Promise<ThreadMember>}
|
|
46
|
+
*/
|
|
47
|
+
fetchMe(options) {
|
|
48
|
+
return this.fetch(this.client.user.id, options);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The client user as a ThreadMember of this ThreadChannel
|
|
53
|
+
* @type {?ThreadMember}
|
|
54
|
+
* @readonly
|
|
55
|
+
*/
|
|
56
|
+
get me() {
|
|
57
|
+
return this.cache.get(this.client.user.id) ?? null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Data that resolves to give a ThreadMember object. This can be:
|
|
62
|
+
* * A ThreadMember object
|
|
63
|
+
* * A User resolvable
|
|
64
|
+
* @typedef {ThreadMember|UserResolvable} ThreadMemberResolvable
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} object.
|
|
69
|
+
* @param {ThreadMemberResolvable} member The user that is part of the thread
|
|
70
|
+
* @returns {?GuildMember}
|
|
71
|
+
*/
|
|
72
|
+
resolve(member) {
|
|
73
|
+
const memberResolvable = super.resolve(member);
|
|
74
|
+
if (memberResolvable) return memberResolvable;
|
|
75
|
+
const userId = this.client.users.resolveId(member);
|
|
76
|
+
if (userId) return this.cache.get(userId) ?? null;
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Resolves a {@link ThreadMemberResolvable} to a {@link ThreadMember} id string.
|
|
82
|
+
* @param {ThreadMemberResolvable} member The user that is part of the guild
|
|
83
|
+
* @returns {?Snowflake}
|
|
84
|
+
*/
|
|
85
|
+
resolveId(member) {
|
|
86
|
+
const memberResolvable = super.resolveId(member);
|
|
87
|
+
if (memberResolvable) return memberResolvable;
|
|
88
|
+
const userResolvable = this.client.users.resolveId(member);
|
|
89
|
+
return this.cache.has(userResolvable) ? userResolvable : null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Adds a member to the thread.
|
|
94
|
+
* @param {UserResolvable|'@me'} member The member to add
|
|
95
|
+
* @param {string} [reason] The reason for adding this member
|
|
96
|
+
* @returns {Promise<Snowflake>}
|
|
97
|
+
*/
|
|
98
|
+
async add(member, reason) {
|
|
99
|
+
const id = member === '@me' ? member : this.client.users.resolveId(member);
|
|
100
|
+
if (!id) throw new TypeError('INVALID_TYPE', 'member', 'UserResolvable');
|
|
101
|
+
await this.client.api.channels(this.thread.id, 'thread-members', id).put({ reason });
|
|
102
|
+
return id;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Remove a user from the thread.
|
|
107
|
+
* @param {Snowflake|'@me'} id The id of the member to remove
|
|
108
|
+
* @param {string} [reason] The reason for removing this member from the thread
|
|
109
|
+
* @returns {Promise<Snowflake>}
|
|
110
|
+
*/
|
|
111
|
+
async remove(id, reason) {
|
|
112
|
+
await this.client.api.channels(this.thread.id, 'thread-members', id).delete({ reason });
|
|
113
|
+
return id;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async _fetchOne(memberId, { cache, force = false, withMember }) {
|
|
117
|
+
if (!force) {
|
|
118
|
+
const existing = this.cache.get(memberId);
|
|
119
|
+
if (existing) return existing;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const data = await this.client.api.channels(this.thread.id, 'thread-members', memberId).get({
|
|
123
|
+
query: { with_member: withMember },
|
|
124
|
+
});
|
|
125
|
+
return this._add(data, cache);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
async _fetchMany({ cache, limit, after, withMember } = {}) {
|
|
129
|
+
const raw = await this.client.api.channels(this.thread.id, 'thread-members').get({
|
|
130
|
+
query: { with_member: withMember, limit, after },
|
|
131
|
+
});
|
|
132
|
+
return raw.reduce((col, member) => col.set(member.user_id, this._add(member, cache)), new Collection());
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Options used to fetch a thread member.
|
|
137
|
+
* @typedef {BaseFetchOptions} FetchThreadMemberOptions
|
|
138
|
+
* @property {boolean} [withMember] Whether to also return the guild member associated with this thread member
|
|
139
|
+
*/
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Options used to fetch multiple thread members with guild member data.
|
|
143
|
+
* <info>With `withMember` set to `true`, pagination is enabled.</info>
|
|
144
|
+
* @typedef {Object} FetchThreadMembersWithGuildMemberDataOptions
|
|
145
|
+
* @property {true} withMember Whether to also return the guild member data
|
|
146
|
+
* @property {Snowflake} [after] Consider only thread members after this id
|
|
147
|
+
* @property {number} [limit] The maximum number of thread members to return
|
|
148
|
+
* @property {boolean} [cache] Whether to cache the fetched thread members and guild members
|
|
149
|
+
*/
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Options used to fetch multiple thread members without guild member data.
|
|
153
|
+
* @typedef {Object} FetchThreadMembersWithoutGuildMemberDataOptions
|
|
154
|
+
* @property {false} [withMember] Whether to also return the guild member data
|
|
155
|
+
* @property {boolean} [cache] Whether to cache the fetched thread members
|
|
156
|
+
*/
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Options used to fetch multiple thread members.
|
|
160
|
+
* @typedef {FetchThreadMembersWithGuildMemberDataOptions|
|
|
161
|
+
* FetchThreadMembersWithoutGuildMemberDataOptions} FetchThreadMembersOptions
|
|
162
|
+
*/
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Fetches member(s) for the thread from Discord.
|
|
166
|
+
* @param {UserResolvable|FetchThreadMembersOptions|boolean} [member] The member to fetch. If `undefined`, all members
|
|
167
|
+
* in the thread are fetched, and will be cached based on `options.cache`.
|
|
168
|
+
* @param {FetchThreadMemberOptions|FetchThreadMembersOptions} [options] Additional options for this fetch
|
|
169
|
+
* @returns {Promise<ThreadMember|Collection<Snowflake, ThreadMember>>}
|
|
170
|
+
*/
|
|
171
|
+
fetch(member, options = { cache: true, force: false }) {
|
|
172
|
+
if (typeof member === 'boolean' && !deprecationEmittedForPassingBoolean) {
|
|
173
|
+
process.emitWarning(
|
|
174
|
+
'Passing boolean to member option is deprecated, use cache property instead.',
|
|
175
|
+
'DeprecationWarning',
|
|
176
|
+
);
|
|
177
|
+
deprecationEmittedForPassingBoolean = true;
|
|
178
|
+
}
|
|
179
|
+
const id = this.resolveId(member);
|
|
180
|
+
return id
|
|
181
|
+
? this._fetchOne(id, options)
|
|
182
|
+
: this._fetchMany(typeof member === 'boolean' ? { ...options, cache: member } : options);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
module.exports = ThreadMemberManager;
|
|
@@ -1,146 +1,136 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const CachedManager = require('./CachedManager');
|
|
4
|
-
const { Error } = require('../errors');
|
|
5
|
-
const { GuildMember } = require('../structures/GuildMember');
|
|
6
|
-
const { Message } = require('../structures/Message');
|
|
7
|
-
const ThreadMember = require('../structures/ThreadMember');
|
|
8
|
-
const User = require('../structures/User');
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Manages API methods for users and stores their cache.
|
|
12
|
-
* @extends {CachedManager}
|
|
13
|
-
*/
|
|
14
|
-
class UserManager extends CachedManager {
|
|
15
|
-
constructor(client, iterable) {
|
|
16
|
-
super(client, User, iterable);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* The cache of this manager
|
|
21
|
-
* @type {Collection<Snowflake, User>}
|
|
22
|
-
* @name UserManager#cache
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Data that resolves to give a User object. This can be:
|
|
27
|
-
* * A User object
|
|
28
|
-
* * A Snowflake
|
|
29
|
-
* * A Message object (resolves to the message author)
|
|
30
|
-
* * A GuildMember object
|
|
31
|
-
* * A ThreadMember object
|
|
32
|
-
* @typedef {User|Snowflake|Message|GuildMember|ThreadMember} UserResolvable
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* The DM between the client's user and a user
|
|
37
|
-
* @param {Snowflake} userId The user id
|
|
38
|
-
* @returns {?DMChannel}
|
|
39
|
-
* @private
|
|
40
|
-
*/
|
|
41
|
-
dmChannel(userId) {
|
|
42
|
-
return this.client.channels.cache.find(c => c.type === 'DM' && c.recipient.id === userId) ?? null;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Creates a {@link DMChannel} between the client and a user.
|
|
47
|
-
* @param {UserResolvable} user The UserResolvable to identify
|
|
48
|
-
* @param {BaseFetchOptions} [options] Additional options for this fetch
|
|
49
|
-
* @returns {Promise<DMChannel>}
|
|
50
|
-
*/
|
|
51
|
-
async createDM(user, { cache = true, force = false } = {}) {
|
|
52
|
-
const id = this.resolveId(user);
|
|
53
|
-
|
|
54
|
-
if (!force) {
|
|
55
|
-
const dmChannel = this.dmChannel(id);
|
|
56
|
-
if (dmChannel && !dmChannel.partial) return dmChannel;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const data = await this.client.api.users['@me'].channels.post({
|
|
60
|
-
data: {
|
|
61
|
-
recipients: [id],
|
|
62
|
-
},
|
|
63
|
-
DiscordContext: {},
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
const dm_channel = await this.client.channels._add(data, null, { cache });
|
|
67
|
-
dm_channel.sync();
|
|
68
|
-
return dm_channel;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Deletes a {@link DMChannel} (if one exists) between the client and a user. Resolves with the channel if successful.
|
|
73
|
-
* @param {UserResolvable} user The UserResolvable to identify
|
|
74
|
-
* @returns {Promise<DMChannel>}
|
|
75
|
-
*/
|
|
76
|
-
async deleteDM(user) {
|
|
77
|
-
const id = this.resolveId(user);
|
|
78
|
-
const dmChannel = this.dmChannel(id);
|
|
79
|
-
if (!dmChannel) throw new Error('USER_NO_DM_CHANNEL');
|
|
80
|
-
await this.client.api.channels(dmChannel.id).delete();
|
|
81
|
-
this.client.channels._remove(dmChannel.id);
|
|
82
|
-
return dmChannel;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Obtains a user from Discord, or the user cache if it's already available.
|
|
87
|
-
* @param {UserResolvable} user The user to fetch
|
|
88
|
-
* @param {BaseFetchOptions} [options] Additional options for this fetch
|
|
89
|
-
* @returns {Promise<User>}
|
|
90
|
-
*/
|
|
91
|
-
async fetch(user, { cache = true, force = false } = {}) {
|
|
92
|
-
const id = this.resolveId(user);
|
|
93
|
-
if (!force) {
|
|
94
|
-
const existing = this.cache.get(id);
|
|
95
|
-
if (existing && !existing.partial) return existing;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const data = await this.client.api.users(id).get();
|
|
99
|
-
return this._add(data, cache);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
*
|
|
104
|
-
* @param {UserResolvable} user The UserResolvable to identify
|
|
105
|
-
* @param {
|
|
106
|
-
* @returns {Promise<
|
|
107
|
-
*/
|
|
108
|
-
async
|
|
109
|
-
return (await this.
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
*
|
|
114
|
-
* @param {UserResolvable} user The UserResolvable to identify
|
|
115
|
-
* @
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
* @
|
|
125
|
-
* @
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (user instanceof
|
|
130
|
-
return
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
*/
|
|
138
|
-
resolveId(user) {
|
|
139
|
-
if (user instanceof ThreadMember) return user.id;
|
|
140
|
-
if (user instanceof GuildMember) return user.user.id;
|
|
141
|
-
if (user instanceof Message) return user.author.id;
|
|
142
|
-
return super.resolveId(user);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
module.exports = UserManager;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const CachedManager = require('./CachedManager');
|
|
4
|
+
const { Error } = require('../errors');
|
|
5
|
+
const { GuildMember } = require('../structures/GuildMember');
|
|
6
|
+
const { Message } = require('../structures/Message');
|
|
7
|
+
const ThreadMember = require('../structures/ThreadMember');
|
|
8
|
+
const User = require('../structures/User');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Manages API methods for users and stores their cache.
|
|
12
|
+
* @extends {CachedManager}
|
|
13
|
+
*/
|
|
14
|
+
class UserManager extends CachedManager {
|
|
15
|
+
constructor(client, iterable) {
|
|
16
|
+
super(client, User, iterable);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The cache of this manager
|
|
21
|
+
* @type {Collection<Snowflake, User>}
|
|
22
|
+
* @name UserManager#cache
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Data that resolves to give a User object. This can be:
|
|
27
|
+
* * A User object
|
|
28
|
+
* * A Snowflake
|
|
29
|
+
* * A Message object (resolves to the message author)
|
|
30
|
+
* * A GuildMember object
|
|
31
|
+
* * A ThreadMember object
|
|
32
|
+
* @typedef {User|Snowflake|Message|GuildMember|ThreadMember} UserResolvable
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The DM between the client's user and a user
|
|
37
|
+
* @param {Snowflake} userId The user id
|
|
38
|
+
* @returns {?DMChannel}
|
|
39
|
+
* @private
|
|
40
|
+
*/
|
|
41
|
+
dmChannel(userId) {
|
|
42
|
+
return this.client.channels.cache.find(c => c.type === 'DM' && c.recipient.id === userId) ?? null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Creates a {@link DMChannel} between the client and a user.
|
|
47
|
+
* @param {UserResolvable} user The UserResolvable to identify
|
|
48
|
+
* @param {BaseFetchOptions} [options] Additional options for this fetch
|
|
49
|
+
* @returns {Promise<DMChannel>}
|
|
50
|
+
*/
|
|
51
|
+
async createDM(user, { cache = true, force = false } = {}) {
|
|
52
|
+
const id = this.resolveId(user);
|
|
53
|
+
|
|
54
|
+
if (!force) {
|
|
55
|
+
const dmChannel = this.dmChannel(id);
|
|
56
|
+
if (dmChannel && !dmChannel.partial) return dmChannel;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const data = await this.client.api.users['@me'].channels.post({
|
|
60
|
+
data: {
|
|
61
|
+
recipients: [id],
|
|
62
|
+
},
|
|
63
|
+
DiscordContext: {},
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const dm_channel = await this.client.channels._add(data, null, { cache });
|
|
67
|
+
dm_channel.sync();
|
|
68
|
+
return dm_channel;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Deletes a {@link DMChannel} (if one exists) between the client and a user. Resolves with the channel if successful.
|
|
73
|
+
* @param {UserResolvable} user The UserResolvable to identify
|
|
74
|
+
* @returns {Promise<DMChannel>}
|
|
75
|
+
*/
|
|
76
|
+
async deleteDM(user) {
|
|
77
|
+
const id = this.resolveId(user);
|
|
78
|
+
const dmChannel = this.dmChannel(id);
|
|
79
|
+
if (!dmChannel) throw new Error('USER_NO_DM_CHANNEL');
|
|
80
|
+
await this.client.api.channels(dmChannel.id).delete();
|
|
81
|
+
this.client.channels._remove(dmChannel.id);
|
|
82
|
+
return dmChannel;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Obtains a user from Discord, or the user cache if it's already available.
|
|
87
|
+
* @param {UserResolvable} user The user to fetch
|
|
88
|
+
* @param {BaseFetchOptions} [options] Additional options for this fetch
|
|
89
|
+
* @returns {Promise<User>}
|
|
90
|
+
*/
|
|
91
|
+
async fetch(user, { cache = true, force = false } = {}) {
|
|
92
|
+
const id = this.resolveId(user);
|
|
93
|
+
if (!force) {
|
|
94
|
+
const existing = this.cache.get(id);
|
|
95
|
+
if (existing && !existing.partial) return existing;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const data = await this.client.api.users(id).get();
|
|
99
|
+
return this._add(data, cache);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Sends a message to a user.
|
|
104
|
+
* @param {UserResolvable} user The UserResolvable to identify
|
|
105
|
+
* @param {string|MessagePayload|MessageOptions} options The options to provide
|
|
106
|
+
* @returns {Promise<Message>}
|
|
107
|
+
*/
|
|
108
|
+
async send(user, options) {
|
|
109
|
+
return (await this.createDM(user)).send(options);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Resolves a {@link UserResolvable} to a {@link User} object.
|
|
114
|
+
* @param {UserResolvable} user The UserResolvable to identify
|
|
115
|
+
* @returns {?User}
|
|
116
|
+
*/
|
|
117
|
+
resolve(user) {
|
|
118
|
+
if (user instanceof GuildMember || user instanceof ThreadMember) return user.user;
|
|
119
|
+
if (user instanceof Message) return user.author;
|
|
120
|
+
return super.resolve(user);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Resolves a {@link UserResolvable} to a {@link User} id.
|
|
125
|
+
* @param {UserResolvable} user The UserResolvable to identify
|
|
126
|
+
* @returns {?Snowflake}
|
|
127
|
+
*/
|
|
128
|
+
resolveId(user) {
|
|
129
|
+
if (user instanceof ThreadMember) return user.id;
|
|
130
|
+
if (user instanceof GuildMember) return user.user.id;
|
|
131
|
+
if (user instanceof Message) return user.author.id;
|
|
132
|
+
return super.resolveId(user);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
module.exports = UserManager;
|