Browse Source

Update GUILD_JOIN_REQUEST_DELETE event

pull/1923/head
quin lynch 3 years ago
parent
commit
01718fac41
2 changed files with 80 additions and 59 deletions
  1. +2
    -2
      src/Discord.Net.WebSocket/BaseSocketClient.Events.cs
  2. +78
    -57
      src/Discord.Net.WebSocket/DiscordSocketClient.cs

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

@@ -336,12 +336,12 @@ namespace Discord.WebSocket
}
internal readonly AsyncEvent<Func<SocketGuild, SocketGuild, Task>> _guildUpdatedEvent = new AsyncEvent<Func<SocketGuild, SocketGuild, Task>>();
/// <summary>Fired when a user leaves without agreeing to the member screening </summary>
public event Func<ulong, ulong, Task> GuildJoinRequestDeleted
public event Func<Cacheable<SocketGuildUser, ulong>, SocketGuild, Task> GuildJoinRequestDeleted
{
add { _guildJoinRequestDeletedEvent.Add(value); }
remove { _guildJoinRequestDeletedEvent.Remove(value); }
}
internal readonly AsyncEvent<Func<ulong, ulong, Task>> _guildJoinRequestDeletedEvent = new AsyncEvent<Func<ulong, ulong, Task>>();
internal readonly AsyncEvent<Func<Cacheable<SocketGuildUser, ulong>, SocketGuild, Task>> _guildJoinRequestDeletedEvent = new AsyncEvent<Func<Cacheable<SocketGuildUser, ulong>, SocketGuild, Task>>();
#endregion

#region Users


+ 78
- 57
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -1004,12 +1004,57 @@ namespace Discord.WebSocket
}
}
break;
case "GUILD_JOIN_REQUEST_DELETE":
case "GUILD_STICKERS_UPDATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_JOIN_REQUEST_DELETE)").ConfigureAwait(false);
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_STICKERS_UPDATE)").ConfigureAwait(false);

var data = (payload as JToken).ToObject<GuildJoinRequestDeleteEvent>(_serializer);
await TimedInvokeAsync(_guildJoinRequestDeletedEvent, nameof(GuildJoinRequestDeleted), data.UserId, data.GuildId).ConfigureAwait(false);
var data = (payload as JToken).ToObject<GuildStickerUpdateEvent>(_serializer);

var guild = State.GetGuild(data.GuildId);

if (guild == null)
{
await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false);
return;
}

var newStickers = data.Stickers.Where(x => !guild.Stickers.Any(y => y.Id == x.Id));
var deletedStickers = guild.Stickers.Where(x => !data.Stickers.Any(y => y.Id == x.Id));
var updatedStickers = data.Stickers.Select(x =>
{
var s = guild.Stickers.FirstOrDefault(y => y.Id == x.Id);
if (s == null)
return null;

var e = s.Equals(x);
if (!e)
{
return (s, x) as (SocketCustomSticker Entity, API.Sticker Model)?;
}
else
{
return null;
}
}).Where(x => x.HasValue).Select(x => x.Value).ToArray();

foreach (var model in newStickers)
{
var entity = guild.AddSticker(model);
await TimedInvokeAsync(_guildStickerCreated, nameof(GuildStickerCreated), entity);
}
foreach (var sticker in deletedStickers)
{
var entity = guild.RemoveSticker(sticker.Id);
await TimedInvokeAsync(_guildStickerDeleted, nameof(GuildStickerDeleted), entity);
}
foreach (var entityModelPair in updatedStickers)
{
var before = entityModelPair.Entity.Clone();

entityModelPair.Entity.Update(entityModelPair.Model);

await TimedInvokeAsync(_guildStickerUpdated, nameof(GuildStickerUpdated), before, entityModelPair.Entity);
}
}
break;
#endregion
@@ -1249,6 +1294,32 @@ namespace Discord.WebSocket
}
}
break;
case "GUILD_JOIN_REQUEST_DELETE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_JOIN_REQUEST_DELETE)").ConfigureAwait(false);

var data = (payload as JToken).ToObject<GuildJoinRequestDeleteEvent>(_serializer);

var guild = State.GetGuild(data.GuildId);

if (guild == null)
{
await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false);
return;
}

var user = guild.RemoveUser(data.UserId);
guild.MemberCount--;

var cacheableUser = new Cacheable<SocketGuildUser, ulong>(user, data.UserId, user != null, () => Task.FromResult((SocketGuildUser)null));

await TimedInvokeAsync(_guildJoinRequestDeletedEvent, nameof(GuildJoinRequestDeleted), cacheableUser, guild).ConfigureAwait(false);
}
break;
#endregion

#region DM Channels

case "CHANNEL_RECIPIENT_ADD":
{
await _gatewayLogger.DebugAsync("Received Dispatch (CHANNEL_RECIPIENT_ADD)").ConfigureAwait(false);
@@ -1289,6 +1360,7 @@ namespace Discord.WebSocket
}
}
break;

#endregion

#region Roles
@@ -2439,7 +2511,9 @@ namespace Discord.WebSocket
}

break;
#endregion

#region Stage Channels
case "STAGE_INSTANCE_CREATE" or "STAGE_INSTANCE_UPDATE" or "STAGE_INSTANCE_DELETE":
{
await _gatewayLogger.DebugAsync($"Received Dispatch ({type})").ConfigureAwait(false);
@@ -2480,59 +2554,6 @@ namespace Discord.WebSocket
}
}
break;
case "GUILD_STICKERS_UPDATE":
{
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_STICKERS_UPDATE)").ConfigureAwait(false);

var data = (payload as JToken).ToObject<GuildStickerUpdateEvent>(_serializer);

var guild = State.GetGuild(data.GuildId);

if (guild == null)
{
await UnknownGuildAsync(type, data.GuildId).ConfigureAwait(false);
return;
}

var newStickers = data.Stickers.Where(x => !guild.Stickers.Any(y => y.Id == x.Id));
var deletedStickers = guild.Stickers.Where(x => !data.Stickers.Any(y => y.Id == x.Id));
var updatedStickers = data.Stickers.Select(x =>
{
var s = guild.Stickers.FirstOrDefault(y => y.Id == x.Id);
if (s == null)
return null;

var e = s.Equals(x);
if (!e)
{
return (s, x) as (SocketCustomSticker Entity, API.Sticker Model)?;
}
else
{
return null;
}
}).Where(x => x.HasValue).Select(x => x.Value).ToArray();

foreach(var model in newStickers)
{
var entity = guild.AddSticker(model);
await TimedInvokeAsync(_guildStickerCreated, nameof(GuildStickerCreated), entity);
}
foreach(var sticker in deletedStickers)
{
var entity = guild.RemoveSticker(sticker.Id);
await TimedInvokeAsync(_guildStickerDeleted, nameof(GuildStickerDeleted), entity);
}
foreach(var entityModelPair in updatedStickers)
{
var before = entityModelPair.Entity.Clone();

entityModelPair.Entity.Update(entityModelPair.Model);

await TimedInvokeAsync(_guildStickerUpdated, nameof(GuildStickerUpdated), before, entityModelPair.Entity);
}
}
break;
#endregion

#region Ignored (User only)


Loading…
Cancel
Save