discord-selfbot-v13.js 0.0.1-security → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of discord-selfbot-v13.js might be problematic. Click here for more details.
- package/LICENSE +674 -0
- package/README.md +119 -5
- package/package.json +101 -6
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +87 -0
- package/src/client/Client.js +1154 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +115 -0
- package/src/client/actions/ActionsManager.js +72 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +26 -0
- package/src/client/actions/AutoModerationRuleCreate.js +27 -0
- package/src/client/actions/AutoModerationRuleDelete.js +31 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +34 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +65 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +21 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +33 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +31 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +21 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InteractionCreate.js +115 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +50 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +46 -0
- package/src/client/actions/MessageReactionAdd.js +56 -0
- package/src/client/actions/MessageReactionRemove.js +45 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +45 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +33 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +32 -0
- package/src/client/actions/ThreadListSync.js +59 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +34 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +35 -0
- package/src/client/actions/VoiceStateUpdate.js +57 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +51 -0
- package/src/client/websocket/WebSocketManager.js +412 -0
- package/src/client/websocket/WebSocketShard.js +908 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
- package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
- package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +46 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
- package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +11 -0
- package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +172 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +15 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +18 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +12 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +9 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +86 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +227 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +190 -0
- package/src/main.js +42 -0
- package/src/managers/ApplicationCommandManager.js +267 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
- package/src/managers/AutoModerationRuleManager.js +296 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/BillingManager.js +66 -0
- package/src/managers/CachedManager.js +71 -0
- package/src/managers/ChannelManager.js +139 -0
- package/src/managers/ClientUserSettingManager.js +490 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/DeveloperPortalManager.js +104 -0
- package/src/managers/GuildApplicationCommandManager.js +28 -0
- package/src/managers/GuildBanManager.js +204 -0
- package/src/managers/GuildChannelManager.js +502 -0
- package/src/managers/GuildEmojiManager.js +171 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildFolderManager.js +24 -0
- package/src/managers/GuildForumThreadManager.js +114 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +304 -0
- package/src/managers/GuildMemberManager.js +724 -0
- package/src/managers/GuildMemberRoleManager.js +191 -0
- package/src/managers/GuildScheduledEventManager.js +296 -0
- package/src/managers/GuildSettingManager.js +148 -0
- package/src/managers/GuildStickerManager.js +179 -0
- package/src/managers/GuildTextThreadManager.js +98 -0
- package/src/managers/InteractionManager.js +39 -0
- package/src/managers/MessageManager.js +393 -0
- package/src/managers/PermissionOverwriteManager.js +166 -0
- package/src/managers/PresenceManager.js +58 -0
- package/src/managers/ReactionManager.js +67 -0
- package/src/managers/ReactionUserManager.js +71 -0
- package/src/managers/RelationshipManager.js +258 -0
- package/src/managers/RoleManager.js +352 -0
- package/src/managers/SessionManager.js +57 -0
- package/src/managers/StageInstanceManager.js +162 -0
- package/src/managers/ThreadManager.js +207 -0
- package/src/managers/ThreadMemberManager.js +186 -0
- package/src/managers/UserManager.js +150 -0
- package/src/managers/VoiceStateManager.js +37 -0
- package/src/rest/APIRequest.js +136 -0
- package/src/rest/APIRouter.js +53 -0
- package/src/rest/CaptchaSolver.js +78 -0
- package/src/rest/DiscordAPIError.js +103 -0
- package/src/rest/HTTPError.js +62 -0
- package/src/rest/RESTManager.js +81 -0
- package/src/rest/RateLimitError.js +55 -0
- package/src/rest/RequestHandler.js +446 -0
- package/src/sharding/Shard.js +443 -0
- package/src/sharding/ShardClientUtil.js +275 -0
- package/src/sharding/ShardingManager.js +318 -0
- package/src/structures/AnonymousGuild.js +98 -0
- package/src/structures/ApplicationCommand.js +1028 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
- package/src/structures/AutoModerationActionExecution.js +89 -0
- package/src/structures/AutoModerationRule.js +294 -0
- package/src/structures/AutocompleteInteraction.js +106 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseCommandInteraction.js +211 -0
- package/src/structures/BaseGuild.js +116 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +193 -0
- package/src/structures/BaseGuildVoiceChannel.js +243 -0
- package/src/structures/BaseMessageComponent.js +114 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/Call.js +58 -0
- package/src/structures/CategoryChannel.js +83 -0
- package/src/structures/Channel.js +271 -0
- package/src/structures/ClientApplication.js +204 -0
- package/src/structures/ClientPresence.js +84 -0
- package/src/structures/ClientUser.js +624 -0
- package/src/structures/CommandInteraction.js +41 -0
- package/src/structures/CommandInteractionOptionResolver.js +276 -0
- package/src/structures/ContextMenuInteraction.js +65 -0
- package/src/structures/DMChannel.js +280 -0
- package/src/structures/DeveloperPortalApplication.js +520 -0
- package/src/structures/DirectoryChannel.js +20 -0
- package/src/structures/Emoji.js +148 -0
- package/src/structures/ForumChannel.js +271 -0
- package/src/structures/Guild.js +1744 -0
- package/src/structures/GuildAuditLogs.js +734 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildBoost.js +108 -0
- package/src/structures/GuildChannel.js +454 -0
- package/src/structures/GuildEmoji.js +161 -0
- package/src/structures/GuildFolder.js +75 -0
- package/src/structures/GuildMember.js +686 -0
- package/src/structures/GuildPreview.js +191 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +441 -0
- package/src/structures/GuildTemplate.js +236 -0
- package/src/structures/Integration.js +188 -0
- package/src/structures/IntegrationApplication.js +96 -0
- package/src/structures/Interaction.js +351 -0
- package/src/structures/InteractionCollector.js +248 -0
- package/src/structures/InteractionResponse.js +114 -0
- package/src/structures/InteractionWebhook.js +43 -0
- package/src/structures/Invite.js +375 -0
- package/src/structures/InviteGuild.js +23 -0
- package/src/structures/InviteStageInstance.js +86 -0
- package/src/structures/Message.js +1188 -0
- package/src/structures/MessageActionRow.js +103 -0
- package/src/structures/MessageAttachment.js +193 -0
- package/src/structures/MessageButton.js +231 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +120 -0
- package/src/structures/MessageContextMenuInteraction.js +20 -0
- package/src/structures/MessageEmbed.js +586 -0
- package/src/structures/MessageMentions.js +272 -0
- package/src/structures/MessagePayload.js +358 -0
- package/src/structures/MessageReaction.js +171 -0
- package/src/structures/MessageSelectMenu.js +391 -0
- package/src/structures/Modal.js +279 -0
- package/src/structures/ModalSubmitFieldsResolver.js +53 -0
- package/src/structures/ModalSubmitInteraction.js +119 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PartialGroupDMChannel.js +430 -0
- package/src/structures/PermissionOverwrites.js +196 -0
- package/src/structures/Presence.js +441 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/RichPresence.js +722 -0
- package/src/structures/Role.js +515 -0
- package/src/structures/SelectMenuInteraction.js +170 -0
- package/src/structures/Session.js +81 -0
- package/src/structures/StageChannel.js +104 -0
- package/src/structures/StageInstance.js +208 -0
- package/src/structures/Sticker.js +310 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StoreChannel.js +56 -0
- package/src/structures/Team.js +167 -0
- package/src/structures/TeamMember.js +71 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextInputComponent.js +201 -0
- package/src/structures/ThreadChannel.js +626 -0
- package/src/structures/ThreadMember.js +105 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/User.js +697 -0
- package/src/structures/UserContextMenuInteraction.js +29 -0
- package/src/structures/VoiceChannel.js +110 -0
- package/src/structures/VoiceRegion.js +53 -0
- package/src/structures/VoiceState.js +306 -0
- package/src/structures/WebEmbed.js +401 -0
- package/src/structures/Webhook.js +461 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +48 -0
- package/src/structures/Widget.js +87 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +190 -0
- package/src/structures/interfaces/Collector.js +300 -0
- package/src/structures/interfaces/InteractionResponses.js +313 -0
- package/src/structures/interfaces/TextBasedChannel.js +566 -0
- package/src/util/ActivityFlags.js +44 -0
- package/src/util/ApplicationFlags.js +74 -0
- package/src/util/BitField.js +170 -0
- package/src/util/ChannelFlags.js +45 -0
- package/src/util/Constants.js +1917 -0
- package/src/util/DataResolver.js +145 -0
- package/src/util/Formatters.js +214 -0
- package/src/util/GuildMemberFlags.js +43 -0
- package/src/util/Intents.js +74 -0
- package/src/util/LimitedCollection.js +131 -0
- package/src/util/MessageFlags.js +54 -0
- package/src/util/Options.js +360 -0
- package/src/util/Permissions.js +187 -0
- package/src/util/PremiumUsageFlags.js +31 -0
- package/src/util/PurchasedFlags.js +31 -0
- package/src/util/RemoteAuth.js +522 -0
- package/src/util/SnowflakeUtil.js +92 -0
- package/src/util/Sweepers.js +466 -0
- package/src/util/SystemChannelFlags.js +55 -0
- package/src/util/ThreadMemberFlags.js +30 -0
- package/src/util/UserFlags.js +104 -0
- package/src/util/Util.js +741 -0
- package/src/util/Voice.js +1456 -0
- package/src/util/arRPC/index.js +229 -0
- package/src/util/arRPC/process/detectable.json +1 -0
- package/src/util/arRPC/process/index.js +102 -0
- package/src/util/arRPC/process/native/index.js +5 -0
- package/src/util/arRPC/process/native/linux.js +37 -0
- package/src/util/arRPC/process/native/win32.js +25 -0
- package/src/util/arRPC/transports/ipc.js +281 -0
- package/src/util/arRPC/transports/websocket.js +128 -0
- package/typings/enums.d.ts +346 -0
- package/typings/index.d.ts +7725 -0
- package/typings/index.test-d.ts +0 -0
- package/typings/rawDataTypes.d.ts +283 -0
@@ -0,0 +1,441 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const Base = require('./Base');
|
4
|
+
const { Emoji } = require('./Emoji');
|
5
|
+
const { CustomStatus, SpotifyRPC, RichPresence } = require('./RichPresence');
|
6
|
+
const ActivityFlags = require('../util/ActivityFlags');
|
7
|
+
const { ActivityTypes } = require('../util/Constants');
|
8
|
+
const Util = require('../util/Util');
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Activity sent in a message.
|
12
|
+
* @typedef {Object} MessageActivity
|
13
|
+
* @property {string} [partyId] Id of the party represented in activity
|
14
|
+
* @property {MessageActivityType} type Type of activity sent
|
15
|
+
*/
|
16
|
+
|
17
|
+
/**
|
18
|
+
* @external MessageActivityType
|
19
|
+
* @see {@link https://discord-api-types.dev/api/discord-api-types-v9/enum/MessageActivityType}
|
20
|
+
*/
|
21
|
+
|
22
|
+
/**
|
23
|
+
* The status of this presence:
|
24
|
+
* * **`online`** - user is online
|
25
|
+
* * **`idle`** - user is AFK
|
26
|
+
* * **`offline`** - user is offline or invisible
|
27
|
+
* * **`dnd`** - user is in Do Not Disturb
|
28
|
+
* @typedef {string} PresenceStatus
|
29
|
+
*/
|
30
|
+
|
31
|
+
/**
|
32
|
+
* The status of this presence:
|
33
|
+
* * **`online`** - user is online
|
34
|
+
* * **`idle`** - user is AFK
|
35
|
+
* * **`dnd`** - user is in Do Not Disturb
|
36
|
+
* @typedef {string} ClientPresenceStatus
|
37
|
+
*/
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Represents a user's presence.
|
41
|
+
* @extends {Base}
|
42
|
+
*/
|
43
|
+
class Presence extends Base {
|
44
|
+
constructor(client, data = {}) {
|
45
|
+
super(client);
|
46
|
+
|
47
|
+
/**
|
48
|
+
* The presence's user id
|
49
|
+
* @type {Snowflake}
|
50
|
+
*/
|
51
|
+
this.userId = data.user.id;
|
52
|
+
|
53
|
+
/**
|
54
|
+
* The guild this presence is in
|
55
|
+
* @type {?Guild}
|
56
|
+
*/
|
57
|
+
this.guild = data.guild ?? null;
|
58
|
+
|
59
|
+
this._patch(data);
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* The user of this presence
|
64
|
+
* @type {?User}
|
65
|
+
* @readonly
|
66
|
+
*/
|
67
|
+
get user() {
|
68
|
+
return this.client.users.resolve(this.userId);
|
69
|
+
}
|
70
|
+
|
71
|
+
/**
|
72
|
+
* The member of this presence
|
73
|
+
* @type {?GuildMember}
|
74
|
+
* @readonly
|
75
|
+
*/
|
76
|
+
get member() {
|
77
|
+
return this.guild.members.resolve(this.userId);
|
78
|
+
}
|
79
|
+
|
80
|
+
_patch(data, fromClient) {
|
81
|
+
if ('status' in data) {
|
82
|
+
/**
|
83
|
+
* The status of this presence
|
84
|
+
* @type {PresenceStatus}
|
85
|
+
*/
|
86
|
+
this.status = data.status;
|
87
|
+
} else {
|
88
|
+
this.status ??= 'offline';
|
89
|
+
}
|
90
|
+
|
91
|
+
if ('activities' in data) {
|
92
|
+
/**
|
93
|
+
* The activities of this presence
|
94
|
+
* @type {Activity[]}
|
95
|
+
*/
|
96
|
+
this.activities = data.activities.map(activity => {
|
97
|
+
if (fromClient === true) {
|
98
|
+
if ([ActivityTypes.CUSTOM, 'CUSTOM'].includes(activity.type)) {
|
99
|
+
return new CustomStatus(activity, this);
|
100
|
+
} else if (activity.id == 'spotify:1') {
|
101
|
+
return new SpotifyRPC(this.client, activity, this);
|
102
|
+
} else {
|
103
|
+
return new RichPresence(this.client, activity, false, this);
|
104
|
+
}
|
105
|
+
} else {
|
106
|
+
return new Activity(this, activity);
|
107
|
+
}
|
108
|
+
});
|
109
|
+
} else {
|
110
|
+
this.activities ??= [];
|
111
|
+
}
|
112
|
+
|
113
|
+
if ('client_status' in data) {
|
114
|
+
/**
|
115
|
+
* The devices this presence is on
|
116
|
+
* @type {?Object}
|
117
|
+
* @property {?ClientPresenceStatus} web The current presence in the web application
|
118
|
+
* @property {?ClientPresenceStatus} mobile The current presence in the mobile application
|
119
|
+
* @property {?ClientPresenceStatus} desktop The current presence in the desktop application
|
120
|
+
*/
|
121
|
+
this.clientStatus = data.client_status;
|
122
|
+
} else {
|
123
|
+
this.clientStatus ??= null;
|
124
|
+
}
|
125
|
+
|
126
|
+
if ('last_modified' in data) {
|
127
|
+
/**
|
128
|
+
* The timestamp this presence was last updated
|
129
|
+
* @type {number}
|
130
|
+
*/
|
131
|
+
this.lastModified = data.last_modified;
|
132
|
+
}
|
133
|
+
|
134
|
+
return this;
|
135
|
+
}
|
136
|
+
|
137
|
+
_clone() {
|
138
|
+
const clone = Object.assign(Object.create(this), this);
|
139
|
+
clone.activities = this.activities.map(activity => activity._clone());
|
140
|
+
return clone;
|
141
|
+
}
|
142
|
+
|
143
|
+
/**
|
144
|
+
* Whether this presence is equal to another.
|
145
|
+
* @param {Presence} presence The presence to compare with
|
146
|
+
* @returns {boolean}
|
147
|
+
*/
|
148
|
+
equals(presence) {
|
149
|
+
return (
|
150
|
+
this === presence ||
|
151
|
+
(presence &&
|
152
|
+
this.status === presence.status &&
|
153
|
+
this.activities.length === presence.activities.length &&
|
154
|
+
this.activities.every((activity, index) => activity.equals(presence.activities[index])) &&
|
155
|
+
this.clientStatus?.web === presence.clientStatus?.web &&
|
156
|
+
this.clientStatus?.mobile === presence.clientStatus?.mobile &&
|
157
|
+
this.clientStatus?.desktop === presence.clientStatus?.desktop)
|
158
|
+
);
|
159
|
+
}
|
160
|
+
|
161
|
+
toJSON() {
|
162
|
+
return Util.flatten(this);
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
166
|
+
/**
|
167
|
+
* The platform of this activity:
|
168
|
+
* * **`desktop`**
|
169
|
+
* * **`samsung`** - playing on Samsung Galaxy
|
170
|
+
* * **`xbox`** - playing on Xbox Live
|
171
|
+
* @typedef {string} ActivityPlatform
|
172
|
+
*/
|
173
|
+
|
174
|
+
/**
|
175
|
+
* Represents an activity that is part of a user's presence.
|
176
|
+
*/
|
177
|
+
class Activity {
|
178
|
+
constructor(presence, data) {
|
179
|
+
/**
|
180
|
+
* The presence of the Activity
|
181
|
+
* @type {Presence}
|
182
|
+
* @readonly
|
183
|
+
* @name Activity#presence
|
184
|
+
*/
|
185
|
+
Object.defineProperty(this, 'presence', { value: presence });
|
186
|
+
|
187
|
+
/**
|
188
|
+
* The activity's id
|
189
|
+
* @type {string}
|
190
|
+
*/
|
191
|
+
this.id = data.id;
|
192
|
+
|
193
|
+
/**
|
194
|
+
* The activity's name
|
195
|
+
* @type {string}
|
196
|
+
*/
|
197
|
+
this.name = data.name;
|
198
|
+
|
199
|
+
/**
|
200
|
+
* The activity status's type
|
201
|
+
* @type {ActivityType}
|
202
|
+
*/
|
203
|
+
this.type = typeof data.type === 'number' ? ActivityTypes[data.type] : data.type;
|
204
|
+
|
205
|
+
/**
|
206
|
+
* If the activity is being streamed, a link to the stream
|
207
|
+
* @type {?string}
|
208
|
+
*/
|
209
|
+
this.url = data.url ?? null;
|
210
|
+
|
211
|
+
/**
|
212
|
+
* Details about the activity
|
213
|
+
* @type {?string}
|
214
|
+
*/
|
215
|
+
this.details = data.details ?? null;
|
216
|
+
|
217
|
+
/**
|
218
|
+
* State of the activity
|
219
|
+
* @type {?string}
|
220
|
+
*/
|
221
|
+
this.state = data.state ?? null;
|
222
|
+
|
223
|
+
/**
|
224
|
+
* The id of the application associated with this activity
|
225
|
+
* @type {?Snowflake}
|
226
|
+
*/
|
227
|
+
this.applicationId = data.application_id ?? null;
|
228
|
+
|
229
|
+
/**
|
230
|
+
* Represents timestamps of an activity
|
231
|
+
* @typedef {Object} ActivityTimestamps
|
232
|
+
* @property {?Date} start When the activity started
|
233
|
+
* @property {?Date} end When the activity will end
|
234
|
+
*/
|
235
|
+
|
236
|
+
/**
|
237
|
+
* Timestamps for the activity
|
238
|
+
* @type {?ActivityTimestamps}
|
239
|
+
*/
|
240
|
+
this.timestamps = data.timestamps
|
241
|
+
? {
|
242
|
+
start: data.timestamps.start ? new Date(Number(data.timestamps.start)) : null,
|
243
|
+
end: data.timestamps.end ? new Date(Number(data.timestamps.end)) : null,
|
244
|
+
}
|
245
|
+
: null;
|
246
|
+
|
247
|
+
/**
|
248
|
+
* The Spotify song's id
|
249
|
+
* @type {?string}
|
250
|
+
*/
|
251
|
+
this.syncId = data.sync_id ?? null;
|
252
|
+
|
253
|
+
/**
|
254
|
+
* The platform the game is being played on
|
255
|
+
* @type {?ActivityPlatform}
|
256
|
+
*/
|
257
|
+
this.platform = data.platform ?? null;
|
258
|
+
|
259
|
+
/**
|
260
|
+
* Represents a party of an activity
|
261
|
+
* @typedef {Object} ActivityParty
|
262
|
+
* @property {?string} id The party's id
|
263
|
+
* @property {number[]} size Size of the party as `[current, max]`
|
264
|
+
*/
|
265
|
+
|
266
|
+
/**
|
267
|
+
* Party of the activity
|
268
|
+
* @type {?ActivityParty}
|
269
|
+
*/
|
270
|
+
this.party = data.party ?? null;
|
271
|
+
|
272
|
+
/**
|
273
|
+
* Assets for rich presence
|
274
|
+
* @type {?RichPresenceAssets}
|
275
|
+
*/
|
276
|
+
this.assets = data.assets ? new RichPresenceAssets(this, data.assets) : null;
|
277
|
+
|
278
|
+
/**
|
279
|
+
* Flags that describe the activity
|
280
|
+
* @type {Readonly<ActivityFlags>}
|
281
|
+
*/
|
282
|
+
this.flags = new ActivityFlags(data.flags).freeze();
|
283
|
+
|
284
|
+
/**
|
285
|
+
* Emoji for a custom activity
|
286
|
+
* @type {?Emoji}
|
287
|
+
*/
|
288
|
+
this.emoji = data.emoji ? new Emoji(presence.client, data.emoji) : null;
|
289
|
+
|
290
|
+
/**
|
291
|
+
* The game's or Spotify session's id
|
292
|
+
* @type {?string}
|
293
|
+
*/
|
294
|
+
this.sessionId = data.session_id ?? null;
|
295
|
+
|
296
|
+
/**
|
297
|
+
* The labels of the buttons of this rich presence
|
298
|
+
* @type {string[]}
|
299
|
+
*/
|
300
|
+
this.buttons = data.buttons ?? [];
|
301
|
+
|
302
|
+
/**
|
303
|
+
* Creation date of the activity
|
304
|
+
* @type {number}
|
305
|
+
*/
|
306
|
+
this.createdTimestamp = data.created_at;
|
307
|
+
}
|
308
|
+
|
309
|
+
/**
|
310
|
+
* Whether this activity is equal to another activity.
|
311
|
+
* @param {Activity} activity The activity to compare with
|
312
|
+
* @returns {boolean}
|
313
|
+
*/
|
314
|
+
equals(activity) {
|
315
|
+
return (
|
316
|
+
this === activity ||
|
317
|
+
(activity &&
|
318
|
+
this.name === activity.name &&
|
319
|
+
this.type === activity.type &&
|
320
|
+
this.url === activity.url &&
|
321
|
+
this.state === activity.state &&
|
322
|
+
this.details === activity.details &&
|
323
|
+
this.emoji?.id === activity.emoji?.id &&
|
324
|
+
this.emoji?.name === activity.emoji?.name)
|
325
|
+
);
|
326
|
+
}
|
327
|
+
|
328
|
+
/**
|
329
|
+
* The time the activity was created at
|
330
|
+
* @type {Date}
|
331
|
+
* @readonly
|
332
|
+
*/
|
333
|
+
get createdAt() {
|
334
|
+
return new Date(this.createdTimestamp);
|
335
|
+
}
|
336
|
+
|
337
|
+
/**
|
338
|
+
* When concatenated with a string, this automatically returns the activities' name instead of the Activity object.
|
339
|
+
* @returns {string}
|
340
|
+
*/
|
341
|
+
toString() {
|
342
|
+
return this.name;
|
343
|
+
}
|
344
|
+
|
345
|
+
_clone() {
|
346
|
+
return Object.assign(Object.create(this), this);
|
347
|
+
}
|
348
|
+
}
|
349
|
+
|
350
|
+
/**
|
351
|
+
* Assets for a rich presence
|
352
|
+
*/
|
353
|
+
class RichPresenceAssets {
|
354
|
+
constructor(activity, assets) {
|
355
|
+
/**
|
356
|
+
* The activity of the RichPresenceAssets
|
357
|
+
* @type {Activity}
|
358
|
+
* @readonly
|
359
|
+
* @name RichPresenceAssets#activity
|
360
|
+
*/
|
361
|
+
Object.defineProperty(this, 'activity', { value: activity });
|
362
|
+
|
363
|
+
/**
|
364
|
+
* Hover text for the large image
|
365
|
+
* @type {?string}
|
366
|
+
*/
|
367
|
+
this.largeText = assets.large_text ?? null;
|
368
|
+
|
369
|
+
/**
|
370
|
+
* Hover text for the small image
|
371
|
+
* @type {?string}
|
372
|
+
*/
|
373
|
+
this.smallText = assets.small_text ?? null;
|
374
|
+
|
375
|
+
/**
|
376
|
+
* The large image asset's id
|
377
|
+
* @type {?Snowflake}
|
378
|
+
*/
|
379
|
+
this.largeImage = assets.large_image ?? null;
|
380
|
+
|
381
|
+
/**
|
382
|
+
* The small image asset's id
|
383
|
+
* @type {?Snowflake}
|
384
|
+
*/
|
385
|
+
this.smallImage = assets.small_image ?? null;
|
386
|
+
}
|
387
|
+
|
388
|
+
/**
|
389
|
+
* Gets the URL of the small image asset
|
390
|
+
* @param {StaticImageURLOptions} [options] Options for the image URL
|
391
|
+
* @returns {?string}
|
392
|
+
*/
|
393
|
+
smallImageURL({ format, size } = {}) {
|
394
|
+
if (!this.smallImage) return null;
|
395
|
+
if (this.smallImage.includes(':')) {
|
396
|
+
const [platform, id] = this.smallImage.split(':');
|
397
|
+
switch (platform) {
|
398
|
+
case 'mp':
|
399
|
+
return `https://media.discordapp.net/${id}`;
|
400
|
+
default:
|
401
|
+
return null;
|
402
|
+
}
|
403
|
+
}
|
404
|
+
|
405
|
+
return this.activity.presence.client.rest.cdn.AppAsset(this.activity.applicationId, this.smallImage, {
|
406
|
+
format,
|
407
|
+
size,
|
408
|
+
});
|
409
|
+
}
|
410
|
+
|
411
|
+
/**
|
412
|
+
* Gets the URL of the large image asset
|
413
|
+
* @param {StaticImageURLOptions} [options] Options for the image URL
|
414
|
+
* @returns {?string}
|
415
|
+
*/
|
416
|
+
largeImageURL({ format, size } = {}) {
|
417
|
+
if (!this.largeImage) return null;
|
418
|
+
if (this.largeImage.includes(':')) {
|
419
|
+
const [platform, id] = this.largeImage.split(':');
|
420
|
+
switch (platform) {
|
421
|
+
case 'mp':
|
422
|
+
return `https://media.discordapp.net/${id}`;
|
423
|
+
case 'spotify':
|
424
|
+
return `https://i.scdn.co/image/${id}`;
|
425
|
+
case 'twitch':
|
426
|
+
return `https://static-cdn.jtvnw.net/previews-ttv/live_user_${id}.png`;
|
427
|
+
default:
|
428
|
+
return null;
|
429
|
+
}
|
430
|
+
}
|
431
|
+
|
432
|
+
return this.activity.presence.client.rest.cdn.AppAsset(this.activity.applicationId, this.largeImage, {
|
433
|
+
format,
|
434
|
+
size,
|
435
|
+
});
|
436
|
+
}
|
437
|
+
}
|
438
|
+
|
439
|
+
exports.Presence = Presence;
|
440
|
+
exports.Activity = Activity;
|
441
|
+
exports.RichPresenceAssets = RichPresenceAssets;
|
@@ -0,0 +1,229 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const Collector = require('./interfaces/Collector');
|
5
|
+
const { Events } = require('../util/Constants');
|
6
|
+
|
7
|
+
/**
|
8
|
+
* @typedef {CollectorOptions} ReactionCollectorOptions
|
9
|
+
* @property {number} max The maximum total amount of reactions to collect
|
10
|
+
* @property {number} maxEmojis The maximum number of emojis to collect
|
11
|
+
* @property {number} maxUsers The maximum number of users to react
|
12
|
+
*/
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Collects reactions on messages.
|
16
|
+
* Will automatically stop if the message ({@link Client#event:messageDelete messageDelete} or
|
17
|
+
* {@link Client#event:messageDeleteBulk messageDeleteBulk}),
|
18
|
+
* channel ({@link Client#event:channelDelete channelDelete}),
|
19
|
+
* thread ({@link Client#event:threadDelete threadDelete}), or
|
20
|
+
* guild ({@link Client#event:guildDelete guildDelete}) is deleted.
|
21
|
+
* @extends {Collector}
|
22
|
+
*/
|
23
|
+
class ReactionCollector extends Collector {
|
24
|
+
/**
|
25
|
+
* @param {Message} message The message upon which to collect reactions
|
26
|
+
* @param {ReactionCollectorOptions} [options={}] The options to apply to this collector
|
27
|
+
*/
|
28
|
+
constructor(message, options = {}) {
|
29
|
+
super(message.client, options);
|
30
|
+
|
31
|
+
/**
|
32
|
+
* The message upon which to collect reactions
|
33
|
+
* @type {Message}
|
34
|
+
*/
|
35
|
+
this.message = message;
|
36
|
+
|
37
|
+
/**
|
38
|
+
* The users that have reacted to this message
|
39
|
+
* @type {Collection}
|
40
|
+
*/
|
41
|
+
this.users = new Collection();
|
42
|
+
|
43
|
+
/**
|
44
|
+
* The total number of reactions collected
|
45
|
+
* @type {number}
|
46
|
+
*/
|
47
|
+
this.total = 0;
|
48
|
+
|
49
|
+
this.empty = this.empty.bind(this);
|
50
|
+
this._handleChannelDeletion = this._handleChannelDeletion.bind(this);
|
51
|
+
this._handleThreadDeletion = this._handleThreadDeletion.bind(this);
|
52
|
+
this._handleGuildDeletion = this._handleGuildDeletion.bind(this);
|
53
|
+
this._handleMessageDeletion = this._handleMessageDeletion.bind(this);
|
54
|
+
|
55
|
+
const bulkDeleteListener = messages => {
|
56
|
+
if (messages.has(this.message.id)) this.stop('messageDelete');
|
57
|
+
};
|
58
|
+
|
59
|
+
this.client.incrementMaxListeners();
|
60
|
+
this.client.on(Events.MESSAGE_REACTION_ADD, this.handleCollect);
|
61
|
+
this.client.on(Events.MESSAGE_REACTION_REMOVE, this.handleDispose);
|
62
|
+
this.client.on(Events.MESSAGE_REACTION_REMOVE_ALL, this.empty);
|
63
|
+
this.client.on(Events.MESSAGE_DELETE, this._handleMessageDeletion);
|
64
|
+
this.client.on(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
|
65
|
+
this.client.on(Events.CHANNEL_DELETE, this._handleChannelDeletion);
|
66
|
+
this.client.on(Events.THREAD_DELETE, this._handleThreadDeletion);
|
67
|
+
this.client.on(Events.GUILD_DELETE, this._handleGuildDeletion);
|
68
|
+
|
69
|
+
this.once('end', () => {
|
70
|
+
this.client.removeListener(Events.MESSAGE_REACTION_ADD, this.handleCollect);
|
71
|
+
this.client.removeListener(Events.MESSAGE_REACTION_REMOVE, this.handleDispose);
|
72
|
+
this.client.removeListener(Events.MESSAGE_REACTION_REMOVE_ALL, this.empty);
|
73
|
+
this.client.removeListener(Events.MESSAGE_DELETE, this._handleMessageDeletion);
|
74
|
+
this.client.removeListener(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
|
75
|
+
this.client.removeListener(Events.CHANNEL_DELETE, this._handleChannelDeletion);
|
76
|
+
this.client.removeListener(Events.THREAD_DELETE, this._handleThreadDeletion);
|
77
|
+
this.client.removeListener(Events.GUILD_DELETE, this._handleGuildDeletion);
|
78
|
+
this.client.decrementMaxListeners();
|
79
|
+
});
|
80
|
+
|
81
|
+
this.on('collect', (reaction, user) => {
|
82
|
+
/**
|
83
|
+
* Emitted whenever a reaction is newly created on a message. Will emit only when a new reaction is
|
84
|
+
* added to the message, as opposed to {@link Collector#collect} which will
|
85
|
+
* be emitted even when a reaction has already been added to the message.
|
86
|
+
* @event ReactionCollector#create
|
87
|
+
* @param {MessageReaction} reaction The reaction that was added
|
88
|
+
* @param {User} user The user that added the reaction
|
89
|
+
*/
|
90
|
+
if (reaction.count === 1) {
|
91
|
+
this.emit('create', reaction, user);
|
92
|
+
}
|
93
|
+
this.total++;
|
94
|
+
this.users.set(user.id, user);
|
95
|
+
});
|
96
|
+
|
97
|
+
this.on('remove', (reaction, user) => {
|
98
|
+
this.total--;
|
99
|
+
if (!this.collected.some(r => r.users.cache.has(user.id))) this.users.delete(user.id);
|
100
|
+
});
|
101
|
+
}
|
102
|
+
|
103
|
+
/**
|
104
|
+
* Handles an incoming reaction for possible collection.
|
105
|
+
* @param {MessageReaction} reaction The reaction to possibly collect
|
106
|
+
* @param {User} user The user that added the reaction
|
107
|
+
* @returns {?(Snowflake|string)}
|
108
|
+
* @private
|
109
|
+
*/
|
110
|
+
collect(reaction) {
|
111
|
+
/**
|
112
|
+
* Emitted whenever a reaction is collected.
|
113
|
+
* @event ReactionCollector#collect
|
114
|
+
* @param {MessageReaction} reaction The reaction that was collected
|
115
|
+
* @param {User} user The user that added the reaction
|
116
|
+
*/
|
117
|
+
if (reaction.message.id !== this.message.id) return null;
|
118
|
+
|
119
|
+
return ReactionCollector.key(reaction);
|
120
|
+
}
|
121
|
+
|
122
|
+
/**
|
123
|
+
* Handles a reaction deletion for possible disposal.
|
124
|
+
* @param {MessageReaction} reaction The reaction to possibly dispose of
|
125
|
+
* @param {User} user The user that removed the reaction
|
126
|
+
* @returns {?(Snowflake|string)}
|
127
|
+
*/
|
128
|
+
dispose(reaction, user) {
|
129
|
+
/**
|
130
|
+
* Emitted when the reaction had all the users removed and the `dispose` option is set to true.
|
131
|
+
* @event ReactionCollector#dispose
|
132
|
+
* @param {MessageReaction} reaction The reaction that was disposed of
|
133
|
+
* @param {User} user The user that removed the reaction
|
134
|
+
*/
|
135
|
+
if (reaction.message.id !== this.message.id) return null;
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Emitted when the reaction had one user removed and the `dispose` option is set to true.
|
139
|
+
* @event ReactionCollector#remove
|
140
|
+
* @param {MessageReaction} reaction The reaction that was removed
|
141
|
+
* @param {User} user The user that removed the reaction
|
142
|
+
*/
|
143
|
+
if (this.collected.has(ReactionCollector.key(reaction)) && this.users.has(user.id)) {
|
144
|
+
this.emit('remove', reaction, user);
|
145
|
+
}
|
146
|
+
return reaction.count ? null : ReactionCollector.key(reaction);
|
147
|
+
}
|
148
|
+
|
149
|
+
/**
|
150
|
+
* Empties this reaction collector.
|
151
|
+
*/
|
152
|
+
empty() {
|
153
|
+
this.total = 0;
|
154
|
+
this.collected.clear();
|
155
|
+
this.users.clear();
|
156
|
+
this.checkEnd();
|
157
|
+
}
|
158
|
+
|
159
|
+
/**
|
160
|
+
* The reason this collector has ended with, or null if it hasn't ended yet
|
161
|
+
* @type {?string}
|
162
|
+
* @readonly
|
163
|
+
*/
|
164
|
+
get endReason() {
|
165
|
+
if (this.options.max && this.total >= this.options.max) return 'limit';
|
166
|
+
if (this.options.maxEmojis && this.collected.size >= this.options.maxEmojis) return 'emojiLimit';
|
167
|
+
if (this.options.maxUsers && this.users.size >= this.options.maxUsers) return 'userLimit';
|
168
|
+
return null;
|
169
|
+
}
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.
|
173
|
+
* @private
|
174
|
+
* @param {Message} message The message that was deleted
|
175
|
+
* @returns {void}
|
176
|
+
*/
|
177
|
+
_handleMessageDeletion(message) {
|
178
|
+
if (message.id === this.message.id) {
|
179
|
+
this.stop('messageDelete');
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
/**
|
184
|
+
* Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.
|
185
|
+
* @private
|
186
|
+
* @param {GuildChannel} channel The channel that was deleted
|
187
|
+
* @returns {void}
|
188
|
+
*/
|
189
|
+
_handleChannelDeletion(channel) {
|
190
|
+
if (channel.id === this.message.channelId || channel.threads?.cache.has(this.message.channelId)) {
|
191
|
+
this.stop('channelDelete');
|
192
|
+
}
|
193
|
+
}
|
194
|
+
|
195
|
+
/**
|
196
|
+
* Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.
|
197
|
+
* @private
|
198
|
+
* @param {ThreadChannel} thread The thread that was deleted
|
199
|
+
* @returns {void}
|
200
|
+
*/
|
201
|
+
_handleThreadDeletion(thread) {
|
202
|
+
if (thread.id === this.message.channelId) {
|
203
|
+
this.stop('threadDelete');
|
204
|
+
}
|
205
|
+
}
|
206
|
+
|
207
|
+
/**
|
208
|
+
* Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.
|
209
|
+
* @private
|
210
|
+
* @param {Guild} guild The guild that was deleted
|
211
|
+
* @returns {void}
|
212
|
+
*/
|
213
|
+
_handleGuildDeletion(guild) {
|
214
|
+
if (guild.id === this.message.guild?.id) {
|
215
|
+
this.stop('guildDelete');
|
216
|
+
}
|
217
|
+
}
|
218
|
+
|
219
|
+
/**
|
220
|
+
* Gets the collector key for a reaction.
|
221
|
+
* @param {MessageReaction} reaction The message reaction to get the key for
|
222
|
+
* @returns {Snowflake|string}
|
223
|
+
*/
|
224
|
+
static key(reaction) {
|
225
|
+
return reaction.emoji.id ?? reaction.emoji.name;
|
226
|
+
}
|
227
|
+
}
|
228
|
+
|
229
|
+
module.exports = ReactionCollector;
|
@@ -0,0 +1,31 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Emoji } = require('./Emoji');
|
4
|
+
const Util = require('../util/Util');
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Represents a limited emoji set used for both custom and unicode emojis. Custom emojis
|
8
|
+
* will use this class opposed to the Emoji class when the client doesn't know enough
|
9
|
+
* information about them.
|
10
|
+
* @extends {Emoji}
|
11
|
+
*/
|
12
|
+
class ReactionEmoji extends Emoji {
|
13
|
+
constructor(reaction, emoji) {
|
14
|
+
super(reaction.message.client, emoji);
|
15
|
+
/**
|
16
|
+
* The message reaction this emoji refers to
|
17
|
+
* @type {MessageReaction}
|
18
|
+
*/
|
19
|
+
this.reaction = reaction;
|
20
|
+
}
|
21
|
+
|
22
|
+
toJSON() {
|
23
|
+
return Util.flatten(this, { identifier: true });
|
24
|
+
}
|
25
|
+
|
26
|
+
valueOf() {
|
27
|
+
return this.id;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
module.exports = ReactionEmoji;
|