Show / Hide Table of Contents

# Class SocketDMChannel

Represents a WebSocket-based direct-message channel.

##### Inheritance

System.Object
SocketEntity<System.UInt64>
SocketChannel
SocketDMChannel

##### Implements

IDMChannel
ISocketPrivateChannel
IPrivateChannel
ISocketMessageChannel
IMessageChannel
IChannel
ISnowflakeEntity
IEntity<System.UInt64>

##### Inherited Members

SocketChannel.CreatedAt
SocketEntity<UInt64>.Id
System.Object.Equals(System.Object)
System.Object.Equals(System.Object, System.Object)
System.Object.ReferenceEquals(System.Object, System.Object)
System.Object.GetHashCode()
System.Object.GetType()
System.Object.MemberwiseClone()

###### Namespace: Discord.WebSocket

###### Assembly: Discord.Net.WebSocket.dll

##### Syntax

    public class SocketDMChannel : SocketChannel, IDMChannel, ISocketPrivateChannel, IPrivateChannel, ISocketMessageChannel, IMessageChannel, IChannel, ISnowflakeEntity, IEntity<ulong>

### Properties

| Improve this Doc View Source

#### CachedMessages

Gets all messages in this channel's cache.

##### Declaration

    public IReadOnlyCollection<SocketMessage> CachedMessages { get; }

##### Property Value

Type | Description
--- | ---
System.Collections.Generic.IReadOnlyCollection<SocketMessage> | A read-only collection of WebSocket-based messages.

| Improve this Doc View Source

#### Recipient

Gets the recipient of the channel.

##### Declaration

    public SocketUser Recipient { get; }

##### Property Value

Type | Description
--- | ---
SocketUser |

| Improve this Doc View Source

#### Users

Gets a collection that is the current logged-in user and the recipient.

##### Declaration

    public IReadOnlyCollection<SocketUser> Users { get; }

##### Property Value

Type | Description
--- | ---
System.Collections.Generic.IReadOnlyCollection<SocketUser> |

### Methods

| Improve this Doc View Source

#### CloseAsync(RequestOptions)

Closes this private channel, removing it from your channel list.

