| @@ -729,16 +729,14 @@ namespace Discord | |||||
| Task<IReadOnlyCollection<IIntegration>> GetIntegrationsAsync(RequestOptions options = null); | Task<IReadOnlyCollection<IIntegration>> GetIntegrationsAsync(RequestOptions options = null); | ||||
| /// <summary> | /// <summary> | ||||
| /// Creates a new integration. | |||||
| /// Deletes an integration. | |||||
| /// </summary> | /// </summary> | ||||
| /// <param name="id">The id for the integration.</param> | /// <param name="id">The id for the integration.</param> | ||||
| /// <param name="type">The type of integration.</param> | |||||
| /// <param name="options">The options to be used when sending the request.</param> | /// <param name="options">The options to be used when sending the request.</param> | ||||
| /// <returns> | /// <returns> | ||||
| /// A task that represents the asynchronous creation operation. The task result contains the newly created | |||||
| /// integration. | |||||
| /// A task that represents the asynchronous removal operation. | |||||
| /// </returns> | /// </returns> | ||||
| Task<IIntegration> CreateIntegrationAsync(ulong id, string type, RequestOptions options = null); | |||||
| Task DeleteIntegrationAsync(ulong id, RequestOptions options = null); | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets a collection of all invites in this guild. | /// Gets a collection of all invites in this guild. | ||||
| @@ -4,27 +4,53 @@ namespace Discord | |||||
| { | { | ||||
| public interface IConnection | public interface IConnection | ||||
| { | { | ||||
| /// <summary> Gets the ID of the connection account. </summary> | |||||
| /// <returns> A <see cref="string"/> representing the unique identifier value of this connection. </returns> | |||||
| /// <summary> | |||||
| /// Gets the ID of the connection account. | |||||
| /// </summary> | |||||
| /// <returns> | |||||
| /// A <see cref="string"/> representing the unique identifier value of this connection. | |||||
| /// </returns> | |||||
| string Id { get; } | string Id { get; } | ||||
| /// <summary> Gets the username of the connection account. </summary> | |||||
| /// <returns> A string containing the name of this connection. </returns> | |||||
| /// <summary> | |||||
| /// Gets the username of the connection account. | |||||
| /// </summary> | |||||
| /// <returns> | |||||
| /// A string containing the name of this connection. | |||||
| /// </returns> | |||||
| string Name { get; } | string Name { get; } | ||||
| /// <summary> Gets the service of the connection (twitch, youtube). </summary> | |||||
| /// <returns> A string containing the name of this type of connection. </returns> | |||||
| /// <summary> | |||||
| /// Gets the service of the connection (twitch, youtube). | |||||
| /// </summary> | |||||
| /// <returns> | |||||
| /// A string containing the name of this type of connection. | |||||
| /// </returns> | |||||
| string Type { get; } | string Type { get; } | ||||
| /// <summary> Gets whether the connection is revoked. </summary> | |||||
| /// <returns> A value which if true indicates that this connection has been revoked, otherwise false. </returns> | |||||
| /// <summary> | |||||
| /// Gets whether the connection is revoked. | |||||
| /// </summary> | |||||
| /// <returns> | |||||
| /// A value which if true indicates that this connection has been revoked, otherwise false. | |||||
| /// </returns> | |||||
| bool? IsRevoked { get; } | bool? IsRevoked { get; } | ||||
| /// <summary> Gets a <see cref="IReadOnlyCollection{T}"/> of integration parials. </summary> | |||||
| /// <summary> | |||||
| /// Gets a <see cref="IReadOnlyCollection{T}"/> of integration parials. | |||||
| /// </summary> | |||||
| IReadOnlyCollection<IIntegration> Integrations { get; } | IReadOnlyCollection<IIntegration> Integrations { get; } | ||||
| /// <summary> Gets whether the connection is verified. </summary> | |||||
| /// <summary> | |||||
| /// Gets whether the connection is verified. | |||||
| /// </summary> | |||||
| bool Verified { get; } | bool Verified { get; } | ||||
| /// <summary> Gets whether friend sync is enabled for this connection. </summary> | |||||
| /// <summary> | |||||
| /// Gets whether friend sync is enabled for this connection. | |||||
| /// </summary> | |||||
| bool FriendSync { get; } | bool FriendSync { get; } | ||||
| /// <summary> Gets whether activities related to this connection will be shown in presence updates. </summary> | |||||
| /// <summary> | |||||
| /// Gets whether activities related to this connection will be shown in presence updates. | |||||
| /// </summary> | |||||
| bool ShowActivity { get; } | bool ShowActivity { get; } | ||||
| /// <summary> Visibility of this connection. </summary> | |||||
| /// <summary> | |||||
| /// Visibility of this connection. | |||||
| /// </summary> | |||||
| ConnectionVisibility Visibility { get; } | ConnectionVisibility Visibility { get; } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1626,7 +1626,7 @@ namespace Discord.API | |||||
| #region Guild Integrations | #region Guild Integrations | ||||
| /// <exception cref="ArgumentException"><paramref name="guildId"/> must not be equal to zero.</exception> | /// <exception cref="ArgumentException"><paramref name="guildId"/> must not be equal to zero.</exception> | ||||
| public async Task<IReadOnlyCollection<Integration>> GetGuildIntegrationsAsync(ulong guildId, RequestOptions options = null) | |||||
| public async Task<IReadOnlyCollection<Integration>> GetIntegrationsAsync(ulong guildId, RequestOptions options = null) | |||||
| { | { | ||||
| Preconditions.NotEqual(guildId, 0, nameof(guildId)); | Preconditions.NotEqual(guildId, 0, nameof(guildId)); | ||||
| options = RequestOptions.CreateOrClone(options); | options = RequestOptions.CreateOrClone(options); | ||||
| @@ -1634,47 +1634,14 @@ namespace Discord.API | |||||
| var ids = new BucketIds(guildId: guildId); | var ids = new BucketIds(guildId: guildId); | ||||
| return await SendAsync<IReadOnlyCollection<Integration>>("GET", () => $"guilds/{guildId}/integrations", ids, options: options).ConfigureAwait(false); | return await SendAsync<IReadOnlyCollection<Integration>>("GET", () => $"guilds/{guildId}/integrations", ids, options: options).ConfigureAwait(false); | ||||
| } | } | ||||
| /// <exception cref="ArgumentException"><paramref name="guildId"/> and <paramref name="args.Id"/> must not be equal to zero.</exception> | |||||
| /// <exception cref="ArgumentNullException"><paramref name="args"/> must not be <see langword="null"/>.</exception> | |||||
| public async Task<Integration> CreateGuildIntegrationAsync(ulong guildId, CreateGuildIntegrationParams args, RequestOptions options = null) | |||||
| { | |||||
| Preconditions.NotEqual(guildId, 0, nameof(guildId)); | |||||
| Preconditions.NotNull(args, nameof(args)); | |||||
| Preconditions.NotEqual(args.Id, 0, nameof(args.Id)); | |||||
| options = RequestOptions.CreateOrClone(options); | |||||
| var ids = new BucketIds(guildId: guildId); | |||||
| return await SendAsync<Integration>("POST", () => $"guilds/{guildId}/integrations", ids, options: options).ConfigureAwait(false); | |||||
| } | |||||
| public async Task<Integration> DeleteGuildIntegrationAsync(ulong guildId, ulong integrationId, RequestOptions options = null) | |||||
| { | |||||
| Preconditions.NotEqual(guildId, 0, nameof(guildId)); | |||||
| Preconditions.NotEqual(integrationId, 0, nameof(integrationId)); | |||||
| options = RequestOptions.CreateOrClone(options); | |||||
| var ids = new BucketIds(guildId: guildId); | |||||
| return await SendAsync<Integration>("DELETE", () => $"guilds/{guildId}/integrations/{integrationId}", ids, options: options).ConfigureAwait(false); | |||||
| } | |||||
| public async Task<Integration> ModifyGuildIntegrationAsync(ulong guildId, ulong integrationId, Rest.ModifyGuildIntegrationParams args, RequestOptions options = null) | |||||
| { | |||||
| Preconditions.NotEqual(guildId, 0, nameof(guildId)); | |||||
| Preconditions.NotEqual(integrationId, 0, nameof(integrationId)); | |||||
| Preconditions.NotNull(args, nameof(args)); | |||||
| Preconditions.AtLeast(args.ExpireBehavior, 0, nameof(args.ExpireBehavior)); | |||||
| Preconditions.AtLeast(args.ExpireGracePeriod, 0, nameof(args.ExpireGracePeriod)); | |||||
| options = RequestOptions.CreateOrClone(options); | |||||
| var ids = new BucketIds(guildId: guildId); | |||||
| return await SendJsonAsync<Integration>("PATCH", () => $"guilds/{guildId}/integrations/{integrationId}", args, ids, options: options).ConfigureAwait(false); | |||||
| } | |||||
| public async Task<Integration> SyncGuildIntegrationAsync(ulong guildId, ulong integrationId, RequestOptions options = null) | |||||
| public async Task DeleteIntegrationAsync(ulong guildId, ulong integrationId, RequestOptions options = null) | |||||
| { | { | ||||
| Preconditions.NotEqual(guildId, 0, nameof(guildId)); | Preconditions.NotEqual(guildId, 0, nameof(guildId)); | ||||
| Preconditions.NotEqual(integrationId, 0, nameof(integrationId)); | Preconditions.NotEqual(integrationId, 0, nameof(integrationId)); | ||||
| options = RequestOptions.CreateOrClone(options); | options = RequestOptions.CreateOrClone(options); | ||||
| var ids = new BucketIds(guildId: guildId); | var ids = new BucketIds(guildId: guildId); | ||||
| return await SendAsync<Integration>("POST", () => $"guilds/{guildId}/integrations/{integrationId}/sync", ids, options: options).ConfigureAwait(false); | |||||
| await SendAsync("DELETE", () => $"guilds/{guildId}/integrations/{integrationId}", ids, options: options).ConfigureAwait(false); | |||||
| } | } | ||||
| #endregion | #endregion | ||||
| @@ -308,16 +308,12 @@ namespace Discord.Rest | |||||
| public static async Task<IReadOnlyCollection<RestIntegration>> GetIntegrationsAsync(IGuild guild, BaseDiscordClient client, | public static async Task<IReadOnlyCollection<RestIntegration>> GetIntegrationsAsync(IGuild guild, BaseDiscordClient client, | ||||
| RequestOptions options) | RequestOptions options) | ||||
| { | { | ||||
| var models = await client.ApiClient.GetGuildIntegrationsAsync(guild.Id, options).ConfigureAwait(false); | |||||
| var models = await client.ApiClient.GetIntegrationsAsync(guild.Id, options).ConfigureAwait(false); | |||||
| return models.Select(x => RestIntegration.Create(client, guild, x)).ToImmutableArray(); | return models.Select(x => RestIntegration.Create(client, guild, x)).ToImmutableArray(); | ||||
| } | } | ||||
| public static async Task<RestIntegration> CreateIntegrationAsync(IGuild guild, BaseDiscordClient client, | |||||
| ulong id, string type, RequestOptions options) | |||||
| { | |||||
| var args = new CreateGuildIntegrationParams(id, type); | |||||
| var model = await client.ApiClient.CreateGuildIntegrationAsync(guild.Id, args, options).ConfigureAwait(false); | |||||
| return RestIntegration.Create(client, guild, model); | |||||
| } | |||||
| public static async Task DeleteIntegrationAsync(IGuild guild, BaseDiscordClient client, ulong id, | |||||
| RequestOptions options) => | |||||
| await client.ApiClient.DeleteIntegrationAsync(guild.Id, id, options).ConfigureAwait(false); | |||||
| #endregion | #endregion | ||||
| #region Interactions | #region Interactions | ||||
| @@ -722,8 +722,8 @@ namespace Discord.Rest | |||||
| #region Integrations | #region Integrations | ||||
| public Task<IReadOnlyCollection<RestIntegration>> GetIntegrationsAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestIntegration>> GetIntegrationsAsync(RequestOptions options = null) | ||||
| => GuildHelper.GetIntegrationsAsync(this, Discord, options); | => GuildHelper.GetIntegrationsAsync(this, Discord, options); | ||||
| public Task<RestIntegration> CreateIntegrationAsync(ulong id, string type, RequestOptions options = null) | |||||
| => GuildHelper.CreateIntegrationAsync(this, Discord, id, type, options); | |||||
| public Task DeleteIntegrationAsync(ulong id, RequestOptions options = null) | |||||
| => GuildHelper.DeleteIntegrationAsync(this, Discord, id, options); | |||||
| #endregion | #endregion | ||||
| #region Invites | #region Invites | ||||
| @@ -1378,8 +1378,8 @@ namespace Discord.Rest | |||||
| async Task<IReadOnlyCollection<IIntegration>> IGuild.GetIntegrationsAsync(RequestOptions options) | async Task<IReadOnlyCollection<IIntegration>> IGuild.GetIntegrationsAsync(RequestOptions options) | ||||
| => await GetIntegrationsAsync(options).ConfigureAwait(false); | => await GetIntegrationsAsync(options).ConfigureAwait(false); | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| async Task<IIntegration> IGuild.CreateIntegrationAsync(ulong id, string type, RequestOptions options) | |||||
| => await CreateIntegrationAsync(id, type, options).ConfigureAwait(false); | |||||
| async Task IGuild.DeleteIntegrationAsync(ulong id, RequestOptions options) | |||||
| => await DeleteIntegrationAsync(id, options).ConfigureAwait(false); | |||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| async Task<IReadOnlyCollection<IInviteMetadata>> IGuild.GetInvitesAsync(RequestOptions options) | async Task<IReadOnlyCollection<IInviteMetadata>> IGuild.GetInvitesAsync(RequestOptions options) | ||||
| @@ -76,12 +76,7 @@ namespace Discord.Rest | |||||
| public async Task DeleteAsync() | public async Task DeleteAsync() | ||||
| { | { | ||||
| await Discord.ApiClient.DeleteGuildIntegrationAsync(GuildId, Id).ConfigureAwait(false); | |||||
| } | |||||
| public async Task SyncAsync() | |||||
| { | |||||
| await Discord.ApiClient.SyncGuildIntegrationAsync(GuildId, Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteIntegrationAsync(GuildId, Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public override string ToString() => Name; | public override string ToString() => Name; | ||||
| @@ -849,8 +849,8 @@ namespace Discord.WebSocket | |||||
| #region Integrations | #region Integrations | ||||
| public Task<IReadOnlyCollection<RestIntegration>> GetIntegrationsAsync(RequestOptions options = null) | public Task<IReadOnlyCollection<RestIntegration>> GetIntegrationsAsync(RequestOptions options = null) | ||||
| => GuildHelper.GetIntegrationsAsync(this, Discord, options); | => GuildHelper.GetIntegrationsAsync(this, Discord, options); | ||||
| public Task<RestIntegration> CreateIntegrationAsync(ulong id, string type, RequestOptions options = null) | |||||
| => GuildHelper.CreateIntegrationAsync(this, Discord, id, type, options); | |||||
| public Task DeleteIntegrationAsync(ulong id, RequestOptions options = null) | |||||
| => GuildHelper.DeleteIntegrationAsync(this, Discord, id, options); | |||||
| #endregion | #endregion | ||||
| #region Interactions | #region Interactions | ||||
| @@ -1895,8 +1895,8 @@ namespace Discord.WebSocket | |||||
| async Task<IReadOnlyCollection<IIntegration>> IGuild.GetIntegrationsAsync(RequestOptions options) | async Task<IReadOnlyCollection<IIntegration>> IGuild.GetIntegrationsAsync(RequestOptions options) | ||||
| => await GetIntegrationsAsync(options).ConfigureAwait(false); | => await GetIntegrationsAsync(options).ConfigureAwait(false); | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| async Task<IIntegration> IGuild.CreateIntegrationAsync(ulong id, string type, RequestOptions options) | |||||
| => await CreateIntegrationAsync(id, type, options).ConfigureAwait(false); | |||||
| async Task IGuild.DeleteIntegrationAsync(ulong id, RequestOptions options) | |||||
| => await DeleteIntegrationAsync(id, options).ConfigureAwait(false); | |||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| async Task<IReadOnlyCollection<IInviteMetadata>> IGuild.GetInvitesAsync(RequestOptions options) | async Task<IReadOnlyCollection<IInviteMetadata>> IGuild.GetInvitesAsync(RequestOptions options) | ||||