1.3.1
- Update Document - Fix WebEmbed - Fix MessagePayload - Clear warn "Accessing non-existent property inside a circular dependency" (Pull #26)
This commit is contained in:
		@@ -4,6 +4,11 @@
 | 
			
		||||
# <strong>[Risky actions](https://github.com/Merubokkusu/Discord-S.C.U.M/issues/66)</strong>
 | 
			
		||||
 | 
			
		||||
# Quick links
 | 
			
		||||
- [<strong>ClientOption</strong>](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/ClientOption.md)
 | 
			
		||||
- [<strong>HTTPOption</strong>](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/HTTPOption.md)
 | 
			
		||||
- [<strong>Guild</strong>](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md)
 | 
			
		||||
- [<strong>Message</strong>](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Message.md)
 | 
			
		||||
- [<strong>User</strong>](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md)
 | 
			
		||||
 | 
			
		||||
## More features
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,7 @@
 | 
			
		||||
# Quick Links
 | 
			
		||||
- [Client Option](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/ClientOption.md#client-settings)
 | 
			
		||||
- [Client Functions](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/ClientOption.md#client-functions)
 | 
			
		||||
 | 
			
		||||
## Client Settings
 | 
			
		||||
```js
 | 
			
		||||
new Client({
 | 
			
		||||
@@ -5,4 +9,14 @@ new Client({
 | 
			
		||||
  readyStatus: false, // Set Custom Status sync from Account (Bot Ready) [Disable Default]
 | 
			
		||||
  autoCookie: true, //  Auto added Cookie and Fingerprint [Enable Default](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/DOCUMENT.md#http-options)
 | 
			
		||||
})
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Client Functions
 | 
			
		||||
- Update Cookie and Fingerprint
 | 
			
		||||
```js
 | 
			
		||||
client.updateCookie(): Promise<void>
 | 
			
		||||
```
 | 
			
		||||
- Reddem Nitro
 | 
			
		||||
```js
 | 
			
		||||
client.reddemNitro('code'): Promise<void>
 | 
			
		||||
```
 | 
			
		||||
@@ -1,3 +1,9 @@
 | 
			
		||||
# Quick Links:
 | 
			
		||||
- [Set Guild Folder and Position](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md#discord-guild-set-position)
 | 
			
		||||
- [DM group](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md#group-dm)
 | 
			
		||||
- [Join Guild](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md#join-guild-using-invite)
 | 
			
		||||
- [Community](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md#set-community))
 | 
			
		||||
 | 
			
		||||
## Discord Guild set position
 | 
			
		||||
<details>
 | 
			
		||||
<summary><strong>Click to show</strong></summary>
 | 
			
		||||
@@ -64,3 +70,16 @@ await client.fetchInvite('code').then(async invite => {
 | 
			
		||||
 | 
			
		||||
<strong>But if you are blocked by HCaptcha, this will not work</strong>
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
## Set Community
 | 
			
		||||
<details>
 | 
			
		||||
<summary>Click to show</summary>
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
await guild.setCommunity(stats: boolean, publicUpdatesChannel: TextChannelResolvable, rulesChannel: TextChannelResolvable, reason?: string): Promise<Guild>;
 | 
			
		||||
// Enable with default
 | 
			
		||||
await guild.setCommunity(true);
 | 
			
		||||
// Disable
 | 
			
		||||
await guild.setCommunity(false);
 | 
			
		||||
```
 | 
			
		||||
</details>
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
## HTTP options:
 | 
			
		||||
 | 
			
		||||
- Change API v9 to v10
 | 
			
		||||
```js
 | 
			
		||||
/* If you want to change the API version from v9 to v10, here are the instructions */
 | 
			
		||||
const { Client } = require('discord.js-selfbot-v13');
 | 
			
		||||
@@ -14,9 +14,4 @@ const client = new Client({
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
/* Discord fingerprint ??? idk ... */
 | 
			
		||||
/**
 | 
			
		||||
 * const { data } = await axios.get('https://discord.com/api/v9/experiments');
 | 
			
		||||
 * client.options.http.header['x-fingerprint'] = data.fingerprint
 | 
			
		||||
 */
 | 
			
		||||
```
 | 
			
		||||
@@ -1,3 +1,7 @@
 | 
			
		||||
# Quick Links:
 | 
			
		||||
- [Interaction](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Message.md#interaction)
 | 
			
		||||
- [Embed](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Message.md#messageembed-)
 | 
			
		||||
 | 
			
		||||
## Interaction
 | 
			
		||||
<details>
 | 
			
		||||
<summary>Button Click</summary>
 | 
			
		||||
@@ -86,8 +90,9 @@ message.channel.send({ content: `Hello world`, embeds: [w] }) // Patched :)
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
### Features & Issues
 | 
			
		||||
- No Timestamp, Footer, Thumbnail (but embed video, thumbnail working), Fields, Author iconURL
 | 
			
		||||
- No Timestamp, Footer, Fields, Author iconURL
 | 
			
		||||
- Video with Embed working
 | 
			
		||||
- Can only choose between image and thumbnail
 | 
			
		||||
- Description limit 350 characters
 | 
			
		||||
- If you use hidden mode you must make sure your custom content is less than 1000 characters without nitro (because hidden mode uses 1000 characters + URL)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,10 @@
 | 
			
		||||
# Quick Links:
 | 
			
		||||
- [Setting](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md#user-settings)
 | 
			
		||||
- [User Info](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md#discord-user-info)
 | 
			
		||||
- [Relationship](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md#discord-user-friend--blocked)
 | 
			
		||||
- [Rich Presence](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md#custom-status-and-rpc)
 | 
			
		||||
- [Other](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md#user--clientuser-method)
 | 
			
		||||
 | 
			
		||||
## User Settings
 | 
			
		||||
<details>
 | 
			
		||||
<summary><strong>Click to show</strong></summary>
 | 
			
		||||
@@ -221,15 +228,7 @@ await client.user.setPassword('old password', 'new password');
 | 
			
		||||
await client.user.disableAccount('password');
 | 
			
		||||
// Delete Account [WARNING] Cannot be changed once used!
 | 
			
		||||
await client.user.deleteAccount('password');
 | 
			
		||||
```
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Reddem Nitro ?
 | 
			
		||||
<details>
 | 
			
		||||
<summary>Click to show</summary>
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
// Reddem Nitro
 | 
			
		||||
await client.reddemNitro('code')
 | 
			
		||||
```
 | 
			
		||||
</details>
 | 
			
		||||
</details>
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "discord.js-selfbot-v13",
 | 
			
		||||
  "version": "1.3.0",
 | 
			
		||||
  "version": "1.3.1",
 | 
			
		||||
  "description": "A unofficial discord.js fork for creating selfbots [Based on discord.js v13]",
 | 
			
		||||
  "main": "./src/index.js",
 | 
			
		||||
  "types": "./typings/index.d.ts",
 | 
			
		||||
 
 | 
			
		||||
@@ -200,6 +200,7 @@ class MessagePayload {
 | 
			
		||||
      this.options.embeds = this.options.embeds.filter(e => e instanceof MessageEmbed);
 | 
			
		||||
 | 
			
		||||
      if (webembeds.length > 0) {
 | 
			
		||||
        if (!content) content = '';
 | 
			
		||||
        // add hidden embed link
 | 
			
		||||
        content += `\n${WebEmbed.hiddenEmbed} \n`;
 | 
			
		||||
        if (webembeds.length > 1) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,301 +1,342 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
const axios = require('axios');
 | 
			
		||||
const baseURL = 'https://embed.benny.fun/?';
 | 
			
		||||
const baseURL = 'https://sagiri-fansub.tk/embed?';
 | 
			
		||||
const hiddenCharter =
 | 
			
		||||
    '||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||';
 | 
			
		||||
const { RangeError } = require('../errors');
 | 
			
		||||
const Util = require('../util/Util');
 | 
			
		||||
 | 
			
		||||
class WebEmbed {
 | 
			
		||||
    constructor(data = {}) {
 | 
			
		||||
        this._setup(data);
 | 
			
		||||
        /**
 | 
			
		||||
         * Shorten the link
 | 
			
		||||
         * @type {?boolean}
 | 
			
		||||
         */
 | 
			
		||||
        this.shorten = data.shorten ?? true;
 | 
			
		||||
	constructor(data = {}) {
 | 
			
		||||
		this._setup(data);
 | 
			
		||||
		/**
 | 
			
		||||
		 * Shorten the link
 | 
			
		||||
		 * @type {?boolean}
 | 
			
		||||
		 */
 | 
			
		||||
		this.shorten = data.shorten ?? true;
 | 
			
		||||
 | 
			
		||||
		/**
 | 
			
		||||
		 * Hidden Embed link
 | 
			
		||||
		 * @type {?boolean}
 | 
			
		||||
		 */
 | 
			
		||||
		this.hidden = data.hidden ?? false;
 | 
			
		||||
	}
 | 
			
		||||
	_setup(data) {
 | 
			
		||||
        /**
 | 
			
		||||
         * Hidden Embed link
 | 
			
		||||
         * @type {?boolean}
 | 
			
		||||
         * Type image of this embed
 | 
			
		||||
         * @type {?thumbnail | image}
 | 
			
		||||
         */
 | 
			
		||||
        this.hidden = data.hidden ?? false;
 | 
			
		||||
    }
 | 
			
		||||
    _setup(data) {
 | 
			
		||||
        /**
 | 
			
		||||
         * The title of this embed
 | 
			
		||||
         * @type {?string}
 | 
			
		||||
         */
 | 
			
		||||
        this.title = data.title ?? null;
 | 
			
		||||
        this.imageType = 'thumbnail';
 | 
			
		||||
		/**
 | 
			
		||||
		 * The title of this embed
 | 
			
		||||
		 * @type {?string}
 | 
			
		||||
		 */
 | 
			
		||||
		this.title = data.title ?? null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The description of this embed
 | 
			
		||||
         * @type {?string}
 | 
			
		||||
         */
 | 
			
		||||
        this.description = data.description ?? null;
 | 
			
		||||
		/**
 | 
			
		||||
		 * The description of this embed
 | 
			
		||||
		 * @type {?string}
 | 
			
		||||
		 */
 | 
			
		||||
		this.description = data.description ?? null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The URL of this embed
 | 
			
		||||
         * @type {?string}
 | 
			
		||||
         */
 | 
			
		||||
        this.url = data.url ?? null;
 | 
			
		||||
		/**
 | 
			
		||||
		 * The URL of this embed
 | 
			
		||||
		 * @type {?string}
 | 
			
		||||
		 */
 | 
			
		||||
		this.url = data.url ?? null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The color of this embed
 | 
			
		||||
         * @type {?number}
 | 
			
		||||
         */
 | 
			
		||||
        this.color = 'color' in data ? Util.resolveColor(data.color) : null;
 | 
			
		||||
		/**
 | 
			
		||||
		 * The color of this embed
 | 
			
		||||
		 * @type {?number}
 | 
			
		||||
		 */
 | 
			
		||||
		this.color = 'color' in data ? Util.resolveColor(data.color) : null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Represents the image of a MessageEmbed
 | 
			
		||||
         * @typedef {Object} MessageEmbedImage
 | 
			
		||||
         * @property {string} url URL for this image
 | 
			
		||||
         * @property {string} proxyURL ProxyURL for this image
 | 
			
		||||
         * @property {number} height Height of this image
 | 
			
		||||
         * @property {number} width Width of this image
 | 
			
		||||
         */
 | 
			
		||||
		/**
 | 
			
		||||
		 * Represents the image of a MessageEmbed
 | 
			
		||||
		 * @typedef {Object} MessageEmbedImage
 | 
			
		||||
		 * @property {string} url URL for this image
 | 
			
		||||
		 * @property {string} proxyURL ProxyURL for this image
 | 
			
		||||
		 * @property {number} height Height of this image
 | 
			
		||||
		 * @property {number} width Width of this image
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The image of this embed, if there is one
 | 
			
		||||
         * @type {?MessageEmbedImage}
 | 
			
		||||
         */
 | 
			
		||||
        this.image = data.image
 | 
			
		||||
            ? {
 | 
			
		||||
                url: data.image.url,
 | 
			
		||||
                proxyURL: data.image.proxyURL ?? data.image.proxy_url,
 | 
			
		||||
                height: data.image.height,
 | 
			
		||||
                width: data.image.width,
 | 
			
		||||
            }
 | 
			
		||||
            : null;
 | 
			
		||||
		/**
 | 
			
		||||
		 * The image of this embed, if there is one
 | 
			
		||||
		 * @type {?MessageEmbedImage}
 | 
			
		||||
		 */
 | 
			
		||||
		this.image = data.image
 | 
			
		||||
			? {
 | 
			
		||||
					url: data.image.url,
 | 
			
		||||
					proxyURL: data.image.proxyURL ?? data.image.proxy_url,
 | 
			
		||||
					height: data.image.height,
 | 
			
		||||
					width: data.image.width,
 | 
			
		||||
			  }
 | 
			
		||||
			: null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Represents the video of a MessageEmbed
 | 
			
		||||
         * @typedef {Object} MessageEmbedVideo
 | 
			
		||||
         * @property {string} url URL of this video
 | 
			
		||||
         * @property {string} proxyURL ProxyURL for this video
 | 
			
		||||
         * @property {number} height Height of this video
 | 
			
		||||
         * @property {number} width Width of this video
 | 
			
		||||
         */
 | 
			
		||||
		/**
 | 
			
		||||
		 * The thumbnail of this embed (if there is one)
 | 
			
		||||
		 * @type {?MessageEmbedThumbnail}
 | 
			
		||||
		 */
 | 
			
		||||
		this.thumbnail = data.thumbnail
 | 
			
		||||
			? {
 | 
			
		||||
					url: data.thumbnail.url,
 | 
			
		||||
					proxyURL: data.thumbnail.proxyURL ?? data.thumbnail.proxy_url,
 | 
			
		||||
					height: data.thumbnail.height,
 | 
			
		||||
					width: data.thumbnail.width,
 | 
			
		||||
			  }
 | 
			
		||||
			: null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The video of this embed (if there is one)
 | 
			
		||||
         * @type {?MessageEmbedVideo}
 | 
			
		||||
         * @readonly
 | 
			
		||||
         */
 | 
			
		||||
        this.video = data.video
 | 
			
		||||
            ? {
 | 
			
		||||
                url: data.video.url,
 | 
			
		||||
                proxyURL: data.video.proxyURL ?? data.video.proxy_url,
 | 
			
		||||
                height: data.video.height,
 | 
			
		||||
                width: data.video.width,
 | 
			
		||||
            }
 | 
			
		||||
            : null;
 | 
			
		||||
		/**
 | 
			
		||||
		 * Represents the video of a MessageEmbed
 | 
			
		||||
		 * @typedef {Object} MessageEmbedVideo
 | 
			
		||||
		 * @property {string} url URL of this video
 | 
			
		||||
		 * @property {string} proxyURL ProxyURL for this video
 | 
			
		||||
		 * @property {number} height Height of this video
 | 
			
		||||
		 * @property {number} width Width of this video
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Represents the author field of a MessageEmbed
 | 
			
		||||
         * @typedef {Object} MessageEmbedAuthor
 | 
			
		||||
         * @property {string} name The name of this author
 | 
			
		||||
         * @property {string} url URL of this author
 | 
			
		||||
         * @property {string} iconURL URL of the icon for this author
 | 
			
		||||
         * @property {string} proxyIconURL Proxied URL of the icon for this author
 | 
			
		||||
         */
 | 
			
		||||
		/**
 | 
			
		||||
		 * The video of this embed (if there is one)
 | 
			
		||||
		 * @type {?MessageEmbedVideo}
 | 
			
		||||
		 * @readonly
 | 
			
		||||
		 */
 | 
			
		||||
		this.video = data.video
 | 
			
		||||
			? {
 | 
			
		||||
					url: data.video.url,
 | 
			
		||||
					proxyURL: data.video.proxyURL ?? data.video.proxy_url,
 | 
			
		||||
					height: data.video.height,
 | 
			
		||||
					width: data.video.width,
 | 
			
		||||
			  }
 | 
			
		||||
			: null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The author of this embed (if there is one)
 | 
			
		||||
         * @type {?MessageEmbedAuthor}
 | 
			
		||||
         */
 | 
			
		||||
        this.author = data.author
 | 
			
		||||
            ? {
 | 
			
		||||
                name: data.author.name,
 | 
			
		||||
                url: data.author.url,
 | 
			
		||||
            }
 | 
			
		||||
            : null;
 | 
			
		||||
		/**
 | 
			
		||||
		 * Represents the author field of a MessageEmbed
 | 
			
		||||
		 * @typedef {Object} MessageEmbedAuthor
 | 
			
		||||
		 * @property {string} name The name of this author
 | 
			
		||||
		 * @property {string} url URL of this author
 | 
			
		||||
		 * @property {string} iconURL URL of the icon for this author
 | 
			
		||||
		 * @property {string} proxyIconURL Proxied URL of the icon for this author
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Represents the provider of a MessageEmbed
 | 
			
		||||
         * @typedef {Object} MessageEmbedProvider
 | 
			
		||||
         * @property {string} name The name of this provider
 | 
			
		||||
         * @property {string} url URL of this provider
 | 
			
		||||
         */
 | 
			
		||||
		/**
 | 
			
		||||
		 * The author of this embed (if there is one)
 | 
			
		||||
		 * @type {?MessageEmbedAuthor}
 | 
			
		||||
		 */
 | 
			
		||||
		this.author = data.author
 | 
			
		||||
			? {
 | 
			
		||||
					name: data.author.name,
 | 
			
		||||
					url: data.author.url,
 | 
			
		||||
			  }
 | 
			
		||||
			: null;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The provider of this embed (if there is one)
 | 
			
		||||
         * @type {?MessageEmbedProvider}
 | 
			
		||||
         */
 | 
			
		||||
        this.provider = data.provider
 | 
			
		||||
            ? {
 | 
			
		||||
                name: data.provider.name,
 | 
			
		||||
                url: data.provider.name,
 | 
			
		||||
            }
 | 
			
		||||
            : null;
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * The options to provide for setting an author for a {@link MessageEmbed}.
 | 
			
		||||
     * @typedef {Object} EmbedAuthorData
 | 
			
		||||
     * @property {string} name The name of this author.
 | 
			
		||||
     */
 | 
			
		||||
		/**
 | 
			
		||||
		 * Represents the provider of a MessageEmbed
 | 
			
		||||
		 * @typedef {Object} MessageEmbedProvider
 | 
			
		||||
		 * @property {string} name The name of this provider
 | 
			
		||||
		 * @property {string} url URL of this provider
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the author of this embed.
 | 
			
		||||
     * @param {string|EmbedAuthorData|null} options The options to provide for the author.
 | 
			
		||||
     * Provide `null` to remove the author data.
 | 
			
		||||
     * @returns {MessageEmbed}
 | 
			
		||||
     */
 | 
			
		||||
    setAuthor(options) {
 | 
			
		||||
        if (options === null) {
 | 
			
		||||
            this.author = {};
 | 
			
		||||
            return this;
 | 
			
		||||
		/**
 | 
			
		||||
		 * The provider of this embed (if there is one)
 | 
			
		||||
		 * @type {?MessageEmbedProvider}
 | 
			
		||||
		 */
 | 
			
		||||
		this.provider = data.provider
 | 
			
		||||
			? {
 | 
			
		||||
					name: data.provider.name,
 | 
			
		||||
					url: data.provider.name,
 | 
			
		||||
			  }
 | 
			
		||||
			: null;
 | 
			
		||||
	}
 | 
			
		||||
	/**
 | 
			
		||||
	 * The options to provide for setting an author for a {@link MessageEmbed}.
 | 
			
		||||
	 * @typedef {Object} EmbedAuthorData
 | 
			
		||||
	 * @property {string} name The name of this author.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the author of this embed.
 | 
			
		||||
	 * @param {string|EmbedAuthorData|null} options The options to provide for the author.
 | 
			
		||||
	 * Provide `null` to remove the author data.
 | 
			
		||||
	 * @returns {MessageEmbed}
 | 
			
		||||
	 */
 | 
			
		||||
	setAuthor(options) {
 | 
			
		||||
		if (options === null) {
 | 
			
		||||
			this.author = {};
 | 
			
		||||
			return this;
 | 
			
		||||
		}
 | 
			
		||||
		const { name, url } = options;
 | 
			
		||||
		this.author = {
 | 
			
		||||
			name: Util.verifyString(name, RangeError, 'EMBED_AUTHOR_NAME'),
 | 
			
		||||
			url,
 | 
			
		||||
		};
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * The options to provide for setting an provider for a {@link MessageEmbed}.
 | 
			
		||||
	 * @typedef {Object} EmbedProviderData
 | 
			
		||||
	 * @property {string} name The name of this provider.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the provider of this embed.
 | 
			
		||||
	 * @param {string|EmbedProviderData|null} options The options to provide for the provider.
 | 
			
		||||
	 * Provide `null` to remove the provider data.
 | 
			
		||||
	 * @returns {MessageEmbed}
 | 
			
		||||
	 */
 | 
			
		||||
	setProvider(options) {
 | 
			
		||||
		if (options === null) {
 | 
			
		||||
			this.provider = {};
 | 
			
		||||
			return this;
 | 
			
		||||
		}
 | 
			
		||||
		const { name, url } = options;
 | 
			
		||||
		this.provider = {
 | 
			
		||||
			name: Util.verifyString(name, RangeError, 'EMBED_PROVIDER_NAME'),
 | 
			
		||||
			url,
 | 
			
		||||
		};
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the color of this embed.
 | 
			
		||||
	 * @param {ColorResolvable} color The color of the embed
 | 
			
		||||
	 * @returns {MessageEmbed}
 | 
			
		||||
	 */
 | 
			
		||||
	setColor(color) {
 | 
			
		||||
		this.color = Util.resolveColor(color);
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the description of this embed.
 | 
			
		||||
	 * @param {string} description The description (Limit 350 characters)
 | 
			
		||||
	 * @returns {MessageEmbed}
 | 
			
		||||
	 */
 | 
			
		||||
	setDescription(description) {
 | 
			
		||||
		this.description = Util.verifyString(
 | 
			
		||||
			description,
 | 
			
		||||
			RangeError,
 | 
			
		||||
			'EMBED_DESCRIPTION',
 | 
			
		||||
		);
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the image of this embed.
 | 
			
		||||
	 * @param {string} url The URL of the image
 | 
			
		||||
	 * @returns {MessageEmbed}
 | 
			
		||||
	 */
 | 
			
		||||
	setImage(url) {
 | 
			
		||||
        if (this.thumbnail.url) {
 | 
			
		||||
			console.warn('You can only set image or thumbnail per embed.');
 | 
			
		||||
			this.thumbnail.url = null;
 | 
			
		||||
            this.imageType = 'image';
 | 
			
		||||
		}
 | 
			
		||||
		this.image = { url };
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the thumbnail of this embed.
 | 
			
		||||
	 * @param {string} url The URL of the image
 | 
			
		||||
	 * @returns {MessageEmbed}
 | 
			
		||||
	 */
 | 
			
		||||
	setThumbnail(url) {
 | 
			
		||||
        if (this.image.url) {
 | 
			
		||||
            console.warn('You can only set image or thumbnail per embed.');
 | 
			
		||||
            this.image.url = null;
 | 
			
		||||
            this.imageType = 'thumbnail';
 | 
			
		||||
        }
 | 
			
		||||
        const { name, url } = options;
 | 
			
		||||
        this.author = {
 | 
			
		||||
            name: Util.verifyString(name, RangeError, 'EMBED_AUTHOR_NAME'),
 | 
			
		||||
            url,
 | 
			
		||||
        };
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
		this.thumbnail = { url };
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The options to provide for setting an provider for a {@link MessageEmbed}.
 | 
			
		||||
     * @typedef {Object} EmbedProviderData
 | 
			
		||||
     * @property {string} name The name of this provider.
 | 
			
		||||
     */
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the video of this embed.
 | 
			
		||||
	 * @param {string} url The URL of the video
 | 
			
		||||
	 * @returns {MessageEmbed}
 | 
			
		||||
	 */
 | 
			
		||||
	setVideo(url) {
 | 
			
		||||
		this.video = { url };
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the provider of this embed.
 | 
			
		||||
     * @param {string|EmbedProviderData|null} options The options to provide for the provider.
 | 
			
		||||
     * Provide `null` to remove the provider data.
 | 
			
		||||
     * @returns {MessageEmbed}
 | 
			
		||||
     */
 | 
			
		||||
    setProvider(options) {
 | 
			
		||||
        if (options === null) {
 | 
			
		||||
            this.provider = {};
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
        const { name, url } = options;
 | 
			
		||||
        this.provider = {
 | 
			
		||||
            name: Util.verifyString(name, RangeError, 'EMBED_PROVIDER_NAME'),
 | 
			
		||||
            url,
 | 
			
		||||
        };
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the title of this embed.
 | 
			
		||||
	 * @param {string} title The title
 | 
			
		||||
	 * @returns {MessageEmbed}
 | 
			
		||||
	 */
 | 
			
		||||
	setTitle(title) {
 | 
			
		||||
		this.title = Util.verifyString(title, RangeError, 'EMBED_TITLE');
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the color of this embed.
 | 
			
		||||
     * @param {ColorResolvable} color The color of the embed
 | 
			
		||||
     * @returns {MessageEmbed}
 | 
			
		||||
     */
 | 
			
		||||
    setColor(color) {
 | 
			
		||||
        this.color = Util.resolveColor(color);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets the URL of this embed.
 | 
			
		||||
	 * @param {string} url The URL
 | 
			
		||||
	 * @returns {MessageEmbed}
 | 
			
		||||
	 */
 | 
			
		||||
	setURL(url) {
 | 
			
		||||
		this.url = url;
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the description of this embed.
 | 
			
		||||
     * @param {string} description The description (Limit 350 characters)
 | 
			
		||||
     * @returns {MessageEmbed}
 | 
			
		||||
     */
 | 
			
		||||
    setDescription(description) {
 | 
			
		||||
        this.description = Util.verifyString(
 | 
			
		||||
            description,
 | 
			
		||||
            RangeError,
 | 
			
		||||
            'EMBED_DESCRIPTION',
 | 
			
		||||
        );
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the image of this embed.
 | 
			
		||||
     * @param {string} url The URL of the image
 | 
			
		||||
     * @returns {MessageEmbed}
 | 
			
		||||
     */
 | 
			
		||||
    setImage(url) {
 | 
			
		||||
        this.image = { url };
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the video of this embed.
 | 
			
		||||
     * @param {string} url The URL of the video
 | 
			
		||||
     * @returns {MessageEmbed}
 | 
			
		||||
     */
 | 
			
		||||
    setVideo(url) {
 | 
			
		||||
        this.video = { url };
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the title of this embed.
 | 
			
		||||
     * @param {string} title The title
 | 
			
		||||
     * @returns {MessageEmbed}
 | 
			
		||||
     */
 | 
			
		||||
    setTitle(title) {
 | 
			
		||||
        this.title = Util.verifyString(title, RangeError, 'EMBED_TITLE');
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the URL of this embed.
 | 
			
		||||
     * @param {string} url The URL
 | 
			
		||||
     * @returns {MessageEmbed}
 | 
			
		||||
     */
 | 
			
		||||
    setURL(url) {
 | 
			
		||||
        this.url = url;
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return Message Content + Embed (if hidden, pls check content length because it has 1000+ length)
 | 
			
		||||
     * @returns {string} Message Content
 | 
			
		||||
     */
 | 
			
		||||
    async toMessage() {
 | 
			
		||||
        const arrayQuery = [];
 | 
			
		||||
        if (this.title) {
 | 
			
		||||
            arrayQuery.push(`title=${encodeURIComponent(this.title)}`);
 | 
			
		||||
	/**
 | 
			
		||||
	 * Return Message Content + Embed (if hidden, pls check content length because it has 1000+ length)
 | 
			
		||||
	 * @returns {string} Message Content
 | 
			
		||||
	 */
 | 
			
		||||
	async toMessage() {
 | 
			
		||||
		const arrayQuery = [`image_type=${this.imageType}`];
 | 
			
		||||
		if (this.title) {
 | 
			
		||||
			arrayQuery.push(`title=${encodeURIComponent(this.title)}`);
 | 
			
		||||
		}
 | 
			
		||||
		if (this.description) {
 | 
			
		||||
			arrayQuery.push(`description=${encodeURIComponent(this.description)}`);
 | 
			
		||||
		}
 | 
			
		||||
		if (this.url) {
 | 
			
		||||
			arrayQuery.push(`url=${encodeURIComponent(this.url)}`);
 | 
			
		||||
		}
 | 
			
		||||
		if (this.color) {
 | 
			
		||||
			arrayQuery.push(
 | 
			
		||||
				`color=${encodeURIComponent('#' + this.color.toString(16))}`,
 | 
			
		||||
			);
 | 
			
		||||
		}
 | 
			
		||||
		if (this.image?.url) {
 | 
			
		||||
			arrayQuery.push(`image=${encodeURIComponent(this.image.url)}`);
 | 
			
		||||
		}
 | 
			
		||||
		if (this.video?.url) {
 | 
			
		||||
			arrayQuery.push(`video=${encodeURIComponent(this.video.url)}`);
 | 
			
		||||
		}
 | 
			
		||||
		if (this.author) {
 | 
			
		||||
			if (this.author.name)
 | 
			
		||||
				arrayQuery.push(`author_name=${encodeURIComponent(this.author.name)}`);
 | 
			
		||||
			if (this.author.url)
 | 
			
		||||
				arrayQuery.push(`author_url=${encodeURIComponent(this.author.url)}`);
 | 
			
		||||
		}
 | 
			
		||||
		if (this.provider) {
 | 
			
		||||
			if (this.provider.name)
 | 
			
		||||
				arrayQuery.push(
 | 
			
		||||
					`provider_name=${encodeURIComponent(this.provider.name)}`,
 | 
			
		||||
				);
 | 
			
		||||
			if (this.provider.url)
 | 
			
		||||
				arrayQuery.push(
 | 
			
		||||
					`provider_url=${encodeURIComponent(this.provider.url)}`,
 | 
			
		||||
				);
 | 
			
		||||
		}
 | 
			
		||||
        if (this.thumbnail?.url) {
 | 
			
		||||
            arrayQuery.push(`image=${encodeURIComponent(this.thumbnail.url)}`);
 | 
			
		||||
        }
 | 
			
		||||
        if (this.description) {
 | 
			
		||||
            arrayQuery.push(
 | 
			
		||||
                `description=${encodeURIComponent(this.description)}`,
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        if (this.url) {
 | 
			
		||||
            arrayQuery.push(`url=${encodeURIComponent(this.url)}`);
 | 
			
		||||
        }
 | 
			
		||||
        if (this.color) {
 | 
			
		||||
            arrayQuery.push(
 | 
			
		||||
                `colour=${encodeURIComponent('#' + this.color.toString(16))}`,
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        if (this.image?.url) {
 | 
			
		||||
            arrayQuery.push(`image=${encodeURIComponent(this.image.url)}`);
 | 
			
		||||
        }
 | 
			
		||||
        if (this.video?.url) {
 | 
			
		||||
            arrayQuery.push(`video=${encodeURIComponent(this.video.url)}`);
 | 
			
		||||
        }
 | 
			
		||||
        if (this.author) {
 | 
			
		||||
            if (this.author.name) arrayQuery.push(
 | 
			
		||||
                `author_name=${encodeURIComponent(this.author.name)}`,
 | 
			
		||||
            );
 | 
			
		||||
            if (this.author.url) arrayQuery.push(
 | 
			
		||||
                `author_url=${encodeURIComponent(this.author.url)}`,
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        if (this.provider) {
 | 
			
		||||
            if (this.provider.name) arrayQuery.push(
 | 
			
		||||
                `provider_name=${encodeURIComponent(this.provider.name)}`,
 | 
			
		||||
            );
 | 
			
		||||
            if (this.provider.url) arrayQuery.push(
 | 
			
		||||
                `provider_url=${encodeURIComponent(this.provider.url)}`,
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        const fullURL = `${baseURL}${arrayQuery.join('&')}`;
 | 
			
		||||
        if (this.shorten) {
 | 
			
		||||
            const url = await getShorten(fullURL);
 | 
			
		||||
            if (!url) console.log('Cannot shorten URL in WebEmbed');
 | 
			
		||||
            return this.hidden ? `${hiddenCharter} ${url || fullURL}` : (url || fullURL);
 | 
			
		||||
        } else {
 | 
			
		||||
            return this.hidden ? `${hiddenCharter} ${fullURL}` : fullURL;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
		const fullURL = `${baseURL}${arrayQuery.join('&')}`;
 | 
			
		||||
		if (this.shorten) {
 | 
			
		||||
			const url = await getShorten(fullURL);
 | 
			
		||||
			if (!url) console.log('Cannot shorten URL in WebEmbed');
 | 
			
		||||
			return this.hidden
 | 
			
		||||
				? `${hiddenCharter} ${url || fullURL}`
 | 
			
		||||
				: url || fullURL;
 | 
			
		||||
		} else {
 | 
			
		||||
			return this.hidden ? `${hiddenCharter} ${fullURL}` : fullURL;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Credit: https://www.npmjs.com/package/node-url-shortener + google :))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								typings/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								typings/index.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -1776,10 +1776,12 @@ export class WebEmbed {
 | 
			
		||||
  public video: MessageEmbedVideo | null;
 | 
			
		||||
  public hidden: Boolean;
 | 
			
		||||
  public shorten: Boolean;
 | 
			
		||||
  public imageType: 'thumbnail' | 'image';
 | 
			
		||||
  public setAuthor(options: EmbedAuthorData | null): this;
 | 
			
		||||
  public setColor(color: ColorResolvable): this;
 | 
			
		||||
  public setDescription(description: string): this;
 | 
			
		||||
  public setImage(url: string): this;
 | 
			
		||||
  public setThumbnail(url: string): this;
 | 
			
		||||
  public setVideo(url: string): this;
 | 
			
		||||
  public setTitle(title: string): this;
 | 
			
		||||
  public setURL(url: string): this;
 | 
			
		||||
@@ -5192,6 +5194,7 @@ export interface WebEmbedOptions {
 | 
			
		||||
  image?: Partial<MessageEmbedImage> & { proxy_url?: string };
 | 
			
		||||
  video?: Partial<MessageEmbedVideo> & { proxy_url?: string };
 | 
			
		||||
  footer?: Partial<MessageEmbedFooter> & { icon_url?: string; proxy_icon_url?: string };
 | 
			
		||||
  imageType?: 'thumbnail' | 'image';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface MessageEmbedAuthor {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user