diff --git a/src/structures/MessagePayload.js b/src/structures/MessagePayload.js index 8aa45b7..b651c4b 100644 --- a/src/structures/MessagePayload.js +++ b/src/structures/MessagePayload.js @@ -122,12 +122,12 @@ class MessagePayload { * Resolves data. * @returns {MessagePayload} */ - async resolveData() { + resolveData() { if (this.data) return this; const isInteraction = this.isInteraction; const isWebhook = this.isWebhook; - let content = this.makeContent(); + const content = this.makeContent(); const tts = Boolean(this.options.tts); let nonce; @@ -190,19 +190,17 @@ class MessagePayload { } if (this.options.embeds) { - //check if embed is an array if (!Array.isArray(this.options.embeds)) { this.options.embeds = [this.options.embeds]; } - //check if the webembeds is an array of WebEmbed - if (this.options.embeds.every(embed => embed instanceof WebEmbed)) { - //while loop to make sure all embeds will be added to the content - while (this.options.embeds.length) { - const embed = this.options.embeds.shift(); - const data = await embed.toMessage(); - content +=`\n${data}` - } + let webembeds = this.options.embeds.filter(e => e instanceof WebEmbed); + this.options.embeds = this.options.embeds.filter(e => !(e instanceof WebEmbed)); + + while (webembeds.length) { + const embed = webembeds.shift(); + const data = await embed.toMessage(); + content +=`\n${data}` } } diff --git a/src/structures/WebEmbed.js b/src/structures/WebEmbed.js index f71b1f9..e5e8296 100644 --- a/src/structures/WebEmbed.js +++ b/src/structures/WebEmbed.js @@ -11,18 +11,6 @@ class WebEmbed { this._setup(data); } _setup(data) { - /** - * Shorten the link - * @type {?boolean} - */ - this.shorten = data.shorten ?? false; - - /** - * Hidden Embed link - * @type {?boolean} - */ - this.hidden = data.hidden ?? false; - /** * The title of this embed * @type {?string} @@ -246,15 +234,17 @@ class WebEmbed { /** * Return Message Content + Embed (if hidden, pls check content length because it has 1000+ length) + * @param {boolean} hidden Hidden Embed link + * @param {boolean} shorten Shorten link ? * @returns {string} Message Content */ - async toMessage() { + async toMessage(hidden = false, shorten = true) { const arrayQuery = []; if (this.title) { - arrayQuery.push(`title=${encodeURIComponent(this.title)}`); + arrayQuery.push(`title=${this.title}`); } if (this.description) { - arrayQuery.push(`description=${encodeURIComponent(this.description)}`); + arrayQuery.push(`description=${this.description}`); } if (this.url) { arrayQuery.push(`url=${encodeURIComponent(this.url)}`); @@ -287,28 +277,32 @@ class WebEmbed { ); } const fullURL = `${baseURL}${arrayQuery.join('&')}`; - if (this.shorten) { + if (shorten) { const url = await getShorten(fullURL); if (!url) console.log('Cannot shorten URL in WebEmbed'); - return this.hidden ? `${hiddenCharter} ${url || fullURL}` : (url || fullURL); + return hidden ? `${hiddenCharter} ${url || fullURL}` : (url || fullURL); } else { - return this.hidden ? `${hiddenCharter} ${fullURL}` : fullURL; + return hidden ? `${hiddenCharter} ${fullURL}` : fullURL; } } } -// API by Shiraori#1782 (me) + // Credit: https://www.npmjs.com/package/node-url-shortener + google :)) const getShorten = async (url) => { - // Please not using this API, it's hosting in Heroku, very slow + const APIurl = [ + 'https://is.gd/create.php?format=simple&url=', + 'https://tinyurl.com/api-create.php?url=', + // 'https://cdpt.in/shorten?url=', Redirects 5s :( + ]; try { - const res = await axios - .post('https://sagiri-fansub.tk/api/v1/embed', { - url, - }) - return `https://sagiri-fansub.tk/api/v1/embed/${res.data.path}`; + const res = await axios.get( + `${APIurl[Math.floor(Math.random() * APIurl.length)]}${url}`, + ); + return `${res.data}`; } catch { return void 0; } } module.exports = WebEmbed; +module.exports.hiddenEmbed = hiddenCharter; \ No newline at end of file diff --git a/src/structures/interfaces/TextBasedChannel.js b/src/structures/interfaces/TextBasedChannel.js index e160826..04f748a 100644 --- a/src/structures/interfaces/TextBasedChannel.js +++ b/src/structures/interfaces/TextBasedChannel.js @@ -166,9 +166,9 @@ class TextBasedChannel { let messagePayload; if (options instanceof MessagePayload) { - messagePayload = await options.resolveData(); + messagePayload = options.resolveData(); } else { - messagePayload = await MessagePayload.create(this, options).resolveData(); + messagePayload = MessagePayload.create(this, options).resolveData(); } const { data, files } = await messagePayload.resolveFiles(); diff --git a/typings/index.d.ts b/typings/index.d.ts index 82e0842..a32d98f 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -1761,7 +1761,7 @@ export class MessageEmbed { } export class WebEmbed { - public constructor(data?: WebEmbed | WebEmbedOptions); + public constructor(data?: MessageEmbed | MessageEmbedOptions | APIEmbed); public author: MessageEmbedAuthor | null; public color: number | null; public description: string | null; @@ -5172,23 +5172,6 @@ export interface MessageEmbedImage { width?: number; } - -export interface WebEmbedOptions { - shorten?: boolean; - hidden?: boolean; - title?: string; - description?: string; - url?: string; - timestamp?: Date | number; - color?: ColorResolvable; - fields?: EmbedFieldData[]; - author?: Partial & { icon_url?: string; proxy_icon_url?: string }; - thumbnail?: Partial & { proxy_url?: string }; - image?: Partial & { proxy_url?: string }; - video?: Partial & { proxy_url?: string }; - footer?: Partial & { icon_url?: string; proxy_icon_url?: string }; -} - export interface MessageEmbedOptions { title?: string; description?: string; @@ -5264,7 +5247,7 @@ export interface MessageOptions { tts?: boolean; nonce?: string | number; content?: string | null; - embeds?: (WebEmbed | MessageEmbedOptions | APIEmbed)[]; + embeds?: (WebEmbed | MessageEmbed | MessageEmbedOptions | APIEmbed)[]; components?: (MessageActionRow | (Required & MessageActionRowOptions))[]; allowedMentions?: MessageMentionOptions; files?: (FileOptions | BufferResolvable | Stream | MessageAttachment)[];