@@ -18,6 +18,9 @@ namespace Discord.WebSocket | |||
{ | |||
private readonly MessageCache _messages; | |||
/// <summary> | |||
/// Gets the recipient of the channel. | |||
/// </summary> | |||
public SocketUser Recipient { get; } | |||
/// <inheritdoc /> | |||
@@ -51,6 +54,14 @@ namespace Discord.WebSocket | |||
/// <inheritdoc /> | |||
public SocketMessage GetCachedMessage(ulong id) | |||
=> _messages?.Get(id); | |||
/// <summary> | |||
/// Gets the message associated with the passed <paramref name="id"/>. | |||
/// </summary> | |||
/// <param name="id">The id of the message you want to retrieve</param> | |||
/// <param name="options">The options to be used when sending the request.</param> | |||
/// <returns> | |||
/// An awaitable <see cref="Task"/>. | |||
/// </returns> | |||
public async Task<IMessage> GetMessageAsync(ulong id, RequestOptions options = null) | |||
{ | |||
IMessage msg = _messages?.Get(id); | |||
@@ -58,6 +69,15 @@ namespace Discord.WebSocket | |||
msg = await ChannelHelper.GetMessageAsync(this, Discord, id, options).ConfigureAwait(false); | |||
return msg; | |||
} | |||
/// <summary> | |||
/// Gets a nested collection of messages. | |||
/// </summary> | |||
/// <param name="limit">The number of messages you want to get.</param> | |||
/// <param name="options">The options to be used when sending the request.</param> | |||
/// <returns> | |||
/// An awaitable <see cref="Task"/>. | |||
/// </returns> | |||
public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null) | |||
=> SocketChannelHelper.GetMessagesAsync(this, Discord, _messages, null, Direction.Before, limit, CacheMode.AllowDownload, options); | |||
public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null) | |||
@@ -89,9 +109,10 @@ namespace Discord.WebSocket | |||
/// <exception cref="ArgumentOutOfRangeException">Message content is too long, length must be less or equal to <see cref="DiscordConfig.MaxMessageSize"/>.</exception> | |||
public Task<RestUserMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null) | |||
=> ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, options); | |||
/// <inheritdoc /> | |||
public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null) | |||
=> ChannelHelper.DeleteMessageAsync(this, messageId, Discord, options); | |||
/// <inheritdoc /> | |||
public Task DeleteMessageAsync(IMessage message, RequestOptions options = null) | |||
=> ChannelHelper.DeleteMessageAsync(this, message.Id, Discord, options); | |||
@@ -108,6 +129,13 @@ namespace Discord.WebSocket | |||
=> _messages?.Remove(id); | |||
//Users | |||
/// <summary> | |||
/// Gets a user in this channel from the passed <paramref name="id"/>. | |||
/// </summary> | |||
/// <param name="id">The id of the user you want to get.</param> | |||
/// <returns> | |||
/// The recipient, or the CurrentUSer otherwise; <c>null</c> | |||
/// </returns> | |||
public new SocketUser GetUser(ulong id) | |||
{ | |||
if (id == Recipient.Id) | |||
@@ -164,8 +192,10 @@ namespace Discord.WebSocket | |||
/// <inheritdoc /> | |||
async Task<IReadOnlyCollection<IMessage>> IMessageChannel.GetPinnedMessagesAsync(RequestOptions options) | |||
=> await GetPinnedMessagesAsync(options).ConfigureAwait(false); | |||
/// <inheritdoc /> | |||
async Task<IUserMessage> IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options) | |||
=> await SendFileAsync(filePath, text, isTTS, embed, options).ConfigureAwait(false); | |||
/// <inheritdoc /> | |||
async Task<IUserMessage> IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options) | |||
=> await SendFileAsync(stream, filename, text, isTTS, embed, options).ConfigureAwait(false); | |||
/// <inheritdoc /> | |||
@@ -141,6 +141,14 @@ namespace Discord.WebSocket | |||
await ChannelHelper.AddPermissionOverwriteAsync(this, Discord, role, perms, options).ConfigureAwait(false); | |||
_overwrites = _overwrites.Add(new Overwrite(role.Id, PermissionTarget.Role, new OverwritePermissions(perms.AllowValue, perms.DenyValue))); | |||
} | |||
/// <summary> | |||
/// Removes an overwrite permission for the specified <paramref name="user"/>. | |||
/// </summary> | |||
/// <param name="user">The user you want to remove the overwrite permission from.</param> | |||
/// <param name="options">The options to be used when sending the request.</param> | |||
/// <returns> | |||
/// An awaitable <see cref="Task"/>. | |||
/// </returns> | |||
public async Task RemovePermissionOverwriteAsync(IUser user, RequestOptions options = null) | |||
{ | |||
await ChannelHelper.RemovePermissionOverwriteAsync(this, Discord, user, options).ConfigureAwait(false); | |||
@@ -154,6 +162,14 @@ namespace Discord.WebSocket | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// Removes an overwrite permission for the specified <paramref name="role"/>. | |||
/// </summary> | |||
/// <param name="role">The role you want the overwrite permissions to be removed from.</param> | |||
/// <param name="options">The options to be used when sending the request.</param> | |||
/// <returns> | |||
/// An awaitable <see cref="Task"/>. | |||
/// </returns> | |||
public async Task RemovePermissionOverwriteAsync(IRole role, RequestOptions options = null) | |||
{ | |||
await ChannelHelper.RemovePermissionOverwriteAsync(this, Discord, role, options).ConfigureAwait(false); | |||
@@ -168,8 +184,26 @@ namespace Discord.WebSocket | |||
} | |||
} | |||
/// <summary> | |||
/// Gets the invites for this channel. | |||
/// </summary> | |||
/// <param name="options">The options to be used when sending the request.</param> | |||
/// <returns> | |||
/// An awaitable <see cref="Task"/>. | |||
/// </returns> | |||
public async Task<IReadOnlyCollection<RestInviteMetadata>> GetInvitesAsync(RequestOptions options = null) | |||
=> await ChannelHelper.GetInvitesAsync(this, Discord, options).ConfigureAwait(false); | |||
/// <summary> | |||
/// Creates an invite for this channel. | |||
/// </summary> | |||
/// <param name="maxAge">The number of seconds that you want the invite to be valid for.</param> | |||
/// <param name="maxUses">The number of times this invite can be used before it expires.</param> | |||
/// <param name="isTemporary">Whether or not the invite grants temporary membership.</param> | |||
/// <param name="isUnique">Whether to try reuse a similar invite or not.</param> | |||
/// <param name="options">The options to be used when sending the request.</param> | |||
/// <returns> | |||
/// An awaitable <see cref="Task"/>. | |||
/// </returns> | |||
public async Task<RestInviteMetadata> CreateInviteAsync(int? maxAge = 86400, int? maxUses = null, bool isTemporary = false, bool isUnique = false, RequestOptions options = null) | |||
=> await ChannelHelper.CreateInviteAsync(this, Discord, maxAge, maxUses, isTemporary, isUnique, options).ConfigureAwait(false); | |||
@@ -20,7 +20,14 @@ namespace Discord.WebSocket | |||
/// <inheritdoc /> | |||
public string Topic { get; private set; } | |||
/// <inheritdoc /> | |||
public ulong? CategoryId { get; private set; } | |||
/// <summary> | |||
/// Gets the Category this channel belongs to. | |||
/// </summary> | |||
/// <returns> | |||
/// An <see cref="ICategoryChannel"/> that this channel belongs to otherwise; <c>null</c>. | |||
/// </returns> | |||
public ICategoryChannel Category | |||
=> CategoryId.HasValue ? Guild.GetChannel(CategoryId.Value) as ICategoryChannel : null; | |||
@@ -66,6 +73,15 @@ namespace Discord.WebSocket | |||
/// <inheritdoc /> | |||
public SocketMessage GetCachedMessage(ulong id) | |||
=> _messages?.Get(id); | |||
/// <summary> | |||
/// Gets the message associated with the passed <paramref name="id"/>. | |||
/// </summary> | |||
/// <param name="id">The id of the message you want to retrieve</param> | |||
/// <param name="options">The options to be used when sending the request.</param> | |||
/// <returns> | |||
/// An awaitable <see cref="Task"/>. | |||
/// </returns> | |||
public async Task<IMessage> GetMessageAsync(ulong id, RequestOptions options = null) | |||
{ | |||
IMessage msg = _messages?.Get(id); | |||
@@ -73,6 +89,15 @@ namespace Discord.WebSocket | |||
msg = await ChannelHelper.GetMessageAsync(this, Discord, id, options).ConfigureAwait(false); | |||
return msg; | |||
} | |||
/// <summary> | |||
/// Gets a nested collection of messages. | |||
/// </summary> | |||
/// <param name="limit">The number of messages you want to get.</param> | |||
/// <param name="options">The options to be used when sending the request.</param> | |||
/// <returns> | |||
/// An awaitable <see cref="Task"/>. | |||
/// </returns> | |||
public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null) | |||
=> SocketChannelHelper.GetMessagesAsync(this, Discord, _messages, null, Direction.Before, limit, CacheMode.AllowDownload, options); | |||
public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null) | |||
@@ -109,9 +134,10 @@ namespace Discord.WebSocket | |||
/// <inheritdoc /> | |||
public Task DeleteMessagesAsync(IEnumerable<ulong> messageIds, RequestOptions options = null) | |||
=> ChannelHelper.DeleteMessagesAsync(this, Discord, messageIds, options); | |||
/// <inheritdoc /> | |||
public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null) | |||
=> ChannelHelper.DeleteMessageAsync(this, messageId, Discord, options); | |||
/// <inheritdoc /> | |||
public Task DeleteMessageAsync(IMessage message, RequestOptions options = null) | |||
=> ChannelHelper.DeleteMessageAsync(this, message.Id, Discord, options); | |||