Browse Source

Add invite update data, clean up after feedback

pull/1055/head
FiniteReality 7 years ago
parent
commit
c123ec3d15
7 changed files with 201 additions and 229 deletions
  1. +39
    -60
      src/Discord.Net.Rest/Entities/AuditLogs/AuditLogHelper.cs
  2. +30
    -66
      src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/GuildUpdateAuditLogData.cs
  3. +20
    -0
      src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteInfo.cs
  4. +46
    -0
      src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteUpdateAuditLogData.cs
  5. +19
    -30
      src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/RoleCreateAuditLogData.cs
  6. +19
    -30
      src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/RoleDeleteAuditLogData.cs
  7. +28
    -43
      src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/RoleUpdateAuditLogData.cs

+ 39
- 60
src/Discord.Net.Rest/Entities/AuditLogs/AuditLogHelper.cs View File

@@ -1,79 +1,58 @@
using Model = Discord.API.AuditLog;
using System;
using System.Collections.Generic;

using Model = Discord.API.AuditLog;
using EntryModel = Discord.API.AuditLogEntry; using EntryModel = Discord.API.AuditLogEntry;


namespace Discord.Rest namespace Discord.Rest
{ {
internal static class AuditLogHelper internal static class AuditLogHelper
{ {
public static IAuditLogData CreateData(BaseDiscordClient discord, Model log, EntryModel entry)
private static readonly Dictionary<ActionType, Func<BaseDiscordClient, Model, EntryModel, IAuditLogData>> CreateMapping
= new Dictionary<ActionType, Func<BaseDiscordClient, Model, EntryModel, IAuditLogData>>()
{ {
switch (entry.Action)
{
case ActionType.GuildUpdated: //1
return GuildUpdateAuditLogData.Create(discord, log, entry);
[ActionType.GuildUpdated] = GuildUpdateAuditLogData.Create,

[ActionType.ChannelCreated] = ChannelCreateAuditLogData.Create,
[ActionType.ChannelUpdated] = ChannelUpdateAuditLogData.Create,
[ActionType.ChannelDeleted] = ChannelDeleteAuditLogData.Create,


case ActionType.ChannelCreated: //10
return ChannelCreateAuditLogData.Create(discord, log, entry);
case ActionType.ChannelUpdated:
return ChannelUpdateAuditLogData.Create(discord, log, entry);
case ActionType.ChannelDeleted:
return ChannelDeleteAuditLogData.Create(discord, log, entry);
case ActionType.OverwriteCreated:
return OverwriteCreateAuditLogData.Create(discord, log, entry);
case ActionType.OverwriteUpdated:
return OverwriteUpdateAuditLogData.Create(discord, log, entry);
case ActionType.OverwriteDeleted:
return OverwriteDeleteAuditLogData.Create(discord, log, entry);
[ActionType.OverwriteCreated] = OverwriteCreateAuditLogData.Create,
[ActionType.OverwriteUpdated] = OverwriteUpdateAuditLogData.Create,
[ActionType.OverwriteDeleted] = OverwriteDeleteAuditLogData.Create,


case ActionType.Kick: //20
return KickAuditLogData.Create(discord, log, entry);
case ActionType.Prune:
return PruneAuditLogData.Create(discord, log, entry);
case ActionType.Ban:
return BanAuditLogData.Create(discord, log, entry);
case ActionType.Unban:
return UnbanAuditLogData.Create(discord, log, entry);
case ActionType.MemberUpdated:
return MemberUpdateAuditLogData.Create(discord, log, entry);
case ActionType.MemberRoleUpdated:
return MemberRoleAuditLogData.Create(discord, log, entry);
[ActionType.Kick] = KickAuditLogData.Create,
[ActionType.Prune] = PruneAuditLogData.Create,
[ActionType.Ban] = BanAuditLogData.Create,
[ActionType.Unban] = UnbanAuditLogData.Create,
[ActionType.MemberUpdated] = MemberUpdateAuditLogData.Create,
[ActionType.MemberRoleUpdated] = MemberRoleAuditLogData.Create,


case ActionType.RoleCreated: //30
return RoleCreateAuditLogData.Create(discord, log, entry);
case ActionType.RoleUpdated:
return RoleUpdateAuditLogData.Create(discord, log, entry);
case ActionType.RoleDeleted:
return RoleDeleteAuditLogData.Create(discord, log, entry);
[ActionType.RoleCreated] = RoleCreateAuditLogData.Create,
[ActionType.RoleUpdated] = RoleUpdateAuditLogData.Create,
[ActionType.RoleDeleted] = RoleDeleteAuditLogData.Create,


case ActionType.InviteCreated: //40
return InviteCreateAuditLogData.Create(discord, log, entry);
case ActionType.InviteUpdated:
break;
case ActionType.InviteDeleted:
return InviteDeleteAuditLogData.Create(discord, log, entry);
[ActionType.InviteCreated] = InviteCreateAuditLogData.Create,
[ActionType.InviteUpdated] = InviteUpdateAuditLogData.Create,
[ActionType.InviteDeleted] = InviteDeleteAuditLogData.Create,


case ActionType.WebhookCreated: //50
return WebhookCreateAuditLogData.Create(discord, log, entry);
case ActionType.WebhookUpdated:
return WebhookUpdateAuditLogData.Create(discord, log, entry);
case ActionType.WebhookDeleted:
return WebhookDeleteAuditLogData.Create(discord, log, entry);
[ActionType.WebhookCreated] = WebhookCreateAuditLogData.Create,
[ActionType.WebhookUpdated] = WebhookUpdateAuditLogData.Create,
[ActionType.WebhookDeleted] = WebhookDeleteAuditLogData.Create,


case ActionType.EmojiCreated: //60
return EmoteCreateAuditLogData.Create(discord, log, entry);
case ActionType.EmojiUpdated:
return EmoteUpdateAuditLogData.Create(discord, log, entry);
case ActionType.EmojiDeleted:
return EmoteDeleteAuditLogData.Create(discord, log, entry);
[ActionType.EmojiCreated] = EmoteCreateAuditLogData.Create,
[ActionType.EmojiUpdated] = EmoteUpdateAuditLogData.Create,
[ActionType.EmojiDeleted] = EmoteDeleteAuditLogData.Create,


case ActionType.MessageDeleted: //72
return MessageDeleteAuditLogData.Create(discord, log, entry);
[ActionType.MessageDeleted] = MessageDeleteAuditLogData.Create,
};

public static IAuditLogData CreateData(BaseDiscordClient discord, Model log, EntryModel entry)
{
if (CreateMapping.TryGetValue(entry.Action, out var func))
return func(discord, log, entry);


default: //Unknown
return null;
}
return null; return null;
//throw new NotImplementedException($"{nameof(AuditLogHelper)} does not implement the {entry.Action} audit log event.");
} }
} }
} }

