* Move invites-related methods from IGuildChannel to INestedChannel * Add missing implementation ...because I somehow forgot it the first time aroundtags/2.0
| @@ -44,45 +44,6 @@ namespace Discord | |||
| /// </returns> | |||
| IReadOnlyCollection<Overwrite> PermissionOverwrites { get; } | |||
| /// <summary> | |||
| /// Creates a new invite to this channel. | |||
| /// </summary> | |||
| /// <example> | |||
| /// The following example creates a new invite to this channel; the invite lasts for 12 hours and can only | |||
| /// be used 3 times throughout its lifespan. | |||
| /// <code language="cs"> | |||
| /// await guildChannel.CreateInviteAsync(maxAge: 43200, maxUses: 3); | |||
| /// </code> | |||
| /// </example> | |||
| /// <param name="maxAge">The time (in seconds) until the invite expires. Set to <c>null</c> to never expire.</param> | |||
| /// <param name="maxUses">The max amount of times this invite may be used. Set to <c>null</c> to have unlimited uses.</param> | |||
| /// <param name="isTemporary">If <c>true</c>, the user accepting this invite will be kicked from the guild after closing their client.</param> | |||
| /// <param name="isUnique">If <c>true</c>, don't try to reuse a similar invite (useful for creating many unique one time use invites).</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous invite creation operation. The task result contains an invite | |||
| /// metadata object containing information for the created invite. | |||
| /// </returns> | |||
| Task<IInviteMetadata> CreateInviteAsync(int? maxAge = 86400, int? maxUses = default(int?), bool isTemporary = false, bool isUnique = false, RequestOptions options = null); | |||
| /// <summary> | |||
| /// Gets a collection of all invites to this channel. | |||
| /// </summary> | |||
| /// <example> | |||
| /// The following example gets all of the invites that have been created in this channel and selects the | |||
| /// most used invite. | |||
| /// <code language="cs"> | |||
| /// var invites = await channel.GetInvitesAsync(); | |||
| /// if (invites.Count == 0) return; | |||
| /// var invite = invites.OrderByDescending(x => x.Uses).FirstOrDefault(); | |||
| /// </code> | |||
| /// </example> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous get operation. The task result contains a read-only collection | |||
| /// of invite metadata that are created for this channel. | |||
| /// </returns> | |||
| Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync(RequestOptions options = null); | |||
| /// <summary> | |||
| /// Modifies this guild channel. | |||
| /// </summary> | |||
| @@ -1,3 +1,4 @@ | |||
| using System.Collections.Generic; | |||
| using System.Threading.Tasks; | |||
| namespace Discord | |||
| @@ -25,10 +26,49 @@ namespace Discord | |||
| /// representing the parent of this channel; <c>null</c> if none is set. | |||
| /// </returns> | |||
| Task<ICategoryChannel> GetCategoryAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | |||
| /// <summary> | |||
| /// Syncs the permissions of this nested channel with its parent's. | |||
| /// </summary> | |||
| Task SyncPermissionsAsync(RequestOptions options = null); | |||
| /// <summary> | |||
| /// Creates a new invite to this channel. | |||
| /// </summary> | |||
| /// <example> | |||
| /// The following example creates a new invite to this channel; the invite lasts for 12 hours and can only | |||
| /// be used 3 times throughout its lifespan. | |||
| /// <code language="cs"> | |||
| /// await guildChannel.CreateInviteAsync(maxAge: 43200, maxUses: 3); | |||
| /// </code> | |||
| /// </example> | |||
| /// <param name="maxAge">The time (in seconds) until the invite expires. Set to <c>null</c> to never expire.</param> | |||
| /// <param name="maxUses">The max amount of times this invite may be used. Set to <c>null</c> to have unlimited uses.</param> | |||
| /// <param name="isTemporary">If <c>true</c>, the user accepting this invite will be kicked from the guild after closing their client.</param> | |||
| /// <param name="isUnique">If <c>true</c>, don't try to reuse a similar invite (useful for creating many unique one time use invites).</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous invite creation operation. The task result contains an invite | |||
| /// metadata object containing information for the created invite. | |||
| /// </returns> | |||
| Task<IInviteMetadata> CreateInviteAsync(int? maxAge = 86400, int? maxUses = default(int?), bool isTemporary = false, bool isUnique = false, RequestOptions options = null); | |||
| /// <summary> | |||
| /// Gets a collection of all invites to this channel. | |||
| /// </summary>B | |||
| /// <example> | |||
| /// The following example gets all of the invites that have been created in this channel and selects the | |||
| /// most used invite. | |||
| /// <code language="cs"> | |||
| /// var invites = await channel.GetInvitesAsync(); | |||
| /// if (invites.Count == 0) return; | |||
| /// var invite = invites.OrderByDescending(x => x.Uses).FirstOrDefault(); | |||
| /// </code> | |||
| /// </example> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous get operation. The task result contains a read-only collection | |||
| /// of invite metadata that are created for this channel. | |||
| /// </returns> | |||
| Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync(RequestOptions options = null); | |||
| } | |||
| } | |||
| @@ -25,16 +25,6 @@ namespace Discord.Rest | |||
| private string DebuggerDisplay => $"{Name} ({Id}, Category)"; | |||
| // IGuildChannel | |||
| /// <inheritdoc /> | |||
| /// <exception cref="NotSupportedException">This method is not supported with category channels.</exception> | |||
| Task<IInviteMetadata> IGuildChannel.CreateInviteAsync(int? maxAge, int? maxUses, bool isTemporary, bool isUnique, RequestOptions options) | |||
| => throw new NotSupportedException(); | |||
| /// <inheritdoc /> | |||
| /// <exception cref="NotSupportedException">This method is not supported with category channels.</exception> | |||
| Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options) | |||
| => throw new NotSupportedException(); | |||
| //IChannel | |||
| /// <inheritdoc /> | |||
| /// <exception cref="NotSupportedException">This method is not supported with category channels.</exception> | |||
| @@ -178,32 +178,6 @@ namespace Discord.Rest | |||
| } | |||
| } | |||
| /// <summary> | |||
| /// Gets a collection of all invites to this channel. | |||
| /// </summary> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous get operation. The task result contains a read-only collection | |||
| /// of invite metadata that are created for this channel. | |||
| /// </returns> | |||
| public async Task<IReadOnlyCollection<RestInviteMetadata>> GetInvitesAsync(RequestOptions options = null) | |||
| => await ChannelHelper.GetInvitesAsync(this, Discord, options).ConfigureAwait(false); | |||
| /// <summary> | |||
| /// Creates a new invite to this channel. | |||
| /// </summary> | |||
| /// <param name="maxAge">The time (in seconds) until the invite expires. Set to <c>null</c> to never expire.</param> | |||
| /// <param name="maxUses">The max amount of times this invite may be used. Set to <c>null</c> to have unlimited uses.</param> | |||
| /// <param name="isTemporary">If <c>true</c>, the user accepting this invite will be kicked from the guild after closing their client.</param> | |||
| /// <param name="isUnique">If <c>true</c>, don't try to reuse a similar invite (useful for creating many unique one time use invites).</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous invite creation operation. The task result contains an invite | |||
| /// metadata object containing information for the created invite. | |||
| /// </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); | |||
| /// <summary> | |||
| /// Gets the name of this channel. | |||
| /// </summary> | |||
| @@ -224,13 +198,6 @@ namespace Discord.Rest | |||
| } | |||
| } | |||
| /// <inheritdoc /> | |||
| async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options) | |||
| => await GetInvitesAsync(options).ConfigureAwait(false); | |||
| /// <inheritdoc /> | |||
| async Task<IInviteMetadata> IGuildChannel.CreateInviteAsync(int? maxAge, int? maxUses, bool isTemporary, bool isUnique, RequestOptions options) | |||
| => await CreateInviteAsync(maxAge, maxUses, isTemporary, isUnique, options).ConfigureAwait(false); | |||
| /// <inheritdoc /> | |||
| OverwritePermissions? IGuildChannel.GetPermissionOverwrite(IRole role) | |||
| => GetPermissionOverwrite(role); | |||
| @@ -204,6 +204,14 @@ namespace Discord.Rest | |||
| public Task SyncPermissionsAsync(RequestOptions options = null) | |||
| => ChannelHelper.SyncPermissionsAsync(this, Discord, options); | |||
| //Invites | |||
| /// <inheritdoc /> | |||
| public async Task<IInviteMetadata> 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); | |||
| /// <inheritdoc /> | |||
| public async Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync(RequestOptions options = null) | |||
| => await ChannelHelper.GetInvitesAsync(this, Discord, options).ConfigureAwait(false); | |||
| private string DebuggerDisplay => $"{Name} ({Id}, Text)"; | |||
| //ITextChannel | |||
| @@ -57,8 +57,17 @@ namespace Discord.Rest | |||
| /// </returns> | |||
| public Task<ICategoryChannel> GetCategoryAsync(RequestOptions options = null) | |||
| => ChannelHelper.GetCategoryAsync(this, Discord, options); | |||
| public Task SyncPermissionsAsync(RequestOptions options = null) | |||
| => ChannelHelper.SyncPermissionsAsync(this, Discord, options); | |||
| //Invites | |||
| /// <inheritdoc /> | |||
| public async Task<IInviteMetadata> 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); | |||
| /// <inheritdoc /> | |||
| public async Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync(RequestOptions options = null) | |||
| => await ChannelHelper.GetInvitesAsync(this, Discord, options).ConfigureAwait(false); | |||
| private string DebuggerDisplay => $"{Name} ({Id}, Voice)"; | |||
| @@ -77,6 +86,7 @@ namespace Discord.Rest | |||
| => AsyncEnumerable.Empty<IReadOnlyCollection<IGuildUser>>(); | |||
| // INestedChannel | |||
| /// <inheritdoc /> | |||
| async Task<ICategoryChannel> INestedChannel.GetCategoryAsync(CacheMode mode, RequestOptions options) | |||
| { | |||
| if (CategoryId.HasValue && mode == CacheMode.AllowDownload) | |||
| @@ -67,14 +67,6 @@ namespace Discord.WebSocket | |||
| /// <inheritdoc /> | |||
| Task<IGuildUser> IGuildChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) | |||
| => Task.FromResult<IGuildUser>(GetUser(id)); | |||
| /// <inheritdoc /> | |||
| /// <exception cref="NotSupportedException">This method is not supported with category channels.</exception> | |||
| Task<IInviteMetadata> IGuildChannel.CreateInviteAsync(int? maxAge, int? maxUses, bool isTemporary, bool isUnique, RequestOptions options) | |||
| => throw new NotSupportedException(); | |||
| /// <inheritdoc /> | |||
| /// <exception cref="NotSupportedException">This method is not supported with category channels.</exception> | |||
| Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options) | |||
| => throw new NotSupportedException(); | |||
| //IChannel | |||
| /// <inheritdoc /> | |||
| @@ -184,31 +184,6 @@ namespace Discord.WebSocket | |||
| } | |||
| } | |||
| /// <summary> | |||
| /// Returns a collection of all invites to this channel. | |||
| /// </summary> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous get operation. The task result contains a read-only collection | |||
| /// of invite metadata that are created for this channel. | |||
| /// </returns> | |||
| public async Task<IReadOnlyCollection<RestInviteMetadata>> GetInvitesAsync(RequestOptions options = null) | |||
| => await ChannelHelper.GetInvitesAsync(this, Discord, options).ConfigureAwait(false); | |||
| /// <summary> | |||
| /// Creates a new invite to this channel. | |||
| /// </summary> | |||
| /// <param name="maxAge">The time (in seconds) until the invite expires. Set to <c>null</c> to never expire.</param> | |||
| /// <param name="maxUses">The max amount of times this invite may be used. Set to <c>null</c> to have unlimited uses.</param> | |||
| /// <param name="isTemporary">If <c>true</c>, the user accepting this invite will be kicked from the guild after closing their client.</param> | |||
| /// <param name="isUnique">If <c>true</c>, don't try to reuse a similar invite (useful for creating many unique one time use invites).</param> | |||
| /// <param name="options">The options to be used when sending the request.</param> | |||
| /// <returns> | |||
| /// A task that represents the asynchronous invite creation operation. The task result contains an invite | |||
| /// metadata object containing information for the created invite. | |||
| /// </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); | |||
| public new virtual SocketGuildUser GetUser(ulong id) => null; | |||
| /// <summary> | |||
| @@ -233,13 +208,6 @@ namespace Discord.WebSocket | |||
| /// <inheritdoc /> | |||
| ulong IGuildChannel.GuildId => Guild.Id; | |||
| /// <inheritdoc /> | |||
| async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options) | |||
| => await GetInvitesAsync(options).ConfigureAwait(false); | |||
| /// <inheritdoc /> | |||
| async Task<IInviteMetadata> IGuildChannel.CreateInviteAsync(int? maxAge, int? maxUses, bool isTemporary, bool isUnique, RequestOptions options) | |||
| => await CreateInviteAsync(maxAge, maxUses, isTemporary, isUnique, options).ConfigureAwait(false); | |||
| /// <inheritdoc /> | |||
| OverwritePermissions? IGuildChannel.GetPermissionOverwrite(IRole role) | |||
| => GetPermissionOverwrite(role); | |||
| @@ -126,7 +126,6 @@ namespace Discord.WebSocket | |||
| /// <returns> | |||
| /// Paged collection of messages. | |||
| /// </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); | |||
| /// <summary> | |||
| @@ -304,6 +303,14 @@ namespace Discord.WebSocket | |||
| public Task<IReadOnlyCollection<RestWebhook>> GetWebhooksAsync(RequestOptions options = null) | |||
| => ChannelHelper.GetWebhooksAsync(this, Discord, options); | |||
| //Invites | |||
| /// <inheritdoc /> | |||
| public async Task<IInviteMetadata> 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); | |||
| /// <inheritdoc /> | |||
| public async Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync(RequestOptions options = null) | |||
| => await ChannelHelper.GetInvitesAsync(this, Discord, options).ConfigureAwait(false); | |||
| private string DebuggerDisplay => $"{Name} ({Id}, Text)"; | |||
| internal new SocketTextChannel Clone() => MemberwiseClone() as SocketTextChannel; | |||
| @@ -79,6 +79,14 @@ namespace Discord.WebSocket | |||
| return null; | |||
| } | |||
| //Invites | |||
| /// <inheritdoc /> | |||
| public async Task<IInviteMetadata> 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); | |||
| /// <inheritdoc /> | |||
| public async Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync(RequestOptions options = null) | |||
| => await ChannelHelper.GetInvitesAsync(this, Discord, options).ConfigureAwait(false); | |||
| private string DebuggerDisplay => $"{Name} ({Id}, Voice)"; | |||
| internal new SocketVoiceChannel Clone() => MemberwiseClone() as SocketVoiceChannel; | |||