Dalamud/docs/api/Discord.IMessageChannel.html
2020-03-24 03:22:08 +09:00

1057 lines
56 KiB
HTML

<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Interface IMessageChannel
</title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="Interface IMessageChannel
">
<meta name="generator" content="docfx 2.48.1.0">
<link rel="shortcut icon" href="../favicon.ico">
<link rel="stylesheet" href="../styles/docfx.vendor.css">
<link rel="stylesheet" href="../styles/docfx.css">
<link rel="stylesheet" href="../styles/main.css">
<meta property="docfx:navrel" content="">
<meta property="docfx:tocrel" content="toc.html">
</head>
<body data-spy="scroll" data-target="#affix" data-offset="120">
<div id="wrapper">
<header>
<nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../logo.svg" alt="">
</a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<form class="navbar-form navbar-right" role="search" id="search">
<div class="form-group">
<input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
</div>
</form>
</div>
</div>
</nav>
<div class="subnav navbar navbar-default">
<div class="container hide-when-search" id="breadcrumb">
<ul class="breadcrumb">
<li></li>
</ul>
</div>
</div>
</header>
<div role="main" class="container body-content hide-when-search">
<div class="sidenav hide-when-search">
<a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
<div class="sidetoggle collapse" id="sidetoggle">
<div id="sidetoc"></div>
</div>
</div>
<div class="article row grid-right">
<div class="col-md-10">
<article class="content wrap" id="_content" data-uid="Discord.IMessageChannel">
<h1 id="Discord_IMessageChannel" data-uid="Discord.IMessageChannel" class="text-break">Interface IMessageChannel
</h1>
<div class="markdown level0 summary"><p>Represents a generic channel that can send and receive messages.</p>
</div>
<div class="markdown level0 conceptual"></div>
<div class="inheritedMembers">
<h5>Inherited Members</h5>
<div>
<a class="xref" href="Discord.IChannel.html#Discord_IChannel_Name">IChannel.Name</a>
</div>
<div>
<a class="xref" href="Discord.IChannel.html#Discord_IChannel_GetUsersAsync_Discord_CacheMode_Discord_RequestOptions_">IChannel.GetUsersAsync(CacheMode, RequestOptions)</a>
</div>
<div>
<a class="xref" href="Discord.IChannel.html#Discord_IChannel_GetUserAsync_System_UInt64_Discord_CacheMode_Discord_RequestOptions_">IChannel.GetUserAsync(UInt64, CacheMode, RequestOptions)</a>
</div>
<div>
<a class="xref" href="Discord.ISnowflakeEntity.html#Discord_ISnowflakeEntity_CreatedAt">ISnowflakeEntity.CreatedAt</a>
</div>
<div>
<a class="xref" href="Discord.IEntity-1.html#Discord_IEntity_1_Id">IEntity&lt;UInt64&gt;.Id</a>
</div>
</div>
<h6><strong>Namespace</strong>: <a class="xref" href="Discord.html">Discord</a></h6>
<h6><strong>Assembly</strong>: Discord.Net.Core.dll</h6>
<h5 id="Discord_IMessageChannel_syntax">Syntax</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public interface IMessageChannel : IChannel, ISnowflakeEntity, IEntity&lt;ulong&gt;</code></pre>
</div>
<h3 id="methods">Methods
</h3>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_DeleteMessageAsync_Discord_IMessage_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.DeleteMessageAsync(Discord.IMessage%2CDiscord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L243">View Source</a>
</span>
<a id="Discord_IMessageChannel_DeleteMessageAsync_" data-uid="Discord.IMessageChannel.DeleteMessageAsync*"></a>
<h4 id="Discord_IMessageChannel_DeleteMessageAsync_Discord_IMessage_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.DeleteMessageAsync(Discord.IMessage,Discord.RequestOptions)">DeleteMessageAsync(IMessage, RequestOptions)</h4>
<div class="markdown level1 summary"><p>Deletes a message based on the provided message in this channel.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task DeleteMessageAsync(IMessage message, RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a class="xref" href="Discord.IMessage.html">IMessage</a></td>
<td><span class="parametername">message</span></td>
<td><p>The message that would be removed.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Threading.Tasks.Task</span></td>
<td><p>A task that represents the asynchronous removal operation.</p>
</td>
</tr>
</tbody>
</table>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_DeleteMessageAsync_System_UInt64_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.DeleteMessageAsync(System.UInt64%2CDiscord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L236">View Source</a>
</span>
<a id="Discord_IMessageChannel_DeleteMessageAsync_" data-uid="Discord.IMessageChannel.DeleteMessageAsync*"></a>
<h4 id="Discord_IMessageChannel_DeleteMessageAsync_System_UInt64_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.DeleteMessageAsync(System.UInt64,Discord.RequestOptions)">DeleteMessageAsync(UInt64, RequestOptions)</h4>
<div class="markdown level1 summary"><p>Deletes a message.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task DeleteMessageAsync(ulong messageId, RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.UInt64</span></td>
<td><span class="parametername">messageId</span></td>
<td><p>The snowflake identifier of the message that would be removed.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Threading.Tasks.Task</span></td>
<td><p>A task that represents the asynchronous removal operation.</p>
</td>
</tr>
</tbody>
</table>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_EnterTypingState_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.EnterTypingState(Discord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L267">View Source</a>
</span>
<a id="Discord_IMessageChannel_EnterTypingState_" data-uid="Discord.IMessageChannel.EnterTypingState*"></a>
<h4 id="Discord_IMessageChannel_EnterTypingState_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.EnterTypingState(Discord.RequestOptions)">EnterTypingState(RequestOptions)</h4>
<div class="markdown level1 summary"><p>Continuously broadcasts the &quot;user is typing&quot; message to all users in this channel until the returned
object is disposed.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">IDisposable EnterTypingState(RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.IDisposable</span></td>
<td><p>A disposable object that, upon its disposal, will stop the client from broadcasting its typing state in
this channel.</p>
</td>
</tr>
</tbody>
</table>
<h5 id="Discord_IMessageChannel_EnterTypingState_Discord_RequestOptions__examples">Examples</h5>
<p>The following example keeps the client in the typing state until <code>LongRunningAsync</code> has finished.</p>
<pre><code class="lang-cs" region="EnterTypingState" source="..\..\..\Discord.Net.Examples\Core\Entities\Channels\IMessageChannel.Examples.cs"> using (channel.EnterTypingState()) await LongRunningAsync();</code></pre>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_GetMessageAsync_System_UInt64_Discord_CacheMode_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.GetMessageAsync(System.UInt64%2CDiscord.CacheMode%2CDiscord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L103">View Source</a>
</span>
<a id="Discord_IMessageChannel_GetMessageAsync_" data-uid="Discord.IMessageChannel.GetMessageAsync*"></a>
<h4 id="Discord_IMessageChannel_GetMessageAsync_System_UInt64_Discord_CacheMode_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.GetMessageAsync(System.UInt64,Discord.CacheMode,Discord.RequestOptions)">GetMessageAsync(UInt64, CacheMode, RequestOptions)</h4>
<div class="markdown level1 summary"><p>Gets a message from this message channel.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;IMessage&gt; GetMessageAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.UInt64</span></td>
<td><span class="parametername">id</span></td>
<td><p>The snowflake identifier of the message.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.CacheMode.html">CacheMode</a></td>
<td><span class="parametername">mode</span></td>
<td><p>The <a class="xref" href="Discord.CacheMode.html">CacheMode</a> that determines whether the object should be fetched from cache.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Threading.Tasks.Task</span>&lt;<a class="xref" href="Discord.IMessage.html">IMessage</a>&gt;</td>
<td><p>A task that represents an asynchronous get operation for retrieving the message. The task result contains
the retrieved message; <code>null</code> if no message is found with the specified identifier.</p>
</td>
</tr>
</tbody>
</table>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_GetMessagesAsync_Discord_IMessage_Discord_Direction_System_Int32_Discord_CacheMode_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.GetMessagesAsync(Discord.IMessage%2CDiscord.Direction%2CSystem.Int32%2CDiscord.CacheMode%2CDiscord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L216">View Source</a>
</span>
<a id="Discord_IMessageChannel_GetMessagesAsync_" data-uid="Discord.IMessageChannel.GetMessagesAsync*"></a>
<h4 id="Discord_IMessageChannel_GetMessagesAsync_Discord_IMessage_Discord_Direction_System_Int32_Discord_CacheMode_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.GetMessagesAsync(Discord.IMessage,Discord.Direction,System.Int32,Discord.CacheMode,Discord.RequestOptions)">GetMessagesAsync(IMessage, Direction, Int32, CacheMode, RequestOptions)</h4>
<div class="markdown level1 summary"><p>Gets a collection of messages in this channel.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">IAsyncEnumerable&lt;IReadOnlyCollection&lt;IMessage&gt;&gt; GetMessagesAsync(IMessage fromMessage, Direction dir, int limit = 100, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a class="xref" href="Discord.IMessage.html">IMessage</a></td>
<td><span class="parametername">fromMessage</span></td>
<td><p>The starting message to get the messages from.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.Direction.html">Direction</a></td>
<td><span class="parametername">dir</span></td>
<td><p>The direction of the messages to be gotten from.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.Int32</span></td>
<td><span class="parametername">limit</span></td>
<td><p>The numbers of message to be gotten from.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.CacheMode.html">CacheMode</a></td>
<td><span class="parametername">mode</span></td>
<td><p>The <a class="xref" href="Discord.CacheMode.html">CacheMode</a> that determines whether the object should be fetched from
cache.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Collections.Generic.IAsyncEnumerable</span>&lt;<span class="xref">System.Collections.Generic.IReadOnlyCollection</span>&lt;<a class="xref" href="Discord.IMessage.html">IMessage</a>&gt;&gt;</td>
<td><p>Paged collection of messages.</p>
</td>
</tr>
</tbody>
</table>
<h5 id="Discord_IMessageChannel_GetMessagesAsync_Discord_IMessage_Discord_Direction_System_Int32_Discord_CacheMode_Discord_RequestOptions__remarks">Remarks</h5>
<div class="markdown level1 remarks"><div class="IMPORTANT"><h5>important</h5><p>
The returned collection is an asynchronous enumerable object; one must call
<a class="xref" href="Discord.AsyncEnumerableExtensions.html#Discord_AsyncEnumerableExtensions_FlattenAsync__1_System_Collections_Generic_IAsyncEnumerable_System_Collections_Generic_IEnumerable___0___">FlattenAsync&lt;T&gt;(IAsyncEnumerable&lt;IEnumerable&lt;T&gt;&gt;)</a> to access the individual messages as a
collection.
</p></div>
<div class="WARNING"><h5>warning</h5><p>
Do not fetch too many messages at once! This may cause unwanted preemptive rate limit or even actual
rate limit, causing your bot to freeze!
</p></div>
This method will attempt to fetch the number of messages specified under <code data-dev-comment-type="paramref" class="paramref">limit</code> around
the message <code data-dev-comment-type="paramref" class="paramref">fromMessage</code> depending on the <code data-dev-comment-type="paramref" class="paramref">dir</code>. The library will
attempt to split up the requests according to your <code data-dev-comment-type="paramref" class="paramref">limit</code> and
<a class="xref" href="Discord.DiscordConfig.html#Discord_DiscordConfig_MaxMessagesPerBatch">MaxMessagesPerBatch</a>. In other words, should the user request 500 messages,
and the <a class="xref" href="Discord.DiscordConfig.html#Discord_DiscordConfig_MaxMessagesPerBatch">MaxMessagesPerBatch</a> constant is <code>100</code>, the request will
be split into 5 individual requests; thus returning 5 individual asynchronous responses, hence the need
of flattening.
</div>
<h5 id="Discord_IMessageChannel_GetMessagesAsync_Discord_IMessage_Discord_Direction_System_Int32_Discord_CacheMode_Discord_RequestOptions__examples">Examples</h5>
<p>The following example gets 5 message prior to a specific message, <code>oldMessage</code>.</p>
<pre><code class="lang-cs" region="GetMessagesAsync.FromMessage" source="..\..\..\Discord.Net.Examples\Core\Entities\Channels\IMessageChannel.Examples.cs"> var oldMessage = await channel.SendMessageAsync(&quot;boi&quot;);
var messagesFromMsg = await channel.GetMessagesAsync(oldMessage, Direction.Before, 5).FlattenAsync();</code></pre>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_GetMessagesAsync_System_Int32_Discord_CacheMode_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.GetMessagesAsync(System.Int32%2CDiscord.CacheMode%2CDiscord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L138">View Source</a>
</span>
<a id="Discord_IMessageChannel_GetMessagesAsync_" data-uid="Discord.IMessageChannel.GetMessagesAsync*"></a>
<h4 id="Discord_IMessageChannel_GetMessagesAsync_System_Int32_Discord_CacheMode_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.GetMessagesAsync(System.Int32,Discord.CacheMode,Discord.RequestOptions)">GetMessagesAsync(Int32, CacheMode, RequestOptions)</h4>
<div class="markdown level1 summary"><p>Gets the last N messages from this message channel.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">IAsyncEnumerable&lt;IReadOnlyCollection&lt;IMessage&gt;&gt; GetMessagesAsync(int limit = 100, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Int32</span></td>
<td><span class="parametername">limit</span></td>
<td><p>The numbers of message to be gotten from.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.CacheMode.html">CacheMode</a></td>
<td><span class="parametername">mode</span></td>
<td><p>The <a class="xref" href="Discord.CacheMode.html">CacheMode</a> that determines whether the object should be fetched from
cache.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Collections.Generic.IAsyncEnumerable</span>&lt;<span class="xref">System.Collections.Generic.IReadOnlyCollection</span>&lt;<a class="xref" href="Discord.IMessage.html">IMessage</a>&gt;&gt;</td>
<td><p>Paged collection of messages.</p>
</td>
</tr>
</tbody>
</table>
<h5 id="Discord_IMessageChannel_GetMessagesAsync_System_Int32_Discord_CacheMode_Discord_RequestOptions__remarks">Remarks</h5>
<div class="markdown level1 remarks"><div class="IMPORTANT"><h5>important</h5><p>
The returned collection is an asynchronous enumerable object; one must call
<a class="xref" href="Discord.AsyncEnumerableExtensions.html#Discord_AsyncEnumerableExtensions_FlattenAsync__1_System_Collections_Generic_IAsyncEnumerable_System_Collections_Generic_IEnumerable___0___">FlattenAsync&lt;T&gt;(IAsyncEnumerable&lt;IEnumerable&lt;T&gt;&gt;)</a> to access the individual messages as a
collection.
</p></div>
<div class="WARNING"><h5>warning</h5><p>
Do not fetch too many messages at once! This may cause unwanted preemptive rate limit or even actual
rate limit, causing your bot to freeze!
</p></div>
This method will attempt to fetch the number of messages specified under <code data-dev-comment-type="paramref" class="paramref">limit</code>. The
library will attempt to split up the requests according to your <code data-dev-comment-type="paramref" class="paramref">limit</code> and
<a class="xref" href="Discord.DiscordConfig.html#Discord_DiscordConfig_MaxMessagesPerBatch">MaxMessagesPerBatch</a>. In other words, should the user request 500 messages,
and the <a class="xref" href="Discord.DiscordConfig.html#Discord_DiscordConfig_MaxMessagesPerBatch">MaxMessagesPerBatch</a> constant is <code>100</code>, the request will
be split into 5 individual requests; thus returning 5 individual asynchronous responses, hence the need
of flattening.
</div>
<h5 id="Discord_IMessageChannel_GetMessagesAsync_System_Int32_Discord_CacheMode_Discord_RequestOptions__examples">Examples</h5>
<p>The following example downloads 300 messages and gets messages that belong to the user
<code>53905483156684800</code>.</p>
<pre><code class="lang-cs" region="GetMessagesAsync.FromLimit.Standard" source="..\..\..\Discord.Net.Examples\Core\Entities\Channels\IMessageChannel.Examples.cs"> var messages = await channel.GetMessagesAsync(300).FlattenAsync();
var userMessages = messages.Where(x => x.Author.Id == 53905483156684800);</code></pre>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_GetMessagesAsync_System_UInt64_Discord_Direction_System_Int32_Discord_CacheMode_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.GetMessagesAsync(System.UInt64%2CDiscord.Direction%2CSystem.Int32%2CDiscord.CacheMode%2CDiscord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L179">View Source</a>
</span>
<a id="Discord_IMessageChannel_GetMessagesAsync_" data-uid="Discord.IMessageChannel.GetMessagesAsync*"></a>
<h4 id="Discord_IMessageChannel_GetMessagesAsync_System_UInt64_Discord_Direction_System_Int32_Discord_CacheMode_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.GetMessagesAsync(System.UInt64,Discord.Direction,System.Int32,Discord.CacheMode,Discord.RequestOptions)">GetMessagesAsync(UInt64, Direction, Int32, CacheMode, RequestOptions)</h4>
<div class="markdown level1 summary"><p>Gets a collection of messages in this channel.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">IAsyncEnumerable&lt;IReadOnlyCollection&lt;IMessage&gt;&gt; GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = 100, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.UInt64</span></td>
<td><span class="parametername">fromMessageId</span></td>
<td><p>The ID of the starting message to get the messages from.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.Direction.html">Direction</a></td>
<td><span class="parametername">dir</span></td>
<td><p>The direction of the messages to be gotten from.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.Int32</span></td>
<td><span class="parametername">limit</span></td>
<td><p>The numbers of message to be gotten from.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.CacheMode.html">CacheMode</a></td>
<td><span class="parametername">mode</span></td>
<td><p>The <a class="xref" href="Discord.CacheMode.html">CacheMode</a> that determines whether the object should be fetched from
cache.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Collections.Generic.IAsyncEnumerable</span>&lt;<span class="xref">System.Collections.Generic.IReadOnlyCollection</span>&lt;<a class="xref" href="Discord.IMessage.html">IMessage</a>&gt;&gt;</td>
<td><p>Paged collection of messages.</p>
</td>
</tr>
</tbody>
</table>
<h5 id="Discord_IMessageChannel_GetMessagesAsync_System_UInt64_Discord_Direction_System_Int32_Discord_CacheMode_Discord_RequestOptions__remarks">Remarks</h5>
<div class="markdown level1 remarks"><div class="IMPORTANT"><h5>important</h5><p>
The returned collection is an asynchronous enumerable object; one must call
<a class="xref" href="Discord.AsyncEnumerableExtensions.html#Discord_AsyncEnumerableExtensions_FlattenAsync__1_System_Collections_Generic_IAsyncEnumerable_System_Collections_Generic_IEnumerable___0___">FlattenAsync&lt;T&gt;(IAsyncEnumerable&lt;IEnumerable&lt;T&gt;&gt;)</a> to access the individual messages as a
collection.
</p></div>
<div class="WARNING"><h5>warning</h5><p>
Do not fetch too many messages at once! This may cause unwanted preemptive rate limit or even actual
rate limit, causing your bot to freeze!
</p></div>
This method will attempt to fetch the number of messages specified under <code data-dev-comment-type="paramref" class="paramref">limit</code> around
the message <code data-dev-comment-type="paramref" class="paramref">fromMessageId</code> depending on the <code data-dev-comment-type="paramref" class="paramref">dir</code>. The library will
attempt to split up the requests according to your <code data-dev-comment-type="paramref" class="paramref">limit</code> and
<a class="xref" href="Discord.DiscordConfig.html#Discord_DiscordConfig_MaxMessagesPerBatch">MaxMessagesPerBatch</a>. In other words, should the user request 500 messages,
and the <a class="xref" href="Discord.DiscordConfig.html#Discord_DiscordConfig_MaxMessagesPerBatch">MaxMessagesPerBatch</a> constant is <code>100</code>, the request will
be split into 5 individual requests; thus returning 5 individual asynchronous responses, hence the need
of flattening.
</div>
<h5 id="Discord_IMessageChannel_GetMessagesAsync_System_UInt64_Discord_Direction_System_Int32_Discord_CacheMode_Discord_RequestOptions__examples">Examples</h5>
<p>The following example gets 5 message prior to the message identifier <code>442012544660537354</code>.</p>
<pre><code class="lang-cs" region="GetMessagesAsync.FromId.FromMessage" source="..\..\..\Discord.Net.Examples\Core\Entities\Channels\IMessageChannel.Examples.cs"> await channel.GetMessagesAsync(442012544660537354, Direction.Before, 5).FlattenAsync();</code></pre>
<p>The following example attempts to retrieve <code>messageCount</code> number of messages from the
beginning of the channel and prints them to the console.</p>
<pre><code class="lang-cs" region="GetMessagesAsync.FromId.BeginningMessages" source="..\..\..\Discord.Net.Examples\Core\Entities\Channels\IMessageChannel.Examples.cs">public async Task PrintFirstMessages(IMessageChannel channel, int messageCount)
{
// Although the library does attempt to divide the messageCount by 100
// to comply to Discord&apos;s maximum message limit per request, sending
// too many could still cause the queue to clog up.
// The purpose of this exception is to discourage users from sending
// too many requests at once.
if (messageCount > 1000)
throw new InvalidOperationException(&quot;Too many messages requested.&quot;);
<pre><code>// Setting fromMessageId to 0 will make Discord
// default to the first message in channel.
var messages = await channel.GetMessagesAsync(
0, Direction.After, messageCount)
.FlattenAsync();
// Print message content
foreach (var message in messages)
Console.WriteLine($&amp;quot;{message.Author} posted &amp;apos;{message.Content}&amp;apos; at {message.CreatedAt}.&amp;quot;);
</code></pre>
<p>}</code></pre><p>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_GetPinnedMessagesAsync_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.GetPinnedMessagesAsync(Discord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L226">View Source</a>
</span>
<a id="Discord_IMessageChannel_GetPinnedMessagesAsync_" data-uid="Discord.IMessageChannel.GetPinnedMessagesAsync*"></a>
<h4 id="Discord_IMessageChannel_GetPinnedMessagesAsync_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.GetPinnedMessagesAsync(Discord.RequestOptions)">GetPinnedMessagesAsync(RequestOptions)</h4>
<div class="markdown level1 summary"><p>Gets a collection of pinned messages in this channel.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;IReadOnlyCollection&lt;IMessage&gt;&gt; GetPinnedMessagesAsync(RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Threading.Tasks.Task</span>&lt;<span class="xref">System.Collections.Generic.IReadOnlyCollection</span>&lt;<a class="xref" href="Discord.IMessage.html">IMessage</a>&gt;&gt;</td>
<td><p>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.</p>
</td>
</tr>
</tbody>
</table>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_SendFileAsync_System_IO_Stream_System_String_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_System_Boolean_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.SendFileAsync(System.IO.Stream%2CSystem.String%2CSystem.String%2CSystem.Boolean%2CDiscord.Embed%2CDiscord.RequestOptions%2CSystem.Boolean)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L91">View Source</a>
</span>
<a id="Discord_IMessageChannel_SendFileAsync_" data-uid="Discord.IMessageChannel.SendFileAsync*"></a>
<h4 id="Discord_IMessageChannel_SendFileAsync_System_IO_Stream_System_String_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_System_Boolean_" data-uid="Discord.IMessageChannel.SendFileAsync(System.IO.Stream,System.String,System.String,System.Boolean,Discord.Embed,Discord.RequestOptions,System.Boolean)">SendFileAsync(Stream, String, String, Boolean, Embed, RequestOptions, Boolean)</h4>
<div class="markdown level1 summary"><p>Sends a file to this message channel with an optional caption.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;IUserMessage&gt; SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.IO.Stream</span></td>
<td><span class="parametername">stream</span></td>
<td><p>The <span class="xref">System.IO.Stream</span> of the file to be sent.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.String</span></td>
<td><span class="parametername">filename</span></td>
<td><p>The name of the attachment.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.String</span></td>
<td><span class="parametername">text</span></td>
<td><p>The message to be sent.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.Boolean</span></td>
<td><span class="parametername">isTTS</span></td>
<td><p>Whether the message should be read aloud by Discord or not.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.Embed.html">Embed</a></td>
<td><span class="parametername">embed</span></td>
<td><p>The <a class="xref" href="Discord.EmbedType.html#Discord_EmbedType_Rich">Rich</a> <a class="xref" href="Discord.Embed.html">Embed</a> to be sent.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.Boolean</span></td>
<td><span class="parametername">isSpoiler</span></td>
<td><p>Whether the message attachment should be hidden as a spoiler.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Threading.Tasks.Task</span>&lt;<a class="xref" href="Discord.IUserMessage.html">IUserMessage</a>&gt;</td>
<td><p>A task that represents an asynchronous send operation for delivering the message. The task result
contains the sent message.</p>
</td>
</tr>
</tbody>
</table>
<h5 id="Discord_IMessageChannel_SendFileAsync_System_IO_Stream_System_String_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_System_Boolean__remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>This method sends a file as if you are uploading an attachment directly from your Discord client.</p>
<div class="NOTE"><h5>note</h5><p>
If you wish to upload an image and have it embedded in a <a class="xref" href="Discord.EmbedType.html#Discord_EmbedType_Rich">Rich</a> embed,
you may upload the file and refer to the file with &quot;attachment://filename.ext&quot; in the
<a class="xref" href="Discord.EmbedBuilder.html#Discord_EmbedBuilder_ImageUrl">ImageUrl</a>. See the example section for its usage.
</p></div>
</div>
<h5 id="Discord_IMessageChannel_SendFileAsync_System_IO_Stream_System_String_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_System_Boolean__examples">Examples</h5>
<p>The following example uploads a streamed image that will be called <code>b1nzy.jpg</code> embedded inside a
rich embed to the channel.</p>
<pre><code class="lang-cs" region="SendFileAsync.FileStream.EmbeddedImage" source="..\..\..\Discord.Net.Examples\Core\Entities\Channels\IMessageChannel.Examples.cs"> using (var b1nzyStream = await httpClient.GetStreamAsync(&quot;https://example.com/b1nzy&quot;))
await channel.SendFileAsync(b1nzyStream, &quot;b1nzy.jpg&quot;,
embed: new EmbedBuilder {ImageUrl = &quot;attachment://b1nzy.jpg&quot;}.Build());</code></pre>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_SendFileAsync_System_String_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_System_Boolean_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.SendFileAsync(System.String%2CSystem.String%2CSystem.Boolean%2CDiscord.Embed%2CDiscord.RequestOptions%2CSystem.Boolean)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L62">View Source</a>
</span>
<a id="Discord_IMessageChannel_SendFileAsync_" data-uid="Discord.IMessageChannel.SendFileAsync*"></a>
<h4 id="Discord_IMessageChannel_SendFileAsync_System_String_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_System_Boolean_" data-uid="Discord.IMessageChannel.SendFileAsync(System.String,System.String,System.Boolean,Discord.Embed,Discord.RequestOptions,System.Boolean)">SendFileAsync(String, String, Boolean, Embed, RequestOptions, Boolean)</h4>
<div class="markdown level1 summary"><p>Sends a file to this message channel with an optional caption.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;IUserMessage&gt; SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.String</span></td>
<td><span class="parametername">filePath</span></td>
<td><p>The file path of the file.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.String</span></td>
<td><span class="parametername">text</span></td>
<td><p>The message to be sent.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.Boolean</span></td>
<td><span class="parametername">isTTS</span></td>
<td><p>Whether the message should be read aloud by Discord or not.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.Embed.html">Embed</a></td>
<td><span class="parametername">embed</span></td>
<td><p>The <a class="xref" href="Discord.EmbedType.html#Discord_EmbedType_Rich">Rich</a> <a class="xref" href="Discord.Embed.html">Embed</a> to be sent.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.Boolean</span></td>
<td><span class="parametername">isSpoiler</span></td>
<td><p>Whether the message attachment should be hidden as a spoiler.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Threading.Tasks.Task</span>&lt;<a class="xref" href="Discord.IUserMessage.html">IUserMessage</a>&gt;</td>
<td><p>A task that represents an asynchronous send operation for delivering the message. The task result
contains the sent message.</p>
</td>
</tr>
</tbody>
</table>
<h5 id="Discord_IMessageChannel_SendFileAsync_System_String_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_System_Boolean__remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>This method sends a file as if you are uploading an attachment directly from your Discord client.</p>
<div class="NOTE"><h5>note</h5><p>
If you wish to upload an image and have it embedded in a <a class="xref" href="Discord.EmbedType.html#Discord_EmbedType_Rich">Rich</a> embed,
you may upload the file and refer to the file with &quot;attachment://filename.ext&quot; in the
<a class="xref" href="Discord.EmbedBuilder.html#Discord_EmbedBuilder_ImageUrl">ImageUrl</a>. See the example section for its usage.
</p></div>
</div>
<h5 id="Discord_IMessageChannel_SendFileAsync_System_String_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_System_Boolean__examples">Examples</h5>
<p>The following example uploads a local file called <code>wumpus.txt</code> along with the text
<code>good discord boi</code> to the channel.</p>
<pre><code class="lang-cs" region="SendFileAsync.FilePath" source="..\..\..\Discord.Net.Examples\Core\Entities\Channels\IMessageChannel.Examples.cs"> await channel.SendFileAsync(&quot;wumpus.txt&quot;, &quot;good discord boi&quot;);</code></pre>
<p>The following example uploads a local image called <code>b1nzy.jpg</code> embedded inside a rich embed to the
channel.</p>
<pre><code class="lang-cs" region="SendFileAsync.FilePath.EmbeddedImage" source="..\..\..\Discord.Net.Examples\Core\Entities\Channels\IMessageChannel.Examples.cs"> await channel.SendFileAsync(&quot;b1nzy.jpg&quot;,
embed: new EmbedBuilder {ImageUrl = &quot;attachment://b1nzy.jpg&quot;}.Build());</code></pre>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_SendMessageAsync_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.SendMessageAsync(System.String%2CSystem.Boolean%2CDiscord.Embed%2CDiscord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L30">View Source</a>
</span>
<a id="Discord_IMessageChannel_SendMessageAsync_" data-uid="Discord.IMessageChannel.SendMessageAsync*"></a>
<h4 id="Discord_IMessageChannel_SendMessageAsync_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.SendMessageAsync(System.String,System.Boolean,Discord.Embed,Discord.RequestOptions)">SendMessageAsync(String, Boolean, Embed, RequestOptions)</h4>
<div class="markdown level1 summary"><p>Sends a message to this message channel.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task&lt;IUserMessage&gt; SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.String</span></td>
<td><span class="parametername">text</span></td>
<td><p>The message to be sent.</p>
</td>
</tr>
<tr>
<td><span class="xref">System.Boolean</span></td>
<td><span class="parametername">isTTS</span></td>
<td><p>Determines whether the message should be read aloud by Discord or not.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.Embed.html">Embed</a></td>
<td><span class="parametername">embed</span></td>
<td><p>The <a class="xref" href="Discord.EmbedType.html#Discord_EmbedType_Rich">Rich</a> <a class="xref" href="Discord.Embed.html">Embed</a> to be sent.</p>
</td>
</tr>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Threading.Tasks.Task</span>&lt;<a class="xref" href="Discord.IUserMessage.html">IUserMessage</a>&gt;</td>
<td><p>A task that represents an asynchronous send operation for delivering the message. The task result
contains the sent message.</p>
</td>
</tr>
</tbody>
</table>
<h5 id="Discord_IMessageChannel_SendMessageAsync_System_String_System_Boolean_Discord_Embed_Discord_RequestOptions__examples">Examples</h5>
<p>The following example sends a message with the current system time in RFC 1123 format to the channel and
deletes itself after 5 seconds.</p>
<pre><code class="lang-cs" region="SendMessageAsync" source="..\..\..\Discord.Net.Examples\Core\Entities\Channels\IMessageChannel.Examples.cs"> var message = await channel.SendMessageAsync(DateTimeOffset.UtcNow.ToString(&quot;R&quot;));
await Task.Delay(TimeSpan.FromSeconds(5))
.ContinueWith(x => message.DeleteAsync());</code></pre>
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel_TriggerTypingAsync_Discord_RequestOptions_.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel.TriggerTypingAsync(Discord.RequestOptions)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
</span>
<span class="small pull-right mobile-hide">
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L252">View Source</a>
</span>
<a id="Discord_IMessageChannel_TriggerTypingAsync_" data-uid="Discord.IMessageChannel.TriggerTypingAsync*"></a>
<h4 id="Discord_IMessageChannel_TriggerTypingAsync_Discord_RequestOptions_" data-uid="Discord.IMessageChannel.TriggerTypingAsync(Discord.RequestOptions)">TriggerTypingAsync(RequestOptions)</h4>
<div class="markdown level1 summary"><p>Broadcasts the &quot;user is typing&quot; message to all users in this channel, lasting 10 seconds.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">Task TriggerTypingAsync(RequestOptions options = null)</code></pre>
</div>
<h5 class="parameters">Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a class="xref" href="Discord.RequestOptions.html">RequestOptions</a></td>
<td><span class="parametername">options</span></td>
<td><p>The options to be used when sending the request.</p>
</td>
</tr>
</tbody>
</table>
<h5 class="returns">Returns</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.Threading.Tasks.Task</span></td>
<td><p>A task that represents the asynchronous operation that triggers the broadcast.</p>
</td>
</tr>
</tbody>
</table>
</article>
</div>
<div class="hidden-sm col-md-2" role="complementary">
<div class="sideaffix">
<div class="contribution">
<ul class="nav">
<li>
<a href="https://github.com/goaaats/Discord.Net/new/dev/apiSpec/new?filename=Discord_IMessageChannel.md&amp;value=---%0Auid%3A%20Discord.IMessageChannel%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A" class="contribution-link">Improve this Doc</a>
</li>
<li>
<a href="https://github.com/goaaats/Discord.Net/blob/dev/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs/#L11" class="contribution-link">View Source</a>
</li>
</ul>
</div>
<nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
<!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
</nav>
</div>
</div>
</div>
</div>
<footer>
<div class="grad-bottom"></div>
<div class="footer">
<div class="container">
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
<span>Generated by <strong>DocFX</strong></span>
</div>
</div>
</footer>
</div>
<script type="text/javascript" src="../styles/docfx.vendor.js"></script>
<script type="text/javascript" src="../styles/docfx.js"></script>
<script type="text/javascript" src="../styles/main.js"></script>
</body>
</html>