@ovencord/discord.js 14.16.3
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 +191 -0
- package/README.md +148 -0
- package/package.json +73 -0
- package/src/client/Client.ts +967 -0
- package/src/client/actions/Action.ts +141 -0
- package/src/client/actions/ActionsManager.ts +138 -0
- package/src/client/actions/ChannelCreate.ts +21 -0
- package/src/client/actions/ChannelDelete.ts +20 -0
- package/src/client/actions/ChannelUpdate.ts +38 -0
- package/src/client/actions/GuildChannelsPositionUpdate.ts +17 -0
- package/src/client/actions/GuildEmojiCreate.ts +17 -0
- package/src/client/actions/GuildEmojiDelete.ts +16 -0
- package/src/client/actions/GuildEmojiUpdate.ts +17 -0
- package/src/client/actions/GuildEmojisUpdate.ts +30 -0
- package/src/client/actions/GuildMemberRemove.ts +29 -0
- package/src/client/actions/GuildMemberUpdate.ts +41 -0
- package/src/client/actions/GuildRoleCreate.ts +23 -0
- package/src/client/actions/GuildRoleDelete.ts +26 -0
- package/src/client/actions/GuildRolesPositionUpdate.ts +17 -0
- package/src/client/actions/GuildScheduledEventDelete.ts +28 -0
- package/src/client/actions/GuildScheduledEventUserAdd.ts +29 -0
- package/src/client/actions/GuildScheduledEventUserRemove.ts +29 -0
- package/src/client/actions/GuildSoundboardSoundDelete.ts +26 -0
- package/src/client/actions/GuildStickerCreate.ts +17 -0
- package/src/client/actions/GuildStickerDelete.ts +16 -0
- package/src/client/actions/GuildStickerUpdate.ts +17 -0
- package/src/client/actions/GuildStickersUpdate.ts +30 -0
- package/src/client/actions/GuildUpdate.ts +30 -0
- package/src/client/actions/InteractionCreate.ts +104 -0
- package/src/client/actions/MessageCreate.ts +38 -0
- package/src/client/actions/MessageDelete.ts +29 -0
- package/src/client/actions/MessageDeleteBulk.ts +45 -0
- package/src/client/actions/MessagePollVoteAdd.ts +37 -0
- package/src/client/actions/MessagePollVoteRemove.ts +35 -0
- package/src/client/actions/MessageReactionAdd.ts +68 -0
- package/src/client/actions/MessageReactionRemove.ts +47 -0
- package/src/client/actions/MessageReactionRemoveAll.ts +30 -0
- package/src/client/actions/MessageReactionRemoveEmoji.ts +25 -0
- package/src/client/actions/MessageUpdate.ts +22 -0
- package/src/client/actions/StageInstanceCreate.ts +25 -0
- package/src/client/actions/StageInstanceDelete.ts +28 -0
- package/src/client/actions/StageInstanceUpdate.ts +27 -0
- package/src/client/actions/ThreadCreate.ts +22 -0
- package/src/client/actions/ThreadMembersUpdate.ts +45 -0
- package/src/client/actions/TypingStart.ts +26 -0
- package/src/client/actions/UserUpdate.ts +33 -0
- package/src/client/voice/ClientVoiceManager.ts +46 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts +19 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.ts +17 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.ts +18 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.ts +21 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.ts +20 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.ts +4 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.ts +4 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.ts +22 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/ENTITLEMENT_CREATE.ts +14 -0
- package/src/client/websocket/handlers/ENTITLEMENT_DELETE.ts +18 -0
- package/src/client/websocket/handlers/ENTITLEMENT_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.ts +19 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.ts +15 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.ts +20 -0
- package/src/client/websocket/handlers/GUILD_CREATE.ts +34 -0
- package/src/client/websocket/handlers/GUILD_DELETE.ts +36 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.ts +15 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.ts +40 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.ts +17 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.ts +21 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.ts +17 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.ts +19 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.ts +4 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.ts +24 -0
- package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.ts +18 -0
- package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.ts +20 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.ts +4 -0
- package/src/client/websocket/handlers/INVITE_CREATE.ts +20 -0
- package/src/client/websocket/handlers/INVITE_DELETE.ts +23 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.ts +42 -0
- package/src/client/websocket/handlers/RATE_LIMITED.ts +23 -0
- package/src/client/websocket/handlers/READY.ts +29 -0
- package/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.ts +24 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.ts +4 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.ts +4 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/SUBSCRIPTION_CREATE.ts +14 -0
- package/src/client/websocket/handlers/SUBSCRIPTION_DELETE.ts +16 -0
- package/src/client/websocket/handlers/SUBSCRIPTION_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/THREAD_CREATE.ts +4 -0
- package/src/client/websocket/handlers/THREAD_DELETE.ts +17 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.ts +50 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.ts +25 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/TYPING_START.ts +4 -0
- package/src/client/websocket/handlers/USER_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.ts +16 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.ts +5 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.ts +37 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/index.ts +74 -0
- package/src/errors/DJSError.ts +50 -0
- package/src/errors/ErrorCodes.ts +277 -0
- package/src/errors/Messages.ts +155 -0
- package/src/errors/index.ts +6 -0
- package/src/index.ts +241 -0
- package/src/managers/ApplicationCommandManager.ts +303 -0
- package/src/managers/ApplicationCommandPermissionsManager.ts +453 -0
- package/src/managers/ApplicationEmojiManager.ts +149 -0
- package/src/managers/AutoModerationRuleManager.ts +307 -0
- package/src/managers/BaseManager.ts +13 -0
- package/src/managers/CachedManager.ts +56 -0
- package/src/managers/CategoryChannelChildManager.ts +81 -0
- package/src/managers/ChannelManager.ts +194 -0
- package/src/managers/DMMessageManager.ts +15 -0
- package/src/managers/DataManager.ts +38 -0
- package/src/managers/EntitlementManager.ts +182 -0
- package/src/managers/GuildApplicationCommandManager.ts +29 -0
- package/src/managers/GuildBanManager.ts +221 -0
- package/src/managers/GuildChannelManager.ts +552 -0
- package/src/managers/GuildEmojiManager.ts +262 -0
- package/src/managers/GuildEmojiRoleManager.ts +134 -0
- package/src/managers/GuildForumThreadManager.ts +84 -0
- package/src/managers/GuildInviteManager.ts +236 -0
- package/src/managers/GuildManager.ts +265 -0
- package/src/managers/GuildMemberManager.ts +619 -0
- package/src/managers/GuildMemberRoleManager.ts +230 -0
- package/src/managers/GuildMessageManager.ts +31 -0
- package/src/managers/GuildScheduledEventManager.ts +330 -0
- package/src/managers/GuildSoundboardSoundManager.ts +157 -0
- package/src/managers/GuildStickerManager.ts +192 -0
- package/src/managers/GuildTextThreadManager.ts +91 -0
- package/src/managers/MessageManager.ts +352 -0
- package/src/managers/PartialGroupDMMessageManager.ts +15 -0
- package/src/managers/PermissionOverwriteManager.ts +174 -0
- package/src/managers/PollAnswerVoterManager.ts +59 -0
- package/src/managers/PresenceManager.ts +60 -0
- package/src/managers/ReactionManager.ts +72 -0
- package/src/managers/ReactionUserManager.ts +82 -0
- package/src/managers/RoleManager.ts +432 -0
- package/src/managers/StageInstanceManager.ts +166 -0
- package/src/managers/SubscriptionManager.ts +83 -0
- package/src/managers/ThreadManager.ts +210 -0
- package/src/managers/ThreadMemberManager.ts +194 -0
- package/src/managers/UserManager.ts +139 -0
- package/src/managers/VoiceStateManager.ts +61 -0
- package/src/sharding/Shard.ts +513 -0
- package/src/sharding/ShardClientUtil.ts +293 -0
- package/src/sharding/ShardingManager.ts +374 -0
- package/src/structures/ActionRow.ts +31 -0
- package/src/structures/AnnouncementChannel.ts +25 -0
- package/src/structures/AnonymousGuild.ts +110 -0
- package/src/structures/ApplicationCommand.ts +675 -0
- package/src/structures/ApplicationEmoji.ts +189 -0
- package/src/structures/ApplicationRoleConnectionMetadata.ts +54 -0
- package/src/structures/Attachment.ts +189 -0
- package/src/structures/AuthorizingIntegrationOwners.ts +63 -0
- package/src/structures/AutoModerationActionExecution.ts +138 -0
- package/src/structures/AutoModerationRule.ts +325 -0
- package/src/structures/AutocompleteInteraction.ts +115 -0
- package/src/structures/Base.ts +37 -0
- package/src/structures/BaseChannel.ts +188 -0
- package/src/structures/BaseGuild.ts +134 -0
- package/src/structures/BaseGuildEmoji.ts +113 -0
- package/src/structures/BaseGuildTextChannel.ts +230 -0
- package/src/structures/BaseGuildVoiceChannel.ts +270 -0
- package/src/structures/BaseInteraction.ts +393 -0
- package/src/structures/BaseInvite.ts +192 -0
- package/src/structures/BaseSelectMenuComponent.ts +58 -0
- package/src/structures/ButtonComponent.ts +68 -0
- package/src/structures/ButtonInteraction.ts +8 -0
- package/src/structures/CategoryChannel.ts +46 -0
- package/src/structures/ChannelSelectMenuComponent.ts +18 -0
- package/src/structures/ChannelSelectMenuInteraction.ts +34 -0
- package/src/structures/ChatInputCommandInteraction.ts +43 -0
- package/src/structures/ClientApplication.ts +470 -0
- package/src/structures/ClientPresence.ts +87 -0
- package/src/structures/ClientUser.ts +219 -0
- package/src/structures/CommandInteraction.ts +193 -0
- package/src/structures/CommandInteractionOptionResolver.ts +336 -0
- package/src/structures/Component.ts +59 -0
- package/src/structures/ContainerComponent.ts +63 -0
- package/src/structures/ContextMenuCommandInteraction.ts +68 -0
- package/src/structures/DMChannel.ts +148 -0
- package/src/structures/DirectoryChannel.ts +40 -0
- package/src/structures/Embed.ts +251 -0
- package/src/structures/Emoji.ts +61 -0
- package/src/structures/Entitlement.ts +206 -0
- package/src/structures/FileComponent.ts +41 -0
- package/src/structures/ForumChannel.ts +31 -0
- package/src/structures/GroupDMInvite.ts +34 -0
- package/src/structures/Guild.ts +1605 -0
- package/src/structures/GuildAuditLogs.ts +99 -0
- package/src/structures/GuildAuditLogsEntry.ts +557 -0
- package/src/structures/GuildBan.ts +65 -0
- package/src/structures/GuildChannel.ts +515 -0
- package/src/structures/GuildEmoji.ts +159 -0
- package/src/structures/GuildInvite.ts +233 -0
- package/src/structures/GuildMember.ts +643 -0
- package/src/structures/GuildOnboarding.ts +73 -0
- package/src/structures/GuildOnboardingPrompt.ts +93 -0
- package/src/structures/GuildOnboardingPromptOption.ts +100 -0
- package/src/structures/GuildPreview.ts +218 -0
- package/src/structures/GuildPreviewEmoji.ts +28 -0
- package/src/structures/GuildScheduledEvent.ts +593 -0
- package/src/structures/GuildTemplate.ts +229 -0
- package/src/structures/Integration.ts +257 -0
- package/src/structures/IntegrationApplication.ts +84 -0
- package/src/structures/InteractionCallback.ts +86 -0
- package/src/structures/InteractionCallbackResource.ts +57 -0
- package/src/structures/InteractionCallbackResponse.ts +35 -0
- package/src/structures/InteractionCollector.ts +260 -0
- package/src/structures/InteractionWebhook.ts +65 -0
- package/src/structures/InviteGuild.ts +22 -0
- package/src/structures/LabelComponent.ts +51 -0
- package/src/structures/MediaChannel.ts +8 -0
- package/src/structures/MediaGalleryComponent.ts +31 -0
- package/src/structures/MediaGalleryItem.ts +54 -0
- package/src/structures/MentionableSelectMenuComponent.ts +8 -0
- package/src/structures/MentionableSelectMenuInteraction.ts +76 -0
- package/src/structures/Message.ts +1202 -0
- package/src/structures/MessageCollector.ts +155 -0
- package/src/structures/MessageComponentInteraction.ts +132 -0
- package/src/structures/MessageContextMenuCommandInteraction.ts +18 -0
- package/src/structures/MessageMentions.ts +327 -0
- package/src/structures/MessagePayload.ts +325 -0
- package/src/structures/MessageReaction.ts +219 -0
- package/src/structures/ModalComponentResolver.ts +237 -0
- package/src/structures/ModalSubmitInteraction.ts +260 -0
- package/src/structures/OAuth2Guild.ts +30 -0
- package/src/structures/PartialGroupDMChannel.ts +151 -0
- package/src/structures/PermissionOverwrites.ts +222 -0
- package/src/structures/Poll.ts +195 -0
- package/src/structures/PollAnswer.ts +100 -0
- package/src/structures/Presence.ts +448 -0
- package/src/structures/PrimaryEntryPointCommandInteraction.ts +8 -0
- package/src/structures/ReactionCollector.ts +245 -0
- package/src/structures/ReactionEmoji.ts +30 -0
- package/src/structures/Role.ts +543 -0
- package/src/structures/RoleSelectMenuComponent.ts +8 -0
- package/src/structures/RoleSelectMenuInteraction.ts +34 -0
- package/src/structures/SKU.ts +62 -0
- package/src/structures/SectionComponent.ts +44 -0
- package/src/structures/SeparatorComponent.ts +29 -0
- package/src/structures/SoundboardSound.ts +176 -0
- package/src/structures/StageChannel.ts +118 -0
- package/src/structures/StageInstance.ts +173 -0
- package/src/structures/Sticker.ts +300 -0
- package/src/structures/StickerPack.ts +111 -0
- package/src/structures/StringSelectMenuComponent.ts +18 -0
- package/src/structures/StringSelectMenuInteraction.ts +21 -0
- package/src/structures/Subscription.ts +138 -0
- package/src/structures/Team.ts +131 -0
- package/src/structures/TeamMember.ts +77 -0
- package/src/structures/TextChannel.ts +33 -0
- package/src/structures/TextDisplayComponent.ts +18 -0
- package/src/structures/TextInputComponent.ts +28 -0
- package/src/structures/ThreadChannel.ts +680 -0
- package/src/structures/ThreadMember.ts +125 -0
- package/src/structures/ThreadOnlyChannel.ts +276 -0
- package/src/structures/ThumbnailComponent.ts +51 -0
- package/src/structures/Typing.ts +81 -0
- package/src/structures/UnfurledMediaItem.ts +33 -0
- package/src/structures/User.ts +511 -0
- package/src/structures/UserContextMenuCommandInteraction.ts +28 -0
- package/src/structures/UserSelectMenuComponent.ts +8 -0
- package/src/structures/UserSelectMenuInteraction.ts +54 -0
- package/src/structures/VoiceChannel.ts +119 -0
- package/src/structures/VoiceChannelEffect.ts +92 -0
- package/src/structures/VoiceRegion.ts +52 -0
- package/src/structures/VoiceState.ts +346 -0
- package/src/structures/Webhook.ts +526 -0
- package/src/structures/WelcomeChannel.ts +67 -0
- package/src/structures/WelcomeScreen.ts +53 -0
- package/src/structures/Widget.ts +110 -0
- package/src/structures/WidgetMember.ts +124 -0
- package/src/structures/interfaces/Application.ts +179 -0
- package/src/structures/interfaces/Collector.ts +372 -0
- package/src/structures/interfaces/InteractionResponses.ts +384 -0
- package/src/structures/interfaces/TextBasedChannel.ts +430 -0
- package/src/util/APITypes.ts +690 -0
- package/src/util/ActivityFlagsBitField.ts +26 -0
- package/src/util/ApplicationFlagsBitField.ts +43 -0
- package/src/util/AttachmentFlagsBitField.ts +26 -0
- package/src/util/BitField.ts +178 -0
- package/src/util/ChannelFlagsBitField.ts +43 -0
- package/src/util/Channels.ts +165 -0
- package/src/util/Colors.ts +72 -0
- package/src/util/Components.ts +285 -0
- package/src/util/Constants.ts +251 -0
- package/src/util/DataResolver.ts +146 -0
- package/src/util/Enums.ts +10 -0
- package/src/util/Events.ts +178 -0
- package/src/util/GuildMemberFlagsBitField.ts +43 -0
- package/src/util/IntentsBitField.ts +35 -0
- package/src/util/InviteFlagsBitField.ts +26 -0
- package/src/util/Invites.ts +27 -0
- package/src/util/LimitedCollection.ts +73 -0
- package/src/util/MessageFlagsBitField.ts +43 -0
- package/src/util/Options.ts +215 -0
- package/src/util/Partials.ts +50 -0
- package/src/util/PermissionsBitField.ts +113 -0
- package/src/util/RoleFlagsBitField.ts +26 -0
- package/src/util/SKUFlagsBitField.ts +26 -0
- package/src/util/ShardEvents.ts +26 -0
- package/src/util/Status.ts +16 -0
- package/src/util/Sweepers.ts +532 -0
- package/src/util/Symbols.ts +1 -0
- package/src/util/SystemChannelFlagsBitField.ts +45 -0
- package/src/util/ThreadMemberFlagsBitField.ts +33 -0
- package/src/util/Transformers.ts +123 -0
- package/src/util/UserFlagsBitField.ts +33 -0
- package/src/util/Util.ts +519 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { Collection } from '@ovencord/collection';
|
|
2
|
+
import { Routes, PermissionFlagsBits } from 'discord-api-types/v10';
|
|
3
|
+
import { DiscordjsError, DiscordjsTypeError, ErrorCodes } from '../errors/index.js';
|
|
4
|
+
import { ApplicationEmoji } from '../structures/ApplicationEmoji.js';
|
|
5
|
+
import { GuildEmoji } from '../structures/GuildEmoji.js';
|
|
6
|
+
import { ReactionEmoji } from '../structures/ReactionEmoji.js';
|
|
7
|
+
import { resolveImage } from '../util/DataResolver.js';
|
|
8
|
+
import { parseEmoji } from '../util/Util.js';
|
|
9
|
+
import { CachedManager } from './CachedManager.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Manages API methods for GuildEmojis and stores their cache.
|
|
13
|
+
*
|
|
14
|
+
* @extends {CachedManager}
|
|
15
|
+
*/
|
|
16
|
+
export class GuildEmojiManager extends CachedManager {
|
|
17
|
+
public guild: any;
|
|
18
|
+
constructor(guild, iterable) {
|
|
19
|
+
super(guild.client, GuildEmoji, iterable);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The guild this manager belongs to
|
|
23
|
+
*
|
|
24
|
+
* @type {Guild}
|
|
25
|
+
*/
|
|
26
|
+
this.guild = guild;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
_add(data, cache) {
|
|
30
|
+
return super._add(data, cache, { extras: [this.guild] });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The cache of GuildEmojis
|
|
35
|
+
*
|
|
36
|
+
* @type {Collection<Snowflake, GuildEmoji>}
|
|
37
|
+
* @name GuildEmojiManager#cache
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Data that can be resolved into a GuildEmoji object. This can be:
|
|
42
|
+
* - A Snowflake
|
|
43
|
+
* - A GuildEmoji object
|
|
44
|
+
* - A ReactionEmoji object
|
|
45
|
+
* - An ApplicationEmoji object
|
|
46
|
+
*
|
|
47
|
+
* @typedef {Snowflake|GuildEmoji|ReactionEmoji|ApplicationEmoji} EmojiResolvable
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Resolves an EmojiResolvable to an Emoji object.
|
|
52
|
+
*
|
|
53
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to identify
|
|
54
|
+
* @returns {?GuildEmoji}
|
|
55
|
+
*/
|
|
56
|
+
resolve(emoji) {
|
|
57
|
+
if (emoji instanceof ReactionEmoji) return super.cache.get(emoji.id) ?? null;
|
|
58
|
+
if (emoji instanceof ApplicationEmoji) return super.cache.get(emoji.id) ?? null;
|
|
59
|
+
return super.resolve(emoji);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Resolves an EmojiResolvable to an Emoji id string.
|
|
64
|
+
*
|
|
65
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to identify
|
|
66
|
+
* @returns {?Snowflake}
|
|
67
|
+
*/
|
|
68
|
+
resolveId(emoji) {
|
|
69
|
+
if (emoji instanceof ReactionEmoji) return emoji.id;
|
|
70
|
+
if (emoji instanceof ApplicationEmoji) return emoji.id;
|
|
71
|
+
return super.resolveId(emoji);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Data that can be resolved to give an emoji identifier. This can be:
|
|
76
|
+
* - An EmojiResolvable
|
|
77
|
+
* - The `<a:name:id>`, `<:name:id>`, `a:name:id` or `name:id` emoji identifier string of an emoji
|
|
78
|
+
* - The Unicode representation of an emoji
|
|
79
|
+
*
|
|
80
|
+
* @typedef {string|EmojiResolvable} EmojiIdentifierResolvable
|
|
81
|
+
*/
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Resolves an EmojiResolvable to an emoji identifier.
|
|
85
|
+
*
|
|
86
|
+
* @param {EmojiIdentifierResolvable} emoji The emoji resolvable to resolve
|
|
87
|
+
* @returns {?string}
|
|
88
|
+
*/
|
|
89
|
+
resolveIdentifier(emoji) {
|
|
90
|
+
const emojiResolvable = this.resolve(emoji);
|
|
91
|
+
if (emojiResolvable) return emojiResolvable.identifier;
|
|
92
|
+
if (emoji instanceof ReactionEmoji) return emoji.identifier;
|
|
93
|
+
if (emoji instanceof ApplicationEmoji) return emoji.identifier;
|
|
94
|
+
if (typeof emoji === 'string') {
|
|
95
|
+
const res = parseEmoji(emoji);
|
|
96
|
+
let identifier = emoji;
|
|
97
|
+
if (res?.name.length) {
|
|
98
|
+
identifier = `${res.animated ? 'a:' : ''}${res.name}${res.id ? `:${res.id}` : ''}`;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (!identifier.includes('%')) return encodeURIComponent(identifier);
|
|
102
|
+
return identifier;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Options used for creating an emoji in a guild.
|
|
110
|
+
*
|
|
111
|
+
* @typedef {Object} GuildEmojiCreateOptions
|
|
112
|
+
* @property {BufferResolvable|Base64Resolvable} attachment The image for the emoji
|
|
113
|
+
* @property {string} name The name for the emoji
|
|
114
|
+
* @property {Collection<Snowflake, Role>|RoleResolvable[]} [roles] The roles to limit the emoji to
|
|
115
|
+
* @property {string} [reason] The reason for creating the emoji
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Creates a new custom emoji in the guild.
|
|
120
|
+
*
|
|
121
|
+
* @param {GuildEmojiCreateOptions} options Options for creating the emoji
|
|
122
|
+
* @returns {Promise<Emoji>} The created emoji
|
|
123
|
+
* @example
|
|
124
|
+
* // Create a new emoji from a URL
|
|
125
|
+
* guild.emojis.create({ attachment: 'https://i.imgur.com/w3duR07.png', name: 'rip' })
|
|
126
|
+
* .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
|
|
127
|
+
* .catch(console.error);
|
|
128
|
+
* @example
|
|
129
|
+
* // Create a new emoji from a file on your computer
|
|
130
|
+
* guild.emojis.create({ attachment: './memes/banana.png', name: 'banana' })
|
|
131
|
+
* .then(emoji => console.log(`Created new emoji with name ${emoji.name}!`))
|
|
132
|
+
* .catch(console.error);
|
|
133
|
+
*/
|
|
134
|
+
async create({ attachment, name, roles, reason }) {
|
|
135
|
+
const image = await resolveImage(attachment);
|
|
136
|
+
if (!image) throw new DiscordjsTypeError(ErrorCodes.ReqResourceType);
|
|
137
|
+
|
|
138
|
+
const body = { image, name };
|
|
139
|
+
if (roles) {
|
|
140
|
+
if (!Array.isArray(roles) && !(roles instanceof Collection)) {
|
|
141
|
+
throw new DiscordjsTypeError(
|
|
142
|
+
ErrorCodes.InvalidType,
|
|
143
|
+
'options.roles',
|
|
144
|
+
'Array or Collection of Roles or Snowflakes',
|
|
145
|
+
true,
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
body.roles = [];
|
|
150
|
+
for (const role of roles.values()) {
|
|
151
|
+
const resolvedRole = this.guild.roles.resolveId(role);
|
|
152
|
+
if (!resolvedRole) {
|
|
153
|
+
throw new DiscordjsTypeError(ErrorCodes.InvalidElement, 'Array or Collection', 'options.roles', role);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
body.roles.push(resolvedRole);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const emoji = await this.client.rest.post(Routes.guildEmojis(this.guild.id), { body, reason });
|
|
161
|
+
return this.client.actions.GuildEmojiCreate.handle(this.guild, emoji).emoji;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Obtains one or more emojis from Discord, or the emoji cache if they're already available.
|
|
166
|
+
*
|
|
167
|
+
* @param {Snowflake} [id] The emoji's id
|
|
168
|
+
* @param {BaseFetchOptions} [options] Additional options for this fetch
|
|
169
|
+
* @returns {Promise<GuildEmoji|Collection<Snowflake, GuildEmoji>>}
|
|
170
|
+
* @example
|
|
171
|
+
* // Fetch all emojis from the guild
|
|
172
|
+
* message.guild.emojis.fetch()
|
|
173
|
+
* .then(emojis => console.log(`There are ${emojis.size} emojis.`))
|
|
174
|
+
* .catch(console.error);
|
|
175
|
+
* @example
|
|
176
|
+
* // Fetch a single emoji
|
|
177
|
+
* message.guild.emojis.fetch('222078108977594368')
|
|
178
|
+
* .then(emoji => console.log(`The emoji name is: ${emoji.name}`))
|
|
179
|
+
* .catch(console.error);
|
|
180
|
+
*/
|
|
181
|
+
async fetch(id, { cache = true, force = false } = {}) {
|
|
182
|
+
if (id) {
|
|
183
|
+
if (!force) {
|
|
184
|
+
const existing = this.cache.get(id);
|
|
185
|
+
if (existing) return existing;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const emoji = await this.client.rest.get(Routes.guildEmoji(this.guild.id, id));
|
|
189
|
+
return this._add(emoji, cache);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const data = await this.client.rest.get(Routes.guildEmojis(this.guild.id));
|
|
193
|
+
const emojis = new Collection();
|
|
194
|
+
for (const emoji of data) emojis.set(emoji.id, this._add(emoji, cache));
|
|
195
|
+
return emojis;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Deletes an emoji.
|
|
200
|
+
*
|
|
201
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to delete
|
|
202
|
+
* @param {string} [reason] Reason for deleting the emoji
|
|
203
|
+
* @returns {Promise<void>}
|
|
204
|
+
*/
|
|
205
|
+
async delete(emoji, reason) {
|
|
206
|
+
const id = this.resolveId(emoji);
|
|
207
|
+
if (!id) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'emoji', 'EmojiResolvable', true);
|
|
208
|
+
await this.client.rest.delete(Routes.guildEmoji(this.guild.id, id), { reason });
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Edits an emoji.
|
|
213
|
+
*
|
|
214
|
+
* @param {EmojiResolvable} emoji The Emoji resolvable to edit
|
|
215
|
+
* @param {GuildEmojiEditOptions} options The options to provide
|
|
216
|
+
* @returns {Promise<GuildEmoji>}
|
|
217
|
+
*/
|
|
218
|
+
async edit(emoji, options) {
|
|
219
|
+
const id = this.resolveId(emoji);
|
|
220
|
+
if (!id) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'emoji', 'EmojiResolvable', true);
|
|
221
|
+
const roles = options.roles?.map(role => this.guild.roles.resolveId(role));
|
|
222
|
+
const newData = await this.client.rest.patch(Routes.guildEmoji(this.guild.id, id), {
|
|
223
|
+
body: {
|
|
224
|
+
name: options.name,
|
|
225
|
+
roles,
|
|
226
|
+
},
|
|
227
|
+
reason: options.reason,
|
|
228
|
+
});
|
|
229
|
+
const existing = this.cache.get(id);
|
|
230
|
+
if (existing) {
|
|
231
|
+
const clone = existing._clone();
|
|
232
|
+
clone._patch(newData);
|
|
233
|
+
return clone;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return this._add(newData);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Fetches the author for this emoji
|
|
241
|
+
*
|
|
242
|
+
* @param {EmojiResolvable} emoji The emoji to fetch the author of
|
|
243
|
+
* @returns {Promise<User>}
|
|
244
|
+
*/
|
|
245
|
+
async fetchAuthor(emoji) {
|
|
246
|
+
const resolvedEmoji = this.resolve(emoji);
|
|
247
|
+
if (!resolvedEmoji) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'emoji', 'EmojiResolvable', true);
|
|
248
|
+
if (resolvedEmoji.managed) {
|
|
249
|
+
throw new DiscordjsError(ErrorCodes.EmojiManaged);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const { me } = this.guild.members;
|
|
253
|
+
if (!me) throw new DiscordjsError(ErrorCodes.GuildUncachedMe);
|
|
254
|
+
if (!me.permissions.any(PermissionFlagsBits.CreateGuildExpressions | PermissionFlagsBits.ManageGuildExpressions)) {
|
|
255
|
+
throw new DiscordjsError(ErrorCodes.MissingGuildExpressionsPermission, this.guild);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const data = await this.client.rest.get(Routes.guildEmoji(this.guild.id, resolvedEmoji.id));
|
|
259
|
+
resolvedEmoji._patch(data);
|
|
260
|
+
return resolvedEmoji.author;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Collection } from '@ovencord/collection';
|
|
2
|
+
import { DiscordjsTypeError, ErrorCodes } from '../errors/index.js';
|
|
3
|
+
import { Role } from '../structures/Role.js';
|
|
4
|
+
import { DataManager } from './DataManager.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Manages API methods for roles belonging to emojis and stores their cache.
|
|
8
|
+
*
|
|
9
|
+
* @extends {DataManager}
|
|
10
|
+
*/
|
|
11
|
+
export class GuildEmojiRoleManager extends DataManager {
|
|
12
|
+
public emoji: any;
|
|
13
|
+
public guild: any;
|
|
14
|
+
constructor(emoji) {
|
|
15
|
+
super(emoji.client, Role);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The emoji belonging to this manager
|
|
19
|
+
*
|
|
20
|
+
* @type {GuildEmoji}
|
|
21
|
+
*/
|
|
22
|
+
this.emoji = emoji;
|
|
23
|
+
/**
|
|
24
|
+
* The guild belonging to this manager
|
|
25
|
+
*
|
|
26
|
+
* @type {Guild}
|
|
27
|
+
*/
|
|
28
|
+
this.guild = emoji.guild;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The cache of roles belonging to this emoji
|
|
33
|
+
*
|
|
34
|
+
* @type {Collection<Snowflake, Role>}
|
|
35
|
+
* @readonly
|
|
36
|
+
*/
|
|
37
|
+
get cache() {
|
|
38
|
+
const cache = new Collection();
|
|
39
|
+
for (const roleId of this.emoji._roles) {
|
|
40
|
+
const role = this.guild.roles.cache.get(roleId);
|
|
41
|
+
if (role !== undefined) {
|
|
42
|
+
cache.set(roleId, role);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return cache;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Adds a role (or multiple roles) to the list of roles that can use this emoji.
|
|
51
|
+
*
|
|
52
|
+
* @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to add
|
|
53
|
+
* @returns {Promise<GuildEmoji>}
|
|
54
|
+
*/
|
|
55
|
+
async add(roleOrRoles) {
|
|
56
|
+
const roles = Array.isArray(roleOrRoles) || roleOrRoles instanceof Collection ? roleOrRoles : [roleOrRoles];
|
|
57
|
+
|
|
58
|
+
const resolvedRoleIds = [];
|
|
59
|
+
for (const role of roles.values()) {
|
|
60
|
+
const roleId = this.guild.roles.resolveId(role);
|
|
61
|
+
if (!roleId) {
|
|
62
|
+
throw new DiscordjsTypeError(ErrorCodes.InvalidElement, 'Array or Collection', 'roles', role);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
resolvedRoleIds.push(roleId);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const newRoles = [...new Set(resolvedRoleIds.concat(...this.cache.keys()))];
|
|
69
|
+
return this.set(newRoles);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Removes a role (or multiple roles) from the list of roles that can use this emoji.
|
|
74
|
+
*
|
|
75
|
+
* @param {RoleResolvable|RoleResolvable[]|Collection<Snowflake, Role>} roleOrRoles The role or roles to remove
|
|
76
|
+
* @returns {Promise<GuildEmoji>}
|
|
77
|
+
*/
|
|
78
|
+
async remove(roleOrRoles) {
|
|
79
|
+
const roles = Array.isArray(roleOrRoles) || roleOrRoles instanceof Collection ? roleOrRoles : [roleOrRoles];
|
|
80
|
+
|
|
81
|
+
const resolvedRoleIds = [];
|
|
82
|
+
for (const role of roles.values()) {
|
|
83
|
+
const roleId = this.guild.roles.resolveId(role);
|
|
84
|
+
if (!roleId) {
|
|
85
|
+
throw new DiscordjsTypeError(ErrorCodes.InvalidElement, 'Array or Collection', 'roles', role);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
resolvedRoleIds.push(roleId);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const newRoles = [...this.cache.keys()].filter(id => !resolvedRoleIds.includes(id));
|
|
92
|
+
return this.set(newRoles);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Sets the role(s) that can use this emoji.
|
|
97
|
+
*
|
|
98
|
+
* @param {Collection<Snowflake, Role>|RoleResolvable[]} roles The roles or role ids to apply
|
|
99
|
+
* @returns {Promise<GuildEmoji>}
|
|
100
|
+
* @example
|
|
101
|
+
* // Set the emoji's roles to a single role
|
|
102
|
+
* guildEmoji.roles.set(['391156570408615936'])
|
|
103
|
+
* .then(console.log)
|
|
104
|
+
* .catch(console.error);
|
|
105
|
+
* @example
|
|
106
|
+
* // Remove all roles from an emoji
|
|
107
|
+
* guildEmoji.roles.set([])
|
|
108
|
+
* .then(console.log)
|
|
109
|
+
* .catch(console.error);
|
|
110
|
+
*/
|
|
111
|
+
async set(roles) {
|
|
112
|
+
return this.emoji.edit({ roles });
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
clone() {
|
|
116
|
+
const clone = new this.constructor(this.emoji);
|
|
117
|
+
clone._patch([...this.cache.keys()]);
|
|
118
|
+
return clone;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Patches the roles for this manager's cache
|
|
123
|
+
*
|
|
124
|
+
* @param {Snowflake[]} roles The new roles
|
|
125
|
+
* @private
|
|
126
|
+
*/
|
|
127
|
+
_patch(roles) {
|
|
128
|
+
this.emoji._roles = roles;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
valueOf() {
|
|
132
|
+
return this.cache;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Routes } from 'discord-api-types/v10';
|
|
2
|
+
import { DiscordjsTypeError, ErrorCodes } from '../errors/index.js';
|
|
3
|
+
import { MessagePayload } from '../structures/MessagePayload.js';
|
|
4
|
+
import { ThreadManager } from './ThreadManager.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Manages API methods for threads in forum channels and stores their cache.
|
|
8
|
+
*
|
|
9
|
+
* @extends {ThreadManager}
|
|
10
|
+
*/
|
|
11
|
+
export class GuildForumThreadManager extends ThreadManager {
|
|
12
|
+
/**
|
|
13
|
+
* The channel this Manager belongs to
|
|
14
|
+
*
|
|
15
|
+
* @name GuildForumThreadManager#channel
|
|
16
|
+
* @type {ForumChannel}
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @typedef {BaseMessageOptions} GuildForumThreadMessageCreateOptions
|
|
21
|
+
* @property {StickerResolvable} [stickers] The stickers to send with the message
|
|
22
|
+
* @property {BitFieldResolvable} [flags] The flags to send with the message
|
|
23
|
+
* <info>Only {@link MessageFlags.SuppressEmbeds}, {@link MessageFlags.SuppressNotifications}, and
|
|
24
|
+
* {@link MessageFlags.IsVoiceMessage} can be set.</info>
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Options for creating a thread.
|
|
29
|
+
*
|
|
30
|
+
* @typedef {StartThreadOptions} GuildForumThreadCreateOptions
|
|
31
|
+
* @property {GuildForumThreadMessageCreateOptions|MessagePayload} message The message associated with the thread post
|
|
32
|
+
* @property {Snowflake[]} [appliedTags] The tags to apply to the thread
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new thread in the channel.
|
|
37
|
+
*
|
|
38
|
+
* @param {GuildForumThreadCreateOptions} [options] Options to create a new thread
|
|
39
|
+
* @returns {Promise<ThreadChannel>}
|
|
40
|
+
* @example
|
|
41
|
+
* // Create a new forum post
|
|
42
|
+
* forum.threads
|
|
43
|
+
* .create({
|
|
44
|
+
* name: 'Food Talk',
|
|
45
|
+
* autoArchiveDuration: ThreadAutoArchiveDuration.OneHour,
|
|
46
|
+
* message: {
|
|
47
|
+
* content: 'Discuss your favorite food!',
|
|
48
|
+
* },
|
|
49
|
+
* reason: 'Needed a separate thread for food',
|
|
50
|
+
* })
|
|
51
|
+
* .then(threadChannel => console.log(threadChannel))
|
|
52
|
+
* .catch(console.error);
|
|
53
|
+
*/
|
|
54
|
+
async create({
|
|
55
|
+
name,
|
|
56
|
+
autoArchiveDuration = this.channel.defaultAutoArchiveDuration,
|
|
57
|
+
message,
|
|
58
|
+
reason,
|
|
59
|
+
rateLimitPerUser,
|
|
60
|
+
appliedTags,
|
|
61
|
+
} = {}) {
|
|
62
|
+
if (!message) {
|
|
63
|
+
throw new DiscordjsTypeError(ErrorCodes.GuildForumMessageRequired);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const { body, files } = await (message instanceof MessagePayload ? message : MessagePayload.create(this, message))
|
|
67
|
+
.resolveBody()
|
|
68
|
+
.resolveFiles();
|
|
69
|
+
|
|
70
|
+
const data = await this.client.rest.post(Routes.threads(this.channel.id), {
|
|
71
|
+
body: {
|
|
72
|
+
name,
|
|
73
|
+
auto_archive_duration: autoArchiveDuration,
|
|
74
|
+
rate_limit_per_user: rateLimitPerUser,
|
|
75
|
+
applied_tags: appliedTags,
|
|
76
|
+
message: body,
|
|
77
|
+
},
|
|
78
|
+
files,
|
|
79
|
+
reason,
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
return this.client.actions.ThreadCreate.handle(data).thread;
|
|
83
|
+
}
|
|
84
|
+
}
|