diff options
Diffstat (limited to 'node_modules/discord.js/src/structures/DMChannel.js')
-rw-r--r-- | node_modules/discord.js/src/structures/DMChannel.js | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/node_modules/discord.js/src/structures/DMChannel.js b/node_modules/discord.js/src/structures/DMChannel.js new file mode 100644 index 0000000..2c917c4 --- /dev/null +++ b/node_modules/discord.js/src/structures/DMChannel.js @@ -0,0 +1,129 @@ +'use strict'; + +const { userMention } = require('@discordjs/builders'); +const { ChannelType } = require('discord-api-types/v10'); +const { BaseChannel } = require('./BaseChannel'); +const TextBasedChannel = require('./interfaces/TextBasedChannel'); +const DMMessageManager = require('../managers/DMMessageManager'); +const Partials = require('../util/Partials'); + +/** + * Represents a direct message channel between two users. + * @extends {BaseChannel} + * @implements {TextBasedChannel} + */ +class DMChannel extends BaseChannel { + constructor(client, data) { + super(client, data); + + // Override the channel type so partials have a known type + this.type = ChannelType.DM; + + /** + * A manager of the messages belonging to this channel + * @type {DMMessageManager} + */ + this.messages = new DMMessageManager(this); + } + + _patch(data) { + super._patch(data); + + if (data.recipients) { + const recipient = data.recipients[0]; + + /** + * The recipient's id + * @type {Snowflake} + */ + this.recipientId = recipient.id; + + if ('username' in recipient || this.client.options.partials.includes(Partials.User)) { + this.client.users._add(recipient); + } + } + + if ('last_message_id' in data) { + /** + * The channel's last message id, if one was sent + * @type {?Snowflake} + */ + this.lastMessageId = data.last_message_id; + } + + if ('last_pin_timestamp' in data) { + /** + * The timestamp when the last pinned message was pinned, if there was one + * @type {?number} + */ + this.lastPinTimestamp = Date.parse(data.last_pin_timestamp); + } else { + this.lastPinTimestamp ??= null; + } + } + + /** + * Whether this DMChannel is a partial + * @type {boolean} + * @readonly + */ + get partial() { + return this.lastMessageId === undefined; + } + + /** + * The recipient on the other end of the DM + * @type {?User} + * @readonly + */ + get recipient() { + return this.client.users.resolve(this.recipientId); + } + + /** + * Fetch this DMChannel. + * @param {boolean} [force=true] Whether to skip the cache check and request the API + * @returns {Promise<DMChannel>} + */ + fetch(force = true) { + return this.client.users.createDM(this.recipientId, { force }); + } + + /** + * 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 userMention(this.recipientId); + } + + // These are here only for documentation purposes - they are implemented by TextBasedChannel + /* eslint-disable no-empty-function */ + get lastMessage() {} + get lastPinAt() {} + send() {} + sendTyping() {} + createMessageCollector() {} + awaitMessages() {} + createMessageComponentCollector() {} + awaitMessageComponent() {} + // Doesn't work on DM channels; bulkDelete() {} + // Doesn't work on DM channels; fetchWebhooks() {} + // Doesn't work on DM channels; createWebhook() {} + // Doesn't work on DM channels; setRateLimitPerUser() {} + // Doesn't work on DM channels; setNSFW() {} +} + +TextBasedChannel.applyToClass(DMChannel, true, [ + 'bulkDelete', + 'fetchWebhooks', + 'createWebhook', + 'setRateLimitPerUser', + 'setNSFW', +]); + +module.exports = DMChannel; |