Browse Source

feat: Support the WEBHOOKS_UPDATED event (#2384)

Co-authored-by: Armano den Boef <68127614+Rozen4334@users.noreply.github.com>
tags/3.8.0
CottageDwellingCat GitHub 2 years ago
parent
commit
010e8e828f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 16 deletions
  1. +13
    -0
      src/Discord.Net.WebSocket/API/Gateway/WebhooksUpdatedEvent.cs
  2. +28
    -13
      src/Discord.Net.WebSocket/BaseSocketClient.Events.cs
  3. +2
    -0
      src/Discord.Net.WebSocket/DiscordShardedClient.cs
  4. +17
    -3
      src/Discord.Net.WebSocket/DiscordSocketClient.cs

+ 13
- 0
src/Discord.Net.WebSocket/API/Gateway/WebhooksUpdatedEvent.cs View File

@@ -0,0 +1,13 @@
using Newtonsoft.Json;

namespace Discord.API.Gateway
{
internal class WebhooksUpdatedEvent
{
[JsonProperty("guild_id")]
public ulong GuildId { get; set; }

[JsonProperty("channel_id")]
public ulong ChannelId { get; set; }
}
}

+ 28
- 13
src/Discord.Net.WebSocket/BaseSocketClient.Events.cs View File

@@ -106,7 +106,7 @@ namespace Discord.WebSocket
/// <remarks>
/// <para>
/// This event is fired when a message is deleted. The event handler must return a
/// <see cref="Task"/> and accept a <see cref="Cacheable{TEntity,TId}"/> and
/// <see cref="Task"/> and accept a <see cref="Cacheable{TEntity,TId}"/> and
/// <see cref="ISocketMessageChannel"/> as its parameters.
/// </para>
/// <para>
@@ -117,11 +117,11 @@ namespace Discord.WebSocket
/// </note>
/// If caching is enabled via <see cref="DiscordSocketConfig"/>, the
/// <see cref="Cacheable{TEntity,TId}"/> entity will contain the deleted message; otherwise, in event
/// that the message cannot be retrieved, the snowflake ID of the message is preserved in the
/// that the message cannot be retrieved, the snowflake ID of the message is preserved in the
/// <see cref="ulong"/>.
/// </para>
/// <para>
/// The source channel of the removed message will be passed into the
/// The source channel of the removed message will be passed into the
/// <see cref="ISocketMessageChannel"/> parameter.
/// </para>
/// </remarks>
@@ -143,7 +143,7 @@ namespace Discord.WebSocket
/// </note>
/// <para>
/// This event is fired when multiple messages are bulk deleted. The event handler must return a
/// <see cref="Task"/> and accept an <see cref="IReadOnlyCollection{Cacheable}"/> and
/// <see cref="Task"/> and accept an <see cref="IReadOnlyCollection{Cacheable}"/> and
/// <see cref="ISocketMessageChannel"/> as its parameters.
/// </para>
/// <para>
@@ -154,11 +154,11 @@ namespace Discord.WebSocket
/// </note>
/// If caching is enabled via <see cref="DiscordSocketConfig"/>, the
/// <see cref="Cacheable{TEntity,TId}"/> entity will contain the deleted message; otherwise, in event
/// that the message cannot be retrieved, the snowflake ID of the message is preserved in the
/// that the message cannot be retrieved, the snowflake ID of the message is preserved in the
/// <see cref="ulong"/>.
/// </para>
/// <para>
/// The source channel of the removed message will be passed into the
/// The source channel of the removed message will be passed into the
/// <see cref="ISocketMessageChannel"/> parameter.
/// </para>
/// </remarks>
@@ -178,14 +178,14 @@ namespace Discord.WebSocket
/// <para>
/// If caching is enabled via <see cref="DiscordSocketConfig"/>, the
/// <see cref="Cacheable{TEntity,TId}"/> entity will contain the original message; otherwise, in event
/// that the message cannot be retrieved, the snowflake ID of the message is preserved in the
/// that the message cannot be retrieved, the snowflake ID of the message is preserved in the
/// <see cref="ulong"/>.
/// </para>
/// <para>
/// The updated message will be passed into the <see cref="SocketMessage"/> parameter.
/// </para>
/// <para>
/// The source channel of the updated message will be passed into the
/// The source channel of the updated message will be passed into the
/// <see cref="ISocketMessageChannel"/> parameter.
/// </para>
/// </remarks>
@@ -199,24 +199,24 @@ namespace Discord.WebSocket
/// <remarks>
/// <para>
/// This event is fired when a reaction is added to a user message. The event handler must return a
/// <see cref="Task"/> and accept a <see cref="Cacheable{TEntity,TId}"/>, an
/// <see cref="Task"/> and accept a <see cref="Cacheable{TEntity,TId}"/>, an
/// <see cref="ISocketMessageChannel"/>, and a <see cref="SocketReaction"/> as its parameter.
/// </para>
/// <para>
/// If caching is enabled via <see cref="DiscordSocketConfig"/>, the
/// <see cref="Cacheable{TEntity,TId}"/> entity will contain the original message; otherwise, in event
/// that the message cannot be retrieved, the snowflake ID of the message is preserved in the
/// that the message cannot be retrieved, the snowflake ID of the message is preserved in the
/// <see cref="ulong"/>.
/// </para>
/// <para>
/// The source channel of the reaction addition will be passed into the
/// The source channel of the reaction addition will be passed into the
/// <see cref="ISocketMessageChannel"/> parameter.
/// </para>
/// <para>
/// The reaction that was added will be passed into the <see cref="SocketReaction"/> parameter.
/// </para>
/// <note>
/// When fetching the reaction from this event, a user may not be provided under
/// When fetching the reaction from this event, a user may not be provided under
/// <see cref="SocketReaction.User"/>. Please see the documentation of the property for more
/// information.
/// </note>
@@ -367,7 +367,7 @@ namespace Discord.WebSocket
}
internal readonly AsyncEvent<Func<Cacheable<SocketGuildEvent, ulong>, SocketGuildEvent, Task>> _guildScheduledEventUpdated = new AsyncEvent<Func<Cacheable<SocketGuildEvent, ulong>, SocketGuildEvent, Task>>();