##### Declaration

    public Task CloseAsync(RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task | A task that represents the asynchronous close operation.

| Improve this Doc View Source

#### DeleteMessageAsync(IMessage, RequestOptions)

Deletes a message based on the provided message in this channel.

##### Declaration

    public Task DeleteMessageAsync(IMessage message, RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
IMessage | message | The message that would be removed.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task | A task that represents the asynchronous removal operation.

| Improve this Doc View Source

#### DeleteMessageAsync(UInt64, RequestOptions)

Deletes a message.

##### Declaration

    public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
System.UInt64 | messageId | The snowflake identifier of the message that would be removed.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task | A task that represents the asynchronous removal operation.

| Improve this Doc View Source

#### EnterTypingState(RequestOptions)

Continuously broadcasts the "user is typing" message to all users in this channel until the returned object is disposed.

##### Declaration

    public IDisposable EnterTypingState(RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.IDisposable | A disposable object that, upon its disposal, will stop the client from broadcasting its typing state in this channel.

| Improve this Doc View Source

#### GetCachedMessage(UInt64)

Gets a cached message from this channel.

##### Declaration

    public SocketMessage GetCachedMessage(ulong id)

##### Parameters

Type | Name | Description
--- | --- | ---
System.UInt64 | id | The snowflake identifier of the message.

##### Returns

Type | Description
--- | ---
SocketMessage | A WebSocket-based message object; `null` if it does not exist in the cache or if caching is not enabled.

##### Remarks

##### warning

This method requires the use of cache, which is not enabled by default; if caching is not enabled, this method will always return `null`. Please refer to MessageCacheSize for more details.

This method retrieves the message from the local WebSocket cache and does not send any additional request to Discord. This message may be a message that has been deleted.

| Improve this Doc View Source

#### GetCachedMessages(IMessage, Direction, Int32)

Gets the last N cached messages starting from a certain message in this message channel.

##### Declaration

    public IReadOnlyCollection<SocketMessage> GetCachedMessages(IMessage fromMessage, Direction dir, int limit = 100)

##### Parameters

Type | Name | Description
--- | --- | ---
IMessage | fromMessage | The message to start the fetching from.
Direction | dir | The direction of which the message should be gotten from.
System.Int32 | limit | The number of messages to get.

##### Returns

Type | Description
--- | ---
System.Collections.Generic.IReadOnlyCollection<SocketMessage> | A read-only collection of WebSocket-based messages.

##### Remarks

##### warning

This method requires the use of cache, which is not enabled by default; if caching is not enabled, this method will always return an empty collection. Please refer to MessageCacheSize for more details.

This method retrieves the message(s) from the local WebSocket cache and does not send any additional request to Discord. This read-only collection may include messages that have been deleted. The maximum number of messages that can be retrieved from this method depends on the MessageCacheSize set.

| Improve this Doc View Source

#### GetCachedMessages(Int32)

Gets the last N cached messages from this message channel.

##### Declaration

    public IReadOnlyCollection<SocketMessage> GetCachedMessages(int limit = 100)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Int32 | limit | The number of messages to get.

##### Returns

Type | Description
--- | ---
System.Collections.Generic.IReadOnlyCollection<SocketMessage> | A read-only collection of WebSocket-based messages.

##### Remarks

##### warning

This method requires the use of cache, which is not enabled by default; if caching is not enabled, this method will always return an empty collection. Please refer to MessageCacheSize for more details.

This method retrieves the message(s) from the local WebSocket cache and does not send any additional request to Discord. This read-only collection may include messages that have been deleted. The maximum number of messages that can be retrieved from this method depends on the MessageCacheSize set.

| Improve this Doc View Source

#### GetCachedMessages(UInt64, Direction, Int32)

Gets the last N cached messages starting from a certain message in this message channel.

##### Declaration

    public IReadOnlyCollection<SocketMessage> GetCachedMessages(ulong fromMessageId, Direction dir, int limit = 100)

##### Parameters

Type | Name | Description
--- | --- | ---
System.UInt64 | fromMessageId | The message ID to start the fetching from.
Direction | dir | The direction of which the message should be gotten from.
System.Int32 | limit | The number of messages to get.

##### Returns

Type | Description
--- | ---
System.Collections.Generic.IReadOnlyCollection<SocketMessage> | A read-only collection of WebSocket-based messages.

##### Remarks

##### warning

This method requires the use of cache, which is not enabled by default; if caching is not enabled, this method will always return an empty collection. Please refer to MessageCacheSize for more details.

This method retrieves the message(s) from the local WebSocket cache and does not send any additional request to Discord. This read-only collection may include messages that have been deleted. The maximum number of messages that can be retrieved from this method depends on the MessageCacheSize set.

| Improve this Doc View Source

#### GetMessageAsync(UInt64, RequestOptions)

Gets the message associated with the given `id`.

##### Declaration

    public Task<IMessage> GetMessageAsync(ulong id, RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
System.UInt64 | id | TThe ID of the message.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<IMessage> | The message gotten from either the cache or the download, or `null` if none is found.

| Improve this Doc View Source

#### GetMessagesAsync(IMessage, Direction, Int32, RequestOptions)

Gets a collection of messages in this channel.

##### Declaration

    public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(IMessage fromMessage, Direction dir, int limit = 100, RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
IMessage | fromMessage | The starting message to get the messages from.
Direction | dir | The direction of the messages to be gotten from.
System.Int32 | limit | The numbers of message to be gotten from.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyCollection<IMessage>> | Paged collection of messages.

##### Remarks

This method follows the same behavior as described in GetMessagesAsync(IMessage, Direction, Int32, CacheMode, RequestOptions). Please visit its documentation for more details on this method.

| Improve this Doc View Source

#### GetMessagesAsync(Int32, RequestOptions)

Gets the last N messages from this message channel.

##### Declaration

    public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = 100, RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Int32 | limit | The numbers of message to be gotten from.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyCollection<IMessage>> | Paged collection of messages.

##### Remarks

This method follows the same behavior as described in GetMessagesAsync(Int32, CacheMode, RequestOptions). Please visit its documentation for more details on this method.

| Improve this Doc View Source

#### GetMessagesAsync(UInt64, Direction, Int32, RequestOptions)

Gets a collection of messages in this channel.

##### Declaration

    public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = 100, RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
System.UInt64 | fromMessageId | The ID of the starting message to get the messages from.
Direction | dir | The direction of the messages to be gotten from.
System.Int32 | limit | The numbers of message to be gotten from.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyCollection<IMessage>> | Paged collection of messages.

##### Remarks

This method follows the same behavior as described in GetMessagesAsync(UInt64, Direction, Int32, CacheMode, RequestOptions). Please visit its documentation for more details on this method.

| Improve this Doc View Source

#### GetPinnedMessagesAsync(RequestOptions)

Gets a read-only collection of pinned messages in this channel.

##### Declaration

    public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<System.Collections.Generic.IReadOnlyCollection<RestMessage>> | A task that represents the asynchronous get operation for retrieving pinned messages in this channel. The task result contains a read-only collection of messages found in the pinned messages.

##### Remarks

This method follows the same behavior as described in GetPinnedMessagesAsync(RequestOptions). Please visit its documentation for more details on this method.

| Improve this Doc View Source

#### GetUser(UInt64)

Gets a user in this channel from the provided `id`.

##### Declaration

    public SocketUser GetUser(ulong id)

##### Parameters

Type | Name | Description
--- | --- | ---
System.UInt64 | id | The snowflake identifier of the user.

##### Returns

Type | Description
--- | ---
SocketUser | A SocketUser object that is a recipient of this channel; otherwise `null`.

| Improve this Doc View Source

#### SendFileAsync(Stream, String, String, Boolean, Embed, RequestOptions, Boolean)

Sends a file to this message channel with an optional caption.

##### Declaration

    public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false)

##### Parameters

Type | Name | Description
--- | --- | ---
System.IO.Stream | stream | The System.IO.Stream of the file to be sent.
System.String | filename | The name of the attachment.
System.String | text | The message to be sent.
System.Boolean | isTTS | Whether the message should be read aloud by Discord or not.
Embed | embed | The Rich Embed to be sent.
RequestOptions | options | The options to be used when sending the request.
System.Boolean | isSpoiler | Whether the message attachment should be hidden as a spoiler.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<RestUserMessage> | A task that represents an asynchronous send operation for delivering the message. The task result contains the sent message.

##### Remarks

This method follows the same behavior as described in SendFileAsync(Stream, String, String, Boolean, Embed, RequestOptions, Boolean). Please visit its documentation for more details on this method.

##### Exceptions

Type | Condition
--- | ---
System.ArgumentOutOfRangeException | Message content is too long, length must be less or equal to MaxMessageSize.

| Improve this Doc View Source

#### SendFileAsync(String, String, Boolean, Embed, RequestOptions, Boolean)

Sends a file to this message channel with an optional caption.

##### Declaration

    public Task<RestUserMessage> SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false)

##### Parameters

Type | Name | Description
--- | --- | ---
System.String | filePath | The file path of the file.
System.String | text | The message to be sent.
System.Boolean | isTTS | Whether the message should be read aloud by Discord or not.
Embed | embed | The Rich Embed to be sent.
RequestOptions | options | The options to be used when sending the request.
System.Boolean | isSpoiler | Whether the message attachment should be hidden as a spoiler.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<RestUserMessage> | A task that represents an asynchronous send operation for delivering the message. The task result contains the sent message.

##### Remarks

This method follows the same behavior as described in SendFileAsync(String, String, Boolean, Embed, RequestOptions, Boolean). Please visit its documentation for more details on this method.

| Improve this Doc View Source

#### SendMessageAsync(String, Boolean, Embed, RequestOptions)

Sends a message to this message channel.

##### Declaration

    public Task<RestUserMessage> SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
System.String | text | The message to be sent.
System.Boolean | isTTS | Determines whether the message should be read aloud by Discord or not.
Embed | embed | The Rich Embed to be sent.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<RestUserMessage> | A task that represents an asynchronous send operation for delivering the message. The task result contains the sent message.

##### Remarks

This method follows the same behavior as described in SendMessageAsync(String, Boolean, Embed, RequestOptions). Please visit its documentation for more details on this method.

##### Exceptions

Type | Condition
--- | ---
System.ArgumentOutOfRangeException | Message content is too long, length must be less or equal to MaxMessageSize.

| Improve this Doc View Source

#### ToString()

Returns the recipient user.

##### Declaration

    public override string ToString()

##### Returns

Type | Description
--- | ---
System.String |

##### Overrides

System.Object.ToString()
| Improve this Doc View Source

#### TriggerTypingAsync(RequestOptions)

Broadcasts the "user is typing" message to all users in this channel, lasting 10 seconds.

##### Declaration

    public Task TriggerTypingAsync(RequestOptions options = null)

##### Parameters

Type | Name | Description
--- | --- | ---
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task | A task that represents the asynchronous operation that triggers the broadcast.

### Explicit Interface Implementations

| Improve this Doc View Source

#### IChannel.GetUserAsync(UInt64, CacheMode, RequestOptions)

Gets a user in this channel.

##### Declaration

    Task<IUser> IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)

##### Parameters

Type | Name | Description
--- | --- | ---
System.UInt64 | id | The snowflake identifier of the user (e.g. `168693960628371456`).
CacheMode | mode | The CacheMode that determines whether the object should be fetched from cache.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<IUser> | A task that represents the asynchronous get operation. The task result contains a user object that represents the found user; `null` if none is found.

| Improve this Doc View Source

#### IChannel.Name

Gets the name of this channel.

##### Declaration

    string IChannel.Name { get; }

##### Returns

Type | Description
--- | ---
System.String | A string containing the name of this channel.

| Improve this Doc View Source

#### IDMChannel.Recipient

Gets the recipient of all messages in this channel.

##### Declaration

    IUser IDMChannel.Recipient { get; }

##### Returns

Type | Description
--- | ---
IUser | A user object that represents the other user in this channel.

| Improve this Doc View Source

#### IMessageChannel.GetMessageAsync(UInt64, CacheMode, RequestOptions)

Gets a message from this message channel.

##### Declaration

    Task<IMessage> IMessageChannel.GetMessageAsync(ulong id, CacheMode mode, RequestOptions options)

##### Parameters

Type | Name | Description
--- | --- | ---
System.UInt64 | id | The snowflake identifier of the message.
CacheMode | mode | The CacheMode that determines whether the object should be fetched from cache.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<IMessage> | A task that represents an asynchronous get operation for retrieving the message. The task result contains the retrieved message; `null` if no message is found with the specified identifier.

| Improve this Doc View Source

#### IMessageChannel.GetPinnedMessagesAsync(RequestOptions)

Gets a collection of pinned messages in this channel.

##### Declaration

    Task<IReadOnlyCollection<IMessage>> IMessageChannel.GetPinnedMessagesAsync(RequestOptions options)

##### Parameters

Type | Name | Description
--- | --- | ---
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<System.Collections.Generic.IReadOnlyCollection<IMessage>> | A task that represents the asynchronous get operation for retrieving pinned messages in this channel. The task result contains a collection of messages found in the pinned messages.

| Improve this Doc View Source

#### IMessageChannel.SendFileAsync(Stream, String, String, Boolean, Embed, RequestOptions, Boolean)

Sends a file to this message channel with an optional caption.

##### Declaration

    Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler)

##### Parameters

Type | Name | Description
--- | --- | ---
System.IO.Stream | stream | The System.IO.Stream of the file to be sent.
System.String | filename | The name of the attachment.
System.String | text | The message to be sent.
System.Boolean | isTTS | Whether the message should be read aloud by Discord or not.
Embed | embed | The Rich Embed to be sent.
RequestOptions | options | The options to be used when sending the request.
System.Boolean | isSpoiler | Whether the message attachment should be hidden as a spoiler.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<IUserMessage> | A task that represents an asynchronous send operation for delivering the message. The task result contains the sent message.

##### Remarks

This method sends a file as if you are uploading an attachment directly from your Discord client.

##### note

If you wish to upload an image and have it embedded in a Rich embed, you may upload the file and refer to the file with "attachment://filename.ext" in the ImageUrl. See the example section for its usage.

| Improve this Doc View Source

#### IMessageChannel.SendFileAsync(String, String, Boolean, Embed, RequestOptions, Boolean)

Sends a file to this message channel with an optional caption.

##### Declaration

    Task<IUserMessage> IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options, bool isSpoiler)

