diff --git a/DOCUMENT.md b/DOCUMENT.md index 00e3865..305a114 100644 --- a/DOCUMENT.md +++ b/DOCUMENT.md @@ -236,6 +236,14 @@ And you can change the status 5 times every 20 seconds! await Button.click(Message); ``` +
+Message Select Menu (v1) + +```js +await MessageSelectMenu.select(Message, value); +// value: ['value1', 'value2' , ...] +``` +
## More features diff --git a/README.md b/README.md index 3b4243e..e04be07 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,7 @@ window.webpackChunkdiscord_app.push([[Math.random()], {}, (req) => {for (const m - Get Profile GuildMember [Nitro Time, Boost Time, Connected Account, Bio, ...] - Setting Position Guild and Folder - Custom Status and RPC (without button, because it's not working) +- Interaction [Button, MessageSelectMenu, ...] - You can request more features for my module by placing an issue! ## Links [Discord.js] diff --git a/package.json b/package.json index c7fb3e9..55444a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "discord.js-selfbot-v13", - "version": "1.0.3", + "version": "1.0.4", "description": "A unofficial discord.js fork for creating selfbots [Based on discord.js v13]", "main": "./src/index.js", "types": "./typings/index.d.ts", diff --git a/src/structures/MessageSelectMenu.js b/src/structures/MessageSelectMenu.js index ae1e7a6..a5a2472 100644 --- a/src/structures/MessageSelectMenu.js +++ b/src/structures/MessageSelectMenu.js @@ -3,6 +3,7 @@ const BaseMessageComponent = require('./BaseMessageComponent'); const { MessageComponentTypes } = require('../util/Constants'); const Util = require('../util/Util'); +const { Message } = require('./Message'); /** * Represents a select menu message component @@ -207,6 +208,43 @@ class MessageSelectMenu extends BaseMessageComponent { static normalizeOptions(...options) { return options.flat(Infinity).map(option => this.normalizeOption(option)); } + // Add + 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 (!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 + // Check value is invalid [Max options is 20] => For loop + if (values.length < this.minValues) throw new RangeError("[SELECT_MENU_MIN_VALUES] The minimum number of values is " + this.minValues); + if (values.length > 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 check_ = await values.find(element => { + if (typeof element !== 'string') return true; + if (!validValue.includes(element)) return true; + return false; + }) + if (check_) throw new RangeError("[SELECT_MENU_INVALID_VALUE] The value " + check_ + " is invalid. Please use a valid value " + validValue.join(', ')); + await message.client.api.interactions.post( + { + data: { + type: 3, // ? + guild_id: message.guild?.id ?? null, // In DMs + channel_id: message.channel.id, + message_id: message.id, + application_id: message.author.id, + session_id: message.client.session_id, + data: { + component_type: 3, // Select Menu + custom_id: this.customId, + type: 3, // Select Menu + values, + }, + } + } + ) + return true; + } } module.exports = MessageSelectMenu;