+ 30
- 66
src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/GuildUpdateAuditLogData.cs View File

@@ -17,73 +17,37 @@ namespace Discord.Rest
{ {
var changes = entry.Changes; var changes = entry.Changes;


int? oldAfkTimeout = null,
newAfkTimeout = null;
DefaultMessageNotifications? oldDefaultMessageNotifications = null,
newDefaultMessageNotifications = null;
ulong? oldAfkChannelId = null,
newAfkChannelId = null;
string oldName = null,
newName = null;
string oldRegionId = null,
newRegionId = null;
string oldIconHash = null,
newIconHash = null;
VerificationLevel? oldVerificationLevel = null,
newVerificationLevel = null;
ulong? oldOwnerId = null,
newOwnerId = null;
MfaLevel? oldMfaLevel = null,
newMfaLevel = null;
int? oldContentFilter = null,
newContentFilter = null;
var afkTimeoutModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
var defaultMessageNotificationsModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
var afkChannelModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
var regionIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
var iconHashModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
var verificationLevelModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
var ownerIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
var mfaLevelModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");
var contentFilterModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout");


foreach (var change in changes)
{
switch (change.ChangedProperty)
{
case "afk_timeout":
oldAfkTimeout = change.OldValue?.ToObject<int>();
newAfkTimeout = change.NewValue?.ToObject<int>();
break;
case "default_message_notifications":
oldDefaultMessageNotifications = change.OldValue?.ToObject<DefaultMessageNotifications>();
newDefaultMessageNotifications = change.OldValue?.ToObject<DefaultMessageNotifications>();
break;
case "afk_channel_id":
oldAfkChannelId = change.OldValue?.ToObject<ulong>();
newAfkChannelId = change.NewValue?.ToObject<ulong>();
break;
case "name":
oldName = change.OldValue?.ToObject<string>();
newName = change.NewValue?.ToObject<string>();
break;
case "region":
oldRegionId = change.OldValue?.ToObject<string>();
newRegionId = change.NewValue?.ToObject<string>();
break;
case "icon_hash":
oldIconHash = change.OldValue?.ToObject<string>();
newIconHash = change.NewValue?.ToObject<string>();
break;
case "verification_level":
oldVerificationLevel = change.OldValue?.ToObject<VerificationLevel>();
newVerificationLevel = change.NewValue?.ToObject<VerificationLevel>();
break;
case "owner":
oldOwnerId = change.OldValue?.ToObject<ulong>();
newOwnerId = change.NewValue?.ToObject<ulong>();
break;
case "mfa_level":
oldMfaLevel = change.OldValue?.ToObject<MfaLevel>();
newMfaLevel = change.OldValue?.ToObject<MfaLevel>();
break;
case "explicit_content_filter":
oldContentFilter = change.OldValue?.ToObject<int>();
newContentFilter = change.NewValue?.ToObject<int>();
break;
}
}
int? oldAfkTimeout = afkTimeoutModel?.OldValue?.ToObject<int>(),
newAfkTimeout = afkTimeoutModel?.NewValue?.ToObject<int>();
DefaultMessageNotifications? oldDefaultMessageNotifications = defaultMessageNotificationsModel?.OldValue?.ToObject<DefaultMessageNotifications>(),
newDefaultMessageNotifications = defaultMessageNotificationsModel?.NewValue?.ToObject<DefaultMessageNotifications>();
ulong? oldAfkChannelId = afkChannelModel?.OldValue?.ToObject<ulong>(),
newAfkChannelId = afkChannelModel?.NewValue?.ToObject<ulong>();
string oldName = nameModel?.OldValue?.ToObject<string>(),
newName = nameModel?.NewValue?.ToObject<string>();
string oldRegionId = regionIdModel?.OldValue?.ToObject<string>(),
newRegionId = regionIdModel?.NewValue?.ToObject<string>();
string oldIconHash = iconHashModel?.OldValue?.ToObject<string>(),
newIconHash = iconHashModel?.NewValue?.ToObject<string>();
VerificationLevel? oldVerificationLevel = verificationLevelModel?.OldValue?.ToObject<VerificationLevel>(),
newVerificationLevel = verificationLevelModel?.NewValue?.ToObject<VerificationLevel>();
ulong? oldOwnerId = ownerIdModel?.OldValue?.ToObject<ulong>(),
newOwnerId = ownerIdModel?.NewValue?.ToObject<ulong>();
MfaLevel? oldMfaLevel = mfaLevelModel?.OldValue?.ToObject<MfaLevel>(),
newMfaLevel = mfaLevelModel?.NewValue?.ToObject<MfaLevel>();
int? oldContentFilter = contentFilterModel?.OldValue?.ToObject<int>(),
newContentFilter = contentFilterModel?.NewValue?.ToObject<int>();


IUser oldOwner = null; IUser oldOwner = null;
if (oldOwnerId != null) if (oldOwnerId != null)


+ 20
- 0
src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteInfo.cs View File

@@ -0,0 +1,20 @@
namespace Discord.Rest
{
public struct InviteInfo
{
internal InviteInfo(int? maxAge, string code, bool? temporary, ulong? channelId, int? maxUses)
{
MaxAge = maxAge;
Code = code;
Temporary = temporary;
ChannelId = channelId;
MaxUses = maxUses;
}

public int? MaxAge { get; }
public string Code { get; }
public bool? Temporary { get; }
public ulong? ChannelId { get; }
public int? MaxUses { get; }
}
}

+ 46
- 0
src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/InviteUpdateAuditLogData.cs View File

@@ -0,0 +1,46 @@
using System.Linq;

using Model = Discord.API.AuditLog;
using EntryModel = Discord.API.AuditLogEntry;

namespace Discord.Rest
{
public class InviteUpdateAuditLogData : IAuditLogData
{
private InviteUpdateAuditLogData(InviteInfo before, InviteInfo after)
{
Before = before;
After = after;
}

internal static InviteUpdateAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry)
{
var changes = entry.Changes;

var maxAgeModel = changes.FirstOrDefault(x => x.ChangedProperty == "max_age");
var codeModel = changes.FirstOrDefault(x => x.ChangedProperty == "code");
var temporaryModel = changes.FirstOrDefault(x => x.ChangedProperty == "temporary");
var channelIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "channel_id");
var maxUsesModel = changes.FirstOrDefault(x => x.ChangedProperty == "max_uses");

int? oldMaxAge = maxAgeModel?.OldValue?.ToObject<int>(),
newMaxAge = maxAgeModel?.NewValue?.ToObject<int>();
string oldCode = codeModel?.OldValue?.ToObject<string>(),
newCode = codeModel?.NewValue?.ToObject<string>();
bool? oldTemporary = temporaryModel?.OldValue?.ToObject<bool>(),
newTemporary = temporaryModel?.NewValue?.ToObject<bool>();
ulong? oldChannelId = channelIdModel?.OldValue?.ToObject<ulong>(),
newChannelId = channelIdModel?.NewValue?.ToObject<ulong>();
int? oldMaxUses = maxUsesModel?.OldValue?.ToObject<int>(),
newMaxUses = maxUsesModel?.NewValue?.ToObject<int>();

var before = new InviteInfo(oldMaxAge, oldCode, oldTemporary, oldChannelId, oldMaxUses);
var after = new InviteInfo(newMaxAge, newCode, newTemporary, newChannelId, newMaxUses);

return new InviteUpdateAuditLogData(before, after);
}

public InviteInfo Before { get; }
public InviteInfo After { get; }
}
}