##### Parameters

Type | Name | Description
--- | --- | ---
System.String | filePath | The file path of the file.
System.String | text | The message to be sent.
System.Boolean | isTTS | Whether the message should be read aloud by Discord or not.
Embed | embed | The Rich Embed to be sent.
RequestOptions | options | The options to be used when sending the request.
System.Boolean | isSpoiler | Whether the message attachment should be hidden as a spoiler.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<IUserMessage> | A task that represents an asynchronous send operation for delivering the message. The task result contains the sent message.

##### Remarks

This method sends a file as if you are uploading an attachment directly from your Discord client.

##### note

If you wish to upload an image and have it embedded in a Rich embed, you may upload the file and refer to the file with "attachment://filename.ext" in the ImageUrl. See the example section for its usage.

| Improve this Doc View Source

#### IMessageChannel.SendMessageAsync(String, Boolean, Embed, RequestOptions)

Sends a message to this message channel.

##### Declaration

    Task<IUserMessage> IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options)

##### Parameters

Type | Name | Description
--- | --- | ---
System.String | text | The message to be sent.
System.Boolean | isTTS | Determines whether the message should be read aloud by Discord or not.
Embed | embed | The Rich Embed to be sent.
RequestOptions | options | The options to be used when sending the request.

##### Returns

Type | Description
--- | ---
System.Threading.Tasks.Task<IUserMessage> | A task that represents an asynchronous send operation for delivering the message. The task result contains the sent message.

| Improve this Doc View Source

#### IPrivateChannel.Recipients

Gets the users that can access this channel.

##### Declaration

    IReadOnlyCollection<IUser> IPrivateChannel.Recipients { get; }

##### Returns

Type | Description
--- | ---
System.Collections.Generic.IReadOnlyCollection<IUser> | A read-only collection of users that can access this channel.

| Improve this Doc View Source

#### ISocketPrivateChannel.Recipients

##### Declaration

    IReadOnlyCollection<SocketUser> ISocketPrivateChannel.Recipients { get; }

##### Returns

Type | Description
--- | ---
System.Collections.Generic.IReadOnlyCollection<SocketUser> |

### Implements

IDMChannel
ISocketPrivateChannel
IPrivateChannel
ISocketMessageChannel
IMessageChannel
IChannel
ISnowflakeEntity
IEntity<TId>