discord.js-selfbot-dmallfriends-v13 0.0.1-security → 2.15.2
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.js-selfbot-dmallfriends-v13 might be problematic. Click here for more details.
- package/LICENSE +674 -0
- package/README.md +127 -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 +170 -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 +189 -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,393 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
4
|
+
const CachedManager = require('./CachedManager');
|
5
|
+
const { TypeError, Error } = require('../errors');
|
6
|
+
const { Message } = require('../structures/Message');
|
7
|
+
const MessagePayload = require('../structures/MessagePayload');
|
8
|
+
const Util = require('../util/Util');
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Manages API methods for Messages and holds their cache.
|
12
|
+
* @extends {CachedManager}
|
13
|
+
*/
|
14
|
+
class MessageManager extends CachedManager {
|
15
|
+
constructor(channel, iterable) {
|
16
|
+
super(channel.client, Message, iterable);
|
17
|
+
|
18
|
+
/**
|
19
|
+
* The channel that the messages belong to
|
20
|
+
* @type {TextBasedChannels}
|
21
|
+
*/
|
22
|
+
this.channel = channel;
|
23
|
+
}
|
24
|
+
|
25
|
+
/**
|
26
|
+
* The cache of Messages
|
27
|
+
* @type {Collection<Snowflake, Message>}
|
28
|
+
* @name MessageManager#cache
|
29
|
+
*/
|
30
|
+
|
31
|
+
_add(data, cache) {
|
32
|
+
return super._add(data, cache);
|
33
|
+
}
|
34
|
+
|
35
|
+
/**
|
36
|
+
* The parameters to pass in when requesting previous messages from a channel. `around`, `before` and
|
37
|
+
* `after` are mutually exclusive. All the parameters are optional.
|
38
|
+
* @typedef {Object} ChannelLogsQueryOptions
|
39
|
+
* @property {number} [limit=50] Number of messages to acquire
|
40
|
+
* @property {Snowflake} [before] The message's id to get the messages that were posted before it
|
41
|
+
* @property {Snowflake} [after] The message's id to get the messages that were posted after it
|
42
|
+
* @property {Snowflake} [around] The message's id to get the messages that were posted around it
|
43
|
+
*/
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Gets a message, or messages, from this channel.
|
47
|
+
* <info>The returned Collection does not contain reaction users of the messages if they were not cached.
|
48
|
+
* Those need to be fetched separately in such a case.</info>
|
49
|
+
* @param {Snowflake|ChannelLogsQueryOptions} [message] The id of the message to fetch, or query parameters.
|
50
|
+
* @param {BaseFetchOptions} [options] Additional options for this fetch
|
51
|
+
* @returns {Promise<Message|Collection<Snowflake, Message>>}
|
52
|
+
* @example
|
53
|
+
* // Get message
|
54
|
+
* channel.messages.fetch('99539446449315840')
|
55
|
+
* .then(message => console.log(message.content))
|
56
|
+
* .catch(console.error);
|
57
|
+
* @example
|
58
|
+
* // Get messages
|
59
|
+
* channel.messages.fetch({ limit: 10 })
|
60
|
+
* .then(messages => console.log(`Received ${messages.size} messages`))
|
61
|
+
* .catch(console.error);
|
62
|
+
* @example
|
63
|
+
* // Get messages and filter by user id
|
64
|
+
* channel.messages.fetch()
|
65
|
+
* .then(messages => console.log(`${messages.filter(m => m.author.id === '84484653687267328').size} messages`))
|
66
|
+
* .catch(console.error);
|
67
|
+
*/
|
68
|
+
fetch(message, { cache = true, force = false } = {}) {
|
69
|
+
return typeof message === 'string' ? this._fetchId(message, cache, force) : this._fetchMany(message, cache);
|
70
|
+
}
|
71
|
+
|
72
|
+
/**
|
73
|
+
* Fetches the pinned messages of this channel and returns a collection of them.
|
74
|
+
* <info>The returned Collection does not contain any reaction data of the messages.
|
75
|
+
* Those need to be fetched separately.</info>
|
76
|
+
* @param {boolean} [cache=true] Whether to cache the message(s)
|
77
|
+
* @returns {Promise<Collection<Snowflake, Message>>}
|
78
|
+
* @example
|
79
|
+
* // Get pinned messages
|
80
|
+
* channel.messages.fetchPinned()
|
81
|
+
* .then(messages => console.log(`Received ${messages.size} messages`))
|
82
|
+
* .catch(console.error);
|
83
|
+
*/
|
84
|
+
async fetchPinned(cache = true) {
|
85
|
+
const data = await this.client.api.channels[this.channel.id].pins.get();
|
86
|
+
const messages = new Collection();
|
87
|
+
for (const message of data) messages.set(message.id, this._add(message, cache));
|
88
|
+
return messages;
|
89
|
+
}
|
90
|
+
|
91
|
+
/**
|
92
|
+
* Data that can be resolved to a Message object. This can be:
|
93
|
+
* * A Message
|
94
|
+
* * A Snowflake
|
95
|
+
* @typedef {Message|Snowflake} MessageResolvable
|
96
|
+
*/
|
97
|
+
|
98
|
+
/**
|
99
|
+
* Resolves a {@link MessageResolvable} to a {@link Message} object.
|
100
|
+
* @method resolve
|
101
|
+
* @memberof MessageManager
|
102
|
+
* @instance
|
103
|
+
* @param {MessageResolvable} message The message resolvable to resolve
|
104
|
+
* @returns {?Message}
|
105
|
+
*/
|
106
|
+
|
107
|
+
/**
|
108
|
+
* Resolves a {@link MessageResolvable} to a {@link Message} id.
|
109
|
+
* @method resolveId
|
110
|
+
* @memberof MessageManager
|
111
|
+
* @instance
|
112
|
+
* @param {MessageResolvable} message The message resolvable to resolve
|
113
|
+
* @returns {?Snowflake}
|
114
|
+
*/
|
115
|
+
|
116
|
+
/**
|
117
|
+
* Edits a message, even if it's not cached.
|
118
|
+
* @param {MessageResolvable} message The message to edit
|
119
|
+
* @param {string|MessageEditOptions|MessagePayload} options The options to edit the message
|
120
|
+
* @returns {Promise<Message>}
|
121
|
+
*/
|
122
|
+
async edit(message, options) {
|
123
|
+
const messageId = this.resolveId(message);
|
124
|
+
if (!messageId) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
|
125
|
+
|
126
|
+
let messagePayload;
|
127
|
+
if (options instanceof MessagePayload) {
|
128
|
+
messagePayload = await options.resolveData();
|
129
|
+
} else {
|
130
|
+
messagePayload = await MessagePayload.create(message instanceof Message ? message : this, options).resolveData();
|
131
|
+
}
|
132
|
+
let { data, files } = await messagePayload.resolveFiles();
|
133
|
+
|
134
|
+
if (typeof options == 'object' && typeof options.usingNewAttachmentAPI !== 'boolean') {
|
135
|
+
options.usingNewAttachmentAPI = this.client.options.usingNewAttachmentAPI;
|
136
|
+
}
|
137
|
+
|
138
|
+
if (options?.usingNewAttachmentAPI === true) {
|
139
|
+
const attachments = await Util.getAttachments(this.client, this.channel.id, ...files);
|
140
|
+
const requestPromises = attachments.map(async attachment => {
|
141
|
+
await Util.uploadFile(files[attachment.id].file, attachment.upload_url);
|
142
|
+
return {
|
143
|
+
id: attachment.id,
|
144
|
+
filename: files[attachment.id].name,
|
145
|
+
uploaded_filename: attachment.upload_filename,
|
146
|
+
description: files[attachment.id].description,
|
147
|
+
duration_secs: files[attachment.id].duration_secs,
|
148
|
+
waveform: files[attachment.id].waveform,
|
149
|
+
};
|
150
|
+
});
|
151
|
+
const attachmentsData = await Promise.all(requestPromises);
|
152
|
+
attachmentsData.sort((a, b) => parseInt(a.id) - parseInt(b.id));
|
153
|
+
data.attachments = attachmentsData;
|
154
|
+
files = [];
|
155
|
+
}
|
156
|
+
|
157
|
+
const d = await this.client.api.channels[this.channel.id].messages[messageId].patch({ data, files });
|
158
|
+
|
159
|
+
const existing = this.cache.get(messageId);
|
160
|
+
if (existing) {
|
161
|
+
const clone = existing._clone();
|
162
|
+
clone._patch(d);
|
163
|
+
return clone;
|
164
|
+
}
|
165
|
+
return this._add(d);
|
166
|
+
}
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Publishes a message in an announcement channel to all channels following it, even if it's not cached.
|
170
|
+
* @param {MessageResolvable} message The message to publish
|
171
|
+
* @returns {Promise<Message>}
|
172
|
+
*/
|
173
|
+
async crosspost(message) {
|
174
|
+
message = this.resolveId(message);
|
175
|
+
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
|
176
|
+
|
177
|
+
const data = await this.client.api.channels(this.channel.id).messages(message).crosspost.post();
|
178
|
+
return this.cache.get(data.id) ?? this._add(data);
|
179
|
+
}
|
180
|
+
|
181
|
+
/**
|
182
|
+
* Pins a message to the channel's pinned messages, even if it's not cached.
|
183
|
+
* @param {MessageResolvable} message The message to pin
|
184
|
+
* @param {string} [reason] Reason for pinning
|
185
|
+
* @returns {Promise<void>}
|
186
|
+
*/
|
187
|
+
async pin(message, reason) {
|
188
|
+
message = this.resolveId(message);
|
189
|
+
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
|
190
|
+
|
191
|
+
await this.client.api.channels(this.channel.id).pins(message).put({ reason });
|
192
|
+
}
|
193
|
+
|
194
|
+
/**
|
195
|
+
* Unpins a message from the channel's pinned messages, even if it's not cached.
|
196
|
+
* @param {MessageResolvable} message The message to unpin
|
197
|
+
* @param {string} [reason] Reason for unpinning
|
198
|
+
* @returns {Promise<void>}
|
199
|
+
*/
|
200
|
+
async unpin(message, reason) {
|
201
|
+
message = this.resolveId(message);
|
202
|
+
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
|
203
|
+
|
204
|
+
await this.client.api.channels(this.channel.id).pins(message).delete({ reason });
|
205
|
+
}
|
206
|
+
|
207
|
+
/**
|
208
|
+
* Adds a reaction to a message, even if it's not cached.
|
209
|
+
* @param {MessageResolvable} message The message to react to
|
210
|
+
* @param {EmojiIdentifierResolvable} emoji The emoji to react with
|
211
|
+
* @param {boolean} [burst=false] Super Reactions (Discord Nitro only)
|
212
|
+
* @returns {Promise<void>}
|
213
|
+
*/
|
214
|
+
async react(message, emoji, burst = false) {
|
215
|
+
message = this.resolveId(message);
|
216
|
+
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
|
217
|
+
|
218
|
+
emoji = Util.resolvePartialEmoji(emoji);
|
219
|
+
if (!emoji) throw new TypeError('EMOJI_TYPE', 'emoji', 'EmojiIdentifierResolvable');
|
220
|
+
|
221
|
+
const emojiId = emoji.id
|
222
|
+
? `${emoji.animated ? 'a:' : ''}${emoji.name}:${emoji.id}`
|
223
|
+
: encodeURIComponent(emoji.name);
|
224
|
+
|
225
|
+
// eslint-disable-next-line newline-per-chained-call
|
226
|
+
await this.client.api
|
227
|
+
.channels(this.channel.id)
|
228
|
+
.messages(message)
|
229
|
+
.reactions(emojiId, '@me')
|
230
|
+
.put({
|
231
|
+
query: {
|
232
|
+
type: burst ? 1 : 0,
|
233
|
+
},
|
234
|
+
});
|
235
|
+
}
|
236
|
+
|
237
|
+
/**
|
238
|
+
* Deletes a message, even if it's not cached.
|
239
|
+
* @param {MessageResolvable} message The message to delete
|
240
|
+
* @returns {Promise<void>}
|
241
|
+
*/
|
242
|
+
async delete(message) {
|
243
|
+
message = this.resolveId(message);
|
244
|
+
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
|
245
|
+
|
246
|
+
await this.client.api.channels(this.channel.id).messages(message).delete();
|
247
|
+
}
|
248
|
+
|
249
|
+
_fetchId(messageId, cache, force) {
|
250
|
+
if (!force) {
|
251
|
+
const existing = this.cache.get(messageId);
|
252
|
+
if (existing && !existing.partial) return existing;
|
253
|
+
}
|
254
|
+
// https://discord.com/api/v9/channels/:id/messages?limit=50&around=:msgid
|
255
|
+
return new Promise((resolve, reject) => {
|
256
|
+
this._fetchMany({
|
257
|
+
around: messageId,
|
258
|
+
limit: 50,
|
259
|
+
})
|
260
|
+
.then(data_ =>
|
261
|
+
data_.has(messageId) ? resolve(data_.get(messageId)) : reject(new Error('MESSAGE_ID_NOT_FOUND')),
|
262
|
+
)
|
263
|
+
.catch(reject);
|
264
|
+
});
|
265
|
+
}
|
266
|
+
|
267
|
+
async _fetchMany(options = {}, cache) {
|
268
|
+
const data = await this.client.api.channels[this.channel.id].messages.get({ query: options });
|
269
|
+
const messages = new Collection();
|
270
|
+
for (const message of data) messages.set(message.id, this._add(message, cache));
|
271
|
+
return messages;
|
272
|
+
}
|
273
|
+
|
274
|
+
/**
|
275
|
+
* @typedef {object} MessageSearchOptions
|
276
|
+
* @property {Array<UserResolvable>} [authors] An array of author to filter by
|
277
|
+
* @property {Array<UserResolvable>} [mentions] An array of user (mentioned) to filter by
|
278
|
+
* @property {string} [content] A messageContent to filter by
|
279
|
+
* @property {Snowflake} [maxId] The maximum Message ID to filter by
|
280
|
+
* @property {Snowflake} [minId] The minimum Message ID to filter by
|
281
|
+
* @property {Array<TextChannelResolvable>} [channels] An array of channel to filter by
|
282
|
+
* @property {boolean} [pinned] Whether to filter by pinned messages
|
283
|
+
* @property {Array<string>} [has] Message has: `link`, `embed`, `file`, `video`, `image`, or `sound`
|
284
|
+
* @property {boolean} [nsfw=false] Whether to filter by NSFW channels
|
285
|
+
* @property {number} [offset=0] The number of messages to skip (for pagination, 25 results per page)
|
286
|
+
* @property {number} [limit=25] The number of messages to fetch
|
287
|
+
* <info>The maximum limit allowed is 25.</info>
|
288
|
+
* @property {string} [sortBy] The order to sort by (`timestamp` or `relevance`)
|
289
|
+
* @property {string} [sortOrder] The order to return results in (`asc` or `desc`)
|
290
|
+
* <info>The default sort is <code>timestamp</code> in descending order <code>desc</code> (newest first).</info>
|
291
|
+
*/
|
292
|
+
|
293
|
+
/**
|
294
|
+
* @typedef {object} MessageSearchResult
|
295
|
+
* @property {Collection<Snowflake, Message>} messages A collection of found messages
|
296
|
+
* @property {number} total The total number of messages that match the search criteria
|
297
|
+
*/
|
298
|
+
|
299
|
+
/**
|
300
|
+
* Search Messages in the channel.
|
301
|
+
* @param {MessageSearchOptions} options Performs a search within the channel.
|
302
|
+
* @returns {MessageSearchResult}
|
303
|
+
*/
|
304
|
+
async search(options = {}) {
|
305
|
+
// eslint-disable-next-line no-unused-vars
|
306
|
+
let { authors, content, mentions, has, maxId, minId, channels, pinned, nsfw, offset, limit, sortBy, sortOrder } =
|
307
|
+
Object.assign(
|
308
|
+
{
|
309
|
+
authors: [],
|
310
|
+
content: '',
|
311
|
+
mentions: [],
|
312
|
+
has: [],
|
313
|
+
maxId: null,
|
314
|
+
minId: null,
|
315
|
+
channels: [],
|
316
|
+
pinned: false,
|
317
|
+
nsfw: false,
|
318
|
+
offset: 0,
|
319
|
+
limit: 25,
|
320
|
+
sortBy: 'timestamp',
|
321
|
+
sortOrder: 'desc',
|
322
|
+
},
|
323
|
+
options,
|
324
|
+
);
|
325
|
+
// Validate
|
326
|
+
if (authors.length > 0) authors = authors.map(u => this.client.users.resolveId(u));
|
327
|
+
if (mentions.length > 0) mentions = mentions.map(u => this.client.users.resolveId(u));
|
328
|
+
if (channels.length > 0) {
|
329
|
+
channels = channels
|
330
|
+
.map(c => this.client.channels.resolveId(c))
|
331
|
+
.filter(id => {
|
332
|
+
if (this.channel.guildId) {
|
333
|
+
const c = this.channel.guild.channels.cache.get(id);
|
334
|
+
if (!c || !c.messages) return false;
|
335
|
+
const perm = c.permissionsFor(this.client.user);
|
336
|
+
if (!perm.has('READ_MESSAGE_HISTORY') || !perm.has('VIEW_CHANNEL')) return false;
|
337
|
+
return true;
|
338
|
+
} else {
|
339
|
+
return true;
|
340
|
+
}
|
341
|
+
});
|
342
|
+
}
|
343
|
+
if (limit && limit > 25) throw new RangeError('MESSAGE_SEARCH_LIMIT');
|
344
|
+
let stringQuery = [];
|
345
|
+
const result = new Collection();
|
346
|
+
let data;
|
347
|
+
if (authors.length > 0) stringQuery.push(authors.map(id => `author_id=${id}`).join('&'));
|
348
|
+
if (content && content.length) stringQuery.push(`content=${encodeURIComponent(content)}`);
|
349
|
+
if (mentions.length > 0) stringQuery.push(mentions.map(id => `mentions=${id}`).join('&'));
|
350
|
+
has = has.filter(v => ['link', 'embed', 'file', 'video', 'image', 'sound', 'sticker'].includes(v));
|
351
|
+
if (has.length > 0) stringQuery.push(has.map(v => `has=${v}`).join('&'));
|
352
|
+
if (maxId) stringQuery.push(`max_id=${maxId}`);
|
353
|
+
if (minId) stringQuery.push(`min_id=${minId}`);
|
354
|
+
if (nsfw) stringQuery.push('include_nsfw=true');
|
355
|
+
if (offset !== 0) stringQuery.push(`offset=${offset}`);
|
356
|
+
if (limit !== 25) stringQuery.push(`limit=${limit}`);
|
357
|
+
if (['timestamp', 'relevance'].includes(options.sortBy)) {
|
358
|
+
stringQuery.push(`sort_by=${options.sortBy}`);
|
359
|
+
} else {
|
360
|
+
stringQuery.push('sort_by=timestamp');
|
361
|
+
}
|
362
|
+
if (['asc', 'desc'].includes(options.sortOrder)) {
|
363
|
+
stringQuery.push(`sort_order=${options.sortOrder}`);
|
364
|
+
} else {
|
365
|
+
stringQuery.push('sort_order=desc');
|
366
|
+
}
|
367
|
+
if (this.channel.guildId && channels.length > 0) {
|
368
|
+
stringQuery.push(channels.map(id => `channel_id=${id}`).join('&'));
|
369
|
+
}
|
370
|
+
if (typeof pinned == 'boolean') stringQuery.push(`pinned=${pinned}`);
|
371
|
+
// Main
|
372
|
+
if (!stringQuery.length) {
|
373
|
+
return {
|
374
|
+
messages: result,
|
375
|
+
total: 0,
|
376
|
+
};
|
377
|
+
}
|
378
|
+
if (this.channel.guildId) {
|
379
|
+
data = await this.client.api.guilds[this.channel.guildId].messages[`search?${stringQuery.join('&')}`].get();
|
380
|
+
} else {
|
381
|
+
stringQuery = stringQuery.filter(v => !v.startsWith('channel_id') && !v.startsWith('include_nsfw'));
|
382
|
+
data = await this.client.api.channels[this.channel.id].messages[`search?${stringQuery.join('&')}`].get();
|
383
|
+
}
|
384
|
+
console.log(stringQuery);
|
385
|
+
for await (const message of data.messages) result.set(message[0].id, new Message(this.client, message[0]));
|
386
|
+
return {
|
387
|
+
messages: result,
|
388
|
+
total: data.total_results,
|
389
|
+
};
|
390
|
+
}
|
391
|
+
}
|
392
|
+
|
393
|
+
module.exports = MessageManager;
|
@@ -0,0 +1,166 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const process = require('node:process');
|
4
|
+
const { Collection } = require('@discordjs/collection');
|
5
|
+
const CachedManager = require('./CachedManager');
|
6
|
+
const { TypeError } = require('../errors');
|
7
|
+
const PermissionOverwrites = require('../structures/PermissionOverwrites');
|
8
|
+
const { Role } = require('../structures/Role');
|
9
|
+
const { OverwriteTypes } = require('../util/Constants');
|
10
|
+
|
11
|
+
let cacheWarningEmitted = false;
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Manages API methods for guild channel permission overwrites and stores their cache.
|
15
|
+
* @extends {CachedManager}
|
16
|
+
*/
|
17
|
+
class PermissionOverwriteManager extends CachedManager {
|
18
|
+
constructor(channel, iterable) {
|
19
|
+
super(channel.client, PermissionOverwrites);
|
20
|
+
if (!cacheWarningEmitted && this._cache.constructor.name !== 'Collection') {
|
21
|
+
cacheWarningEmitted = true;
|
22
|
+
process.emitWarning(
|
23
|
+
`Overriding the cache handling for ${this.constructor.name} is unsupported and breaks functionality.`,
|
24
|
+
'UnsupportedCacheOverwriteWarning',
|
25
|
+
);
|
26
|
+
}
|
27
|
+
|
28
|
+
/**
|
29
|
+
* The channel of the permission overwrite this manager belongs to
|
30
|
+
* @type {GuildChannel}
|
31
|
+
*/
|
32
|
+
this.channel = channel;
|
33
|
+
|
34
|
+
if (iterable) {
|
35
|
+
for (const item of iterable) {
|
36
|
+
this._add(item);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
/**
|
42
|
+
* The cache of this Manager
|
43
|
+
* @type {Collection<Snowflake, PermissionOverwrites>}
|
44
|
+
* @name PermissionOverwriteManager#cache
|
45
|
+
*/
|
46
|
+
|
47
|
+
_add(data, cache) {
|
48
|
+
return super._add(data, cache, { extras: [this.channel] });
|
49
|
+
}
|
50
|
+
|
51
|
+
/**
|
52
|
+
* Replaces the permission overwrites in this channel.
|
53
|
+
* @param {OverwriteResolvable[]|Collection<Snowflake, OverwriteResolvable>} overwrites
|
54
|
+
* Permission overwrites the channel gets updated with
|
55
|
+
* @param {string} [reason] Reason for updating the channel overwrites
|
56
|
+
* @returns {Promise<GuildChannel>}
|
57
|
+
* @example
|
58
|
+
* message.channel.permissionOverwrites.set([
|
59
|
+
* {
|
60
|
+
* id: message.author.id,
|
61
|
+
* deny: [Permissions.FLAGS.VIEW_CHANNEL],
|
62
|
+
* },
|
63
|
+
* ], 'Needed to change permissions');
|
64
|
+
*/
|
65
|
+
set(overwrites, reason) {
|
66
|
+
if (!Array.isArray(overwrites) && !(overwrites instanceof Collection)) {
|
67
|
+
return Promise.reject(
|
68
|
+
new TypeError('INVALID_TYPE', 'overwrites', 'Array or Collection of Permission Overwrites', true),
|
69
|
+
);
|
70
|
+
}
|
71
|
+
return this.channel.edit({ permissionOverwrites: overwrites, reason });
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Extra information about the overwrite
|
76
|
+
* @typedef {Object} GuildChannelOverwriteOptions
|
77
|
+
* @property {string} [reason] Reason for creating/editing this overwrite
|
78
|
+
* @property {number} [type] The type of overwrite, either `0` for a role or `1` for a member. Use this to bypass
|
79
|
+
* automatic resolution of type that results in an error for uncached structure
|
80
|
+
*/
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Creates or edits permission overwrites for a user or role in this channel.
|
84
|
+
* @param {RoleResolvable|UserResolvable} userOrRole The user or role to update
|
85
|
+
* @param {PermissionOverwriteOptions} options The options for the update
|
86
|
+
* @param {GuildChannelOverwriteOptions} [overwriteOptions] The extra information for the update
|
87
|
+
* @param {PermissionOverwrites} [existing] The existing overwrites to merge with this update
|
88
|
+
* @returns {Promise<GuildChannel>}
|
89
|
+
* @private
|
90
|
+
*/
|
91
|
+
async upsert(userOrRole, options, overwriteOptions = {}, existing) {
|
92
|
+
const userOrRoleId = this.channel.guild.roles.resolveId(userOrRole) ?? this.client.users.resolveId(userOrRole);
|
93
|
+
let { type, reason } = overwriteOptions;
|
94
|
+
if (typeof type !== 'number') {
|
95
|
+
userOrRole = this.channel.guild.roles.resolve(userOrRole) ?? this.client.users.resolve(userOrRole);
|
96
|
+
if (!userOrRole) throw new TypeError('INVALID_TYPE', 'parameter', 'User nor a Role');
|
97
|
+
type = userOrRole instanceof Role ? OverwriteTypes.role : OverwriteTypes.member;
|
98
|
+
}
|
99
|
+
|
100
|
+
const { allow, deny } = PermissionOverwrites.resolveOverwriteOptions(options, existing);
|
101
|
+
|
102
|
+
await this.client.api
|
103
|
+
.channels(this.channel.id)
|
104
|
+
.permissions(userOrRoleId)
|
105
|
+
.put({
|
106
|
+
data: { id: userOrRoleId, type, allow, deny },
|
107
|
+
reason,
|
108
|
+
});
|
109
|
+
return this.channel;
|
110
|
+
}
|
111
|
+
|
112
|
+
/**
|
113
|
+
* Creates permission overwrites for a user or role in this channel, or replaces them if already present.
|
114
|
+
* @param {RoleResolvable|UserResolvable} userOrRole The user or role to update
|
115
|
+
* @param {PermissionOverwriteOptions} options The options for the update
|
116
|
+
* @param {GuildChannelOverwriteOptions} [overwriteOptions] The extra information for the update
|
117
|
+
* @returns {Promise<GuildChannel>}
|
118
|
+
* @example
|
119
|
+
* // Create or Replace permission overwrites for a message author
|
120
|
+
* message.channel.permissionOverwrites.create(message.author, {
|
121
|
+
* SEND_MESSAGES: false
|
122
|
+
* })
|
123
|
+
* .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))
|
124
|
+
* .catch(console.error);
|
125
|
+
*/
|
126
|
+
create(userOrRole, options, overwriteOptions) {
|
127
|
+
return this.upsert(userOrRole, options, overwriteOptions);
|
128
|
+
}
|
129
|
+
|
130
|
+
/**
|
131
|
+
* Edits permission overwrites for a user or role in this channel, or creates an entry if not already present.
|
132
|
+
* @param {RoleResolvable|UserResolvable} userOrRole The user or role to update
|
133
|
+
* @param {PermissionOverwriteOptions} options The options for the update
|
134
|
+
* @param {GuildChannelOverwriteOptions} [overwriteOptions] The extra information for the update
|
135
|
+
* @returns {Promise<GuildChannel>}
|
136
|
+
* @example
|
137
|
+
* // Edit or Create permission overwrites for a message author
|
138
|
+
* message.channel.permissionOverwrites.edit(message.author, {
|
139
|
+
* SEND_MESSAGES: false
|
140
|
+
* })
|
141
|
+
* .then(channel => console.log(channel.permissionOverwrites.cache.get(message.author.id)))
|
142
|
+
* .catch(console.error);
|
143
|
+
*/
|
144
|
+
edit(userOrRole, options, overwriteOptions) {
|
145
|
+
const existing = this.cache.get(
|
146
|
+
this.channel.guild.roles.resolveId(userOrRole) ?? this.client.users.resolveId(userOrRole),
|
147
|
+
);
|
148
|
+
return this.upsert(userOrRole, options, overwriteOptions, existing);
|
149
|
+
}
|
150
|
+
|
151
|
+
/**
|
152
|
+
* Deletes permission overwrites for a user or role in this channel.
|
153
|
+
* @param {UserResolvable|RoleResolvable} userOrRole The user or role to delete
|
154
|
+
* @param {string} [reason] The reason for deleting the overwrite
|
155
|
+
* @returns {Promise<GuildChannel>}
|
156
|
+
*/
|
157
|
+
async delete(userOrRole, reason) {
|
158
|
+
const userOrRoleId = this.channel.guild.roles.resolveId(userOrRole) ?? this.client.users.resolveId(userOrRole);
|
159
|
+
if (!userOrRoleId) throw new TypeError('INVALID_TYPE', 'parameter', 'User nor a Role');
|
160
|
+
|
161
|
+
await this.client.api.channels(this.channel.id).permissions(userOrRoleId).delete({ reason });
|
162
|
+
return this.channel;
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
166
|
+
module.exports = PermissionOverwriteManager;
|
@@ -0,0 +1,58 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const CachedManager = require('./CachedManager');
|
4
|
+
const { Presence } = require('../structures/Presence');
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Manages API methods for Presences and holds their cache.
|
8
|
+
* @extends {CachedManager}
|
9
|
+
*/
|
10
|
+
class PresenceManager extends CachedManager {
|
11
|
+
constructor(client, iterable) {
|
12
|
+
super(client, Presence, iterable);
|
13
|
+
}
|
14
|
+
|
15
|
+
/**
|
16
|
+
* The cache of Presences
|
17
|
+
* @type {Collection<Snowflake, Presence>}
|
18
|
+
* @name PresenceManager#cache
|
19
|
+
*/
|
20
|
+
|
21
|
+
_add(data, cache) {
|
22
|
+
return super._add(data, cache, { id: data.user.id });
|
23
|
+
}
|
24
|
+
|
25
|
+
/**
|
26
|
+
* Data that can be resolved to a Presence object. This can be:
|
27
|
+
* * A Presence
|
28
|
+
* * A UserResolvable
|
29
|
+
* * A Snowflake
|
30
|
+
* @typedef {Presence|UserResolvable|Snowflake} PresenceResolvable
|
31
|
+
*/
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Resolves a {@link PresenceResolvable} to a {@link Presence} object.
|
35
|
+
* @param {PresenceResolvable} presence The presence resolvable to resolve
|
36
|
+
* @returns {?Presence}
|
37
|
+
*/
|
38
|
+
resolve(presence) {
|
39
|
+
const presenceResolvable = super.resolve(presence);
|
40
|
+
if (presenceResolvable) return presenceResolvable;
|
41
|
+
const UserResolvable = this.client.users.resolveId(presence);
|
42
|
+
return super.resolve(UserResolvable);
|
43
|
+
}
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Resolves a {@link PresenceResolvable} to a {@link Presence} id.
|
47
|
+
* @param {PresenceResolvable} presence The presence resolvable to resolve
|
48
|
+
* @returns {?Snowflake}
|
49
|
+
*/
|
50
|
+
resolveId(presence) {
|
51
|
+
const presenceResolvable = super.resolveId(presence);
|
52
|
+
if (presenceResolvable) return presenceResolvable;
|
53
|
+
const userResolvable = this.client.users.resolveId(presence);
|
54
|
+
return this.cache.has(userResolvable) ? userResolvable : null;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
module.exports = PresenceManager;
|
@@ -0,0 +1,67 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const CachedManager = require('./CachedManager');
|
4
|
+
const MessageReaction = require('../structures/MessageReaction');
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Manages API methods for reactions and holds their cache.
|
8
|
+
* @extends {CachedManager}
|
9
|
+
*/
|
10
|
+
class ReactionManager extends CachedManager {
|
11
|
+
constructor(message, iterable) {
|
12
|
+
super(message.client, MessageReaction, iterable);
|
13
|
+
|
14
|
+
/**
|
15
|
+
* The message that this manager belongs to
|
16
|
+
* @type {Message}
|
17
|
+
*/
|
18
|
+
this.message = message;
|
19
|
+
}
|
20
|
+
|
21
|
+
_add(data, cache) {
|
22
|
+
return super._add(data, cache, { id: data.emoji.id ?? data.emoji.name, extras: [this.message] });
|
23
|
+
}
|
24
|
+
|
25
|
+
/**
|
26
|
+
* The reaction cache of this manager
|
27
|
+
* @type {Collection<string|Snowflake, MessageReaction>}
|
28
|
+
* @name ReactionManager#cache
|
29
|
+
*/
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Data that can be resolved to a MessageReaction object. This can be:
|
33
|
+
* * A MessageReaction
|
34
|
+
* * A Snowflake
|
35
|
+
* * The Unicode representation of an emoji
|
36
|
+
* @typedef {MessageReaction|Snowflake} MessageReactionResolvable
|
37
|
+
*/
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} object.
|
41
|
+
* @method resolve
|
42
|
+
* @memberof ReactionManager
|
43
|
+
* @instance
|
44
|
+
* @param {MessageReactionResolvable} reaction The MessageReaction to resolve
|
45
|
+
* @returns {?MessageReaction}
|
46
|
+
*/
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Resolves a {@link MessageReactionResolvable} to a {@link MessageReaction} id.
|
50
|
+
* @method resolveId
|
51
|
+
* @memberof ReactionManager
|
52
|
+
* @instance
|
53
|
+
* @param {MessageReactionResolvable} reaction The MessageReaction to resolve
|
54
|
+
* @returns {?Snowflake}
|
55
|
+
*/
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Removes all reactions from a message.
|
59
|
+
* @returns {Promise<Message>}
|
60
|
+
*/
|
61
|
+
async removeAll() {
|
62
|
+
await this.client.api.channels(this.message.channelId).messages(this.message.id).reactions.delete();
|
63
|
+
return this.message;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
module.exports = ReactionManager;
|