discord-selfbot-v13.js 0.0.1-security → 2.5.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 +48 -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,430 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const { joinVoiceChannel, entersState, VoiceConnectionStatus } = require('@discordjs/voice');
|
5
|
+
const { Channel } = require('./Channel');
|
6
|
+
const Invite = require('./Invite');
|
7
|
+
const TextBasedChannel = require('./interfaces/TextBasedChannel');
|
8
|
+
const { Error } = require('../errors');
|
9
|
+
const MessageManager = require('../managers/MessageManager');
|
10
|
+
const { Status, Opcodes } = require('../util/Constants');
|
11
|
+
const DataResolver = require('../util/DataResolver');
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Represents a Partial Group DM Channel on Discord.
|
15
|
+
* @extends {Channel}
|
16
|
+
*/
|
17
|
+
class PartialGroupDMChannel extends Channel {
|
18
|
+
constructor(client, data) {
|
19
|
+
super(client, data);
|
20
|
+
|
21
|
+
// No flags are present when fetching partial group DM channels.
|
22
|
+
this.flags = null;
|
23
|
+
|
24
|
+
/**
|
25
|
+
* The name of this Group DM Channel
|
26
|
+
* @type {?string}
|
27
|
+
*/
|
28
|
+
this.name = null;
|
29
|
+
|
30
|
+
/**
|
31
|
+
* The hash of the channel icon
|
32
|
+
* @type {?string}
|
33
|
+
*/
|
34
|
+
this.icon = null;
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Messages data
|
38
|
+
* @type {Collection}
|
39
|
+
*/
|
40
|
+
this.messages = new MessageManager(this);
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Last Message ID
|
44
|
+
* @type {?Snowflake}
|
45
|
+
*/
|
46
|
+
this.lastMessageId = null;
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Last Pin Timestamp
|
50
|
+
* @type {UnixTimestamp}
|
51
|
+
*/
|
52
|
+
this.lastPinTimestamp = null;
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Owner ID
|
56
|
+
* @type {?Snowflake}
|
57
|
+
*/
|
58
|
+
this.ownerId = null;
|
59
|
+
|
60
|
+
/**
|
61
|
+
* Invites fetch
|
62
|
+
* @type {Collection<string, Invite>}
|
63
|
+
*/
|
64
|
+
this.invites = new Collection();
|
65
|
+
|
66
|
+
this._recipients = [];
|
67
|
+
|
68
|
+
this._patch(data);
|
69
|
+
}
|
70
|
+
|
71
|
+
/**
|
72
|
+
* The recipients of this Group DM Channel.
|
73
|
+
* @type {Collection<Snowflake, User>}
|
74
|
+
* @readonly
|
75
|
+
*/
|
76
|
+
get recipients() {
|
77
|
+
const collect = new Collection();
|
78
|
+
this._recipients.map(recipient => collect.set(recipient.id, this.client.users._add(recipient)));
|
79
|
+
collect.set(this.client.user.id, this.client.user);
|
80
|
+
return collect;
|
81
|
+
}
|
82
|
+
|
83
|
+
/**
|
84
|
+
* The owner of this Group DM Channel
|
85
|
+
* @type {?User}
|
86
|
+
* @readonly
|
87
|
+
*/
|
88
|
+
get owner() {
|
89
|
+
return this.client.users.cache.get(this.ownerId);
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
*
|
94
|
+
* @param {Object} data Channel Data
|
95
|
+
* @private
|
96
|
+
*/
|
97
|
+
_patch(data) {
|
98
|
+
super._patch(data);
|
99
|
+
if ('recipients' in data && Array.isArray(data.recipients)) {
|
100
|
+
this._recipients = data.recipients;
|
101
|
+
}
|
102
|
+
if ('last_pin_timestamp' in data) {
|
103
|
+
const date = new Date(data.last_pin_timestamp);
|
104
|
+
this.lastPinTimestamp = date.getTime();
|
105
|
+
}
|
106
|
+
if ('last_message_id' in data) {
|
107
|
+
this.lastMessageId = data.last_message_id;
|
108
|
+
}
|
109
|
+
if ('owner_id' in data) {
|
110
|
+
this.ownerId = data.owner_id;
|
111
|
+
}
|
112
|
+
if ('name' in data) {
|
113
|
+
this.name = data.name;
|
114
|
+
}
|
115
|
+
if ('icon' in data) {
|
116
|
+
this.icon = data.icon;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
120
|
+
/**
|
121
|
+
* Edit channel data
|
122
|
+
* @param {Object} data name, icon owner
|
123
|
+
* @returns {Promise<undefined>}
|
124
|
+
* @private
|
125
|
+
*/
|
126
|
+
async edit(data) {
|
127
|
+
const _data = {};
|
128
|
+
if ('name' in data) _data.name = data.name?.trim() ?? null;
|
129
|
+
if (typeof data.icon !== 'undefined') {
|
130
|
+
_data.icon = await DataResolver.resolveImage(data.icon);
|
131
|
+
}
|
132
|
+
if ('owner' in data) {
|
133
|
+
_data.owner = data.owner;
|
134
|
+
}
|
135
|
+
const newData = await this.client.api.channels(this.id).patch({
|
136
|
+
data: _data,
|
137
|
+
});
|
138
|
+
|
139
|
+
return this.client.actions.ChannelUpdate.handle(newData).updated;
|
140
|
+
}
|
141
|
+
|
142
|
+
/**
|
143
|
+
* The URL to this channel's icon.
|
144
|
+
* @param {StaticImageURLOptions} [options={}] Options for the Image URL
|
145
|
+
* @returns {?string}
|
146
|
+
*/
|
147
|
+
iconURL({ format, size } = {}) {
|
148
|
+
return this.icon && this.client.rest.cdn.GDMIcon(this.id, this.icon, format, size);
|
149
|
+
}
|
150
|
+
|
151
|
+
/**
|
152
|
+
* Adds a user to this Group DM Channel.
|
153
|
+
* @param {UserResolvable} user User to add to the group
|
154
|
+
* @returns {Promise<PartialGroupDMChannel>}
|
155
|
+
*/
|
156
|
+
async addMember(user) {
|
157
|
+
user = this.client.users.resolveId(user);
|
158
|
+
if (!user) {
|
159
|
+
return Promise.reject(new TypeError('User is not a User or User ID'));
|
160
|
+
}
|
161
|
+
if (this.recipients.get(user)) return Promise.reject(new Error('USER_ALREADY_IN_GROUP_DM_CHANNEL')); // Fails sometimes if member leaves recently (ex. user leave msg's channel used for adding)
|
162
|
+
await this.client.api.channels[this.id].recipients[user].put();
|
163
|
+
this.recipients.set(user, this.client.users.cache.get(user));
|
164
|
+
return this;
|
165
|
+
}
|
166
|
+
|
167
|
+
/**
|
168
|
+
* Removes a user from this Group DM Channel.
|
169
|
+
* @param {UserResolvable} user User to remove from the group
|
170
|
+
* @returns {Promise<PartialGroupDMChannel>}
|
171
|
+
*/
|
172
|
+
async removeMember(user) {
|
173
|
+
if (this.ownerId !== this.client.user.id) {
|
174
|
+
return Promise.reject(new Error('NOT_OWNER_GROUP_DM_CHANNEL'));
|
175
|
+
}
|
176
|
+
user = this.client.users.resolveId(user);
|
177
|
+
if (!user) {
|
178
|
+
return Promise.reject(new TypeError('User is not a User or User ID'));
|
179
|
+
}
|
180
|
+
if (!this.recipients.get(user)) return Promise.reject(new Error('USER_NOT_IN_GROUP_DM_CHANNEL'));
|
181
|
+
await this.client.api.channels[this.id].recipients[user].delete();
|
182
|
+
this.recipients.delete(user);
|
183
|
+
return this;
|
184
|
+
}
|
185
|
+
|
186
|
+
/**
|
187
|
+
* Renames this Group DM Channel.
|
188
|
+
* @param {?string} name Name of the channel
|
189
|
+
* @returns {Promise<PartialGroupDMChannel>}
|
190
|
+
*/
|
191
|
+
setName(name) {
|
192
|
+
return this.edit({ name });
|
193
|
+
}
|
194
|
+
|
195
|
+
/**
|
196
|
+
* Sets the icon of this Group DM Channel.
|
197
|
+
* @param {?(Base64Resolvable|BufferResolvable)} icon Icon of the channel
|
198
|
+
* @returns {Promise<PartialGroupDMChannel>}
|
199
|
+
*/
|
200
|
+
setIcon(icon) {
|
201
|
+
return this.edit({ icon });
|
202
|
+
}
|
203
|
+
|
204
|
+
/**
|
205
|
+
* Changes the owner of this Group DM Channel.
|
206
|
+
* @param {UserResolvable} user User to transfer ownership to
|
207
|
+
* @returns {Promise<PartialGroupDMChannel>}
|
208
|
+
*/
|
209
|
+
setOwner(user) {
|
210
|
+
const id = this.client.users.resolveId(user);
|
211
|
+
if (!id) {
|
212
|
+
throw new TypeError('User is not a User or User ID');
|
213
|
+
}
|
214
|
+
if (this.ownerId !== this.client.user.id) {
|
215
|
+
throw new Error('NOT_OWNER_GROUP_DM_CHANNEL');
|
216
|
+
}
|
217
|
+
if (this.ownerId === id) {
|
218
|
+
return this;
|
219
|
+
}
|
220
|
+
return this.edit({ owner: id });
|
221
|
+
}
|
222
|
+
|
223
|
+
/**
|
224
|
+
* Gets the invite for this Group DM Channel.
|
225
|
+
* @returns {Promise<Invite>}
|
226
|
+
*/
|
227
|
+
async getInvite() {
|
228
|
+
const inviteCode = await this.client.api.channels(this.id).invites.post({
|
229
|
+
data: {
|
230
|
+
max_age: 86400,
|
231
|
+
},
|
232
|
+
});
|
233
|
+
const invite = new Invite(this.client, inviteCode);
|
234
|
+
this.invites.set(invite.code, invite);
|
235
|
+
return invite;
|
236
|
+
}
|
237
|
+
|
238
|
+
/**
|
239
|
+
* Get all the invites for this Group DM Channel.
|
240
|
+
* @param {boolean} force Using API to fetch invites or cache
|
241
|
+
* @returns {Promise<Collection<string, Invite>>}
|
242
|
+
*/
|
243
|
+
async fetchInvite(force = false) {
|
244
|
+
if (this.ownerId !== this.client.user.id) {
|
245
|
+
return Promise.reject(new Error('NOT_OWNER_GROUP_DM_CHANNEL'));
|
246
|
+
}
|
247
|
+
if (!force && this.invites.size) return this.invites;
|
248
|
+
const invites = await this.client.api.channels(this.id).invites.get();
|
249
|
+
await Promise.all(invites.map(invite => this.invites.set(invite.code, new Invite(this.client, invite))));
|
250
|
+
return this.invites;
|
251
|
+
}
|
252
|
+
|
253
|
+
/**
|
254
|
+
* Delete invites from this Group DM Channel.
|
255
|
+
* @param {Invite} invite Invite to add to the channel
|
256
|
+
* @returns {Promise<PartialGroupDMChannel>}
|
257
|
+
*/
|
258
|
+
async removeInvite(invite) {
|
259
|
+
if (this.ownerId !== this.client.user.id) {
|
260
|
+
return Promise.reject(new Error('NOT_OWNER_GROUP_DM_CHANNEL'));
|
261
|
+
}
|
262
|
+
if (!(invite instanceof Invite)) {
|
263
|
+
return Promise.reject(new TypeError('Invite is not an instance of Discord.Invite'));
|
264
|
+
}
|
265
|
+
await this.client.api.channels(this.id).invites[invite.code].delete();
|
266
|
+
this.invites.delete(invite.code);
|
267
|
+
return this;
|
268
|
+
}
|
269
|
+
|
270
|
+
/**
|
271
|
+
* Leave this Group DM Channel.
|
272
|
+
* @param {?boolean} slient Leave without notifying other members
|
273
|
+
* @returns {Promise<Channel>}
|
274
|
+
* @example
|
275
|
+
* // Delete the channel
|
276
|
+
* channel.delete()
|
277
|
+
* .then(console.log)
|
278
|
+
* .catch(console.error);
|
279
|
+
*/
|
280
|
+
async delete(slient = false) {
|
281
|
+
if (typeof slient === 'boolean' && slient) {
|
282
|
+
await this.client.api.channels(this.id).delete({
|
283
|
+
query: {
|
284
|
+
silent: true,
|
285
|
+
},
|
286
|
+
});
|
287
|
+
} else {
|
288
|
+
await this.client.api.channels(this.id).delete();
|
289
|
+
}
|
290
|
+
return this;
|
291
|
+
}
|
292
|
+
|
293
|
+
// These are here only for documentation purposes - they are implemented by TextBasedChannel
|
294
|
+
/* eslint-disable no-empty-function */
|
295
|
+
get lastMessage() {}
|
296
|
+
get lastPinAt() {}
|
297
|
+
send() {}
|
298
|
+
sendTyping() {}
|
299
|
+
|
300
|
+
/**
|
301
|
+
* @typedef {Object} CallOptions
|
302
|
+
* @property {boolean} [selfDeaf] Whether to deafen yourself
|
303
|
+
* @property {boolean} [selfMute] Whether to mute yourself
|
304
|
+
* @property {boolean} [ring=true] Emit a ringtone
|
305
|
+
*/
|
306
|
+
// Testing feature: Call
|
307
|
+
// URL: https://discord.com/api/v9/channels/DMchannelId/call/ring
|
308
|
+
/**
|
309
|
+
* Call this Group DMChannel. Return discordjs/voice VoiceConnection
|
310
|
+
* @param {CallOptions} options Options for the call
|
311
|
+
* @returns {Promise<VoiceConnection>}
|
312
|
+
*/
|
313
|
+
call(options = {}) {
|
314
|
+
options = Object.assign(
|
315
|
+
{
|
316
|
+
ring: true,
|
317
|
+
},
|
318
|
+
options || {},
|
319
|
+
);
|
320
|
+
return new Promise((resolve, reject) => {
|
321
|
+
if (!this.client.options.patchVoice) {
|
322
|
+
reject(
|
323
|
+
new Error(
|
324
|
+
'VOICE_NOT_PATCHED',
|
325
|
+
'Enable voice patching in client options\nhttps://discordjs-self-v13.netlify.app/#/docs/docs/main/typedef/ClientOptions',
|
326
|
+
),
|
327
|
+
);
|
328
|
+
} else {
|
329
|
+
if (options.ring) {
|
330
|
+
this.client.api.channels(this.id).call.ring.post({
|
331
|
+
data: {
|
332
|
+
recipients: null,
|
333
|
+
},
|
334
|
+
});
|
335
|
+
}
|
336
|
+
const connection = joinVoiceChannel({
|
337
|
+
channelId: this.id,
|
338
|
+
guildId: null,
|
339
|
+
adapterCreator: this.voiceAdapterCreator,
|
340
|
+
selfDeaf: options.selfDeaf ?? false,
|
341
|
+
selfMute: options.selfMute ?? false,
|
342
|
+
});
|
343
|
+
entersState(connection, VoiceConnectionStatus.Ready, 30000)
|
344
|
+
.then(connection => {
|
345
|
+
resolve(connection);
|
346
|
+
})
|
347
|
+
.catch(err => {
|
348
|
+
connection.destroy();
|
349
|
+
reject(err);
|
350
|
+
});
|
351
|
+
}
|
352
|
+
});
|
353
|
+
}
|
354
|
+
/**
|
355
|
+
* Sync VoiceState of this Group DMChannel.
|
356
|
+
* @returns {undefined}
|
357
|
+
*/
|
358
|
+
sync() {
|
359
|
+
this.client.ws.broadcast({
|
360
|
+
op: Opcodes.DM_UPDATE,
|
361
|
+
d: {
|
362
|
+
channel_id: this.id,
|
363
|
+
},
|
364
|
+
});
|
365
|
+
}
|
366
|
+
/**
|
367
|
+
* The user in this voice-based channel
|
368
|
+
* @type {Collection<Snowflake, User>}
|
369
|
+
* @readonly
|
370
|
+
*/
|
371
|
+
get voiceUsers() {
|
372
|
+
const coll = new Collection();
|
373
|
+
for (const state of this.client.voiceStates.cache.values()) {
|
374
|
+
if (state.channelId === this.id && state.user) {
|
375
|
+
coll.set(state.id, state.user);
|
376
|
+
}
|
377
|
+
}
|
378
|
+
return coll;
|
379
|
+
}
|
380
|
+
/**
|
381
|
+
* Get connection to current call
|
382
|
+
* @type {?VoiceConnection}
|
383
|
+
* @readonly
|
384
|
+
*/
|
385
|
+
get voiceConnection() {
|
386
|
+
const check = this.client.callVoice?.joinConfig?.channelId == this.id;
|
387
|
+
if (check) {
|
388
|
+
return this.client.callVoice;
|
389
|
+
}
|
390
|
+
return null;
|
391
|
+
}
|
392
|
+
/**
|
393
|
+
* Get current shard
|
394
|
+
* @type {WebSocketShard}
|
395
|
+
* @readonly
|
396
|
+
*/
|
397
|
+
get shard() {
|
398
|
+
return this.client.ws.shards.first();
|
399
|
+
}
|
400
|
+
/**
|
401
|
+
* The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.
|
402
|
+
* @type {?Function}
|
403
|
+
* @readonly
|
404
|
+
*/
|
405
|
+
get voiceAdapterCreator() {
|
406
|
+
return methods => {
|
407
|
+
this.client.voice.adapters.set(this.id, methods);
|
408
|
+
return {
|
409
|
+
sendPayload: data => {
|
410
|
+
if (this.shard.status !== Status.READY) return false;
|
411
|
+
this.shard.send(data);
|
412
|
+
return true;
|
413
|
+
},
|
414
|
+
destroy: () => {
|
415
|
+
this.client.voice.adapters.delete(this.id);
|
416
|
+
},
|
417
|
+
};
|
418
|
+
};
|
419
|
+
}
|
420
|
+
}
|
421
|
+
|
422
|
+
TextBasedChannel.applyToClass(PartialGroupDMChannel, true, [
|
423
|
+
'bulkDelete',
|
424
|
+
'fetchWebhooks',
|
425
|
+
'createWebhook',
|
426
|
+
'setRateLimitPerUser',
|
427
|
+
'setNSFW',
|
428
|
+
]);
|
429
|
+
|
430
|
+
module.exports = PartialGroupDMChannel;
|
@@ -0,0 +1,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) throw new TypeError('INVALID_TYPE', 'parameter', 'User nor a Role');
|
185
|
+
const type = userOrRole instanceof Role ? OverwriteTypes.role : OverwriteTypes.member;
|
186
|
+
|
187
|
+
return {
|
188
|
+
id: userOrRole.id,
|
189
|
+
type,
|
190
|
+
allow: Permissions.resolve(overwrite.allow ?? Permissions.defaultBit).toString(),
|
191
|
+
deny: Permissions.resolve(overwrite.deny ?? Permissions.defaultBit).toString(),
|
192
|
+
};
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
module.exports = PermissionOverwrites;
|