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,196 +1,198 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const Base = require('./Base');
|
|
4
|
-
const { Role } = require('./Role');
|
|
5
|
-
const { TypeError } = require('../errors');
|
|
6
|
-
const { OverwriteTypes } = require('../util/Constants');
|
|
7
|
-
const Permissions = require('../util/Permissions');
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Represents a permission overwrite for a role or member in a guild channel.
|
|
11
|
-
* @extends {Base}
|
|
12
|
-
*/
|
|
13
|
-
class PermissionOverwrites extends Base {
|
|
14
|
-
constructor(client, data, channel) {
|
|
15
|
-
super(client);
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* The GuildChannel this overwrite is for
|
|
19
|
-
* @name PermissionOverwrites#channel
|
|
20
|
-
* @type {GuildChannel}
|
|
21
|
-
* @readonly
|
|
22
|
-
*/
|
|
23
|
-
Object.defineProperty(this, 'channel', { value: channel });
|
|
24
|
-
|
|
25
|
-
if (data) this._patch(data);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
_patch(data) {
|
|
29
|
-
/**
|
|
30
|
-
* The overwrite's id, either a {@link User} or a {@link Role} id
|
|
31
|
-
* @type {Snowflake}
|
|
32
|
-
*/
|
|
33
|
-
this.id = data.id;
|
|
34
|
-
|
|
35
|
-
if ('type' in data) {
|
|
36
|
-
/**
|
|
37
|
-
* The type of this overwrite
|
|
38
|
-
* @type {OverwriteType}
|
|
39
|
-
*/
|
|
40
|
-
this.type = typeof data.type === 'number' ? OverwriteTypes[data.type] : data.type;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if ('deny' in data) {
|
|
44
|
-
/**
|
|
45
|
-
* The permissions that are denied for the user or role.
|
|
46
|
-
* @type {Readonly<Permissions>}
|
|
47
|
-
*/
|
|
48
|
-
this.deny = new Permissions(BigInt(data.deny)).freeze();
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if ('allow' in data) {
|
|
52
|
-
/**
|
|
53
|
-
* The permissions that are allowed for the user or role.
|
|
54
|
-
* @type {Readonly<Permissions>}
|
|
55
|
-
*/
|
|
56
|
-
this.allow = new Permissions(BigInt(data.allow)).freeze();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Edits this Permission Overwrite.
|
|
62
|
-
* @param {PermissionOverwriteOptions} options The options for the update
|
|
63
|
-
* @param {string} [reason] Reason for creating/editing this overwrite
|
|
64
|
-
* @returns {Promise<PermissionOverwrites>}
|
|
65
|
-
* @example
|
|
66
|
-
* // Update permission overwrites
|
|
67
|
-
* permissionOverwrites.edit({
|
|
68
|
-
* SEND_MESSAGES: false
|
|
69
|
-
* })
|
|
70
|
-
* .then(channel => console.log(channel.permissionOverwrites.get(message.author.id)))
|
|
71
|
-
* .catch(console.error);
|
|
72
|
-
*/
|
|
73
|
-
async edit(options, reason) {
|
|
74
|
-
await this.channel.permissionOverwrites.upsert(this.id, options, { type: OverwriteTypes[this.type], reason }, this);
|
|
75
|
-
return this;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Deletes this Permission Overwrite.
|
|
80
|
-
* @param {string} [reason] Reason for deleting this overwrite
|
|
81
|
-
* @returns {Promise<PermissionOverwrites>}
|
|
82
|
-
*/
|
|
83
|
-
async delete(reason) {
|
|
84
|
-
await this.channel.permissionOverwrites.delete(this.id, reason);
|
|
85
|
-
return this;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
toJSON() {
|
|
89
|
-
return {
|
|
90
|
-
id: this.id,
|
|
91
|
-
type: OverwriteTypes[this.type],
|
|
92
|
-
allow: this.allow,
|
|
93
|
-
deny: this.deny,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* An object mapping permission flags to `true` (enabled), `null` (unset) or `false` (disabled).
|
|
99
|
-
* ```js
|
|
100
|
-
* {
|
|
101
|
-
* 'SEND_MESSAGES': true,
|
|
102
|
-
* 'EMBED_LINKS': null,
|
|
103
|
-
* 'ATTACH_FILES': false,
|
|
104
|
-
* }
|
|
105
|
-
* ```
|
|
106
|
-
* @typedef {Object} PermissionOverwriteOptions
|
|
107
|
-
*/
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* @typedef {Object} ResolvedOverwriteOptions
|
|
111
|
-
* @property {Permissions} allow The allowed permissions
|
|
112
|
-
* @property {Permissions} deny The denied permissions
|
|
113
|
-
*/
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Resolves bitfield permissions overwrites from an object.
|
|
117
|
-
* @param {PermissionOverwriteOptions} options The options for the update
|
|
118
|
-
* @param {ResolvedOverwriteOptions} initialPermissions The initial permissions
|
|
119
|
-
* @returns {ResolvedOverwriteOptions}
|
|
120
|
-
*/
|
|
121
|
-
static resolveOverwriteOptions(options, { allow, deny } = {}) {
|
|
122
|
-
allow = new Permissions(allow);
|
|
123
|
-
deny = new Permissions(deny);
|
|
124
|
-
|
|
125
|
-
for (const [perm, value] of Object.entries(options)) {
|
|
126
|
-
if (value === true) {
|
|
127
|
-
allow.add(perm);
|
|
128
|
-
deny.remove(perm);
|
|
129
|
-
} else if (value === false) {
|
|
130
|
-
allow.remove(perm);
|
|
131
|
-
deny.add(perm);
|
|
132
|
-
} else if (value === null) {
|
|
133
|
-
allow.remove(perm);
|
|
134
|
-
deny.remove(perm);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return { allow, deny };
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* The raw data for a permission overwrite
|
|
143
|
-
* @typedef {Object} RawOverwriteData
|
|
144
|
-
* @property {Snowflake} id The id of the {@link Role} or {@link User} this overwrite belongs to
|
|
145
|
-
* @property {string} allow The permissions to allow
|
|
146
|
-
* @property {string} deny The permissions to deny
|
|
147
|
-
* @property {number} type The type of this OverwriteData
|
|
148
|
-
*/
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Data that can be resolved into {@link RawOverwriteData}. This can be:
|
|
152
|
-
* * PermissionOverwrites
|
|
153
|
-
* * OverwriteData
|
|
154
|
-
* @typedef {PermissionOverwrites|OverwriteData} OverwriteResolvable
|
|
155
|
-
*/
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Data that can be used for a permission overwrite
|
|
159
|
-
* @typedef {Object} OverwriteData
|
|
160
|
-
* @property {GuildMemberResolvable|RoleResolvable} id Member or role this overwrite is for
|
|
161
|
-
* @property {PermissionResolvable} [allow] The permissions to allow
|
|
162
|
-
* @property {PermissionResolvable} [deny] The permissions to deny
|
|
163
|
-
* @property {OverwriteType} [type] The type of this OverwriteData
|
|
164
|
-
*/
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Resolves an overwrite into {@link RawOverwriteData}.
|
|
168
|
-
* @param {OverwriteResolvable} overwrite The overwrite-like data to resolve
|
|
169
|
-
* @param {Guild} [guild] The guild to resolve from
|
|
170
|
-
* @returns {RawOverwriteData}
|
|
171
|
-
*/
|
|
172
|
-
static resolve(overwrite, guild) {
|
|
173
|
-
if (overwrite instanceof this) return overwrite.toJSON();
|
|
174
|
-
if (typeof overwrite.id === 'string' && overwrite.type in OverwriteTypes) {
|
|
175
|
-
return {
|
|
176
|
-
id: overwrite.id,
|
|
177
|
-
type: OverwriteTypes[overwrite.type],
|
|
178
|
-
allow: Permissions.resolve(overwrite.allow ?? Permissions.defaultBit).toString(),
|
|
179
|
-
deny: Permissions.resolve(overwrite.deny ?? Permissions.defaultBit).toString(),
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const userOrRole = guild.roles.resolve(overwrite.id) ?? guild.client.users.resolve(overwrite.id);
|
|
184
|
-
if (!userOrRole)
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Base = require('./Base');
|
|
4
|
+
const { Role } = require('./Role');
|
|
5
|
+
const { TypeError } = require('../errors');
|
|
6
|
+
const { OverwriteTypes } = require('../util/Constants');
|
|
7
|
+
const Permissions = require('../util/Permissions');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Represents a permission overwrite for a role or member in a guild channel.
|
|
11
|
+
* @extends {Base}
|
|
12
|
+
*/
|
|
13
|
+
class PermissionOverwrites extends Base {
|
|
14
|
+
constructor(client, data, channel) {
|
|
15
|
+
super(client);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The GuildChannel this overwrite is for
|
|
19
|
+
* @name PermissionOverwrites#channel
|
|
20
|
+
* @type {GuildChannel}
|
|
21
|
+
* @readonly
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(this, 'channel', { value: channel });
|
|
24
|
+
|
|
25
|
+
if (data) this._patch(data);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
_patch(data) {
|
|
29
|
+
/**
|
|
30
|
+
* The overwrite's id, either a {@link User} or a {@link Role} id
|
|
31
|
+
* @type {Snowflake}
|
|
32
|
+
*/
|
|
33
|
+
this.id = data.id;
|
|
34
|
+
|
|
35
|
+
if ('type' in data) {
|
|
36
|
+
/**
|
|
37
|
+
* The type of this overwrite
|
|
38
|
+
* @type {OverwriteType}
|
|
39
|
+
*/
|
|
40
|
+
this.type = typeof data.type === 'number' ? OverwriteTypes[data.type] : data.type;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if ('deny' in data) {
|
|
44
|
+
/**
|
|
45
|
+
* The permissions that are denied for the user or role.
|
|
46
|
+
* @type {Readonly<Permissions>}
|
|
47
|
+
*/
|
|
48
|
+
this.deny = new Permissions(BigInt(data.deny)).freeze();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if ('allow' in data) {
|
|
52
|
+
/**
|
|
53
|
+
* The permissions that are allowed for the user or role.
|
|
54
|
+
* @type {Readonly<Permissions>}
|
|
55
|
+
*/
|
|
56
|
+
this.allow = new Permissions(BigInt(data.allow)).freeze();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Edits this Permission Overwrite.
|
|
62
|
+
* @param {PermissionOverwriteOptions} options The options for the update
|
|
63
|
+
* @param {string} [reason] Reason for creating/editing this overwrite
|
|
64
|
+
* @returns {Promise<PermissionOverwrites>}
|
|
65
|
+
* @example
|
|
66
|
+
* // Update permission overwrites
|
|
67
|
+
* permissionOverwrites.edit({
|
|
68
|
+
* SEND_MESSAGES: false
|
|
69
|
+
* })
|
|
70
|
+
* .then(channel => console.log(channel.permissionOverwrites.get(message.author.id)))
|
|
71
|
+
* .catch(console.error);
|
|
72
|
+
*/
|
|
73
|
+
async edit(options, reason) {
|
|
74
|
+
await this.channel.permissionOverwrites.upsert(this.id, options, { type: OverwriteTypes[this.type], reason }, this);
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Deletes this Permission Overwrite.
|
|
80
|
+
* @param {string} [reason] Reason for deleting this overwrite
|
|
81
|
+
* @returns {Promise<PermissionOverwrites>}
|
|
82
|
+
*/
|
|
83
|
+
async delete(reason) {
|
|
84
|
+
await this.channel.permissionOverwrites.delete(this.id, reason);
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
toJSON() {
|
|
89
|
+
return {
|
|
90
|
+
id: this.id,
|
|
91
|
+
type: OverwriteTypes[this.type],
|
|
92
|
+
allow: this.allow,
|
|
93
|
+
deny: this.deny,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* An object mapping permission flags to `true` (enabled), `null` (unset) or `false` (disabled).
|
|
99
|
+
* ```js
|
|
100
|
+
* {
|
|
101
|
+
* 'SEND_MESSAGES': true,
|
|
102
|
+
* 'EMBED_LINKS': null,
|
|
103
|
+
* 'ATTACH_FILES': false,
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
* @typedef {Object} PermissionOverwriteOptions
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @typedef {Object} ResolvedOverwriteOptions
|
|
111
|
+
* @property {Permissions} allow The allowed permissions
|
|
112
|
+
* @property {Permissions} deny The denied permissions
|
|
113
|
+
*/
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Resolves bitfield permissions overwrites from an object.
|
|
117
|
+
* @param {PermissionOverwriteOptions} options The options for the update
|
|
118
|
+
* @param {ResolvedOverwriteOptions} initialPermissions The initial permissions
|
|
119
|
+
* @returns {ResolvedOverwriteOptions}
|
|
120
|
+
*/
|
|
121
|
+
static resolveOverwriteOptions(options, { allow, deny } = {}) {
|
|
122
|
+
allow = new Permissions(allow);
|
|
123
|
+
deny = new Permissions(deny);
|
|
124
|
+
|
|
125
|
+
for (const [perm, value] of Object.entries(options)) {
|
|
126
|
+
if (value === true) {
|
|
127
|
+
allow.add(perm);
|
|
128
|
+
deny.remove(perm);
|
|
129
|
+
} else if (value === false) {
|
|
130
|
+
allow.remove(perm);
|
|
131
|
+
deny.add(perm);
|
|
132
|
+
} else if (value === null) {
|
|
133
|
+
allow.remove(perm);
|
|
134
|
+
deny.remove(perm);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return { allow, deny };
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* The raw data for a permission overwrite
|
|
143
|
+
* @typedef {Object} RawOverwriteData
|
|
144
|
+
* @property {Snowflake} id The id of the {@link Role} or {@link User} this overwrite belongs to
|
|
145
|
+
* @property {string} allow The permissions to allow
|
|
146
|
+
* @property {string} deny The permissions to deny
|
|
147
|
+
* @property {number} type The type of this OverwriteData
|
|
148
|
+
*/
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Data that can be resolved into {@link RawOverwriteData}. This can be:
|
|
152
|
+
* * PermissionOverwrites
|
|
153
|
+
* * OverwriteData
|
|
154
|
+
* @typedef {PermissionOverwrites|OverwriteData} OverwriteResolvable
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Data that can be used for a permission overwrite
|
|
159
|
+
* @typedef {Object} OverwriteData
|
|
160
|
+
* @property {GuildMemberResolvable|RoleResolvable} id Member or role this overwrite is for
|
|
161
|
+
* @property {PermissionResolvable} [allow] The permissions to allow
|
|
162
|
+
* @property {PermissionResolvable} [deny] The permissions to deny
|
|
163
|
+
* @property {OverwriteType} [type] The type of this OverwriteData
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Resolves an overwrite into {@link RawOverwriteData}.
|
|
168
|
+
* @param {OverwriteResolvable} overwrite The overwrite-like data to resolve
|
|
169
|
+
* @param {Guild} [guild] The guild to resolve from
|
|
170
|
+
* @returns {RawOverwriteData}
|
|
171
|
+
*/
|
|
172
|
+
static resolve(overwrite, guild) {
|
|
173
|
+
if (overwrite instanceof this) return overwrite.toJSON();
|
|
174
|
+
if (typeof overwrite.id === 'string' && overwrite.type in OverwriteTypes) {
|
|
175
|
+
return {
|
|
176
|
+
id: overwrite.id,
|
|
177
|
+
type: OverwriteTypes[overwrite.type],
|
|
178
|
+
allow: Permissions.resolve(overwrite.allow ?? Permissions.defaultBit).toString(),
|
|
179
|
+
deny: Permissions.resolve(overwrite.deny ?? Permissions.defaultBit).toString(),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const userOrRole = guild.roles.resolve(overwrite.id) ?? guild.client.users.resolve(overwrite.id);
|
|
184
|
+
if (!userOrRole) {
|
|
185
|
+
throw new TypeError('INVALID_TYPE', 'parameter', 'cached User or Role');
|
|
186
|
+
}
|
|
187
|
+
const type = userOrRole instanceof Role ? OverwriteTypes.role : OverwriteTypes.member;
|
|
188
|
+
|
|
189
|
+
return {
|
|
190
|
+
id: userOrRole.id,
|
|
191
|
+
type,
|
|
192
|
+
allow: Permissions.resolve(overwrite.allow ?? Permissions.defaultBit).toString(),
|
|
193
|
+
deny: Permissions.resolve(overwrite.deny ?? Permissions.defaultBit).toString(),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
module.exports = PermissionOverwrites;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const Base = require('./Base');
|
|
5
|
+
const { PollAnswer } = require('./PollAnswer');
|
|
6
|
+
const { Error } = require('../errors');
|
|
7
|
+
const { PollLayoutTypes } = require('../util/Constants');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Represents a Poll
|
|
11
|
+
* @extends {Base}
|
|
12
|
+
*/
|
|
13
|
+
class Poll extends Base {
|
|
14
|
+
constructor(client, data, message) {
|
|
15
|
+
super(client);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The message that started this poll
|
|
19
|
+
* @name Poll#message
|
|
20
|
+
* @type {Message}
|
|
21
|
+
* @readonly
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
Object.defineProperty(this, 'message', { value: message });
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The media for a poll's question
|
|
28
|
+
* @typedef {Object} PollQuestionMedia
|
|
29
|
+
* @property {string} text The text of this question
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The media for this poll's question
|
|
34
|
+
* @type {PollQuestionMedia}
|
|
35
|
+
*/
|
|
36
|
+
this.question = {
|
|
37
|
+
text: data.question.text,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The answers of this poll
|
|
42
|
+
* @type {Collection<number, PollAnswer>}
|
|
43
|
+
*/
|
|
44
|
+
this.answers = data.answers.reduce(
|
|
45
|
+
(acc, answer) => acc.set(answer.answer_id, new PollAnswer(this.client, answer, this)),
|
|
46
|
+
new Collection(),
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The timestamp when this poll expires
|
|
51
|
+
* @type {number}
|
|
52
|
+
*/
|
|
53
|
+
this.expiresTimestamp = Date.parse(data.expiry);
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Whether this poll allows multiple answers
|
|
57
|
+
* @type {boolean}
|
|
58
|
+
*/
|
|
59
|
+
this.allowMultiselect = data.allow_multiselect;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The layout type of this poll
|
|
63
|
+
* @type {PollLayoutType}
|
|
64
|
+
*/
|
|
65
|
+
this.layoutType = PollLayoutTypes[data.layout_type];
|
|
66
|
+
|
|
67
|
+
this._patch(data);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
_patch(data) {
|
|
71
|
+
if (data.results) {
|
|
72
|
+
/**
|
|
73
|
+
* Whether this poll's results have been precisely counted
|
|
74
|
+
* @type {boolean}
|
|
75
|
+
*/
|
|
76
|
+
this.resultsFinalized = data.results.is_finalized;
|
|
77
|
+
|
|
78
|
+
for (const answerResult of data.results.answer_counts) {
|
|
79
|
+
const answer = this.answers.get(answerResult.id);
|
|
80
|
+
answer?._patch(answerResult);
|
|
81
|
+
}
|
|
82
|
+
} else {
|
|
83
|
+
this.resultsFinalized ??= false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The date when this poll expires
|
|
89
|
+
* @type {Date}
|
|
90
|
+
* @readonly
|
|
91
|
+
*/
|
|
92
|
+
get expiresAt() {
|
|
93
|
+
return new Date(this.expiresTimestamp);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Ends this poll.
|
|
98
|
+
* @returns {Promise<Message>}
|
|
99
|
+
*/
|
|
100
|
+
async end() {
|
|
101
|
+
if (Date.now() > this.expiresTimestamp) {
|
|
102
|
+
throw new Error('POLL_ALREADY_EXPIRED');
|
|
103
|
+
}
|
|
104
|
+
return this.message.channel.messages.endPoll(this.message.id);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = { Poll };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Base = require('./Base');
|
|
4
|
+
const { Emoji } = require('./Emoji');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Represents an answer to a {@link Poll}
|
|
8
|
+
* @extends {Base}
|
|
9
|
+
*/
|
|
10
|
+
class PollAnswer extends Base {
|
|
11
|
+
constructor(client, data, poll) {
|
|
12
|
+
super(client);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The {@link Poll} this answer is part of
|
|
16
|
+
* @name PollAnswer#poll
|
|
17
|
+
* @type {Poll}
|
|
18
|
+
* @readonly
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(this, 'poll', { value: poll });
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The id of this answer
|
|
24
|
+
* @type {number}
|
|
25
|
+
*/
|
|
26
|
+
this.id = data.answer_id;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The text of this answer
|
|
30
|
+
* @type {?string}
|
|
31
|
+
*/
|
|
32
|
+
this.text = data.poll_media.text ?? null;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The raw emoji of this answer
|
|
36
|
+
* @name PollAnswer#_emoji
|
|
37
|
+
* @type {?APIPartialEmoji}
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
40
|
+
Object.defineProperty(this, '_emoji', { value: data.poll_media.emoji ?? null });
|
|
41
|
+
|
|
42
|
+
this._patch(data);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
_patch(data) {
|
|
46
|
+
// This `count` field comes from `poll.results.answer_counts`
|
|
47
|
+
if ('count' in data) {
|
|
48
|
+
/**
|
|
49
|
+
* The amount of votes this answer has
|
|
50
|
+
* @type {number}
|
|
51
|
+
*/
|
|
52
|
+
this.voteCount = data.count;
|
|
53
|
+
} else {
|
|
54
|
+
this.voteCount ??= 0;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The emoji of this answer
|
|
60
|
+
* @type {?(GuildEmoji|Emoji)}
|
|
61
|
+
*/
|
|
62
|
+
get emoji() {
|
|
63
|
+
if (!this._emoji || (!this._emoji.id && !this._emoji.name)) return null;
|
|
64
|
+
return this.client.emojis.cache.get(this._emoji.id) ?? new Emoji(this.client, this._emoji);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @typedef {Object} FetchPollVotersOptions
|
|
69
|
+
* @property {number} [limit] The maximum number of voters to fetch
|
|
70
|
+
* @property {Snowflake} [after] The user id to fetch voters after
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Fetches the users that voted for this answer
|
|
75
|
+
* @param {FetchPollVotersOptions} [options={}] The options for fetching voters
|
|
76
|
+
* @returns {Promise<Collection<Snowflake, User>>}
|
|
77
|
+
*/
|
|
78
|
+
fetchVoters({ after, limit } = {}) {
|
|
79
|
+
return this.poll.message.channel.messages.fetchPollAnswerVoters({
|
|
80
|
+
messageId: this.poll.message.id,
|
|
81
|
+
answerId: this.id,
|
|
82
|
+
after,
|
|
83
|
+
limit,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
module.exports = { PollAnswer };
|