From 8688dbac8ccc44e73ce42f6d18ae845d5d4af159 Mon Sep 17 00:00:00 2001
From: March 7th <71698422+aiko-chan-ai@users.noreply.github.com>
Date: Mon, 11 Apr 2022 12:53:02 +0700
Subject: [PATCH] 1.3.1
- Update Document
- Fix WebEmbed
- Fix MessagePayload
- Clear warn "Accessing non-existent property inside a circular dependency" (Pull #26)
---
DOCUMENT.md | 5 +
Document/ClientOption.md | 14 +
Document/Guild.md | 19 +
Document/HTTPOption.md | 7 +-
Document/Message.md | 7 +-
Document/User.md | 19 +-
package.json | 2 +-
src/structures/MessagePayload.js | 1 +
src/structures/WebEmbed.js | 571 +++++++++++++++++--------------
typings/index.d.ts | 3 +
10 files changed, 365 insertions(+), 283 deletions(-)
diff --git a/DOCUMENT.md b/DOCUMENT.md
index 2d09529a..55465bff 100644
--- a/DOCUMENT.md
+++ b/DOCUMENT.md
@@ -4,6 +4,11 @@
# [Risky actions](https://github.com/Merubokkusu/Discord-S.C.U.M/issues/66)
# Quick links
+- [ClientOption](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/ClientOption.md)
+- [HTTPOption](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/HTTPOption.md)
+- [Guild](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Guild.md)
+- [Message](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/Message.md)
+- [User](https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/User.md)
## More features
diff --git a/Document/ClientOption.md b/Document/ClientOption.md
index fa073d66..f4950650 100644
--- a/Document/ClientOption.md
+++ b/Document/ClientOption.md
@@ -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
+```
+- Reddem Nitro
+```js
+client.reddemNitro('code'): Promise
```
\ No newline at end of file
diff --git a/Document/Guild.md b/Document/Guild.md
index f5408753..baa60c91 100644
--- a/Document/Guild.md
+++ b/Document/Guild.md
@@ -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
Click to show
@@ -64,3 +70,16 @@ await client.fetchInvite('code').then(async invite => {
But if you are blocked by HCaptcha, this will not work
+
+## Set Community
+
+Click to show
+
+```js
+await guild.setCommunity(stats: boolean, publicUpdatesChannel: TextChannelResolvable, rulesChannel: TextChannelResolvable, reason?: string): Promise;
+// Enable with default
+await guild.setCommunity(true);
+// Disable
+await guild.setCommunity(false);
+```
+
\ No newline at end of file
diff --git a/Document/HTTPOption.md b/Document/HTTPOption.md
index 1d7f6c17..80fd13f5 100644
--- a/Document/HTTPOption.md
+++ b/Document/HTTPOption.md
@@ -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
- */
```
\ No newline at end of file
diff --git a/Document/Message.md b/Document/Message.md
index 03245611..6d160814 100644
--- a/Document/Message.md
+++ b/Document/Message.md
@@ -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
Button Click
@@ -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)
diff --git a/Document/User.md b/Document/User.md
index 85d0129d..c7f67b6b 100644
--- a/Document/User.md
+++ b/Document/User.md
@@ -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
Click to show
@@ -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');
-```
-
-
-
-## Reddem Nitro ?
-
-Click to show
-
-```js
+// Reddem Nitro
await client.reddemNitro('code')
```
-
+
\ No newline at end of file
diff --git a/package.json b/package.json
index d209468c..c52de346 100644
--- a/package.json
+++ b/package.json
@@ -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",
diff --git a/src/structures/MessagePayload.js b/src/structures/MessagePayload.js
index 2a0596a8..1521d30f 100644
--- a/src/structures/MessagePayload.js
+++ b/src/structures/MessagePayload.js
@@ -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) {
diff --git a/src/structures/WebEmbed.js b/src/structures/WebEmbed.js
index ec9a9c69..d76d91b7 100644
--- a/src/structures/WebEmbed.js
+++ b/src/structures/WebEmbed.js
@@ -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;
- }
- const { name, url } = options;
- this.author = {
- name: Util.verifyString(name, RangeError, 'EMBED_AUTHOR_NAME'),
- url,
- };
- 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.
+ */
- /**
- * 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 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;
+ }
- /**
- * 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;
- }
+ /**
+ * 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 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 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 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 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 image of this embed.
- * @param {string} url The URL of the image
- * @returns {MessageEmbed}
- */
- setImage(url) {
- this.image = { 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 video of this embed.
- * @param {string} url The URL of the video
- * @returns {MessageEmbed}
- */
- setVideo(url) {
- this.video = { url };
- 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 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 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';
+ }
+ this.thumbnail = { url };
+ return this;
+ }
- /**
- * Sets the URL of this embed.
- * @param {string} url The URL
- * @returns {MessageEmbed}
- */
- setURL(url) {
- this.url = 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;
+ }
- /**
- * 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)}`);
- }
- 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;
+ /**
+ * 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 = [`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)}`);
}
- }
+ 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 :))
diff --git a/typings/index.d.ts b/typings/index.d.ts
index b313fa8f..a95d6b07 100644
--- a/typings/index.d.ts
+++ b/typings/index.d.ts
@@ -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 & { proxy_url?: string };
video?: Partial & { proxy_url?: string };
footer?: Partial & { icon_url?: string; proxy_icon_url?: string };
+ imageType?: 'thumbnail' | 'image';
}
export interface MessageEmbedAuthor {