using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
namespace Discord
{
///
/// Represents a generic channel in a guild that can send and receive messages.
///
public interface ITextChannel : IMessageChannel, IMentionable, INestedChannel
{
///
/// Gets a value that indicates whether the channel is NSFW.
///
///
/// true if the channel has the NSFW flag enabled; otherwise false.
///
bool IsNsfw { get; }
///
/// Gets the current topic for this text channel.
///
///
/// A string representing the topic set in the channel; null if none is set.
///
string Topic { get; }
///
/// Gets the current slow-mode delay for this channel.
///
///
/// An representing the time in seconds required before the user can send another
/// message; 0 if disabled.
///
int SlowModeInterval { get; }
///
/// Bulk-deletes multiple messages.
///
///
/// The following example gets 250 messages from the channel and deletes them.
///
/// var messages = await textChannel.GetMessagesAsync(250).FlattenAsync();
/// await textChannel.DeleteMessagesAsync(messages);
///
///
///
/// This method attempts to remove the messages specified in bulk.
///
/// Due to the limitation set by Discord, this method can only remove messages that are posted within 14 days!
///
///
/// The messages to be bulk-deleted.
/// The options to be used when sending the request.
///
/// A task that represents the asynchronous bulk-removal operation.
///
Task DeleteMessagesAsync(IEnumerable messages, RequestOptions options = null);
///
/// Bulk-deletes multiple messages.
///
///
/// This method attempts to remove the messages specified in bulk.
///
/// Due to the limitation set by Discord, this method can only remove messages that are posted within 14 days!
///
///
/// The snowflake identifier of the messages to be bulk-deleted.
/// The options to be used when sending the request.
///
/// A task that represents the asynchronous bulk-removal operation.
///
Task DeleteMessagesAsync(IEnumerable messageIds, RequestOptions options = null);
///
/// Modifies this text channel.
///
/// The delegate containing the properties to modify the channel with.
/// The options to be used when sending the request.
///
/// A task that represents the asynchronous modification operation.
///
///
Task ModifyAsync(Action func, RequestOptions options = null);
///
/// Creates a webhook in this text channel.
///
/// The name of the webhook.
/// The avatar of the webhook.
/// The options to be used when sending the request.
///
/// A task that represents the asynchronous creation operation. The task result contains the newly created
/// webhook.
///
Task CreateWebhookAsync(string name, Stream avatar = null, RequestOptions options = null);
///
/// Gets a webhook available in this text channel.
///
/// The identifier of the webhook.
/// The options to be used when sending the request.
///
/// A task that represents the asynchronous get operation. The task result contains a webhook associated
/// with the identifier; null if the webhook is not found.
///
Task GetWebhookAsync(ulong id, RequestOptions options = null);
///
/// Gets the webhooks available in this text channel.
///
/// The options to be used when sending the request.
///
/// A task that represents the asynchronous get operation. The task result contains a read-only collection
/// of webhooks that is available in this channel.
///
Task> GetWebhooksAsync(RequestOptions options = null);
}
}