discord-sb.js 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +2 -0
- package/package.json +91 -0
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +86 -0
- package/src/client/Client.js +978 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +116 -0
- package/src/client/actions/ActionsManager.js +80 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +27 -0
- package/src/client/actions/AutoModerationRuleCreate.js +28 -0
- package/src/client/actions/AutoModerationRuleDelete.js +32 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +43 -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/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/MessagePollVoteAdd.js +33 -0
- package/src/client/actions/MessagePollVoteRemove.js +33 -0
- package/src/client/actions/MessageReactionAdd.js +68 -0
- package/src/client/actions/MessageReactionRemove.js +50 -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 +50 -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 +50 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +151 -0
- 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 -0
- package/src/client/websocket/WebSocketShard.js +907 -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 +19 -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_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 +52 -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_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_MODAL_CREATE.js +12 -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_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_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 -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 +121 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -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 +6 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -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 +84 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +217 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +172 -0
- package/src/managers/ApplicationCommandManager.js +264 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +417 -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 +148 -0
- package/src/managers/ClientUserSettingManager.js +372 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/DeveloperManager.js +254 -0
- package/src/managers/GuildBanManager.js +250 -0
- package/src/managers/GuildChannelManager.js +488 -0
- package/src/managers/GuildEmojiManager.js +171 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +108 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +338 -0
- package/src/managers/GuildMemberManager.js +599 -0
- package/src/managers/GuildMemberRoleManager.js +195 -0
- package/src/managers/GuildScheduledEventManager.js +314 -0
- package/src/managers/GuildSettingManager.js +155 -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 +423 -0
- package/src/managers/PermissionOverwriteManager.js +164 -0
- package/src/managers/PresenceManager.js +71 -0
- package/src/managers/QuestManager.js +353 -0
- package/src/managers/ReactionManager.js +67 -0
- package/src/managers/ReactionUserManager.js +73 -0
- package/src/managers/RelationshipManager.js +278 -0
- package/src/managers/RoleManager.js +448 -0
- package/src/managers/SessionManager.js +66 -0
- package/src/managers/StageInstanceManager.js +162 -0
- package/src/managers/ThreadManager.js +175 -0
- package/src/managers/ThreadMemberManager.js +186 -0
- package/src/managers/UserManager.js +136 -0
- package/src/managers/UserNoteManager.js +53 -0
- package/src/managers/VoiceStateManager.js +59 -0
- package/src/rest/APIRequest.js +154 -0
- package/src/rest/APIRouter.js +53 -0
- package/src/rest/DiscordAPIError.js +119 -0
- package/src/rest/HTTPError.js +62 -0
- package/src/rest/RESTManager.js +67 -0
- package/src/rest/RateLimitError.js +55 -0
- package/src/rest/RequestHandler.js +466 -0
- package/src/sharding/Shard.js +444 -0
- package/src/sharding/ShardClientUtil.js +279 -0
- package/src/sharding/ShardingManager.js +319 -0
- package/src/structures/AnonymousGuild.js +98 -0
- package/src/structures/ApplicationCommand.js +593 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
- package/src/structures/AutoModerationActionExecution.js +89 -0
- package/src/structures/AutoModerationRule.js +294 -0
- package/src/structures/AutocompleteInteraction.js +107 -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 +191 -0
- package/src/structures/BaseGuildVoiceChannel.js +241 -0
- package/src/structures/BaseMessageComponent.js +181 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CallState.js +63 -0
- package/src/structures/CategoryChannel.js +85 -0
- package/src/structures/Channel.js +284 -0
- package/src/structures/ClientPresence.js +77 -0
- package/src/structures/ClientUser.js +655 -0
- package/src/structures/CommandInteraction.js +41 -0
- package/src/structures/CommandInteractionOptionResolver.js +276 -0
- package/src/structures/ContainerComponent.js +68 -0
- package/src/structures/ContextMenuInteraction.js +65 -0
- package/src/structures/DMChannel.js +219 -0
- package/src/structures/DirectoryChannel.js +20 -0
- package/src/structures/Emoji.js +148 -0
- package/src/structures/FileComponent.js +49 -0
- package/src/structures/ForumChannel.js +31 -0
- package/src/structures/GroupDMChannel.js +394 -0
- package/src/structures/Guild.js +1791 -0
- package/src/structures/GuildAuditLogs.js +746 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildBoost.js +108 -0
- package/src/structures/GuildChannel.js +470 -0
- package/src/structures/GuildEmoji.js +161 -0
- package/src/structures/GuildMember.js +636 -0
- package/src/structures/GuildPreview.js +191 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +536 -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 +290 -0
- package/src/structures/InteractionCollector.js +248 -0
- package/src/structures/InteractionWebhook.js +43 -0
- package/src/structures/Invite.js +358 -0
- package/src/structures/InviteGuild.js +23 -0
- package/src/structures/InviteStageInstance.js +86 -0
- 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 -0
- package/src/structures/MessageActionRow.js +105 -0
- package/src/structures/MessageAttachment.js +216 -0
- package/src/structures/MessageButton.js +166 -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 +596 -0
- package/src/structures/MessageMentions.js +273 -0
- package/src/structures/MessagePayload.js +354 -0
- package/src/structures/MessageReaction.js +181 -0
- package/src/structures/MessageSelectMenu.js +141 -0
- package/src/structures/Modal.js +161 -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/PermissionOverwrites.js +198 -0
- package/src/structures/Poll.js +108 -0
- package/src/structures/PollAnswer.js +88 -0
- package/src/structures/Presence.js +1157 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +590 -0
- package/src/structures/SectionComponent.js +48 -0
- package/src/structures/SelectMenuInteraction.js +21 -0
- package/src/structures/SeparatorComponent.js +48 -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 +118 -0
- package/src/structures/TeamMember.js +80 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextDisplayComponent.js +40 -0
- package/src/structures/TextInputComponent.js +132 -0
- package/src/structures/ThreadChannel.js +605 -0
- package/src/structures/ThreadMember.js +105 -0
- package/src/structures/ThreadOnlyChannel.js +249 -0
- package/src/structures/ThumbnailComponent.js +57 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/UnfurledMediaItem.js +29 -0
- package/src/structures/User.js +640 -0
- package/src/structures/UserContextMenuInteraction.js +29 -0
- package/src/structures/VoiceChannel.js +110 -0
- package/src/structures/VoiceChannelEffect.js +69 -0
- package/src/structures/VoiceRegion.js +53 -0
- package/src/structures/VoiceState.js +354 -0
- package/src/structures/WebEmbed.js +373 -0
- package/src/structures/Webhook.js +478 -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 +953 -0
- package/src/structures/interfaces/Collector.js +300 -0
- package/src/structures/interfaces/InteractionResponses.js +313 -0
- package/src/structures/interfaces/TextBasedChannel.js +821 -0
- package/src/util/APITypes.js +59 -0
- package/src/util/ActivityFlags.js +44 -0
- package/src/util/ApplicationFlags.js +76 -0
- package/src/util/AttachmentFlags.js +38 -0
- package/src/util/BitField.js +170 -0
- package/src/util/ChannelFlags.js +45 -0
- package/src/util/Constants.js +1914 -0
- package/src/util/DataResolver.js +146 -0
- package/src/util/Formatters.js +228 -0
- package/src/util/GuildMemberFlags.js +43 -0
- package/src/util/Intents.js +74 -0
- package/src/util/InviteFlags.js +34 -0
- package/src/util/LimitedCollection.js +131 -0
- package/src/util/MessageFlags.js +63 -0
- package/src/util/Options.js +358 -0
- package/src/util/Permissions.js +202 -0
- package/src/util/PremiumUsageFlags.js +31 -0
- package/src/util/PurchasedFlags.js +33 -0
- package/src/util/RemoteAuth.js +415 -0
- package/src/util/RoleFlags.js +37 -0
- package/src/util/SnowflakeUtil.js +92 -0
- package/src/util/Speaking.js +33 -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 +1048 -0
- package/typings/enums.d.ts +439 -0
- package/typings/index.d.ts +8505 -0
- package/typings/index.test-d.ts +0 -0
- package/typings/rawDataTypes.d.ts +403 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const BaseManager = require('./BaseManager');
|
|
5
|
+
const { TypeError } = require('../errors/DJSError');
|
|
6
|
+
const { CustomStatus } = require('../structures/Presence');
|
|
7
|
+
const { ActivityTypes } = require('../util/Constants');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Manages API methods for users and stores their cache.
|
|
11
|
+
* @extends {BaseManager}
|
|
12
|
+
* @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}
|
|
13
|
+
*/
|
|
14
|
+
class ClientUserSettingManager extends BaseManager {
|
|
15
|
+
#rawSetting = {};
|
|
16
|
+
constructor(client) {
|
|
17
|
+
super(client);
|
|
18
|
+
/**
|
|
19
|
+
* WHO CAN ADD YOU AS A FRIEND ?
|
|
20
|
+
* @type {?object}
|
|
21
|
+
* @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html#friend-source-flags-structure}
|
|
22
|
+
*/
|
|
23
|
+
this.addFriendFrom = {
|
|
24
|
+
all: null,
|
|
25
|
+
mutual_friends: null,
|
|
26
|
+
mutual_guilds: null,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Patch data file
|
|
31
|
+
* https://luna.gitlab.io/discord-unofficial-docs/docs/user_settings
|
|
32
|
+
* @private
|
|
33
|
+
* @param {Object} data Raw Data to patch
|
|
34
|
+
*/
|
|
35
|
+
_patch(data = {}) {
|
|
36
|
+
this.#rawSetting = Object.assign(this.#rawSetting, data);
|
|
37
|
+
this.client.emit('debug', `[SETTING > ClientUser] Sync setting`);
|
|
38
|
+
if ('locale' in data) {
|
|
39
|
+
/**
|
|
40
|
+
* The user's chosen language option
|
|
41
|
+
* @type {?string}
|
|
42
|
+
* @see {@link https://discord.com/developers/docs/reference#locales}
|
|
43
|
+
*/
|
|
44
|
+
this.locale = data.locale;
|
|
45
|
+
}
|
|
46
|
+
if ('show_current_game' in data) {
|
|
47
|
+
/**
|
|
48
|
+
* Show playing status for detected/added games
|
|
49
|
+
* <info>Setting => ACTIVITY SETTINGS => Activity Status => Display current activity as a status message</info>
|
|
50
|
+
* @type {?boolean}
|
|
51
|
+
*/
|
|
52
|
+
this.activityDisplay = data.show_current_game;
|
|
53
|
+
}
|
|
54
|
+
if ('default_guilds_restricted' in data) {
|
|
55
|
+
/**
|
|
56
|
+
* Allow DMs from guild members by default on guild join
|
|
57
|
+
* @type {?boolean}
|
|
58
|
+
*/
|
|
59
|
+
this.allowDMsFromGuild = data.default_guilds_restricted;
|
|
60
|
+
}
|
|
61
|
+
if ('inline_attachment_media' in data) {
|
|
62
|
+
/**
|
|
63
|
+
* Display images and video when uploaded directly
|
|
64
|
+
* @type {?boolean}
|
|
65
|
+
*/
|
|
66
|
+
this.displayImage = data.inline_attachment_media;
|
|
67
|
+
}
|
|
68
|
+
if ('inline_embed_media' in data) {
|
|
69
|
+
/**
|
|
70
|
+
* Display images and video when linked
|
|
71
|
+
* @type {?boolean}
|
|
72
|
+
*/
|
|
73
|
+
this.linkedImageDisplay = data.inline_embed_media;
|
|
74
|
+
}
|
|
75
|
+
if ('gif_auto_play' in data) {
|
|
76
|
+
/**
|
|
77
|
+
* Play GIFs without hovering over them
|
|
78
|
+
* <info>Setting => APP SETTINGS => Accessibility => Automatically play GIFs when Discord is focused.</info>
|
|
79
|
+
* @type {?boolean}
|
|
80
|
+
*/
|
|
81
|
+
this.autoplayGIF = data.gif_auto_play;
|
|
82
|
+
}
|
|
83
|
+
if ('render_embeds' in data) {
|
|
84
|
+
/**
|
|
85
|
+
* Show embeds and preview website links pasted into chat
|
|
86
|
+
* @type {?boolean}
|
|
87
|
+
*/
|
|
88
|
+
this.previewLink = data.render_embeds;
|
|
89
|
+
}
|
|
90
|
+
if ('animate_emoji' in data) {
|
|
91
|
+
/**
|
|
92
|
+
* Play animated emoji without hovering over them
|
|
93
|
+
* <info>Setting => APP SETTINGS => Accessibility => Play Animated Emojis</info>
|
|
94
|
+
* @type {?boolean}
|
|
95
|
+
*/
|
|
96
|
+
this.animatedEmoji = data.animate_emoji;
|
|
97
|
+
}
|
|
98
|
+
if ('enable_tts_command' in data) {
|
|
99
|
+
/**
|
|
100
|
+
* Enable /tts command and playback
|
|
101
|
+
* <info>Setting => APP SETTINGS => Accessibility => Text-to-speech => Allow playback</info>
|
|
102
|
+
* @type {?boolean}
|
|
103
|
+
*/
|
|
104
|
+
this.allowTTS = data.enable_tts_command;
|
|
105
|
+
}
|
|
106
|
+
if ('message_display_compact' in data) {
|
|
107
|
+
/**
|
|
108
|
+
* Use compact mode
|
|
109
|
+
* <info>Setting => APP SETTINGS => Appearance => Message Display => Compact Mode</info>
|
|
110
|
+
* @type {?boolean}
|
|
111
|
+
*/
|
|
112
|
+
this.compactMode = data.message_display_compact;
|
|
113
|
+
}
|
|
114
|
+
if ('convert_emoticons' in data) {
|
|
115
|
+
/**
|
|
116
|
+
* Convert "old fashioned" emoticons to emojis
|
|
117
|
+
* <info>Setting => APP SETTINGS => Text & Images => Emoji => Convert Emoticons</info>
|
|
118
|
+
* @type {?boolean}
|
|
119
|
+
*/
|
|
120
|
+
this.convertEmoticons = data.convert_emoticons;
|
|
121
|
+
}
|
|
122
|
+
if ('explicit_content_filter' in data) {
|
|
123
|
+
/**
|
|
124
|
+
* Content filter level
|
|
125
|
+
* <info>
|
|
126
|
+
* * `0`: Off
|
|
127
|
+
* * `1`: Friends excluded
|
|
128
|
+
* * `2`: Scan everyone
|
|
129
|
+
* </info>
|
|
130
|
+
* @type {?number}
|
|
131
|
+
*/
|
|
132
|
+
this.DMScanLevel = data.explicit_content_filter;
|
|
133
|
+
}
|
|
134
|
+
if ('theme' in data) {
|
|
135
|
+
/**
|
|
136
|
+
* Client theme
|
|
137
|
+
* <info>Setting => APP SETTINGS => Appearance => Theme
|
|
138
|
+
* * `dark`
|
|
139
|
+
* * `light`
|
|
140
|
+
* </info>
|
|
141
|
+
* @type {?string}
|
|
142
|
+
*/
|
|
143
|
+
this.theme = data.theme;
|
|
144
|
+
}
|
|
145
|
+
if ('developer_mode' in data) {
|
|
146
|
+
/**
|
|
147
|
+
* Show the option to copy ids in right click menus
|
|
148
|
+
* @type {?boolean}
|
|
149
|
+
*/
|
|
150
|
+
this.developerMode = data.developer_mode;
|
|
151
|
+
}
|
|
152
|
+
if ('afk_timeout' in data) {
|
|
153
|
+
/**
|
|
154
|
+
* How many seconds being idle before the user is marked as "AFK"; this handles when push notifications are sent
|
|
155
|
+
* @type {?number}
|
|
156
|
+
*/
|
|
157
|
+
this.afkTimeout = data.afk_timeout;
|
|
158
|
+
}
|
|
159
|
+
if ('animate_stickers' in data) {
|
|
160
|
+
/**
|
|
161
|
+
* When stickers animate
|
|
162
|
+
* <info>
|
|
163
|
+
* * `0`: Always
|
|
164
|
+
* * `1`: On hover/focus
|
|
165
|
+
* * `2`: Never
|
|
166
|
+
* </info>
|
|
167
|
+
* @type {?number}
|
|
168
|
+
*/
|
|
169
|
+
this.stickerAnimationMode = data.animate_stickers;
|
|
170
|
+
}
|
|
171
|
+
if ('render_reactions' in data) {
|
|
172
|
+
/**
|
|
173
|
+
* Display reactions
|
|
174
|
+
* <info>Setting => APP SETTINGS => Text & Images => Emoji => Show emoji reactions</info>
|
|
175
|
+
* @type {?boolean}
|
|
176
|
+
*/
|
|
177
|
+
this.showEmojiReactions = data.render_reactions;
|
|
178
|
+
}
|
|
179
|
+
if ('status' in data) {
|
|
180
|
+
this.client.presence.status = data.status;
|
|
181
|
+
if (!('custom_status' in data)) {
|
|
182
|
+
this.client.emit('debug', '[SETTING > ClientUser] Sync status');
|
|
183
|
+
this.client.user.setStatus(data.status);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if ('custom_status' in data) {
|
|
187
|
+
this.customStatus = data.custom_status;
|
|
188
|
+
const activities = this.client.presence.activities.filter(
|
|
189
|
+
a => ![ActivityTypes.CUSTOM, 'CUSTOM'].includes(a.type),
|
|
190
|
+
);
|
|
191
|
+
if (data.custom_status) {
|
|
192
|
+
const custom = new CustomStatus(this.client);
|
|
193
|
+
custom.setState(data.custom_status.text);
|
|
194
|
+
let emoji;
|
|
195
|
+
if (data.custom_status.emoji_id) {
|
|
196
|
+
emoji = this.client.emojis.cache.get(data.custom_status.emoji_id);
|
|
197
|
+
} else if (data.custom_status.emoji_name) {
|
|
198
|
+
emoji = `:${data.custom_status.emoji_name}:`;
|
|
199
|
+
}
|
|
200
|
+
if (emoji) custom.setEmoji(emoji);
|
|
201
|
+
activities.push(custom);
|
|
202
|
+
}
|
|
203
|
+
this.client.emit('debug', '[SETTING > ClientUser] Sync activities & status');
|
|
204
|
+
this.client.user.setPresence({ activities });
|
|
205
|
+
}
|
|
206
|
+
if ('friend_source_flags' in data) {
|
|
207
|
+
// Todo
|
|
208
|
+
}
|
|
209
|
+
if ('restricted_guilds' in data) {
|
|
210
|
+
/**
|
|
211
|
+
* Disable Direct Message from servers
|
|
212
|
+
* @type {Collection<Snowflake, Guild>}
|
|
213
|
+
*/
|
|
214
|
+
this.disableDMfromGuilds = new Collection(
|
|
215
|
+
data.restricted_guilds.map(guildId => [guildId, this.client.guilds.cache.get(guildId)]),
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Raw data
|
|
222
|
+
* @type {Object}
|
|
223
|
+
*/
|
|
224
|
+
get raw() {
|
|
225
|
+
return this.#rawSetting;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
async fetch() {
|
|
229
|
+
const data = await this.client.api.users('@me').settings.get();
|
|
230
|
+
this._patch(data);
|
|
231
|
+
return this;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Edit data
|
|
236
|
+
* @param {any} data Data to edit
|
|
237
|
+
*/
|
|
238
|
+
async edit(data) {
|
|
239
|
+
const res = await this.client.api.users('@me').settings.patch({ data });
|
|
240
|
+
this._patch(res);
|
|
241
|
+
return this;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Toggle compact mode
|
|
246
|
+
* @returns {Promise<this>}
|
|
247
|
+
*/
|
|
248
|
+
toggleCompactMode() {
|
|
249
|
+
return this.edit({ message_display_compact: !this.compactMode });
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Discord Theme
|
|
253
|
+
* @param {string} value Theme to set (dark | light)
|
|
254
|
+
* @returns {Promise<this>}
|
|
255
|
+
*/
|
|
256
|
+
setTheme(value) {
|
|
257
|
+
const validValues = ['dark', 'light'];
|
|
258
|
+
if (!validValues.includes(value)) {
|
|
259
|
+
throw new TypeError('INVALID_TYPE', 'value', 'dark | light', true);
|
|
260
|
+
}
|
|
261
|
+
return this.edit({ theme: value });
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* CustomStatus Object
|
|
266
|
+
* @typedef {Object} CustomStatusOption
|
|
267
|
+
* @property {string | null} text Text to set
|
|
268
|
+
* @property {string | null} status The status to set: 'online', 'idle', 'dnd', 'invisible' or null.
|
|
269
|
+
* @property {EmojiResolvable | null} emoji UnicodeEmoji, DiscordEmoji, or null.
|
|
270
|
+
* @property {number | null} expires The number of seconds until the status expires, or null.
|
|
271
|
+
*/
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Set custom status
|
|
275
|
+
* @param {?CustomStatus | CustomStatusOption} options CustomStatus
|
|
276
|
+
* @returns {Promise<this>}
|
|
277
|
+
*/
|
|
278
|
+
setCustomStatus(options) {
|
|
279
|
+
if (typeof options !== 'object') {
|
|
280
|
+
return this.edit({ custom_status: null });
|
|
281
|
+
} else if (options instanceof CustomStatus) {
|
|
282
|
+
options = options.toJSON();
|
|
283
|
+
let data = {
|
|
284
|
+
emoji_name: null,
|
|
285
|
+
expires_at: null,
|
|
286
|
+
text: null,
|
|
287
|
+
};
|
|
288
|
+
if (typeof options.state === 'string') {
|
|
289
|
+
data.text = options.state;
|
|
290
|
+
}
|
|
291
|
+
if (options.emoji) {
|
|
292
|
+
if (options.emoji?.id) {
|
|
293
|
+
data.emoji_name = options.emoji?.name;
|
|
294
|
+
data.emoji_id = options.emoji?.id;
|
|
295
|
+
} else {
|
|
296
|
+
data.emoji_name = typeof options.emoji?.name === 'string' ? options.emoji?.name : null;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return this.edit({ custom_status: data });
|
|
300
|
+
} else {
|
|
301
|
+
let data = {
|
|
302
|
+
emoji_name: null,
|
|
303
|
+
expires_at: null,
|
|
304
|
+
text: null,
|
|
305
|
+
};
|
|
306
|
+
if (typeof options.text === 'string') {
|
|
307
|
+
if (options.text.length > 128) {
|
|
308
|
+
throw new RangeError('[INVALID_VALUE] Custom status text must be less than 128 characters');
|
|
309
|
+
}
|
|
310
|
+
data.text = options.text;
|
|
311
|
+
}
|
|
312
|
+
if (options.emoji) {
|
|
313
|
+
const emoji = this.client.emojis.resolve(options.emoji);
|
|
314
|
+
if (emoji) {
|
|
315
|
+
data.emoji_name = emoji.name;
|
|
316
|
+
data.emoji_id = emoji.id;
|
|
317
|
+
} else {
|
|
318
|
+
data.emoji_name = typeof options.emoji === 'string' ? options.emoji : null;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
if (typeof options.expires === 'number') {
|
|
322
|
+
if (options.expires < Date.now()) {
|
|
323
|
+
throw new RangeError(`[INVALID_VALUE] Custom status expiration must be greater than ${Date.now()}`);
|
|
324
|
+
}
|
|
325
|
+
data.expires_at = new Date(options.expires).toISOString();
|
|
326
|
+
}
|
|
327
|
+
if (['online', 'idle', 'dnd', 'invisible'].includes(options.status)) this.edit({ status: options.status });
|
|
328
|
+
return this.edit({ custom_status: data });
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Restricted guilds setting
|
|
334
|
+
* @param {boolean} status Restricted status
|
|
335
|
+
* @returns {Promise}
|
|
336
|
+
*/
|
|
337
|
+
restrictedGuilds(status) {
|
|
338
|
+
if (typeof status !== 'boolean') {
|
|
339
|
+
throw new TypeError('INVALID_TYPE', 'status', 'boolean', true);
|
|
340
|
+
}
|
|
341
|
+
return this.edit({
|
|
342
|
+
default_guilds_restricted: status,
|
|
343
|
+
restricted_guilds: status ? this.client.guilds.cache.map(v => v.id) : [],
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Add a guild to the list of restricted guilds.
|
|
348
|
+
* @param {GuildIDResolve} guildId The guild to add
|
|
349
|
+
* @returns {Promise}
|
|
350
|
+
*/
|
|
351
|
+
addRestrictedGuild(guildId) {
|
|
352
|
+
const temp = Object.assign(
|
|
353
|
+
[],
|
|
354
|
+
this.disableDMfromServer.map((v, k) => k),
|
|
355
|
+
);
|
|
356
|
+
if (temp.includes(guildId)) throw new Error('Guild is already restricted');
|
|
357
|
+
temp.push(guildId);
|
|
358
|
+
return this.edit({ restricted_guilds: temp });
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Remove a guild from the list of restricted guilds.
|
|
363
|
+
* @param {GuildIDResolve} guildId The guild to remove
|
|
364
|
+
* @returns {Promise}
|
|
365
|
+
*/
|
|
366
|
+
removeRestrictedGuild(guildId) {
|
|
367
|
+
if (!this.disableDMfromServer.delete(guildId)) throw new Error('Guild is already restricted');
|
|
368
|
+
return this.edit({ restricted_guilds: this.disableDMfromServer.map((v, k) => k) });
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
module.exports = ClientUserSettingManager;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const BaseManager = require('./BaseManager');
|
|
4
|
+
const { Error } = require('../errors');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Manages the API methods of a data model along with a collection of instances.
|
|
8
|
+
* @extends {BaseManager}
|
|
9
|
+
* @abstract
|
|
10
|
+
*/
|
|
11
|
+
class DataManager extends BaseManager {
|
|
12
|
+
constructor(client, holds) {
|
|
13
|
+
super(client);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The data structure belonging to this manager.
|
|
17
|
+
* @name DataManager#holds
|
|
18
|
+
* @type {Function}
|
|
19
|
+
* @private
|
|
20
|
+
* @readonly
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(this, 'holds', { value: holds });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The cache of items for this manager.
|
|
27
|
+
* @type {Collection}
|
|
28
|
+
* @abstract
|
|
29
|
+
*/
|
|
30
|
+
get cache() {
|
|
31
|
+
throw new Error('NOT_IMPLEMENTED', 'get cache', this.constructor.name);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Resolves a data entry to a data Object.
|
|
36
|
+
* @param {string|Object} idOrInstance The id or instance of something in this Manager
|
|
37
|
+
* @returns {?Object} An instance from this Manager
|
|
38
|
+
*/
|
|
39
|
+
resolve(idOrInstance) {
|
|
40
|
+
if (idOrInstance instanceof this.holds) return idOrInstance;
|
|
41
|
+
if (typeof idOrInstance === 'string') return this.cache.get(idOrInstance) ?? null;
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Resolves a data entry to an instance id.
|
|
47
|
+
* @param {string|Object} idOrInstance The id or instance of something in this Manager
|
|
48
|
+
* @returns {?Snowflake}
|
|
49
|
+
*/
|
|
50
|
+
resolveId(idOrInstance) {
|
|
51
|
+
if (idOrInstance instanceof this.holds) return idOrInstance.id;
|
|
52
|
+
if (typeof idOrInstance === 'string') return idOrInstance;
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
valueOf() {
|
|
57
|
+
return this.cache;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
module.exports = DataManager;
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const BaseManager = require('./BaseManager');
|
|
5
|
+
const Application = require('../structures/interfaces/Application');
|
|
6
|
+
const DataResolver = require('../util/DataResolver');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Manages API methods for developer applications and provides utilities you might need.
|
|
10
|
+
* @extends {BaseManager}
|
|
11
|
+
*/
|
|
12
|
+
class DeveloperManager extends BaseManager {
|
|
13
|
+
constructor(client) {
|
|
14
|
+
super(client);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Fetches all applications owned by the current user
|
|
19
|
+
* @param {boolean} [withTeamApplications=true] Whether to include team applications
|
|
20
|
+
* @returns {Promise<Collection<Snowflake, Application>>}
|
|
21
|
+
* @example
|
|
22
|
+
* // Fetch all developer applications
|
|
23
|
+
* client.developers.get()
|
|
24
|
+
* .then(applications => console.log(`Found ${applications.size} applications`))
|
|
25
|
+
* .catch(console.error);
|
|
26
|
+
*/
|
|
27
|
+
async get(withTeamApplications = true) {
|
|
28
|
+
const data = await this.client.api.applications.get({
|
|
29
|
+
query: {
|
|
30
|
+
with_team_applications: withTeamApplications,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const applications = new Collection();
|
|
35
|
+
for (const app of data) {
|
|
36
|
+
applications.set(app.id, new Application(this.client, app));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return applications;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Alias for get() method
|
|
44
|
+
* @param {boolean} [withTeamApplications=true] Whether to include team applications
|
|
45
|
+
* @returns {Promise<Collection<Snowflake, Application>>}
|
|
46
|
+
*/
|
|
47
|
+
list(withTeamApplications = true) {
|
|
48
|
+
return this.get(withTeamApplications);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Fetches a specific application by ID
|
|
53
|
+
* @param {Snowflake} applicationId The ID of the application to fetch
|
|
54
|
+
* @returns {Promise<Application>}
|
|
55
|
+
* @example
|
|
56
|
+
* // Fetch a specific application
|
|
57
|
+
* client.developers.fetch('1234567890123456789')
|
|
58
|
+
* .then(app => console.log(`Application: ${app.name}`))
|
|
59
|
+
* .catch(console.error);
|
|
60
|
+
*/
|
|
61
|
+
async fetch(applicationId) {
|
|
62
|
+
const data = await this.client.api.applications(applicationId).get();
|
|
63
|
+
return new Application(this.client, data);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Edits an application
|
|
68
|
+
* @param {Snowflake} applicationId The ID of the application to edit
|
|
69
|
+
* @param {ApplicationEditData} data The data to edit the application with
|
|
70
|
+
* @returns {Promise<Application>}
|
|
71
|
+
* @example
|
|
72
|
+
* // Edit an application
|
|
73
|
+
* client.developers.edit('1234567890123456789', {
|
|
74
|
+
* name: 'My New Bot Name',
|
|
75
|
+
* description: 'A cool bot description',
|
|
76
|
+
* tags: ['utility', 'moderation']
|
|
77
|
+
* })
|
|
78
|
+
* .then(app => console.log(`Updated: ${app.name}`))
|
|
79
|
+
* .catch(console.error);
|
|
80
|
+
*/
|
|
81
|
+
async edit(applicationId, data) {
|
|
82
|
+
const _data = {};
|
|
83
|
+
|
|
84
|
+
if (data.name) _data.name = data.name;
|
|
85
|
+
if (data.description !== undefined) _data.description = data.description;
|
|
86
|
+
if (data.icon !== undefined) _data.icon = await DataResolver.resolveImage(data.icon);
|
|
87
|
+
if (data.tags) _data.tags = data.tags;
|
|
88
|
+
if (data.interactionsEndpointUrl !== undefined) _data.interactions_endpoint_url = data.interactionsEndpointUrl;
|
|
89
|
+
if (data.roleConnectionsVerificationUrl !== undefined)
|
|
90
|
+
_data.role_connections_verification_url = data.roleConnectionsVerificationUrl;
|
|
91
|
+
if (data.termsOfServiceUrl !== undefined) _data.terms_of_service_url = data.termsOfServiceUrl;
|
|
92
|
+
if (data.privacyPolicyUrl !== undefined) _data.privacy_policy_url = data.privacyPolicyUrl;
|
|
93
|
+
|
|
94
|
+
const result = await this.client.api.applications(applicationId).patch({ data: _data });
|
|
95
|
+
return new Application(this.client, result);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Sets the avatar of an application
|
|
100
|
+
* @param {Snowflake} applicationId The ID of the application
|
|
101
|
+
* @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
|
|
102
|
+
* @returns {Promise<Application>}
|
|
103
|
+
* @example
|
|
104
|
+
* // Set application avatar
|
|
105
|
+
* client.developers.setAvatar('1234567890123456789', './avatar.png')
|
|
106
|
+
* .then(app => console.log(`Updated avatar for ${app.name}`))
|
|
107
|
+
* .catch(console.error);
|
|
108
|
+
*/
|
|
109
|
+
setAvatar(applicationId, avatar) {
|
|
110
|
+
return this.edit(applicationId, { icon: avatar });
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Sets the name of an application
|
|
115
|
+
* @param {Snowflake} applicationId The ID of the application
|
|
116
|
+
* @param {string} name The new name
|
|
117
|
+
* @returns {Promise<Application>}
|
|
118
|
+
* @example
|
|
119
|
+
* // Set application name
|
|
120
|
+
* client.developers.setName('1234567890123456789', 'My Cool Bot')
|
|
121
|
+
* .then(app => console.log(`Renamed to ${app.name}`))
|
|
122
|
+
* .catch(console.error);
|
|
123
|
+
*/
|
|
124
|
+
setName(applicationId, name) {
|
|
125
|
+
return this.edit(applicationId, { name });
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Sets the description of an application
|
|
130
|
+
* @param {Snowflake} applicationId The ID of the application
|
|
131
|
+
* @param {string} description The new description
|
|
132
|
+
* @returns {Promise<Application>}
|
|
133
|
+
* @example
|
|
134
|
+
* // Set application description
|
|
135
|
+
* client.developers.setDescription('1234567890123456789', 'A helpful utility bot')
|
|
136
|
+
* .then(app => console.log(`Updated description for ${app.name}`))
|
|
137
|
+
* .catch(console.error);
|
|
138
|
+
*/
|
|
139
|
+
setDescription(applicationId, description) {
|
|
140
|
+
return this.edit(applicationId, { description });
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Sets the tags of an application (max 5 tags)
|
|
145
|
+
* @param {Snowflake} applicationId The ID of the application
|
|
146
|
+
* @param {string[]} tags Array of tags (max 5)
|
|
147
|
+
* @returns {Promise<Application>}
|
|
148
|
+
* @example
|
|
149
|
+
* // Set application tags
|
|
150
|
+
* client.developers.setTags('1234567890123456789', ['utility', 'moderation', 'fun'])
|
|
151
|
+
* .then(app => console.log(`Updated tags for ${app.name}`))
|
|
152
|
+
* .catch(console.error);
|
|
153
|
+
*/
|
|
154
|
+
setTags(applicationId, tags) {
|
|
155
|
+
if (tags.length > 5) {
|
|
156
|
+
throw new Error('Maximum of 5 tags allowed');
|
|
157
|
+
}
|
|
158
|
+
return this.edit(applicationId, { tags });
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Adds a tag to an application
|
|
163
|
+
* @param {Snowflake} applicationId The ID of the application
|
|
164
|
+
* @param {string} tag The tag to add
|
|
165
|
+
* @returns {Promise<Application>}
|
|
166
|
+
* @example
|
|
167
|
+
* // Add a tag to application
|
|
168
|
+
* client.developers.addTag('1234567890123456789', 'music')
|
|
169
|
+
* .then(app => console.log(`Added tag to ${app.name}`))
|
|
170
|
+
* .catch(console.error);
|
|
171
|
+
*/
|
|
172
|
+
async addTag(applicationId, tag) {
|
|
173
|
+
const app = await this.fetch(applicationId);
|
|
174
|
+
const currentTags = app.tags || [];
|
|
175
|
+
|
|
176
|
+
if (currentTags.includes(tag)) {
|
|
177
|
+
throw new Error('Tag already exists');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (currentTags.length >= 5) {
|
|
181
|
+
throw new Error('Maximum of 5 tags allowed');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const newTags = [...currentTags, tag];
|
|
185
|
+
return this.edit(applicationId, { tags: newTags });
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Removes a tag from an application
|
|
190
|
+
* @param {Snowflake} applicationId The ID of the application
|
|
191
|
+
* @param {string} tag The tag to remove
|
|
192
|
+
* @returns {Promise<Application>}
|
|
193
|
+
* @example
|
|
194
|
+
* // Remove a tag from application
|
|
195
|
+
* client.developers.delTag('1234567890123456789', 'music')
|
|
196
|
+
* .then(app => console.log(`Removed tag from ${app.name}`))
|
|
197
|
+
* .catch(console.error);
|
|
198
|
+
*/
|
|
199
|
+
async delTag(applicationId, tag) {
|
|
200
|
+
const app = await this.fetch(applicationId);
|
|
201
|
+
const currentTags = app.tags || [];
|
|
202
|
+
|
|
203
|
+
if (!currentTags.includes(tag)) {
|
|
204
|
+
throw new Error('Tag does not exist');
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const newTags = currentTags.filter(t => t !== tag);
|
|
208
|
+
return this.edit(applicationId, { tags: newTags });
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Enables intents for a bot application
|
|
213
|
+
* @param {Snowflake} applicationId The ID of the application
|
|
214
|
+
* @returns {Promise<Application>}
|
|
215
|
+
* @example
|
|
216
|
+
* // Enable intents for bot
|
|
217
|
+
* client.developers.enableIntents('1234567890123456789')
|
|
218
|
+
* .then(app => console.log(`Enabled intents for ${app.name}`))
|
|
219
|
+
* .catch(console.error);
|
|
220
|
+
*/
|
|
221
|
+
async enableIntents(applicationId) {
|
|
222
|
+
const data = await this.client.api.applications(applicationId).patch({
|
|
223
|
+
data: {
|
|
224
|
+
bot_public: true,
|
|
225
|
+
bot_require_code_grant: false,
|
|
226
|
+
flags: 25731072, // Flags with intents enabled
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
return new Application(this.client, data);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Disables intents for a bot application
|
|
234
|
+
* @param {Snowflake} applicationId The ID of the application
|
|
235
|
+
* @returns {Promise<Application>}
|
|
236
|
+
* @example
|
|
237
|
+
* // Disable intents for bot
|
|
238
|
+
* client.developers.disableIntents('1234567890123456789')
|
|
239
|
+
* .then(app => console.log(`Disabled intents for ${app.name}`))
|
|
240
|
+
* .catch(console.error);
|
|
241
|
+
*/
|
|
242
|
+
async disableIntents(applicationId) {
|
|
243
|
+
const data = await this.client.api.applications(applicationId).patch({
|
|
244
|
+
data: {
|
|
245
|
+
bot_public: true,
|
|
246
|
+
bot_require_code_grant: false,
|
|
247
|
+
flags: 25165824, // Flags with intents disabled
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
return new Application(this.client, data);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
module.exports = DeveloperManager;
|