/// <summary>
/// Fired when a guild event is cancelled.
/// </summary>
@@ -877,5 +877,20 @@ namespace Discord.WebSocket
}
internal readonly AsyncEvent<Func<SocketCustomSticker, Task>> _guildStickerDeleted = new AsyncEvent<Func<SocketCustomSticker, Task>>();
#endregion

#region Webhooks

/// <summary>
/// Fired when a webhook is modified, moved, or deleted. If the webhook was
/// moved the channel represents the destination channel, not the source.
/// </summary>
public event Func<SocketGuild, SocketChannel, Task> WebhooksUpdated
{
add { _webhooksUpdated.Add(value); }
remove { _webhooksUpdated.Remove(value); }
}
internal readonly AsyncEvent<Func<SocketGuild, SocketChannel, Task>> _webhooksUpdated = new AsyncEvent<Func<SocketGuild, SocketChannel, Task>>();

#endregion
}
}

+ 2
- 0
src/Discord.Net.WebSocket/DiscordShardedClient.cs View File

@@ -496,6 +496,8 @@ namespace Discord.WebSocket
client.GuildScheduledEventStarted += (arg) => _guildScheduledEventStarted.InvokeAsync(arg);
client.GuildScheduledEventUserAdd += (arg1, arg2) => _guildScheduledEventUserAdd.InvokeAsync(arg1, arg2);
client.GuildScheduledEventUserRemove += (arg1, arg2) => _guildScheduledEventUserRemove.InvokeAsync(arg1, arg2);

client.WebhooksUpdated += (arg1, arg2) => _webhooksUpdated.InvokeAsync(arg1, arg2);
}
#endregion



+ 17
- 3
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -2839,6 +2839,23 @@ namespace Discord.WebSocket

#endregion

#region Webhooks

case "WEBHOOKS_UPDATE":
{
var data = (payload as JToken).ToObject<WebhooksUpdatedEvent>(_serializer);
type = "WEBHOOKS_UPDATE";
await _gatewayLogger.DebugAsync("Received Dispatch (WEBHOOKS_UPDATE)").ConfigureAwait(false);

var guild = State.GetGuild(data.GuildId);
var channel = State.GetChannel(data.ChanelId);

await TimedInvokeAsync(_webhooksUpdated, nameof(WebhooksUpdated), guild, channel);
}
break;

#endregion

#region Ignored (User only)
case "CHANNEL_PINS_ACK":
await _gatewayLogger.DebugAsync("Ignored Dispatch (CHANNEL_PINS_ACK)").ConfigureAwait(false);
@@ -2858,9 +2875,6 @@ namespace Discord.WebSocket
case "USER_SETTINGS_UPDATE":
await _gatewayLogger.DebugAsync("Ignored Dispatch (USER_SETTINGS_UPDATE)").ConfigureAwait(false);
break;
case "WEBHOOKS_UPDATE":
await _gatewayLogger.DebugAsync("Ignored Dispatch (WEBHOOKS_UPDATE)").ConfigureAwait(false);
break;
#endregion

#region Others


Loading…
Cancel
Save