summaryrefslogtreecommitdiff
path: root/node_modules/discord.js/src/structures/DMChannel.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/discord.js/src/structures/DMChannel.js')
-rw-r--r--node_modules/discord.js/src/structures/DMChannel.js129
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;