+ 19
- 30
src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/RoleCreateAuditLogData.cs View File

@@ -1,4 +1,6 @@
using Model = Discord.API.AuditLog;
using System.Linq;

using Model = Discord.API.AuditLog;
using EntryModel = Discord.API.AuditLogEntry; using EntryModel = Discord.API.AuditLogEntry;


namespace Discord.Rest namespace Discord.Rest
@@ -15,38 +17,25 @@ namespace Discord.Rest
{ {
var changes = entry.Changes; var changes = entry.Changes;


var colorModel = changes.FirstOrDefault(x => x.ChangedProperty == "color");
var mentionableModel = changes.FirstOrDefault(x => x.ChangedProperty == "mentionable");
var hoistModel = changes.FirstOrDefault(x => x.ChangedProperty == "hoist");
var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name");
var permissionsModel = changes.FirstOrDefault(x => x.ChangedProperty == "permissions");

uint? colorRaw = colorModel?.NewValue?.ToObject<uint>();
bool? mentionable = mentionableModel?.NewValue?.ToObject<bool>();
bool? hoist = hoistModel?.NewValue?.ToObject<bool>();
string name = nameModel?.NewValue?.ToObject<string>();
ulong? permissionsRaw = permissionsModel?.NewValue?.ToObject<ulong>();

Color? color = null; Color? color = null;
bool? mentionable = null,
hoist = null;
string name = null;
GuildPermissions? permissions = null; GuildPermissions? permissions = null;


foreach (var model in changes)
{
switch (model.ChangedProperty)
{
case "color":
if (model.NewValue != null)
color = new Color(model.NewValue.ToObject<uint>());
break;
case "mentionable":
if (model.NewValue != null)
mentionable = model.NewValue.ToObject<bool>();
break;
case "hoist":
if (model.NewValue != null)
hoist = model.NewValue.ToObject<bool>();
break;
case "name":
if (model.NewValue != null)
name = model.NewValue.ToObject<string>();
break;
case "permissions":
if (model.NewValue != null)
permissions = new GuildPermissions(model.NewValue.ToObject<ulong>());
break;
}
}
if (colorRaw.HasValue)
color = new Color(colorRaw.Value);
if (permissionsRaw.HasValue)
permissions = new GuildPermissions(permissionsRaw.Value);


return new RoleCreateAuditLogData(entry.TargetId.Value, return new RoleCreateAuditLogData(entry.TargetId.Value,
new RoleInfo(color, mentionable, hoist, name, permissions)); new RoleInfo(color, mentionable, hoist, name, permissions));


+ 19
- 30
src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/RoleDeleteAuditLogData.cs View File

@@ -1,4 +1,6 @@
using Model = Discord.API.AuditLog;
using System.Linq;

using Model = Discord.API.AuditLog;
using EntryModel = Discord.API.AuditLogEntry; using EntryModel = Discord.API.AuditLogEntry;


namespace Discord.Rest namespace Discord.Rest
@@ -15,38 +17,25 @@ namespace Discord.Rest
{ {
var changes = entry.Changes; var changes = entry.Changes;


var colorModel = changes.FirstOrDefault(x => x.ChangedProperty == "color");
var mentionableModel = changes.FirstOrDefault(x => x.ChangedProperty == "mentionable");
var hoistModel = changes.FirstOrDefault(x => x.ChangedProperty == "hoist");
var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name");
var permissionsModel = changes.FirstOrDefault(x => x.ChangedProperty == "permissions");

uint? colorRaw = colorModel?.OldValue?.ToObject<uint>();
bool? mentionable = mentionableModel?.OldValue?.ToObject<bool>();
bool? hoist = hoistModel?.OldValue?.ToObject<bool>();
string name = nameModel?.OldValue?.ToObject<string>();
ulong? permissionsRaw = permissionsModel?.OldValue?.ToObject<ulong>();

Color? color = null; Color? color = null;
bool? mentionable = null,
hoist = null;
string name = null;
GuildPermissions? permissions = null; GuildPermissions? permissions = null;


foreach (var model in changes)
{
switch (model.ChangedProperty)
{
case "color":
if (model.OldValue != null)
color = new Color(model.OldValue.ToObject<uint>());
break;
case "mentionable":
if (model.OldValue != null)
mentionable = model.OldValue.ToObject<bool>();
break;
case "hoist":
if (model.OldValue != null)
hoist = model.OldValue.ToObject<bool>();
break;
case "name":
if (model.OldValue != null)
name = model.OldValue.ToObject<string>();
break;
case "permissions":
if (model.OldValue != null)
permissions = new GuildPermissions(model.OldValue.ToObject<ulong>());
break;
}
}
if (colorRaw.HasValue)
color = new Color(colorRaw.Value);
if (permissionsRaw.HasValue)
permissions = new GuildPermissions(permissionsRaw.Value);


return new RoleDeleteAuditLogData(entry.TargetId.Value, return new RoleDeleteAuditLogData(entry.TargetId.Value,
new RoleInfo(color, mentionable, hoist, name, permissions)); new RoleInfo(color, mentionable, hoist, name, permissions));


+ 28
- 43
src/Discord.Net.Rest/Entities/AuditLogs/DataTypes/RoleUpdateAuditLogData.cs View File

@@ -1,4 +1,6 @@
using Model = Discord.API.AuditLog;
using System.Linq;

using Model = Discord.API.AuditLog;
using EntryModel = Discord.API.AuditLogEntry; using EntryModel = Discord.API.AuditLogEntry;


namespace Discord.Rest namespace Discord.Rest
@@ -16,53 +18,36 @@ namespace Discord.Rest
{ {
var changes = entry.Changes; var changes = entry.Changes;


var colorModel = changes.FirstOrDefault(x => x.ChangedProperty == "color");
var mentionableModel = changes.FirstOrDefault(x => x.ChangedProperty == "mentionable");
var hoistModel = changes.FirstOrDefault(x => x.ChangedProperty == "hoist");
var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name");
var permissionsModel = changes.FirstOrDefault(x => x.ChangedProperty == "permissions");

uint? oldColorRaw = colorModel?.OldValue?.ToObject<uint>(),
newColorRaw = colorModel?.NewValue?.ToObject<uint>();
bool? oldMentionable = mentionableModel?.OldValue?.ToObject<bool>(),
newMentionable = mentionableModel?.NewValue?.ToObject<bool>();
bool? oldHoist = hoistModel?.OldValue?.ToObject<bool>(),
newHoist = hoistModel?.NewValue?.ToObject<bool>();
string oldName = nameModel?.OldValue?.ToObject<string>(),
newName = nameModel?.NewValue?.ToObject<string>();
ulong? oldPermissionsRaw = permissionsModel?.OldValue?.ToObject<ulong>(),
newPermissionsRaw = permissionsModel?.OldValue?.ToObject<ulong>();

Color? oldColor = null, Color? oldColor = null,
newColor = null; newColor = null;
bool? oldMentionable = null,
newMentionable = null;
bool? oldHoist = null,
newHoist = null;
string oldName = null,
newName = null;
GuildPermissions? oldPermissions = null, GuildPermissions? oldPermissions = null,
newPermissions = null; newPermissions = null;


foreach (var model in changes)
{
switch (model.ChangedProperty)
{
case "color":
if (model.NewValue != null)
newColor = new Color(model.NewValue.ToObject<uint>());
if (model.OldValue != null)
oldColor = new Color(model.OldValue.ToObject<uint>());
break;
case "mentionable":
if (model.NewValue != null)
newMentionable = model.NewValue.ToObject<bool>();
if (model.OldValue != null)
oldMentionable = model.OldValue.ToObject<bool>();
break;
case "hoist":
if (model.NewValue != null)
newHoist = model.NewValue.ToObject<bool>();
if (model.OldValue != null)
oldHoist = model.OldValue.ToObject<bool>();
break;
case "name":
if (model.NewValue != null)
newName = model.NewValue.ToObject<string>();
if (model.OldValue != null)
oldName = model.OldValue.ToObject<string>();
break;
case "permissions":
if (model.NewValue != null)
newPermissions = new GuildPermissions(model.NewValue.ToObject<ulong>());
if (model.OldValue != null)
oldPermissions = new GuildPermissions(model.OldValue.ToObject<ulong>());
break;
}
}
if (oldColorRaw.HasValue)
oldColor = new Color(oldColorRaw.Value);
if (newColorRaw.HasValue)
newColor = new Color(newColorRaw.Value);
if (oldPermissionsRaw.HasValue)
oldPermissions = new GuildPermissions(oldPermissionsRaw.Value);
if (newPermissionsRaw.HasValue)
newPermissions = new GuildPermissions(newPermissionsRaw.Value);


var oldProps = new RoleInfo(oldColor, oldMentionable, oldHoist, oldName, oldPermissions); var oldProps = new RoleInfo(oldColor, oldMentionable, oldHoist, oldName, oldPermissions);
var newProps = new RoleInfo(newColor, newMentionable, newHoist, newName, newPermissions); var newProps = new RoleInfo(newColor, newMentionable, newHoist, newName, newPermissions);


Loading…
Cancel
Save