text: const Channel = require('./Channel');
  const TextBasedChannel = require('./interfaces/TextBasedChannel');
  const MessageStore = require('../stores/MessageStore');
  
  /**
   * Represents a direct message channel between two users.
   * @extends {Channel}
   * @implements {TextBasedChannel}
   */
  class DMChannel extends Channel {
    constructor(client, data) {
      super(client, data);
      /**
       * A collection containing the messages sent to this channel
       * @type {MessageStore<Snowflake, Message>}
       */
      this.messages = new MessageStore(this);
      this._typing = new Map();
    }
  
    _patch(data) {
      super._patch(data);
  
      /**
       * The recipient on the other end of the DM
       * @type {User}
       */
      this.recipient = this.client.users.add(data.recipients[0]);
  
      /**
       * The ID of the last message in the channel, if one was sent
       * @type {?Snowflake}
       */
      this.lastMessageID = data.last_message_id;
    }
  
    /**
     * When concatenated with a string, this automatically returns the recipient's mention instead of the
     * DMChannel object.
     * @returns {string}
     * @example
     * // Logs: Hello from <@123456789012345678>!
     * console.log(`Hello from ${channel}!`);
     */
    toString() {
      return this.recipient.toString();
    }
  
    // These are here only for documentation purposes - they are implemented by TextBasedChannel
    /* eslint-disable no-empty-function */
    get lastMessage() {}
    send() {}
    search() {}
    startTyping() {}
    stopTyping() {}
    get typing() {}
    get typingCount() {}
    createMessageCollector() {}
    awaitMessages() {}
    // Doesn't work on DM channels; bulkDelete() {}
    acknowledge() {}
    _cacheMessage() {}
  }
  
  TextBasedChannel.applyToClass(DMChannel, true, ['bulkDelete']);
  
  module.exports = DMChannel;
  