feat(SelectMenu): SelectMenu v2
This commit is contained in:
parent
04296bd6d1
commit
035d933771
@ -47,7 +47,11 @@ class InteractionCreateAction extends Action {
|
|||||||
case MessageComponentTypes.BUTTON:
|
case MessageComponentTypes.BUTTON:
|
||||||
InteractionType = ButtonInteraction;
|
InteractionType = ButtonInteraction;
|
||||||
break;
|
break;
|
||||||
case MessageComponentTypes.SELECT_MENU:
|
case MessageComponentTypes.STRING_SELECT_MENU:
|
||||||
|
case MessageComponentTypes.USER_SELECT_MENU:
|
||||||
|
case MessageComponentTypes.ROLE_SELECT_MENU:
|
||||||
|
case MessageComponentTypes.MENTIONABLE_SELECT_MENU:
|
||||||
|
case MessageComponentTypes.CHANNEL_SELECT_MENU:
|
||||||
InteractionType = SelectMenuInteraction;
|
InteractionType = SelectMenuInteraction;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -5,7 +5,13 @@ const { findBestMatch } = require('string-similarity');
|
|||||||
const Base = require('./Base');
|
const Base = require('./Base');
|
||||||
const ApplicationCommandPermissionsManager = require('../managers/ApplicationCommandPermissionsManager');
|
const ApplicationCommandPermissionsManager = require('../managers/ApplicationCommandPermissionsManager');
|
||||||
const MessageAttachment = require('../structures/MessageAttachment');
|
const MessageAttachment = require('../structures/MessageAttachment');
|
||||||
const { ApplicationCommandOptionTypes, ApplicationCommandTypes, ChannelTypes, Events } = require('../util/Constants');
|
const {
|
||||||
|
ApplicationCommandOptionTypes,
|
||||||
|
ApplicationCommandTypes,
|
||||||
|
ChannelTypes,
|
||||||
|
Events,
|
||||||
|
InteractionTypes,
|
||||||
|
} = require('../util/Constants');
|
||||||
const DataResolver = require('../util/DataResolver');
|
const DataResolver = require('../util/DataResolver');
|
||||||
const Permissions = require('../util/Permissions');
|
const Permissions = require('../util/Permissions');
|
||||||
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
||||||
@ -797,14 +803,12 @@ class ApplicationCommand extends Base {
|
|||||||
dataAdd = [dataAdd];
|
dataAdd = [dataAdd];
|
||||||
}
|
}
|
||||||
const data = {
|
const data = {
|
||||||
type: autocomplete ? 4 : 2, // Slash command, context menu
|
type: autocomplete ? InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE : InteractionTypes.APPLICATION_COMMAND,
|
||||||
// Type: 4: Auto-complete
|
|
||||||
application_id: this.applicationId,
|
application_id: this.applicationId,
|
||||||
guild_id: message.guildId,
|
guild_id: message.guildId,
|
||||||
channel_id: message.channelId,
|
channel_id: message.channelId,
|
||||||
session_id: this.client.session_id,
|
session_id: this.client.session_id,
|
||||||
data: {
|
data: {
|
||||||
// ApplicationCommandData
|
|
||||||
version: this.version,
|
version: this.version,
|
||||||
id: this.id,
|
id: this.id,
|
||||||
name: this.name,
|
name: this.name,
|
||||||
@ -932,13 +936,12 @@ class ApplicationCommand extends Base {
|
|||||||
if (this.type == 'CHAT_INPUT') return false;
|
if (this.type == 'CHAT_INPUT') return false;
|
||||||
const nonce = SnowflakeUtil.generate();
|
const nonce = SnowflakeUtil.generate();
|
||||||
const data = {
|
const data = {
|
||||||
type: 2, // Slash command, context menu
|
type: InteractionTypes.APPLICATION_COMMAND,
|
||||||
application_id: this.applicationId,
|
application_id: this.applicationId,
|
||||||
guild_id: message.guildId,
|
guild_id: message.guildId,
|
||||||
channel_id: message.channelId,
|
channel_id: message.channelId,
|
||||||
session_id: this.client.session_id,
|
session_id: this.client.session_id,
|
||||||
data: {
|
data: {
|
||||||
// ApplicationCommandData
|
|
||||||
version: this.version,
|
version: this.version,
|
||||||
id: this.id,
|
id: this.id,
|
||||||
name: this.name,
|
name: this.name,
|
||||||
|
@ -76,7 +76,11 @@ class BaseMessageComponent {
|
|||||||
component = data instanceof MessageButton ? data : new MessageButton(data);
|
component = data instanceof MessageButton ? data : new MessageButton(data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MessageComponentTypes.SELECT_MENU: {
|
case MessageComponentTypes.STRING_SELECT_MENU:
|
||||||
|
case MessageComponentTypes.USER_SELECT_MENU:
|
||||||
|
case MessageComponentTypes.ROLE_SELECT_MENU:
|
||||||
|
case MessageComponentTypes.MENTIONABLE_SELECT_MENU:
|
||||||
|
case MessageComponentTypes.CHANNEL_SELECT_MENU: {
|
||||||
const MessageSelectMenu = require('./MessageSelectMenu');
|
const MessageSelectMenu = require('./MessageSelectMenu');
|
||||||
component = data instanceof MessageSelectMenu ? data : new MessageSelectMenu(data);
|
component = data instanceof MessageSelectMenu ? data : new MessageSelectMenu(data);
|
||||||
break;
|
break;
|
||||||
|
@ -1068,32 +1068,33 @@ class Message extends Base {
|
|||||||
* @param {Array<string>} options Menu Options
|
* @param {Array<string>} options Menu Options
|
||||||
* @returns {Promise<InteractionResponse>}
|
* @returns {Promise<InteractionResponse>}
|
||||||
*/
|
*/
|
||||||
async selectMenu(menuID, options = []) {
|
selectMenu(menuID, options = []) {
|
||||||
if (!this.components[0]) throw new TypeError('MESSAGE_NO_COMPONENTS');
|
if (!this.components[0]) throw new TypeError('MESSAGE_NO_COMPONENTS');
|
||||||
let menuFirst;
|
const menuAll = [];
|
||||||
let menuCorrect;
|
for (const row of this.components) {
|
||||||
let menuCount = 0;
|
for (const component of row.components) {
|
||||||
await Promise.all(
|
if (
|
||||||
this.components.map(row => {
|
[
|
||||||
const firstElement = row.components[0]; // Because 1 row has only 1 menu;
|
'STRING_SELECT_MENU',
|
||||||
if (firstElement.type == 'SELECT_MENU') {
|
'USER_SELECT_MENU',
|
||||||
menuCount++;
|
'ROLE_SELECT_MENU',
|
||||||
if (firstElement.customId == menuID) {
|
'MENTIONABLE_SELECT_MENU',
|
||||||
menuCorrect = firstElement;
|
'CHANNEL_SELECT_MENU',
|
||||||
} else if (!menuFirst) {
|
].includes(component.type)
|
||||||
menuFirst = firstElement;
|
) {
|
||||||
}
|
menuAll.push(component);
|
||||||
}
|
}
|
||||||
return true;
|
}
|
||||||
}),
|
}
|
||||||
);
|
if (menuAll.length == 0) throw new TypeError('MENU_NOT_FOUND');
|
||||||
if (menuCount == 0) throw new TypeError('MENU_NOT_FOUND');
|
if (menuAll.length == 1) {
|
||||||
if (!menuCorrect) {
|
return menuAll[0].select(this, Array.isArray(menuID) ? menuID : options);
|
||||||
if (menuCount == 1) menuCorrect = menuFirst;
|
} else {
|
||||||
else if (typeof menuID !== 'string') throw new TypeError('MENU_ID_NOT_STRING');
|
if (typeof menuID !== 'string') throw new TypeError('MENU_ID_NOT_STRING');
|
||||||
else throw new TypeError('MENU_ID_NOT_FOUND');
|
const menuCorrect = menuAll.find(menu => menu.customId == menuID);
|
||||||
|
if (!menuCorrect) throw new TypeError('MENU_NOT_FOUND');
|
||||||
|
return menuCorrect.select(this, Array.isArray(menuID) ? menuID : options);
|
||||||
}
|
}
|
||||||
return menuCorrect.select(this, Array.isArray(menuID) ? menuID : options);
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
/**
|
/**
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
const { setTimeout } = require('node:timers');
|
const { setTimeout } = require('node:timers');
|
||||||
const BaseMessageComponent = require('./BaseMessageComponent');
|
const BaseMessageComponent = require('./BaseMessageComponent');
|
||||||
const { RangeError } = require('../errors');
|
const { RangeError } = require('../errors');
|
||||||
const { MessageButtonStyles, MessageComponentTypes } = require('../util/Constants');
|
const { MessageButtonStyles, MessageComponentTypes, InteractionTypes } = require('../util/Constants');
|
||||||
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
||||||
const Util = require('../util/Util');
|
const Util = require('../util/Util');
|
||||||
const { lazy } = require('../util/Util');
|
const { lazy } = require('../util/Util');
|
||||||
@ -175,16 +175,16 @@ class MessageButton extends BaseMessageComponent {
|
|||||||
if (!(message instanceof Message())) throw new Error('[UNKNOWN_MESSAGE] Please pass a valid Message');
|
if (!(message instanceof Message())) throw new Error('[UNKNOWN_MESSAGE] Please pass a valid Message');
|
||||||
if (!this.customId || this.style == 5 || this.disabled) return false; // Button URL, Disabled
|
if (!this.customId || this.style == 5 || this.disabled) return false; // Button URL, Disabled
|
||||||
const data = {
|
const data = {
|
||||||
type: 3, // ?
|
type: InteractionTypes.MESSAGE_COMPONENT,
|
||||||
nonce,
|
nonce,
|
||||||
guild_id: message.guild?.id ?? null, // In DMs
|
guild_id: message.guild?.id ?? null,
|
||||||
channel_id: message.channel.id,
|
channel_id: message.channel.id,
|
||||||
message_id: message.id,
|
message_id: message.id,
|
||||||
application_id: message.applicationId ?? message.author.id,
|
application_id: message.applicationId ?? message.author.id,
|
||||||
session_id: message.client.session_id,
|
session_id: message.client.session_id,
|
||||||
message_flags: message.flags.bitfield,
|
message_flags: message.flags.bitfield,
|
||||||
data: {
|
data: {
|
||||||
component_type: 2, // Button
|
component_type: MessageComponentTypes.BUTTON,
|
||||||
custom_id: this.customId,
|
custom_id: this.customId,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
const { setTimeout } = require('node:timers');
|
const { setTimeout } = require('node:timers');
|
||||||
const BaseMessageComponent = require('./BaseMessageComponent');
|
const BaseMessageComponent = require('./BaseMessageComponent');
|
||||||
const { Message } = require('./Message');
|
const { Message } = require('./Message');
|
||||||
const { MessageComponentTypes } = require('../util/Constants');
|
const { MessageComponentTypes, InteractionTypes } = require('../util/Constants');
|
||||||
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
||||||
const Util = require('../util/Util');
|
const Util = require('../util/Util');
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ class MessageSelectMenu extends BaseMessageComponent {
|
|||||||
* @param {MessageSelectMenu|MessageSelectMenuOptions} [data={}] MessageSelectMenu to clone or raw data
|
* @param {MessageSelectMenu|MessageSelectMenuOptions} [data={}] MessageSelectMenu to clone or raw data
|
||||||
*/
|
*/
|
||||||
constructor(data = {}) {
|
constructor(data = {}) {
|
||||||
super({ type: 'SELECT_MENU' });
|
super({ type: data?.type ? MessageComponentTypes[data.type] : 'STRING_SELECT_MENU' });
|
||||||
|
|
||||||
this.setup(data);
|
this.setup(data);
|
||||||
}
|
}
|
||||||
@ -87,6 +87,28 @@ class MessageSelectMenu extends BaseMessageComponent {
|
|||||||
this.disabled = data.disabled ?? false;
|
this.disabled = data.disabled ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {string} SelectMenuTypes
|
||||||
|
* Must be one of:
|
||||||
|
* * `STRING_SELECT_MENU`
|
||||||
|
* * `USER_SELECT_MENU`
|
||||||
|
* * `ROLE_SELECT_MENU`
|
||||||
|
* * `MENTIONABLE_SELECT_MENU`
|
||||||
|
* * `CHANNEL_SELECT_MENU`
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set type of select menu
|
||||||
|
* @param {SelectMenuTypes} type Type of select menu
|
||||||
|
* @returns {MessageSelectMenu}
|
||||||
|
*/
|
||||||
|
|
||||||
|
setType(type) {
|
||||||
|
if (!type) type = MessageComponentTypes.STRING_SELECT_MENU;
|
||||||
|
this.type = MessageSelectMenu.resolveType(type);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the custom id of this select menu
|
* Sets the custom id of this select menu
|
||||||
* @param {string} customId A unique string to be sent in the interaction when clicked
|
* @param {string} customId A unique string to be sent in the interaction when clicked
|
||||||
@ -202,6 +224,10 @@ class MessageSelectMenu extends BaseMessageComponent {
|
|||||||
return { label, value, description, emoji, default: option.default ?? false };
|
return { label, value, description, emoji, default: option.default ?? false };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static resolveType(type) {
|
||||||
|
return typeof type === 'string' ? type : MessageComponentTypes[type];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalizes option input and resolves strings and emojis.
|
* Normalizes option input and resolves strings and emojis.
|
||||||
* @param {...MessageSelectOptionData|MessageSelectOptionData[]} options The select menu options to normalize
|
* @param {...MessageSelectOptionData|MessageSelectOptionData[]} options The select menu options to normalize
|
||||||
@ -218,11 +244,9 @@ class MessageSelectMenu extends BaseMessageComponent {
|
|||||||
* @returns {Promise<InteractionResponse>}
|
* @returns {Promise<InteractionResponse>}
|
||||||
*/
|
*/
|
||||||
async select(message, values = []) {
|
async select(message, values = []) {
|
||||||
// Github copilot is the best :))
|
|
||||||
// POST data from https://github.com/phamleduy04
|
|
||||||
if (!(message instanceof Message)) throw new Error('[UNKNOWN_MESSAGE] Please pass a valid Message');
|
if (!(message instanceof Message)) throw new Error('[UNKNOWN_MESSAGE] Please pass a valid Message');
|
||||||
if (!Array.isArray(values)) throw new TypeError('[INVALID_VALUES] Please pass an array of values');
|
if (!Array.isArray(values)) throw new TypeError('[INVALID_VALUES] Please pass an array of values');
|
||||||
if (!this.customId || this.disabled || values.length == 0) return false; // Disabled or null customID or [] array
|
if (!this.customId || this.disabled) return false; // Disabled or null customID
|
||||||
// Check value is invalid [Max options is 20] => For loop
|
// Check value is invalid [Max options is 20] => For loop
|
||||||
if (values.length < this.minValues) {
|
if (values.length < this.minValues) {
|
||||||
throw new RangeError(`[SELECT_MENU_MIN_VALUES] The minimum number of values is ${this.minValues}`);
|
throw new RangeError(`[SELECT_MENU_MIN_VALUES] The minimum number of values is ${this.minValues}`);
|
||||||
@ -230,30 +254,68 @@ class MessageSelectMenu extends BaseMessageComponent {
|
|||||||
if (values.length > this.maxValues) {
|
if (values.length > this.maxValues) {
|
||||||
throw new RangeError(`[SELECT_MENU_MAX_VALUES] The maximum number of values is ${this.maxValues}`);
|
throw new RangeError(`[SELECT_MENU_MAX_VALUES] The maximum number of values is ${this.maxValues}`);
|
||||||
}
|
}
|
||||||
const validValue = this.options.map(obj => obj.value);
|
const enableCheck = {};
|
||||||
const check_ = await values.find(element => {
|
this.options.forEach(obj => {
|
||||||
if (typeof element !== 'string') return true;
|
enableCheck[obj.value] = obj.default;
|
||||||
if (!validValue.includes(element)) return true;
|
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
if (check_) {
|
const parseValues = value => {
|
||||||
throw new RangeError(
|
switch (this.type) {
|
||||||
`[SELECT_MENU_INVALID_VALUE] The value ${check_} is invalid. Please use a valid value ${validValue.join(', ')}`,
|
case 'STRING_SELECT_MENU': {
|
||||||
);
|
if (typeof value !== 'string') throw new TypeError('[INVALID_VALUE] Please pass a string value');
|
||||||
|
const value_ = this.options.find(obj => obj.value === value || obj.label === value);
|
||||||
|
if (!value_) throw new Error('[INVALID_VALUE] Please pass a valid value');
|
||||||
|
return value_.value;
|
||||||
|
}
|
||||||
|
case 'USER_SELECT_MENU': {
|
||||||
|
const userId = this.client.users.resolveId(value);
|
||||||
|
if (!userId) throw new Error('[INVALID_VALUE] Please pass a valid user');
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
case 'ROLE_SELECT_MENU': {
|
||||||
|
const roleId = this.client.roles.resolveId(value);
|
||||||
|
if (!roleId) throw new Error('[INVALID_VALUE] Please pass a valid role');
|
||||||
|
return roleId;
|
||||||
|
}
|
||||||
|
case 'MENTIONABLE_SELECT_MENU': {
|
||||||
|
const mentionableId = this.client.users.resolveId(value) || this.client.roles.resolveId(value);
|
||||||
|
if (!mentionableId) throw new Error('[INVALID_VALUE] Please pass a valid mentionable');
|
||||||
|
return mentionableId;
|
||||||
|
}
|
||||||
|
case 'CHANNEL_SELECT_MENU': {
|
||||||
|
const channelId = this.client.channels.resolveId(value);
|
||||||
|
if (!channelId) throw new Error('[INVALID_VALUE] Please pass a valid channel');
|
||||||
|
return channelId;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
throw new Error(`[INVALID_TYPE] Please pass a valid select menu type (Got ${this.type})`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const value of values) {
|
||||||
|
const value_ = parseValues(value);
|
||||||
|
if (value_ in enableCheck) {
|
||||||
|
enableCheck[value_] = !enableCheck[value_];
|
||||||
|
} else {
|
||||||
|
enableCheck[value_] = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
values = values?.length ? Object.keys(enableCheck).filter(key => enableCheck[key]) : [];
|
||||||
|
|
||||||
const nonce = SnowflakeUtil.generate();
|
const nonce = SnowflakeUtil.generate();
|
||||||
const data = {
|
const data = {
|
||||||
type: 3, // ?
|
type: InteractionTypes.MESSAGE_COMPONENT,
|
||||||
guild_id: message.guild?.id ?? null, // In DMs
|
guild_id: message.guild?.id ?? null,
|
||||||
channel_id: message.channel.id,
|
channel_id: message.channel.id,
|
||||||
message_id: message.id,
|
message_id: message.id,
|
||||||
application_id: message.applicationId ?? message.author.id,
|
application_id: message.applicationId ?? message.author.id,
|
||||||
session_id: message.client.session_id,
|
session_id: message.client.session_id,
|
||||||
message_flags: message.flags.bitfield,
|
message_flags: message.flags.bitfield,
|
||||||
data: {
|
data: {
|
||||||
component_type: 3, // Select Menu
|
component_type: MessageComponentTypes[this.type],
|
||||||
custom_id: this.customId,
|
custom_id: this.customId,
|
||||||
type: 3, // Select Menu
|
type: MessageComponentTypes[this.type],
|
||||||
values,
|
values,
|
||||||
},
|
},
|
||||||
nonce,
|
nonce,
|
||||||
|
@ -6,28 +6,28 @@ const Package = (exports.Package = require('../../package.json'));
|
|||||||
const { Error, RangeError, TypeError } = require('../errors');
|
const { Error, RangeError, TypeError } = require('../errors');
|
||||||
// #88: https://jnrbsn.github.io/user-agents/user-agents.json
|
// #88: https://jnrbsn.github.io/user-agents/user-agents.json
|
||||||
const listUserAgent = [
|
const listUserAgent = [
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
|
||||||
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
|
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
|
||||||
'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
|
'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
|
||||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
|
||||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
|
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 12.6; rv:106.0) Gecko/20100101 Firefox/106.0',
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 13.0; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||||
'Mozilla/5.0 (X11; Linux i686; rv:106.0) Gecko/20100101 Firefox/106.0',
|
'Mozilla/5.0 (X11; Linux i686; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||||
'Mozilla/5.0 (X11; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
'Mozilla/5.0 (X11; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||||
'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:106.0) Gecko/20100101 Firefox/106.0',
|
'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||||
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||||
'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0',
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0',
|
||||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 12.6; rv:102.0) Gecko/20100101 Firefox/102.0',
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 13.0; rv:102.0) Gecko/20100101 Firefox/102.0',
|
||||||
'Mozilla/5.0 (X11; Linux i686; rv:102.0) Gecko/20100101 Firefox/102.0',
|
'Mozilla/5.0 (X11; Linux i686; rv:102.0) Gecko/20100101 Firefox/102.0',
|
||||||
'Mozilla/5.0 (Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0',
|
'Mozilla/5.0 (Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0',
|
||||||
'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:102.0) Gecko/20100101 Firefox/102.0',
|
'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:102.0) Gecko/20100101 Firefox/102.0',
|
||||||
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0',
|
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0',
|
||||||
'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0',
|
'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0',
|
||||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6 Safari/605.1.15',
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15',
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52',
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35',
|
||||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52',
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1513,12 +1513,26 @@ exports.InteractionResponseTypes = createEnum([
|
|||||||
* The type of a message component
|
* The type of a message component
|
||||||
* * ACTION_ROW
|
* * ACTION_ROW
|
||||||
* * BUTTON
|
* * BUTTON
|
||||||
* * SELECT_MENU
|
* * STRING_SELECT_MENU
|
||||||
* * TEXT_INPUT
|
* * TEXT_INPUT
|
||||||
|
* * USER_SELECT_MENU
|
||||||
|
* * ROLE_SELECT_MENU
|
||||||
|
* * MENTIONABLE_SELECT_MENU
|
||||||
|
* * CHANNEL_SELECT_MENU
|
||||||
* @typedef {string} MessageComponentType
|
* @typedef {string} MessageComponentType
|
||||||
* @see {@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}
|
* @see {@link https://discord.com/developers/docs/interactions/message-components#component-object-component-types}
|
||||||
*/
|
*/
|
||||||
exports.MessageComponentTypes = createEnum([null, 'ACTION_ROW', 'BUTTON', 'SELECT_MENU', 'TEXT_INPUT']);
|
exports.MessageComponentTypes = createEnum([
|
||||||
|
null,
|
||||||
|
'ACTION_ROW',
|
||||||
|
'BUTTON',
|
||||||
|
'STRING_SELECT_MENU',
|
||||||
|
'TEXT_INPUT',
|
||||||
|
'USER_SELECT_MENU',
|
||||||
|
'ROLE_SELECT_MENU',
|
||||||
|
'MENTIONABLE_SELECT_MENU',
|
||||||
|
'CHANNEL_SELECT_MENU',
|
||||||
|
]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The style of a message button
|
* The style of a message button
|
||||||
|
@ -181,14 +181,14 @@ class Options extends null {
|
|||||||
browser: 'Chrome',
|
browser: 'Chrome',
|
||||||
device: '',
|
device: '',
|
||||||
system_locale: 'en-US',
|
system_locale: 'en-US',
|
||||||
browser_version: '105.0.0.0',
|
browser_version: '107.0.0.0',
|
||||||
os_version: '10',
|
os_version: '10',
|
||||||
referrer: '',
|
referrer: '',
|
||||||
referring_domain: '',
|
referring_domain: '',
|
||||||
referrer_current: '',
|
referrer_current: '',
|
||||||
referring_domain_current: '',
|
referring_domain_current: '',
|
||||||
release_channel: 'stable',
|
release_channel: 'stable',
|
||||||
client_build_number: 154186,
|
client_build_number: 156668,
|
||||||
client_event_source: null,
|
client_event_source: null,
|
||||||
},
|
},
|
||||||
// ? capabilities: 1021,
|
// ? capabilities: 1021,
|
||||||
|
6
typings/enums.d.ts
vendored
6
typings/enums.d.ts
vendored
@ -218,8 +218,12 @@ export const enum MessageButtonStyles {
|
|||||||
export const enum MessageComponentTypes {
|
export const enum MessageComponentTypes {
|
||||||
ACTION_ROW = 1,
|
ACTION_ROW = 1,
|
||||||
BUTTON = 2,
|
BUTTON = 2,
|
||||||
SELECT_MENU = 3,
|
STRING_SELECT_MENU = 3,
|
||||||
TEXT_INPUT = 4,
|
TEXT_INPUT = 4,
|
||||||
|
USER_SELECT_MENU = 5,
|
||||||
|
ROLE_SELECT_MENU = 6,
|
||||||
|
MENTIONABLE_SELECT_MENU = 7,
|
||||||
|
CHANNEL_SELECT_MENU = 8,
|
||||||
}
|
}
|
||||||
|
|
||||||
export const enum ModalComponentTypes {
|
export const enum ModalComponentTypes {
|
||||||
|
21
typings/index.d.ts
vendored
21
typings/index.d.ts
vendored
@ -1863,8 +1863,12 @@ export type AwaitMessageCollectorOptionsParams<
|
|||||||
|
|
||||||
export interface StringMappedInteractionTypes<Cached extends CacheType = CacheType> {
|
export interface StringMappedInteractionTypes<Cached extends CacheType = CacheType> {
|
||||||
BUTTON: ButtonInteraction<Cached>;
|
BUTTON: ButtonInteraction<Cached>;
|
||||||
SELECT_MENU: SelectMenuInteraction<Cached>;
|
STRING_SELECT_MENU: SelectMenuInteraction<Cached>;
|
||||||
ACTION_ROW: MessageComponentInteraction<Cached>;
|
ACTION_ROW: MessageComponentInteraction<Cached>;
|
||||||
|
USER_SELECT_MENU: SelectMenuInteraction<Cached>;
|
||||||
|
ROLE_SELECT_MENU: SelectMenuInteraction<Cached>;
|
||||||
|
MENTIONABLE_SELECT_MENU: SelectMenuInteraction<Cached>;
|
||||||
|
CHANNEL_SELECT_MENU: SelectMenuInteraction<Cached>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type WrapBooleanCache<T extends boolean> = If<T, 'cached', CacheType>;
|
export type WrapBooleanCache<T extends boolean> = If<T, 'cached', CacheType>;
|
||||||
@ -1873,9 +1877,13 @@ export type MappedInteractionTypes<Cached extends boolean = boolean> = EnumValue
|
|||||||
typeof MessageComponentTypes,
|
typeof MessageComponentTypes,
|
||||||
{
|
{
|
||||||
BUTTON: ButtonInteraction<WrapBooleanCache<Cached>>;
|
BUTTON: ButtonInteraction<WrapBooleanCache<Cached>>;
|
||||||
SELECT_MENU: SelectMenuInteraction<WrapBooleanCache<Cached>>;
|
STRING_SELECT_MENU: SelectMenuInteraction<WrapBooleanCache<Cached>>;
|
||||||
ACTION_ROW: MessageComponentInteraction<WrapBooleanCache<Cached>>;
|
ACTION_ROW: MessageComponentInteraction<WrapBooleanCache<Cached>>;
|
||||||
TEXT_INPUT: ModalSubmitInteraction<WrapBooleanCache<Cached>>;
|
TEXT_INPUT: ModalSubmitInteraction<WrapBooleanCache<Cached>>;
|
||||||
|
USER_SELECT_MENU: SelectMenuInteraction<WrapBooleanCache<Cached>>;
|
||||||
|
ROLE_SELECT_MENU: SelectMenuInteraction<WrapBooleanCache<Cached>>;
|
||||||
|
MENTIONABLE_SELECT_MENU: SelectMenuInteraction<WrapBooleanCache<Cached>>;
|
||||||
|
CHANNEL_SELECT_MENU: SelectMenuInteraction<WrapBooleanCache<Cached>>;
|
||||||
}
|
}
|
||||||
>;
|
>;
|
||||||
|
|
||||||
@ -2248,9 +2256,10 @@ export class MessageSelectMenu extends BaseMessageComponent {
|
|||||||
public minValues: number | null;
|
public minValues: number | null;
|
||||||
public options: MessageSelectOption[];
|
public options: MessageSelectOption[];
|
||||||
public placeholder: string | null;
|
public placeholder: string | null;
|
||||||
public type: 'SELECT_MENU';
|
public type: SelectMenuTypes;
|
||||||
public addOptions(...options: MessageSelectOptionData[] | MessageSelectOptionData[][]): this;
|
public addOptions(...options: MessageSelectOptionData[] | MessageSelectOptionData[][]): this;
|
||||||
public setOptions(...options: MessageSelectOptionData[] | MessageSelectOptionData[][]): this;
|
public setOptions(...options: MessageSelectOptionData[] | MessageSelectOptionData[][]): this;
|
||||||
|
public setType(type: SelectMenuTypes): this;
|
||||||
public setCustomId(customId: string): this;
|
public setCustomId(customId: string): this;
|
||||||
public setDisabled(disabled?: boolean): this;
|
public setDisabled(disabled?: boolean): this;
|
||||||
public setMaxValues(maxValues: number): this;
|
public setMaxValues(maxValues: number): this;
|
||||||
@ -2262,7 +2271,7 @@ export class MessageSelectMenu extends BaseMessageComponent {
|
|||||||
...options: MessageSelectOptionData[] | MessageSelectOptionData[][]
|
...options: MessageSelectOptionData[] | MessageSelectOptionData[][]
|
||||||
): this;
|
): this;
|
||||||
public toJSON(): APISelectMenuComponent;
|
public toJSON(): APISelectMenuComponent;
|
||||||
public select(message: Message, values: string[]): Promise<InteractionResponse>;
|
public select(message: Message, values?: string[]): Promise<InteractionResponse>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Todo
|
// Todo
|
||||||
@ -2544,6 +2553,8 @@ export class Role extends Base {
|
|||||||
public static comparePositions(role1: Role, role2: Role): number;
|
public static comparePositions(role1: Role, role2: Role): number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type SelectMenuTypes = 'STRING_SELECT_MENU' | 'USER_SELECT_MENU' | 'ROLE_SELECT_MENU' | 'MENTIONABLE_SELECT_MENU' | 'CHANNEL_SELECT_MENU';
|
||||||
|
|
||||||
export class SelectMenuInteraction<Cached extends CacheType = CacheType> extends MessageComponentInteraction<Cached> {
|
export class SelectMenuInteraction<Cached extends CacheType = CacheType> extends MessageComponentInteraction<Cached> {
|
||||||
public constructor(client: Client, data: RawMessageSelectMenuInteractionData);
|
public constructor(client: Client, data: RawMessageSelectMenuInteractionData);
|
||||||
public readonly component: CacheTypeReducer<
|
public readonly component: CacheTypeReducer<
|
||||||
@ -2553,7 +2564,7 @@ export class SelectMenuInteraction<Cached extends CacheType = CacheType> extends
|
|||||||
MessageSelectMenu | APISelectMenuComponent,
|
MessageSelectMenu | APISelectMenuComponent,
|
||||||
MessageSelectMenu | APISelectMenuComponent
|
MessageSelectMenu | APISelectMenuComponent
|
||||||
>;
|
>;
|
||||||
public componentType: 'SELECT_MENU';
|
public componentType: SelectMenuTypes;
|
||||||
public values: string[];
|
public values: string[];
|
||||||
public inGuild(): this is SelectMenuInteraction<'raw' | 'cached'>;
|
public inGuild(): this is SelectMenuInteraction<'raw' | 'cached'>;
|
||||||
public inCachedGuild(): this is SelectMenuInteraction<'cached'>;
|
public inCachedGuild(): this is SelectMenuInteraction<'cached'>;
|
||||||
|
Loading…
Reference in New Issue
Block a user