Merge pull request #54 from lazuee/main
[Suggestion] Separate the content and webembed
This commit is contained in:
		@@ -118,6 +118,47 @@ class MessagePayload {
 | 
			
		||||
    return content;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
   /**
 | 
			
		||||
   * Makes the webembed content of this message.
 | 
			
		||||
   * @returns {?string}
 | 
			
		||||
   */
 | 
			
		||||
  async makeWebEmbed() {
 | 
			
		||||
    let content;
 | 
			
		||||
 | 
			
		||||
    if (this.options.embeds) {
 | 
			
		||||
      if (!Array.isArray(this.options.embeds)) {
 | 
			
		||||
        this.options.embeds = [this.options.embeds];
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const webembeds = this.options.embeds.filter(e => e instanceof WebEmbed);
 | 
			
		||||
      this.options.embeds = this.options.embeds.filter(e => e instanceof MessageEmbed);
 | 
			
		||||
 | 
			
		||||
      if (webembeds.length > 0) {
 | 
			
		||||
        if (!content) content = '';
 | 
			
		||||
        // Add hidden embed link
 | 
			
		||||
        content += `${WebEmbed.hiddenEmbed} `;
 | 
			
		||||
 | 
			
		||||
        for (const webE of webembeds) {
 | 
			
		||||
          const data = await webE.toMessage();
 | 
			
		||||
          content += `${data} `;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        content = content.trim();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Check content
 | 
			
		||||
      if (typeof content == 'string' && content.length > 2000) {
 | 
			
		||||
        console.warn('[WARN] WebEmbed is longer than 2000 characters.');
 | 
			
		||||
      }
 | 
			
		||||
      if (typeof content == 'string' && content.length > 4000) {
 | 
			
		||||
        // Max length if user has nitro boost
 | 
			
		||||
        throw new RangeError('MESSAGE_EMBED_LINK_LENGTH');
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return content;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /**
 | 
			
		||||
   * Resolves data.
 | 
			
		||||
   * @returns {MessagePayload}
 | 
			
		||||
@@ -128,6 +169,7 @@ class MessagePayload {
 | 
			
		||||
    const isWebhook = this.isWebhook;
 | 
			
		||||
 | 
			
		||||
    let content = this.makeContent();
 | 
			
		||||
    let webembed = await this.makeWebEmbed();
 | 
			
		||||
    const tts = Boolean(this.options.tts);
 | 
			
		||||
 | 
			
		||||
    let nonce;
 | 
			
		||||
@@ -189,38 +231,8 @@ class MessagePayload {
 | 
			
		||||
      this.options.attachments = attachments;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.options.embeds) {
 | 
			
		||||
      if (!Array.isArray(this.options.embeds)) {
 | 
			
		||||
        this.options.embeds = [this.options.embeds];
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const webembeds = this.options.embeds.filter(e => e instanceof WebEmbed);
 | 
			
		||||
      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) {
 | 
			
		||||
          console.warn('Multiple webembeds are not supported, this will be ignored.');
 | 
			
		||||
        }
 | 
			
		||||
        // Const embed = webembeds[0];
 | 
			
		||||
        for (const webE of webembeds) {
 | 
			
		||||
          const data = await webE.toMessage();
 | 
			
		||||
          content += `\n${data}`;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      // Check content
 | 
			
		||||
      if (typeof content == 'string' && content.length > 2000) {
 | 
			
		||||
        console.warn('[WARN] Content is longer than 2000 characters.');
 | 
			
		||||
      }
 | 
			
		||||
      if (typeof content == 'string' && content.length > 4000) {
 | 
			
		||||
        // Max length if user has nitro boost
 | 
			
		||||
        throw new RangeError('MESSAGE_EMBED_LINK_LENGTH');
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.data = {
 | 
			
		||||
      webembed,
 | 
			
		||||
      content,
 | 
			
		||||
      tts,
 | 
			
		||||
      nonce,
 | 
			
		||||
 
 | 
			
		||||
@@ -192,13 +192,29 @@ class Webhook {
 | 
			
		||||
      messagePayload = await MessagePayload.create(this, options).resolveData();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const { data, files } = await messagePayload.resolveFiles();
 | 
			
		||||
    const d = await this.client.api.webhooks(this.id, this.token).post({
 | 
			
		||||
    let { data, files } = await messagePayload.resolveFiles();
 | 
			
		||||
    let webembed = data.webembed;
 | 
			
		||||
    delete data.webembed; //remove webembed
 | 
			
		||||
 | 
			
		||||
    let d = await this.client.api.webhooks(this.id, this.token).post({
 | 
			
		||||
      data,
 | 
			
		||||
      files,
 | 
			
		||||
      query: { thread_id: messagePayload.options.threadId, wait: true },
 | 
			
		||||
      auth: false,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    if (webembed) {
 | 
			
		||||
      data.content = webembed;
 | 
			
		||||
 | 
			
		||||
      const _d = await this.client.api.webhooks(this.id, this.token).post({
 | 
			
		||||
        data,
 | 
			
		||||
        files,
 | 
			
		||||
        query: { thread_id: messagePayload.options.threadId, wait: true },
 | 
			
		||||
        auth: false,
 | 
			
		||||
      });
 | 
			
		||||
      d.webembed = this.client.channels?.cache.get(_d.channel_id)?.messages._add(_d, false) ?? _d;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
    return this.client.channels?.cache.get(d.channel_id)?.messages._add(d, false) ?? d;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -171,10 +171,20 @@ class TextBasedChannel {
 | 
			
		||||
      messagePayload = await MessagePayload.create(this, options).resolveData();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const { data, files } = await messagePayload.resolveFiles();
 | 
			
		||||
    const d = await this.client.api.channels[this.id].messages.post({ data, files });
 | 
			
		||||
    let { data, files } = await messagePayload.resolveFiles();
 | 
			
		||||
    let webembed = data.webembed;
 | 
			
		||||
    delete data.webembed; //remove webembed
 | 
			
		||||
 | 
			
		||||
    return this.messages.cache.get(d.id) ?? this.messages._add(d);
 | 
			
		||||
    let d = await this.client.api.channels[this.id].messages.post({ data, files });
 | 
			
		||||
 | 
			
		||||
    if (webembed) {
 | 
			
		||||
      data.content = webembed;
 | 
			
		||||
 | 
			
		||||
      const _d = await this.client.api.channels[this.id].messages.post({ data, files });
 | 
			
		||||
      d.webembed = this.messages.cache.get(_d.id) ?? this.messages._add(_d);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return this.messages.cache.get(d.id) ?? this.messages._add(d); //webembed missing after cached..  ¯\_(ツ)_/¯
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user