feature: Webhook message edit & delete functionality (#1753)
* feature: Webhook message edit & delete functionality * PR fixes: Rename Edit* to Modify*; Add more detailed docstrings; Small validation fixes * Fix spacing around docstrings * Make ModifyWebhookMessageParams.Content Optional<string> * Change the Webhook message edit functionality to use a object delegate method instead providing the all parameters Co-authored-by: Desmont <desmont@users.noreply.github.com>
This commit is contained in:
16
src/Discord.Net.Rest/API/Rest/ModifyWebhookMessageParams.cs
Normal file
16
src/Discord.Net.Rest/API/Rest/ModifyWebhookMessageParams.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma warning disable CS1591
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Discord.API.Rest
|
||||
{
|
||||
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
|
||||
internal class ModifyWebhookMessageParams
|
||||
{
|
||||
[JsonProperty("content")]
|
||||
public Optional<string> Content { get; set; }
|
||||
[JsonProperty("embeds")]
|
||||
public Optional<Embed[]> Embeds { get; set; }
|
||||
[JsonProperty("allowed_mentions")]
|
||||
public Optional<AllowedMentions> AllowedMentions { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -523,6 +523,43 @@ namespace Discord.API
|
||||
var ids = new BucketIds(webhookId: webhookId);
|
||||
return await SendJsonAsync<Message>("POST", () => $"webhooks/{webhookId}/{AuthToken}?wait=true", args, ids, clientBucket: ClientBucketType.SendEdit, options: options).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <exception cref="ArgumentOutOfRangeException">Message content is too long, length must be less or equal to <see cref="DiscordConfig.MaxMessageSize"/>.</exception>
|
||||
/// <exception cref="InvalidOperationException">This operation may only be called with a <see cref="TokenType.Webhook"/> token.</exception>
|
||||
public async Task ModifyWebhookMessageAsync(ulong webhookId, ulong messageId, ModifyWebhookMessageParams args, RequestOptions options = null)
|
||||
{
|
||||
if (AuthTokenType != TokenType.Webhook)
|
||||
throw new InvalidOperationException($"This operation may only be called with a {nameof(TokenType.Webhook)} token.");
|
||||
|
||||
Preconditions.NotNull(args, nameof(args));
|
||||
Preconditions.NotEqual(webhookId, 0, nameof(webhookId));
|
||||
Preconditions.NotEqual(messageId, 0, nameof(messageId));
|
||||
|
||||
if (args.Embeds.IsSpecified)
|
||||
Preconditions.AtMost(args.Embeds.Value.Length, 10, nameof(args.Embeds), "A max of 10 Embeds are allowed.");
|
||||
if (args.Content.IsSpecified && args.Content.Value.Length > DiscordConfig.MaxMessageSize)
|
||||
throw new ArgumentException(message: $"Message content is too long, length must be less or equal to {DiscordConfig.MaxMessageSize}.", paramName: nameof(args.Content));
|
||||
options = RequestOptions.CreateOrClone(options);
|
||||
|
||||
var ids = new BucketIds(webhookId: webhookId);
|
||||
await SendJsonAsync<Message>("PATCH", () => $"webhooks/{webhookId}/{AuthToken}/messages/{messageId}", args, ids, clientBucket: ClientBucketType.SendEdit, options: options).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <exception cref="InvalidOperationException">This operation may only be called with a <see cref="TokenType.Webhook"/> token.</exception>
|
||||
public async Task DeleteWebhookMessageAsync(ulong webhookId, ulong messageId, RequestOptions options = null)
|
||||
{
|
||||
if (AuthTokenType != TokenType.Webhook)
|
||||
throw new InvalidOperationException($"This operation may only be called with a {nameof(TokenType.Webhook)} token.");
|
||||
|
||||
Preconditions.NotEqual(webhookId, 0, nameof(webhookId));
|
||||
Preconditions.NotEqual(messageId, 0, nameof(messageId));
|
||||
|
||||
options = RequestOptions.CreateOrClone(options);
|
||||
|
||||
var ids = new BucketIds(webhookId: webhookId);
|
||||
await SendAsync("DELETE", () => $"webhooks/{webhookId}/{AuthToken}/messages/{messageId}", ids, options: options).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <exception cref="ArgumentOutOfRangeException">Message content is too long, length must be less or equal to <see cref="DiscordConfig.MaxMessageSize"/>.</exception>
|
||||
public async Task<Message> UploadFileAsync(ulong channelId, UploadFileParams args, RequestOptions options = null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user