| @@ -18,12 +18,15 @@ namespace Discord.Rest | |||||
| internal static BanAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | internal static BanAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | ||||
| { | { | ||||
| var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | ||||
| return new BanAuditLogData(RestUser.Create(discord, userInfo)); | |||||
| return new BanAuditLogData((userInfo != null) ? RestUser.Create(discord, userInfo) : null); | |||||
| } | } | ||||
| /// <summary> | /// <summary> | ||||
| /// Gets the user that was banned. | /// Gets the user that was banned. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | |||||
| /// Will be <see langword="null"/> if the user is a 'Deleted User#....' because Discord does send user data for deleted users. | |||||
| /// </remarks> | |||||
| /// <returns> | /// <returns> | ||||
| /// A user object representing the banned user. | /// A user object representing the banned user. | ||||
| /// </returns> | /// </returns> | ||||
| @@ -18,12 +18,15 @@ namespace Discord.Rest | |||||
| internal static BotAddAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | internal static BotAddAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | ||||
| { | { | ||||
| var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | ||||
| return new BotAddAuditLogData(RestUser.Create(discord, userInfo)); | |||||
| return new BotAddAuditLogData((userInfo != null) ? RestUser.Create(discord, userInfo) : null); | |||||
| } | } | ||||
| /// <summary> | /// <summary> | ||||
| /// Gets the bot that was added. | /// Gets the bot that was added. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | |||||
| /// Will be <see langword="null"/> if the bot is a 'Deleted User#....' because Discord does send user data for deleted users. | |||||
| /// </remarks> | |||||
| /// <returns> | /// <returns> | ||||
| /// A user object representing the bot. | /// A user object representing the bot. | ||||
| /// </returns> | /// </returns> | ||||
| @@ -45,7 +45,7 @@ namespace Discord.Rest | |||||
| { | { | ||||
| var inviterId = inviterIdModel.NewValue.ToObject<ulong>(discord.ApiClient.Serializer); | var inviterId = inviterIdModel.NewValue.ToObject<ulong>(discord.ApiClient.Serializer); | ||||
| var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); | var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); | ||||
| inviter = RestUser.Create(discord, inviterInfo); | |||||
| inviter = (inviterInfo != null) ? RestUser.Create(discord, inviterInfo) : null; | |||||
| } | } | ||||
| return new InviteCreateAuditLogData(maxAge, code, temporary, inviter, channelId, uses, maxUses); | return new InviteCreateAuditLogData(maxAge, code, temporary, inviter, channelId, uses, maxUses); | ||||
| @@ -76,6 +76,9 @@ namespace Discord.Rest | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets the user that created this invite if available. | /// Gets the user that created this invite if available. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | |||||
| /// Will be <see langword="null"/> if the user is a 'Deleted User#....' because Discord does send user data for deleted users. | |||||
| /// </remarks> | |||||
| /// <returns> | /// <returns> | ||||
| /// A user that created this invite or <see langword="null"/>. | /// A user that created this invite or <see langword="null"/>. | ||||
| /// </returns> | /// </returns> | ||||
| @@ -45,7 +45,7 @@ namespace Discord.Rest | |||||
| { | { | ||||
| var inviterId = inviterIdModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer); | var inviterId = inviterIdModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer); | ||||
| var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); | var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); | ||||
| inviter = RestUser.Create(discord, inviterInfo); | |||||
| inviter = (inviterInfo != null) ? RestUser.Create(discord, inviterInfo) : null; | |||||
| } | } | ||||
| return new InviteDeleteAuditLogData(maxAge, code, temporary, inviter, channelId, uses, maxUses); | return new InviteDeleteAuditLogData(maxAge, code, temporary, inviter, channelId, uses, maxUses); | ||||
| @@ -76,6 +76,9 @@ namespace Discord.Rest | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets the user that created this invite if available. | /// Gets the user that created this invite if available. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | |||||
| /// Will be <see langword="null"/> if the user is a 'Deleted User#....' because Discord does send user data for deleted users. | |||||
| /// </remarks> | |||||
| /// <returns> | /// <returns> | ||||
| /// A user that created this invite or <see langword="null"/>. | /// A user that created this invite or <see langword="null"/>. | ||||
| /// </returns> | /// </returns> | ||||
| @@ -1,4 +1,4 @@ | |||||
| using System.Linq; | |||||
| using System.Linq; | |||||
| using Model = Discord.API.AuditLog; | using Model = Discord.API.AuditLog; | ||||
| using EntryModel = Discord.API.AuditLogEntry; | using EntryModel = Discord.API.AuditLogEntry; | ||||
| @@ -18,12 +18,15 @@ namespace Discord.Rest | |||||
| internal static KickAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | internal static KickAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | ||||
| { | { | ||||
| var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | ||||
| return new KickAuditLogData(RestUser.Create(discord, userInfo)); | |||||
| return new KickAuditLogData((userInfo != null) ? RestUser.Create(discord, userInfo) : null); | |||||
| } | } | ||||
| /// <summary> | /// <summary> | ||||
| /// Gets the user that was kicked. | /// Gets the user that was kicked. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | |||||
| /// Will be <see langword="null"/> if the user is a 'Deleted User#....' because Discord does send user data for deleted users. | |||||
| /// </remarks> | |||||
| /// <returns> | /// <returns> | ||||
| /// A user object representing the kicked user. | /// A user object representing the kicked user. | ||||
| /// </returns> | /// </returns> | ||||
| @@ -27,7 +27,7 @@ namespace Discord.Rest | |||||
| .ToList(); | .ToList(); | ||||
| var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | ||||
| var user = RestUser.Create(discord, userInfo); | |||||
| RestUser user = (userInfo != null) ? RestUser.Create(discord, userInfo) : null; | |||||
| return new MemberRoleAuditLogData(roleInfos.ToReadOnlyCollection(), user); | return new MemberRoleAuditLogData(roleInfos.ToReadOnlyCollection(), user); | ||||
| } | } | ||||
| @@ -33,7 +33,7 @@ namespace Discord.Rest | |||||
| newMute = muteModel?.NewValue?.ToObject<bool>(discord.ApiClient.Serializer); | newMute = muteModel?.NewValue?.ToObject<bool>(discord.ApiClient.Serializer); | ||||
| var targetInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | var targetInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | ||||
| var user = RestUser.Create(discord, targetInfo); | |||||
| RestUser user = (targetInfo != null) ? RestUser.Create(discord, targetInfo) : null; | |||||
| var before = new MemberInfo(oldNick, oldDeaf, oldMute); | var before = new MemberInfo(oldNick, oldDeaf, oldMute); | ||||
| var after = new MemberInfo(newNick, newDeaf, newMute); | var after = new MemberInfo(newNick, newDeaf, newMute); | ||||
| @@ -44,6 +44,9 @@ namespace Discord.Rest | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets the user that the changes were performed on. | /// Gets the user that the changes were performed on. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | |||||
| /// Will be <see langword="null"/> if the user is a 'Deleted User#....' because Discord does send user data for deleted users. | |||||
| /// </remarks> | |||||
| /// <returns> | /// <returns> | ||||
| /// A user object representing the user who the changes were performed on. | /// A user object representing the user who the changes were performed on. | ||||
| /// </returns> | /// </returns> | ||||
| @@ -2,6 +2,7 @@ using System.Linq; | |||||
| using Model = Discord.API.AuditLog; | using Model = Discord.API.AuditLog; | ||||
| using EntryModel = Discord.API.AuditLogEntry; | using EntryModel = Discord.API.AuditLogEntry; | ||||
| using System; | |||||
| namespace Discord.Rest | namespace Discord.Rest | ||||
| { | { | ||||
| @@ -20,7 +21,7 @@ namespace Discord.Rest | |||||
| internal static MessageDeleteAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | internal static MessageDeleteAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | ||||
| { | { | ||||
| var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | ||||
| return new MessageDeleteAuditLogData(entry.Options.ChannelId.Value, entry.Options.Count.Value, RestUser.Create(discord, userInfo)); | |||||
| return new MessageDeleteAuditLogData(entry.Options.ChannelId.Value, entry.Options.Count.Value, userInfo != null ? RestUser.Create(discord, userInfo) : null); | |||||
| } | } | ||||
| /// <summary> | /// <summary> | ||||
| @@ -41,6 +42,9 @@ namespace Discord.Rest | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets the user of the messages that were deleted. | /// Gets the user of the messages that were deleted. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | |||||
| /// Will be <see langword="null"/> if the user is a 'Deleted User#....' because Discord does send user data for deleted users. | |||||
| /// </remarks> | |||||
| /// <returns> | /// <returns> | ||||
| /// A user object representing the user that created the deleted messages. | /// A user object representing the user that created the deleted messages. | ||||
| /// </returns> | /// </returns> | ||||
| @@ -23,7 +23,7 @@ namespace Discord.Rest | |||||
| if (entry.TargetId.HasValue) | if (entry.TargetId.HasValue) | ||||
| { | { | ||||
| var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | ||||
| user = RestUser.Create(discord, userInfo); | |||||
| user = (userInfo != null) ? RestUser.Create(discord, userInfo) : null; | |||||
| } | } | ||||
| return new MessagePinAuditLogData(entry.Options.MessageId.Value, entry.Options.ChannelId.Value, user); | return new MessagePinAuditLogData(entry.Options.MessageId.Value, entry.Options.ChannelId.Value, user); | ||||
| @@ -46,6 +46,9 @@ namespace Discord.Rest | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets the user of the message that was pinned if available. | /// Gets the user of the message that was pinned if available. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | |||||
| /// Will be <see langword="null"/> if the user is a 'Deleted User#....' because Discord does send user data for deleted users. | |||||
| /// </remarks> | |||||
| /// <returns> | /// <returns> | ||||
| /// A user object representing the user that created the pinned message or <see langword="null"/>. | /// A user object representing the user that created the pinned message or <see langword="null"/>. | ||||
| /// </returns> | /// </returns> | ||||
| @@ -23,7 +23,7 @@ namespace Discord.Rest | |||||
| if (entry.TargetId.HasValue) | if (entry.TargetId.HasValue) | ||||
| { | { | ||||
| var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | ||||
| user = RestUser.Create(discord, userInfo); | |||||
| user = (userInfo != null) ? RestUser.Create(discord, userInfo) : null; | |||||
| } | } | ||||
| return new MessageUnpinAuditLogData(entry.Options.MessageId.Value, entry.Options.ChannelId.Value, user); | return new MessageUnpinAuditLogData(entry.Options.MessageId.Value, entry.Options.ChannelId.Value, user); | ||||
| @@ -46,6 +46,9 @@ namespace Discord.Rest | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets the user of the message that was unpinned if available. | /// Gets the user of the message that was unpinned if available. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | |||||
| /// Will be <see langword="null"/> if the user is a 'Deleted User#....' because Discord does send user data for deleted users. | |||||
| /// </remarks> | |||||
| /// <returns> | /// <returns> | ||||
| /// A user object representing the user that created the unpinned message or <see langword="null"/>. | /// A user object representing the user that created the unpinned message or <see langword="null"/>. | ||||
| /// </returns> | /// </returns> | ||||
| @@ -1,4 +1,4 @@ | |||||
| using System.Linq; | |||||
| using System.Linq; | |||||
| using Model = Discord.API.AuditLog; | using Model = Discord.API.AuditLog; | ||||
| using EntryModel = Discord.API.AuditLogEntry; | using EntryModel = Discord.API.AuditLogEntry; | ||||
| @@ -18,7 +18,7 @@ namespace Discord.Rest | |||||
| internal static UnbanAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | internal static UnbanAuditLogData Create(BaseDiscordClient discord, Model log, EntryModel entry) | ||||
| { | { | ||||
| var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | var userInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | ||||
| return new UnbanAuditLogData(RestUser.Create(discord, userInfo)); | |||||
| return new UnbanAuditLogData((userInfo != null) ? RestUser.Create(discord, userInfo) : null); | |||||
| } | } | ||||
| /// <summary> | /// <summary> | ||||