diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2023-09-02 19:12:47 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2023-09-02 19:12:47 -0400 |
commit | e4450c8417624b71d779cb4f41692538f9165e10 (patch) | |
tree | b70826542223ecdf8a7a259f61b0a1abb8a217d8 /node_modules/discord.js/src/structures/BaseInteraction.js | |
download | sowbot3-e4450c8417624b71d779cb4f41692538f9165e10.tar.gz sowbot3-e4450c8417624b71d779cb4f41692538f9165e10.tar.bz2 sowbot3-e4450c8417624b71d779cb4f41692538f9165e10.zip |
first commit
Diffstat (limited to 'node_modules/discord.js/src/structures/BaseInteraction.js')
-rw-r--r-- | node_modules/discord.js/src/structures/BaseInteraction.js | 344 |
1 files changed, 344 insertions, 0 deletions
diff --git a/node_modules/discord.js/src/structures/BaseInteraction.js b/node_modules/discord.js/src/structures/BaseInteraction.js new file mode 100644 index 0000000..967350f --- /dev/null +++ b/node_modules/discord.js/src/structures/BaseInteraction.js @@ -0,0 +1,344 @@ +'use strict'; + +const { deprecate } = require('node:util'); +const { DiscordSnowflake } = require('@sapphire/snowflake'); +const { InteractionType, ApplicationCommandType, ComponentType } = require('discord-api-types/v10'); +const Base = require('./Base'); +const { SelectMenuTypes } = require('../util/Constants'); +const PermissionsBitField = require('../util/PermissionsBitField'); + +/** + * Represents an interaction. + * @extends {Base} + * @abstract + */ +class BaseInteraction extends Base { + constructor(client, data) { + super(client); + + /** + * The interaction's type + * @type {InteractionType} + */ + this.type = data.type; + + /** + * The interaction's id + * @type {Snowflake} + */ + this.id = data.id; + + /** + * The interaction's token + * @type {string} + * @name BaseInteraction#token + * @readonly + */ + Object.defineProperty(this, 'token', { value: data.token }); + + /** + * The application's id + * @type {Snowflake} + */ + this.applicationId = data.application_id; + + /** + * The id of the channel this interaction was sent in + * @type {?Snowflake} + */ + this.channelId = data.channel?.id ?? null; + + /** + * The id of the guild this interaction was sent in + * @type {?Snowflake} + */ + this.guildId = data.guild_id ?? null; + + /** + * The user who created this interaction + * @type {User} + */ + this.user = this.client.users._add(data.user ?? data.member.user); + + /** + * If this interaction was sent in a guild, the member which sent it + * @type {?(GuildMember|APIGuildMember)} + */ + this.member = data.member ? this.guild?.members._add(data.member) ?? data.member : null; + + /** + * The version + * @type {number} + */ + this.version = data.version; + + /** + * Set of permissions the application or bot has within the channel the interaction was sent from + * @type {?Readonly<PermissionsBitField>} + */ + this.appPermissions = data.app_permissions ? new PermissionsBitField(data.app_permissions).freeze() : null; + + /** + * The permissions of the member, if one exists, in the channel this interaction was executed in + * @type {?Readonly<PermissionsBitField>} + */ + this.memberPermissions = data.member?.permissions + ? new PermissionsBitField(data.member.permissions).freeze() + : null; + + /** + * A Discord locale string, possible values are: + * * en-US (English, US) + * * en-GB (English, UK) + * * bg (Bulgarian) + * * zh-CN (Chinese, China) + * * zh-TW (Chinese, Taiwan) + * * hr (Croatian) + * * cs (Czech) + * * da (Danish) + * * nl (Dutch) + * * fi (Finnish) + * * fr (French) + * * de (German) + * * el (Greek) + * * hi (Hindi) + * * hu (Hungarian) + * * it (Italian) + * * ja (Japanese) + * * ko (Korean) + * * lt (Lithuanian) + * * no (Norwegian) + * * pl (Polish) + * * pt-BR (Portuguese, Brazilian) + * * ro (Romanian, Romania) + * * ru (Russian) + * * es-ES (Spanish) + * * sv-SE (Swedish) + * * th (Thai) + * * tr (Turkish) + * * uk (Ukrainian) + * * vi (Vietnamese) + * @see {@link https://discord.com/developers/docs/reference#locales} + * @typedef {string} Locale + */ + + /** + * The locale of the user who invoked this interaction + * @type {Locale} + */ + this.locale = data.locale; + + /** + * The preferred locale from the guild this interaction was sent in + * @type {?Locale} + */ + this.guildLocale = data.guild_locale ?? null; + } + + /** + * The timestamp the interaction was created at + * @type {number} + * @readonly + */ + get createdTimestamp() { + return DiscordSnowflake.timestampFrom(this.id); + } + + /** + * The time the interaction was created at + * @type {Date} + * @readonly + */ + get createdAt() { + return new Date(this.createdTimestamp); + } + + /** + * The channel this interaction was sent in + * @type {?TextBasedChannels} + * @readonly + */ + get channel() { + return this.client.channels.cache.get(this.channelId) ?? null; + } + + /** + * The guild this interaction was sent in + * @type {?Guild} + * @readonly + */ + get guild() { + return this.client.guilds.cache.get(this.guildId) ?? null; + } + + /** + * Indicates whether this interaction is received from a guild. + * @returns {boolean} + */ + inGuild() { + return Boolean(this.guildId && this.member); + } + + /** + * Indicates whether or not this interaction is both cached and received from a guild. + * @returns {boolean} + */ + inCachedGuild() { + return Boolean(this.guild && this.member); + } + + /** + * Indicates whether or not this interaction is received from an uncached guild. + * @returns {boolean} + */ + inRawGuild() { + return Boolean(this.guildId && !this.guild && this.member); + } + + /** + * Indicates whether this interaction is an {@link AutocompleteInteraction} + * @returns {boolean} + */ + isAutocomplete() { + return this.type === InteractionType.ApplicationCommandAutocomplete; + } + + /** + * Indicates whether this interaction is a {@link CommandInteraction} + * @returns {boolean} + */ + isCommand() { + return this.type === InteractionType.ApplicationCommand; + } + + /** + * Indicates whether this interaction is a {@link ChatInputCommandInteraction}. + * @returns {boolean} + */ + isChatInputCommand() { + return this.type === InteractionType.ApplicationCommand && this.commandType === ApplicationCommandType.ChatInput; + } + + /** + * Indicates whether this interaction is a {@link ContextMenuCommandInteraction} + * @returns {boolean} + */ + isContextMenuCommand() { + return ( + this.type === InteractionType.ApplicationCommand && + [ApplicationCommandType.User, ApplicationCommandType.Message].includes(this.commandType) + ); + } + + /** + * Indicates whether this interaction is a {@link MessageComponentInteraction} + * @returns {boolean} + */ + isMessageComponent() { + return this.type === InteractionType.MessageComponent; + } + + /** + * Indicates whether this interaction is a {@link ModalSubmitInteraction} + * @returns {boolean} + */ + isModalSubmit() { + return this.type === InteractionType.ModalSubmit; + } + + /** + * Indicates whether this interaction is a {@link UserContextMenuCommandInteraction} + * @returns {boolean} + */ + isUserContextMenuCommand() { + return this.isContextMenuCommand() && this.commandType === ApplicationCommandType.User; + } + + /** + * Indicates whether this interaction is a {@link MessageContextMenuCommandInteraction} + * @returns {boolean} + */ + isMessageContextMenuCommand() { + return this.isContextMenuCommand() && this.commandType === ApplicationCommandType.Message; + } + + /** + * Indicates whether this interaction is a {@link ButtonInteraction}. + * @returns {boolean} + */ + isButton() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.Button; + } + + /** + * Indicates whether this interaction is a {@link StringSelectMenuInteraction}. + * @returns {boolean} + * @deprecated Use {@link BaseInteraction#isStringSelectMenu} instead. + */ + isSelectMenu() { + return this.isStringSelectMenu(); + } + + /** + * Indicates whether this interaction is a select menu of any known type. + * @returns {boolean} + */ + isAnySelectMenu() { + return this.type === InteractionType.MessageComponent && SelectMenuTypes.includes(this.componentType); + } + + /** + * Indicates whether this interaction is a {@link StringSelectMenuInteraction}. + * @returns {boolean} + */ + isStringSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.StringSelect; + } + + /** + * Indicates whether this interaction is a {@link UserSelectMenuInteraction} + * @returns {boolean} + */ + isUserSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.UserSelect; + } + + /** + * Indicates whether this interaction is a {@link RoleSelectMenuInteraction} + * @returns {boolean} + */ + isRoleSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.RoleSelect; + } + + /** + * Indicates whether this interaction is a {@link ChannelSelectMenuInteraction} + * @returns {boolean} + */ + isChannelSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.ChannelSelect; + } + + /** + * Indicates whether this interaction is a {@link MentionableSelectMenuInteraction} + * @returns {boolean} + */ + isMentionableSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.MentionableSelect; + } + + /** + * Indicates whether this interaction can be replied to. + * @returns {boolean} + */ + isRepliable() { + return ![InteractionType.Ping, InteractionType.ApplicationCommandAutocomplete].includes(this.type); + } +} + +BaseInteraction.prototype.isSelectMenu = deprecate( + BaseInteraction.prototype.isSelectMenu, + 'BaseInteraction#isSelectMenu() is deprecated. Use BaseInteraction#isStringSelectMenu() instead.', +); + +module.exports = BaseInteraction; |