Browse Source

working events

pull/2578/head
Misha133 2 years ago
parent
commit
4ab46e0d63
4 changed files with 36 additions and 2 deletions
  1. +2
    -2
      src/Discord.Net.WebSocket/BaseSocketClient.Events.cs
  2. +22
    -0
      src/Discord.Net.WebSocket/DiscordSocketClient.cs
  3. +2
    -0
      src/Discord.Net.WebSocket/Entities/Guilds/SocketAutoModRule.cs
  4. +10
    -0
      src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs

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

@@ -900,7 +900,7 @@ namespace Discord.WebSocket
add => _autoModRuleCreated.Add(value);
remove => _autoModRuleCreated.Remove(value);
}
internal readonly AsyncEvent<Func<SocketAutoModRule, Task>> _autoModRuleCreated = new AsyncEvent<Func<SocketAutoModRule, Task>>();
internal readonly AsyncEvent<Func<SocketAutoModRule, Task>> _autoModRuleCreated = new ();

public event Func<Cacheable<SocketAutoModRule, ulong>, SocketAutoModRule, Task> AutoModRuleUpdated
{
@@ -914,7 +914,7 @@ namespace Discord.WebSocket
add => _autoModRuleDeleted.Add(value);
remove => _autoModRuleDeleted.Remove(value);
}
internal readonly AsyncEvent<Func<SocketAutoModRule, Task>> _autoModRuleDeleted = new AsyncEvent<Func<SocketAutoModRule, Task>>();
internal readonly AsyncEvent<Func<SocketAutoModRule, Task>> _autoModRuleDeleted = new ();

public event Func<SocketGuild, AutoModRuleAction, AutoModActionExecutedData, Task> AutoModActionExecuted
{


+ 22
- 0
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -2889,19 +2889,41 @@ namespace Discord.WebSocket

case "AUTO_MODERATION_RULE_CREATE":
{
var data = (payload as JToken).ToObject<AutoModerationRule>(_serializer);

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

var rule = guild.AddOrUpdateAutoModRule(data);

await TimedInvokeAsync(_autoModRuleCreated, nameof(AutoModRuleCreated), rule);
}
break;

case "AUTO_MODERATION_RULE_UPDATE":
{
var data = (payload as JToken).ToObject<AutoModerationRule>(_serializer);

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

var cachedRule = guild.GetAutoModRule(data.Id);
var cacheableBefore = new Cacheable<SocketAutoModRule, ulong>(cachedRule.Clone(),
data.Id,
cachedRule is not null,
async () => await guild.GetAutoModRuleAsync(data.Id));

await TimedInvokeAsync(_autoModRuleUpdated, nameof(AutoModRuleUpdated), cacheableBefore, guild.AddOrUpdateAutoModRule(data));
}
break;

case "AUTO_MODERATION_RULE_DELETE":
{
var data = (payload as JToken).ToObject<AutoModerationRule>(_serializer);

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

var rule = guild.RemoveAutoModRule(data);

await TimedInvokeAsync(_autoModRuleDeleted, nameof(AutoModRuleDeleted), rule);
}
break;



+ 2
- 0
src/Discord.Net.WebSocket/Entities/Guilds/SocketAutoModRule.cs View File

@@ -108,6 +108,8 @@ namespace Discord.WebSocket
public Task DeleteAsync(RequestOptions options = null)
=> GuildHelper.DeleteRuleAsync(Discord, this, options);

internal SocketAutoModRule Clone() => MemberwiseClone() as SocketAutoModRule;

#region IAutoModRule
IReadOnlyCollection<ulong> IAutoModRule.ExemptRoles => ExemptRoles.Select(x => x.Id).ToImmutableArray();
IReadOnlyCollection<ulong> IAutoModRule.ExemptChannels => ExemptChannels.Select(x => x.Id).ToImmutableArray();


+ 10
- 0
src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs View File

@@ -1837,6 +1837,16 @@ namespace Discord.WebSocket
return _automodRules.TryRemove(id, out var rule) ? rule : null;
}

internal SocketAutoModRule RemoveAutoModRule(AutoModRuleModel model)
{
if (_automodRules.TryRemove(model.Id, out var rule))
{
rule.Update(model);
}

return rule is null ? SocketAutoModRule.Create(Discord, this, model) : rule;
}

/// <inheritdoc cref="IGuild.GetAutoModRuleAsync"/>
public async Task<SocketAutoModRule> GetAutoModRuleAsync(ulong ruleId, RequestOptions options = null)
{


Loading…
Cancel
Save