UNPKG

discord.js-self

Version:

A fork of discord.js with support of user accounts

99 lines (86 loc) 2.49 kB
'use strict'; const Channel = require('./Channel'); const TextBasedChannel = require('./interfaces/TextBasedChannel'); const MessageManager = require('../managers/MessageManager'); /** * Represents a direct message channel between two users. * @extends {Channel} * @implements {TextBasedChannel} */ class DMChannel extends Channel { /** * @param {Client} client The instantiating client * @param {Object} data The data for the DM channel */ constructor(client, data) { super(client, data); // Override the channel type so partials have a known type this.type = 'dm'; /** * A manager of the messages belonging to this channel * @type {MessageManager} */ this.messages = new MessageManager(this); this._typing = new Map(); } _patch(data) { super._patch(data); if (data.recipients) { /** * 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; /** * The timestamp when the last pinned message was pinned, if there was one * @type {?number} */ this.lastPinTimestamp = data.last_pin_timestamp ? new Date(data.last_pin_timestamp).getTime() : null; } /** * Whether this DMChannel is a partial * @type {boolean} * @readonly */ get partial() { return typeof this.lastMessageID === 'undefined'; } /** * Fetch this DMChannel. * @returns {Promise<DMChannel>} */ fetch() { return this.recipient.createDM(); } /** * 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() {} get lastPinAt() {} send() {} startTyping() {} stopTyping() {} get typing() {} get typingCount() {} createMessageCollector() {} awaitMessages() {} // Doesn't work on DM channels; bulkDelete() {} } TextBasedChannel.applyToClass(DMChannel, true, ['bulkDelete']); module.exports = DMChannel;