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,171 +1,171 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { Collection } = require('@discordjs/collection');
|
|
4
|
-
const BaseGuildEmojiManager = require('./BaseGuildEmojiManager');
|
|
5
|
-
const { Error, TypeError } = require('../errors');
|
|
6
|
-
const DataResolver = require('../util/DataResolver');
|
|
7
|
-
const Permissions = require('../util/Permissions');
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Manages API methods for GuildEmojis and stores their cache.
|
|
11
|
-
* @extends {BaseGuildEmojiManager}
|
|
12
|
-
*/
|
|
13
|
-
class GuildEmojiManager extends BaseGuildEmojiManager {
|
|
14
|
-
constructor(guild, iterable) {
|
|
15
|
-
super(guild.client, iterable);
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* The guild this manager belongs to
|
|
19
|
-
* @type {Guild}
|
|
20
|
-
*/
|
|
21
|
-
this.guild = guild;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
_add(data, cache) {
|
|
25
|
-
return super._add(data, cache, { extras: [this.guild] });
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Options used for creating an emoji in a guild.
|
|
30
|
-
* @typedef {Object} GuildEmojiCreateOptions
|
|
31
|
-
* @property {Collection<Snowflake, Role>|RoleResolvable[]} [roles] The roles to limit the emoji to
|
|
32
|
-
* @property {string} [reason] The reason for creating the emoji
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Creates a new custom emoji in the guild.
|
|
37
|
-
* @param {BufferResolvable|Base64Resolvable} attachment The image for the emoji
|
|
38
|
-
* @param {string} name The name for the emoji
|
|
39
|
-
* @param {GuildEmojiCreateOptions} [options] Options for creating the emoji
|
|
40
|
-
* @returns {Promise<Emoji>} The created emoji
|
|
41
|
-
* @example
|
|
42
|
-
* // Create a new emoji from a URL
|
|
43
|
-
* guild.emojis.create('https://i.imgur.com/w3duR07.png', 'rip')
|
|
44
|
-
* .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
|
|
45
|
-
* .catch(console.error);
|
|
46
|
-
* @example
|
|
47
|
-
* // Create a new emoji from a file on your computer
|
|
48
|
-
* guild.emojis.create('./memes/banana.png', 'banana')
|
|
49
|
-
* .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
|
|
50
|
-
* .catch(console.error);
|
|
51
|
-
*/
|
|
52
|
-
async create(attachment, name, { roles, reason } = {}) {
|
|
53
|
-
attachment = await DataResolver.resolveImage(attachment);
|
|
54
|
-
if (!attachment) throw new TypeError('REQ_RESOURCE_TYPE');
|
|
55
|
-
|
|
56
|
-
const data = { image: attachment, name };
|
|
57
|
-
if (roles) {
|
|
58
|
-
if (!Array.isArray(roles) && !(roles instanceof Collection)) {
|
|
59
|
-
throw new TypeError('INVALID_TYPE', 'options.roles', 'Array or Collection of Roles or Snowflakes', true);
|
|
60
|
-
}
|
|
61
|
-
data.roles = [];
|
|
62
|
-
for (const role of roles.values()) {
|
|
63
|
-
const resolvedRole = this.guild.roles.resolveId(role);
|
|
64
|
-
if (!resolvedRole) throw new TypeError('INVALID_ELEMENT', 'Array or Collection', 'options.roles', role);
|
|
65
|
-
data.roles.push(resolvedRole);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const emoji = await this.client.api.guilds(this.guild.id).emojis.post({ data, reason });
|
|
70
|
-
return this.client.actions.GuildEmojiCreate.handle(this.guild, emoji).emoji;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Obtains one or more emojis from Discord, or the emoji cache if they're already available.
|
|
75
|
-
* @param {Snowflake} [id] The emoji's id
|
|
76
|
-
* @param {BaseFetchOptions} [options] Additional options for this fetch
|
|
77
|
-
* @returns {Promise<GuildEmoji|Collection<Snowflake, GuildEmoji>>}
|
|
78
|
-
* @example
|
|
79
|
-
* // Fetch all emojis from the guild
|
|
80
|
-
* message.guild.emojis.fetch()
|
|
81
|
-
* .then(emojis => console.log(`There are ${emojis.size} emojis.`))
|
|
82
|
-
* .catch(console.error);
|
|
83
|
-
* @example
|
|
84
|
-
* // Fetch a single emoji
|
|
85
|
-
* message.guild.emojis.fetch('222078108977594368')
|
|
86
|
-
* .then(emoji => console.log(`The emoji name is: ${emoji.name}`))
|
|
87
|
-
* .catch(console.error);
|
|
88
|
-
*/
|
|
89
|
-
async fetch(id, { cache = true, force = false } = {}) {
|
|
90
|
-
if (id) {
|
|
91
|
-
if (!force) {
|
|
92
|
-
const existing = this.cache.get(id);
|
|
93
|
-
if (existing) return existing;
|
|
94
|
-
}
|
|
95
|
-
const emoji = await this.client.api.guilds(this.guild.id).emojis(id).get();
|
|
96
|
-
return this._add(emoji, cache);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const data = await this.client.api.guilds(this.guild.id).emojis.get();
|
|
100
|
-
const emojis = new Collection();
|
|
101
|
-
for (const emoji of data) emojis.set(emoji.id, this._add(emoji, cache));
|
|
102
|
-
return emojis;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Deletes an emoji.
|
|
107
|
-
* @param {EmojiResolvable} emoji The Emoji resolvable to delete
|
|
108
|
-
* @param {string} [reason] Reason for deleting the emoji
|
|
109
|
-
* @returns {Promise<void>}
|
|
110
|
-
*/
|
|
111
|
-
async delete(emoji, reason) {
|
|
112
|
-
const id = this.resolveId(emoji);
|
|
113
|
-
if (!id) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true);
|
|
114
|
-
await this.client.api.guilds(this.guild.id).emojis(id).delete({ reason });
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Edits an emoji.
|
|
119
|
-
* @param {EmojiResolvable} emoji The Emoji resolvable to edit
|
|
120
|
-
* @param {GuildEmojiEditData} data The new data for the emoji
|
|
121
|
-
* @param {string} [reason] Reason for editing this emoji
|
|
122
|
-
* @returns {Promise<GuildEmoji>}
|
|
123
|
-
*/
|
|
124
|
-
async edit(emoji, data, reason) {
|
|
125
|
-
const id = this.resolveId(emoji);
|
|
126
|
-
if (!id) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true);
|
|
127
|
-
const roles = data.roles?.map(r => this.guild.roles.resolveId(r));
|
|
128
|
-
const newData = await this.client.api
|
|
129
|
-
.guilds(this.guild.id)
|
|
130
|
-
.emojis(id)
|
|
131
|
-
.patch({
|
|
132
|
-
data: {
|
|
133
|
-
name: data.name,
|
|
134
|
-
roles,
|
|
135
|
-
},
|
|
136
|
-
reason,
|
|
137
|
-
});
|
|
138
|
-
const existing = this.cache.get(id);
|
|
139
|
-
if (existing) {
|
|
140
|
-
const clone = existing._clone();
|
|
141
|
-
clone._patch(newData);
|
|
142
|
-
return clone;
|
|
143
|
-
}
|
|
144
|
-
return this._add(newData);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Fetches the author for this emoji
|
|
149
|
-
* @param {EmojiResolvable} emoji The emoji to fetch the author of
|
|
150
|
-
* @returns {Promise<User>}
|
|
151
|
-
*/
|
|
152
|
-
async fetchAuthor(emoji) {
|
|
153
|
-
emoji = this.resolve(emoji);
|
|
154
|
-
if (!emoji) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true);
|
|
155
|
-
if (emoji.managed) {
|
|
156
|
-
throw new Error('EMOJI_MANAGED');
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
const { me } = this.guild.members;
|
|
160
|
-
if (!me) throw new Error('GUILD_UNCACHED_ME');
|
|
161
|
-
if (!me.permissions.has(Permissions.FLAGS.MANAGE_EMOJIS_AND_STICKERS)) {
|
|
162
|
-
throw new Error('MISSING_MANAGE_EMOJIS_AND_STICKERS_PERMISSION', this.guild);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const data = await this.client.api.guilds(this.guild.id).emojis(emoji.id).get();
|
|
166
|
-
emoji._patch(data);
|
|
167
|
-
return emoji.author;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
module.exports = GuildEmojiManager;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const BaseGuildEmojiManager = require('./BaseGuildEmojiManager');
|
|
5
|
+
const { Error, TypeError } = require('../errors');
|
|
6
|
+
const DataResolver = require('../util/DataResolver');
|
|
7
|
+
const Permissions = require('../util/Permissions');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Manages API methods for GuildEmojis and stores their cache.
|
|
11
|
+
* @extends {BaseGuildEmojiManager}
|
|
12
|
+
*/
|
|
13
|
+
class GuildEmojiManager extends BaseGuildEmojiManager {
|
|
14
|
+
constructor(guild, iterable) {
|
|
15
|
+
super(guild.client, iterable);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The guild this manager belongs to
|
|
19
|
+
* @type {Guild}
|
|
20
|
+
*/
|
|
21
|
+
this.guild = guild;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
_add(data, cache) {
|
|
25
|
+
return super._add(data, cache, { extras: [this.guild] });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Options used for creating an emoji in a guild.
|
|
30
|
+
* @typedef {Object} GuildEmojiCreateOptions
|
|
31
|
+
* @property {Collection<Snowflake, Role>|RoleResolvable[]} [roles] The roles to limit the emoji to
|
|
32
|
+
* @property {string} [reason] The reason for creating the emoji
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new custom emoji in the guild.
|
|
37
|
+
* @param {BufferResolvable|Base64Resolvable} attachment The image for the emoji
|
|
38
|
+
* @param {string} name The name for the emoji
|
|
39
|
+
* @param {GuildEmojiCreateOptions} [options] Options for creating the emoji
|
|
40
|
+
* @returns {Promise<Emoji>} The created emoji
|
|
41
|
+
* @example
|
|
42
|
+
* // Create a new emoji from a URL
|
|
43
|
+
* guild.emojis.create('https://i.imgur.com/w3duR07.png', 'rip')
|
|
44
|
+
* .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
|
|
45
|
+
* .catch(console.error);
|
|
46
|
+
* @example
|
|
47
|
+
* // Create a new emoji from a file on your computer
|
|
48
|
+
* guild.emojis.create('./memes/banana.png', 'banana')
|
|
49
|
+
* .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
|
|
50
|
+
* .catch(console.error);
|
|
51
|
+
*/
|
|
52
|
+
async create(attachment, name, { roles, reason } = {}) {
|
|
53
|
+
attachment = await DataResolver.resolveImage(attachment);
|
|
54
|
+
if (!attachment) throw new TypeError('REQ_RESOURCE_TYPE');
|
|
55
|
+
|
|
56
|
+
const data = { image: attachment, name };
|
|
57
|
+
if (roles) {
|
|
58
|
+
if (!Array.isArray(roles) && !(roles instanceof Collection)) {
|
|
59
|
+
throw new TypeError('INVALID_TYPE', 'options.roles', 'Array or Collection of Roles or Snowflakes', true);
|
|
60
|
+
}
|
|
61
|
+
data.roles = [];
|
|
62
|
+
for (const role of roles.values()) {
|
|
63
|
+
const resolvedRole = this.guild.roles.resolveId(role);
|
|
64
|
+
if (!resolvedRole) throw new TypeError('INVALID_ELEMENT', 'Array or Collection', 'options.roles', role);
|
|
65
|
+
data.roles.push(resolvedRole);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const emoji = await this.client.api.guilds(this.guild.id).emojis.post({ data, reason });
|
|
70
|
+
return this.client.actions.GuildEmojiCreate.handle(this.guild, emoji).emoji;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Obtains one or more emojis from Discord, or the emoji cache if they're already available.
|
|
75
|
+
* @param {Snowflake} [id] The emoji's id
|
|
76
|
+
* @param {BaseFetchOptions} [options] Additional options for this fetch
|
|
77
|
+
* @returns {Promise<GuildEmoji|Collection<Snowflake, GuildEmoji>>}
|
|
78
|
+
* @example
|
|
79
|
+
* // Fetch all emojis from the guild
|
|
80
|
+
* message.guild.emojis.fetch()
|
|
81
|
+
* .then(emojis => console.log(`There are ${emojis.size} emojis.`))
|
|
82
|
+
* .catch(console.error);
|
|
83
|
+
* @example
|
|
84
|
+
* // Fetch a single emoji
|
|
85
|
+
* message.guild.emojis.fetch('222078108977594368')
|
|
86
|
+
* .then(emoji => console.log(`The emoji name is: ${emoji.name}`))
|
|
87
|
+
* .catch(console.error);
|
|
88
|
+
*/
|
|
89
|
+
async fetch(id, { cache = true, force = false } = {}) {
|
|
90
|
+
if (id) {
|
|
91
|
+
if (!force) {
|
|
92
|
+
const existing = this.cache.get(id);
|
|
93
|
+
if (existing) return existing;
|
|
94
|
+
}
|
|
95
|
+
const emoji = await this.client.api.guilds(this.guild.id).emojis(id).get();
|
|
96
|
+
return this._add(emoji, cache);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const data = await this.client.api.guilds(this.guild.id).emojis.get();
|
|
100
|
+
const emojis = new Collection();
|
|
101
|
+
for (const emoji of data) emojis.set(emoji.id, this._add(emoji, cache));
|
|
102
|
+
return emojis;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Deletes an emoji.
|
|
107
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to delete
|
|
108
|
+
* @param {string} [reason] Reason for deleting the emoji
|
|
109
|
+
* @returns {Promise<void>}
|
|
110
|
+
*/
|
|
111
|
+
async delete(emoji, reason) {
|
|
112
|
+
const id = this.resolveId(emoji);
|
|
113
|
+
if (!id) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true);
|
|
114
|
+
await this.client.api.guilds(this.guild.id).emojis(id).delete({ reason });
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Edits an emoji.
|
|
119
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to edit
|
|
120
|
+
* @param {GuildEmojiEditData} data The new data for the emoji
|
|
121
|
+
* @param {string} [reason] Reason for editing this emoji
|
|
122
|
+
* @returns {Promise<GuildEmoji>}
|
|
123
|
+
*/
|
|
124
|
+
async edit(emoji, data, reason) {
|
|
125
|
+
const id = this.resolveId(emoji);
|
|
126
|
+
if (!id) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true);
|
|
127
|
+
const roles = data.roles?.map(r => this.guild.roles.resolveId(r));
|
|
128
|
+
const newData = await this.client.api
|
|
129
|
+
.guilds(this.guild.id)
|
|
130
|
+
.emojis(id)
|
|
131
|
+
.patch({
|
|
132
|
+
data: {
|
|
133
|
+
name: data.name,
|
|
134
|
+
roles,
|
|
135
|
+
},
|
|
136
|
+
reason,
|
|
137
|
+
});
|
|
138
|
+
const existing = this.cache.get(id);
|
|
139
|
+
if (existing) {
|
|
140
|
+
const clone = existing._clone();
|
|
141
|
+
clone._patch(newData);
|
|
142
|
+
return clone;
|
|
143
|
+
}
|
|
144
|
+
return this._add(newData);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Fetches the author for this emoji
|
|
149
|
+
* @param {EmojiResolvable} emoji The emoji to fetch the author of
|
|
150
|
+
* @returns {Promise<User>}
|
|
151
|
+
*/
|
|
152
|
+
async fetchAuthor(emoji) {
|
|
153
|
+
emoji = this.resolve(emoji);
|
|
154
|
+
if (!emoji) throw new TypeError('INVALID_TYPE', 'emoji', 'EmojiResolvable', true);
|
|
155
|
+
if (emoji.managed) {
|
|
156
|
+
throw new Error('EMOJI_MANAGED');
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const { me } = this.guild.members;
|
|
160
|
+
if (!me) throw new Error('GUILD_UNCACHED_ME');
|
|
161
|
+
if (!me.permissions.has(Permissions.FLAGS.MANAGE_EMOJIS_AND_STICKERS)) {
|
|
162
|
+
throw new Error('MISSING_MANAGE_EMOJIS_AND_STICKERS_PERMISSION', this.guild);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const data = await this.client.api.guilds(this.guild.id).emojis(emoji.id).get();
|
|
166
|
+
emoji._patch(data);
|
|
167
|
+
return emoji.author;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
module.exports = GuildEmojiManager;
|
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { Collection } = require('@discordjs/collection');
|
|
4
|
-
const DataManager = require('./DataManager');
|
|
5
|
-
const { TypeError } = require('../errors');
|
|
6
|
-
const { Role } = require('../structures/Role');
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Manages API methods for roles belonging to emojis and stores their cache.
|
|
10
|
-
* @extends {DataManager}
|
|
11
|
-
*/
|
|
12
|
-
class GuildEmojiRoleManager extends DataManager {
|
|
13
|
-
constructor(emoji) {
|
|
14
|
-
super(emoji.client, Role);
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* The emoji belonging to this manager
|
|
18
|
-
* @type {GuildEmoji}
|
|
19
|
-
*/
|
|
20
|
-
this.emoji = emoji;
|
|
21
|
-
/**
|
|
22
|
-
* The guild belonging to this manager
|
|
23
|
-
* @type {Guild}
|
|
24
|
-
*/
|
|
25
|
-
this.guild = emoji.guild;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* The cache of roles belonging to this emoji
|
|
30
|
-
* @type {Collection<Snowflake, Role>}
|
|
31
|
-
* @readonly
|
|
32
|
-
*/
|
|
33
|
-
get cache() {
|
|
34
|
-
return this.guild.roles.cache.filter(role => this.emoji._roles.includes(role.id));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Adds a role (or multiple roles) to the list of roles that can use this emoji.
|
|
39
|
-
* @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to add
|
|
40
|
-
* @returns {Promise<GuildEmoji>}
|
|
41
|
-
*/
|
|
42
|
-
add(roleOrRoles) {
|
|
43
|
-
if (!Array.isArray(roleOrRoles) && !(roleOrRoles instanceof Collection)) roleOrRoles = [roleOrRoles];
|
|
44
|
-
|
|
45
|
-
const resolvedRoles = [];
|
|
46
|
-
for (const role of roleOrRoles.values()) {
|
|
47
|
-
const resolvedRole = this.guild.roles.resolveId(role);
|
|
48
|
-
if (!resolvedRole) {
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
resolvedRoles.push(resolvedRole);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const newRoles = [...new Set(resolvedRoles.concat(...this.cache.keys()))];
|
|
55
|
-
return this.set(newRoles);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Removes a role (or multiple roles) from the list of roles that can use this emoji.
|
|
60
|
-
* @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to remove
|
|
61
|
-
* @returns {Promise<GuildEmoji>}
|
|
62
|
-
*/
|
|
63
|
-
remove(roleOrRoles) {
|
|
64
|
-
if (!Array.isArray(roleOrRoles) && !(roleOrRoles instanceof Collection)) roleOrRoles = [roleOrRoles];
|
|
65
|
-
|
|
66
|
-
const resolvedRoleIds = [];
|
|
67
|
-
for (const role of roleOrRoles.values()) {
|
|
68
|
-
const roleId = this.guild.roles.resolveId(role);
|
|
69
|
-
if (!roleId) {
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
resolvedRoleIds.push(roleId);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const newRoles = [...this.cache.keys()].filter(id => !resolvedRoleIds.includes(id));
|
|
76
|
-
return this.set(newRoles);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Sets the role(s) that can use this emoji.
|
|
81
|
-
* @param {Collection<Snowflake, Role>|RoleResolvable[]} roles The roles or role ids to apply
|
|
82
|
-
* @returns {Promise<GuildEmoji>}
|
|
83
|
-
* @example
|
|
84
|
-
* // Set the emoji's roles to a single role
|
|
85
|
-
* guildEmoji.roles.set(['391156570408615936'])
|
|
86
|
-
* .then(console.log)
|
|
87
|
-
* .catch(console.error);
|
|
88
|
-
* @example
|
|
89
|
-
* // Remove all roles from an emoji
|
|
90
|
-
* guildEmoji.roles.set([])
|
|
91
|
-
* .then(console.log)
|
|
92
|
-
* .catch(console.error);
|
|
93
|
-
*/
|
|
94
|
-
set(roles) {
|
|
95
|
-
return this.emoji.edit({ roles });
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
clone() {
|
|
99
|
-
const clone = new this.constructor(this.emoji);
|
|
100
|
-
clone._patch([...this.cache.keys()]);
|
|
101
|
-
return clone;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Patches the roles for this manager's cache
|
|
106
|
-
* @param {Snowflake[]} roles The new roles
|
|
107
|
-
* @private
|
|
108
|
-
*/
|
|
109
|
-
_patch(roles) {
|
|
110
|
-
this.emoji._roles = roles;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
valueOf() {
|
|
114
|
-
return this.cache;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
module.exports = GuildEmojiRoleManager;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const DataManager = require('./DataManager');
|
|
5
|
+
const { TypeError } = require('../errors');
|
|
6
|
+
const { Role } = require('../structures/Role');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Manages API methods for roles belonging to emojis and stores their cache.
|
|
10
|
+
* @extends {DataManager}
|
|
11
|
+
*/
|
|
12
|
+
class GuildEmojiRoleManager extends DataManager {
|
|
13
|
+
constructor(emoji) {
|
|
14
|
+
super(emoji.client, Role);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The emoji belonging to this manager
|
|
18
|
+
* @type {GuildEmoji}
|
|
19
|
+
*/
|
|
20
|
+
this.emoji = emoji;
|
|
21
|
+
/**
|
|
22
|
+
* The guild belonging to this manager
|
|
23
|
+
* @type {Guild}
|
|
24
|
+
*/
|
|
25
|
+
this.guild = emoji.guild;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The cache of roles belonging to this emoji
|
|
30
|
+
* @type {Collection<Snowflake, Role>}
|
|
31
|
+
* @readonly
|
|
32
|
+
*/
|
|
33
|
+
get cache() {
|
|
34
|
+
return this.guild.roles.cache.filter(role => this.emoji._roles.includes(role.id));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Adds a role (or multiple roles) to the list of roles that can use this emoji.
|
|
39
|
+
* @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to add
|
|
40
|
+
* @returns {Promise<GuildEmoji>}
|
|
41
|
+
*/
|
|
42
|
+
async add(roleOrRoles) {
|
|
43
|
+
if (!Array.isArray(roleOrRoles) && !(roleOrRoles instanceof Collection)) roleOrRoles = [roleOrRoles];
|
|
44
|
+
|
|
45
|
+
const resolvedRoles = [];
|
|
46
|
+
for (const role of roleOrRoles.values()) {
|
|
47
|
+
const resolvedRole = this.guild.roles.resolveId(role);
|
|
48
|
+
if (!resolvedRole) {
|
|
49
|
+
throw new TypeError('INVALID_ELEMENT', 'Array or Collection', 'roles', role);
|
|
50
|
+
}
|
|
51
|
+
resolvedRoles.push(resolvedRole);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const newRoles = [...new Set(resolvedRoles.concat(...this.cache.keys()))];
|
|
55
|
+
return this.set(newRoles);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Removes a role (or multiple roles) from the list of roles that can use this emoji.
|
|
60
|
+
* @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to remove
|
|
61
|
+
* @returns {Promise<GuildEmoji>}
|
|
62
|
+
*/
|
|
63
|
+
async remove(roleOrRoles) {
|
|
64
|
+
if (!Array.isArray(roleOrRoles) && !(roleOrRoles instanceof Collection)) roleOrRoles = [roleOrRoles];
|
|
65
|
+
|
|
66
|
+
const resolvedRoleIds = [];
|
|
67
|
+
for (const role of roleOrRoles.values()) {
|
|
68
|
+
const roleId = this.guild.roles.resolveId(role);
|
|
69
|
+
if (!roleId) {
|
|
70
|
+
throw new TypeError('INVALID_ELEMENT', 'Array or Collection', 'roles', role);
|
|
71
|
+
}
|
|
72
|
+
resolvedRoleIds.push(roleId);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const newRoles = [...this.cache.keys()].filter(id => !resolvedRoleIds.includes(id));
|
|
76
|
+
return this.set(newRoles);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Sets the role(s) that can use this emoji.
|
|
81
|
+
* @param {Collection<Snowflake, Role>|RoleResolvable[]} roles The roles or role ids to apply
|
|
82
|
+
* @returns {Promise<GuildEmoji>}
|
|
83
|
+
* @example
|
|
84
|
+
* // Set the emoji's roles to a single role
|
|
85
|
+
* guildEmoji.roles.set(['391156570408615936'])
|
|
86
|
+
* .then(console.log)
|
|
87
|
+
* .catch(console.error);
|
|
88
|
+
* @example
|
|
89
|
+
* // Remove all roles from an emoji
|
|
90
|
+
* guildEmoji.roles.set([])
|
|
91
|
+
* .then(console.log)
|
|
92
|
+
* .catch(console.error);
|
|
93
|
+
*/
|
|
94
|
+
set(roles) {
|
|
95
|
+
return this.emoji.edit({ roles });
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
clone() {
|
|
99
|
+
const clone = new this.constructor(this.emoji);
|
|
100
|
+
clone._patch([...this.cache.keys()]);
|
|
101
|
+
return clone;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Patches the roles for this manager's cache
|
|
106
|
+
* @param {Snowflake[]} roles The new roles
|
|
107
|
+
* @private
|
|
108
|
+
*/
|
|
109
|
+
_patch(roles) {
|
|
110
|
+
this.emoji._roles = roles;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
valueOf() {
|
|
114
|
+
return this.cache;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
module.exports = GuildEmojiRoleManager;
|