@@ -16,13 +16,9 @@ Our stable builds available from NuGet through the Discord.Net metapackage: | |||
The individual components may also be installed from NuGet: | |||
- [Discord.Net.Commands](https://www.nuget.org/packages/Discord.Net.Commands/) | |||
- [Discord.Net.Rest](https://www.nuget.org/packages/Discord.Net.Rest/) | |||
- [Discord.Net.Rpc](https://www.nuget.org/packages/Discord.Net.Rpc/) | |||
- [Discord.Net.WebSocket](https://www.nuget.org/packages/Discord.Net.WebSocket/) | |||
- [Discord.Net.Webhook](https://www.nuget.org/packages/Discord.Net.Webhook/) | |||
The following provider is available for platforms not supporting .NET Standard 1.3: | |||
- [Discord.Net.Providers.WS4Net](https://www.nuget.org/packages/Discord.Net.Providers.WS4Net/) | |||
### Unstable (MyGet) | |||
Nightly builds are available through our MyGet feed (`https://www.myget.org/F/discord-net/api/v3/index.json`). | |||
@@ -41,5 +37,4 @@ The .NET Core workload must be selected during Visual Studio installation. | |||
## Known Issues | |||
### WebSockets (Win7 and earlier) | |||
.NET Core 1.1 does not support WebSockets on Win7 and earlier. It's recommended to use the Discord.Net.Providers.WS4Net package until this is resolved. | |||
Track the issue [here](https://github.com/dotnet/corefx/issues/9503). | |||
.NET Core 1.1 does not support WebSockets on Win7 and earlier. This issue has been fixed since the release of .NET Core 2.1. It is recommended to target .NET Core 2.1 or above for your project if you wish to run your bot on legacy platforms; alternatively, you may choose to install the [Discord.Net.Providers.WS4Net](https://www.nuget.org/packages/Discord.Net.Providers.WS4Net/) package. |
@@ -14,7 +14,7 @@ namespace Discord.Commands | |||
/// Specifies the <see cref="RunMode" /> of the command. This affects how the command is executed. | |||
/// </summary> | |||
public RunMode RunMode { get; set; } = RunMode.Default; | |||
public bool? IgnoreExtraArgs { get; set; } | |||
public bool? IgnoreExtraArgs { get; } | |||
/// <inheritdoc /> | |||
public CommandAttribute() | |||
@@ -30,5 +30,10 @@ namespace Discord.Commands | |||
{ | |||
Text = text; | |||
} | |||
public CommandAttribute(string text, bool ignoreExtraArgs) | |||
{ | |||
Text = text; | |||
IgnoreExtraArgs = ignoreExtraArgs; | |||
} | |||
} | |||
} |
@@ -20,7 +20,7 @@ namespace Discord.API | |||
[JsonProperty("role_name")] | |||
public string OverwriteRoleName { get; set; } | |||
[JsonProperty("type")] | |||
public string OverwriteType { get; set; } | |||
public PermissionTarget OverwriteType { get; set; } | |||
[JsonProperty("id")] | |||
public ulong? OverwriteTargetId { get; set; } | |||
} | |||
@@ -43,10 +43,12 @@ namespace Discord.API | |||
public TokenType AuthTokenType { get; private set; } | |||
internal string AuthToken { get; private set; } | |||
internal IRestClient RestClient { get; private set; } | |||
internal ulong? CurrentUserId { get; set;} | |||
internal ulong? CurrentUserId { get; set; } | |||
internal JsonSerializer Serializer => _serializer; | |||
/// <exception cref="ArgumentException">Unknown OAuth token type.</exception> | |||
public DiscordRestApiClient(RestClientProvider restClientProvider, string userAgent, RetryMode defaultRetryMode = RetryMode.AlwaysRetry, | |||
public DiscordRestApiClient(RestClientProvider restClientProvider, string userAgent, RetryMode defaultRetryMode = RetryMode.AlwaysRetry, | |||
JsonSerializer serializer = null) | |||
{ | |||
_restClientProvider = restClientProvider; | |||
@@ -418,7 +420,7 @@ namespace Discord.API | |||
var ids = new BucketIds(guildId: guildId); | |||
await SendAsync("DELETE", () => $"guilds/{guildId}/members/{userId}/roles/{roleId}", ids, options: options).ConfigureAwait(false); | |||
} | |||
//Channel Messages | |||
public async Task<Message> GetChannelMessageAsync(ulong channelId, ulong messageId, RequestOptions options = null) | |||
{ | |||
@@ -497,7 +499,7 @@ namespace Discord.API | |||
if (args.Content?.Length > DiscordConfig.MaxMessageSize) | |||
throw new ArgumentOutOfRangeException($"Message content is too long, length must be less or equal to {DiscordConfig.MaxMessageSize}.", nameof(args.Content)); | |||
options = RequestOptions.CreateOrClone(options); | |||
return await SendJsonAsync<Message>("POST", () => $"webhooks/{webhookId}/{AuthToken}?wait=true", args, new BucketIds(), clientBucket: ClientBucketType.SendEdit, options: options).ConfigureAwait(false); | |||
} | |||
/// <exception cref="ArgumentOutOfRangeException">Message content is too long, length must be less or equal to <see cref="DiscordConfig.MaxMessageSize"/>.</exception> | |||
@@ -749,7 +751,7 @@ namespace Discord.API | |||
Preconditions.NotNullOrWhitespace(args.Name, nameof(args.Name)); | |||
Preconditions.NotNullOrWhitespace(args.RegionId, nameof(args.RegionId)); | |||
options = RequestOptions.CreateOrClone(options); | |||
return await SendJsonAsync<Guild>("POST", () => "guilds", args, new BucketIds(), options: options).ConfigureAwait(false); | |||
} | |||
public async Task<Guild> DeleteGuildAsync(ulong guildId, RequestOptions options = null) | |||
@@ -976,7 +978,7 @@ namespace Discord.API | |||
{ | |||
Preconditions.NotNullOrEmpty(inviteId, nameof(inviteId)); | |||
options = RequestOptions.CreateOrClone(options); | |||
return await SendAsync<Invite>("DELETE", () => $"invites/{inviteId}", new BucketIds(), options: options).ConfigureAwait(false); | |||
} | |||
@@ -1175,7 +1177,7 @@ namespace Discord.API | |||
int limit = args.Limit.GetValueOrDefault(int.MaxValue); | |||
ulong afterGuildId = args.AfterGuildId.GetValueOrDefault(0); | |||
return await SendAsync<IReadOnlyCollection<UserGuild>>("GET", () => $"users/@me/guilds?limit={limit}&after={afterGuildId}", new BucketIds(), options: options).ConfigureAwait(false); | |||
} | |||
public async Task<Application> GetMyApplicationAsync(RequestOptions options = null) | |||
@@ -1275,7 +1277,7 @@ namespace Discord.API | |||
Preconditions.NotNull(args, nameof(args)); | |||
Preconditions.NotNullOrEmpty(args.Name, nameof(args.Name)); | |||
options = RequestOptions.CreateOrClone(options); | |||
if (AuthTokenType == TokenType.Webhook) | |||
return await SendJsonAsync<Webhook>("PATCH", () => $"webhooks/{webhookId}/{AuthToken}", args, new BucketIds(), options: options).ConfigureAwait(false); | |||
else | |||
@@ -1406,7 +1408,7 @@ namespace Discord.API | |||
int argId = int.Parse(format.Substring(leftIndex + 1, rightIndex - leftIndex - 1)); | |||
string fieldName = GetFieldName(methodArgs[argId + 1]); | |||
int? mappedId; | |||
mappedId = BucketIds.GetIndex(fieldName); | |||
if(!mappedId.HasValue && rightIndex != endIndex && format.Length > rightIndex + 1 && format[rightIndex + 1] == '/') //Ignore the next slash | |||
rightIndex++; | |||
@@ -28,18 +28,16 @@ namespace Discord.Rest | |||
var typeModel = changes.FirstOrDefault(x => x.ChangedProperty == "type"); | |||
var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
var type = typeModel.NewValue.ToObject<ChannelType>(); | |||
var name = nameModel.NewValue.ToObject<string>(); | |||
var type = typeModel.NewValue.ToObject<ChannelType>(discord.ApiClient.Serializer); | |||
var name = nameModel.NewValue.ToObject<string>(discord.ApiClient.Serializer); | |||
foreach (var overwrite in overwritesModel.NewValue) | |||
{ | |||
var deny = overwrite.Value<ulong>("deny"); | |||
var _type = overwrite.Value<string>("type"); | |||
var permType = overwrite.Value<PermissionTarget>("type"); | |||
var id = overwrite.Value<ulong>("id"); | |||
var allow = overwrite.Value<ulong>("allow"); | |||
PermissionTarget permType = _type == "member" ? PermissionTarget.User : PermissionTarget.Role; | |||
overwrites.Add(new Overwrite(id, permType, new OverwritePermissions(allow, deny))); | |||
} | |||
@@ -27,11 +27,11 @@ namespace Discord.Rest | |||
var typeModel = changes.FirstOrDefault(x => x.ChangedProperty == "type"); | |||
var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
var overwrites = overwritesModel.OldValue.ToObject<API.Overwrite[]>() | |||
var overwrites = overwritesModel.OldValue.ToObject<API.Overwrite[]>(discord.ApiClient.Serializer) | |||
.Select(x => new Overwrite(x.TargetId, x.TargetType, new OverwritePermissions(x.Allow, x.Deny))) | |||
.ToList(); | |||
var type = typeModel.OldValue.ToObject<ChannelType>(); | |||
var name = nameModel.OldValue.ToObject<string>(); | |||
var type = typeModel.OldValue.ToObject<ChannelType>(discord.ApiClient.Serializer); | |||
var name = nameModel.OldValue.ToObject<string>(discord.ApiClient.Serializer); | |||
var id = entry.TargetId.Value; | |||
return new ChannelDeleteAuditLogData(id, name, type, overwrites.ToReadOnlyCollection()); | |||
@@ -26,14 +26,14 @@ namespace Discord.Rest | |||
var bitrateModel = changes.FirstOrDefault(x => x.ChangedProperty == "bitrate"); | |||
var userLimitModel = changes.FirstOrDefault(x => x.ChangedProperty == "user_limit"); | |||
string oldName = nameModel?.OldValue?.ToObject<string>(), | |||
newName = nameModel?.NewValue?.ToObject<string>(); | |||
string oldTopic = topicModel?.OldValue?.ToObject<string>(), | |||
newTopic = topicModel?.NewValue?.ToObject<string>(); | |||
int? oldBitrate = bitrateModel?.OldValue?.ToObject<int>(), | |||
newBitrate = bitrateModel?.NewValue?.ToObject<int>(); | |||
int? oldLimit = userLimitModel?.OldValue?.ToObject<int>(), | |||
newLimit = userLimitModel?.NewValue?.ToObject<int>(); | |||
string oldName = nameModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer), | |||
newName = nameModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
string oldTopic = topicModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer), | |||
newTopic = topicModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
int? oldBitrate = bitrateModel?.OldValue?.ToObject<int>(discord.ApiClient.Serializer), | |||
newBitrate = bitrateModel?.NewValue?.ToObject<int>(discord.ApiClient.Serializer); | |||
int? oldLimit = userLimitModel?.OldValue?.ToObject<int>(discord.ApiClient.Serializer), | |||
newLimit = userLimitModel?.NewValue?.ToObject<int>(discord.ApiClient.Serializer); | |||
var before = new ChannelInfo(oldName, oldTopic, oldBitrate, oldLimit); | |||
var after = new ChannelInfo(newName, newTopic, newBitrate, newLimit); | |||
@@ -20,7 +20,7 @@ namespace Discord.Rest | |||
{ | |||
var change = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
var emoteName = change.NewValue?.ToObject<string>(); | |||
var emoteName = change.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
return new EmoteCreateAuditLogData(entry.TargetId.Value, emoteName); | |||
} | |||
@@ -20,7 +20,7 @@ namespace Discord.Rest | |||
{ | |||
var change = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
var emoteName = change.OldValue?.ToObject<string>(); | |||
var emoteName = change.OldValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
return new EmoteDeleteAuditLogData(entry.TargetId.Value, emoteName); | |||
} | |||
@@ -21,8 +21,8 @@ namespace Discord.Rest | |||
{ | |||
var change = entry.Changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
var newName = change.NewValue?.ToObject<string>(); | |||
var oldName = change.OldValue?.ToObject<string>(); | |||
var newName = change.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
var oldName = change.OldValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
return new EmoteUpdateAuditLogData(entry.TargetId.Value, oldName, newName); | |||
} | |||
@@ -31,26 +31,26 @@ namespace Discord.Rest | |||
var mfaLevelModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
var contentFilterModel = changes.FirstOrDefault(x => x.ChangedProperty == "afk_timeout"); | |||
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>(); | |||
int? oldAfkTimeout = afkTimeoutModel?.OldValue?.ToObject<int>(discord.ApiClient.Serializer), | |||
newAfkTimeout = afkTimeoutModel?.NewValue?.ToObject<int>(discord.ApiClient.Serializer); | |||
DefaultMessageNotifications? oldDefaultMessageNotifications = defaultMessageNotificationsModel?.OldValue?.ToObject<DefaultMessageNotifications>(discord.ApiClient.Serializer), | |||
newDefaultMessageNotifications = defaultMessageNotificationsModel?.NewValue?.ToObject<DefaultMessageNotifications>(discord.ApiClient.Serializer); | |||
ulong? oldAfkChannelId = afkChannelModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer), | |||
newAfkChannelId = afkChannelModel?.NewValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
string oldName = nameModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer), | |||
newName = nameModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
string oldRegionId = regionIdModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer), | |||
newRegionId = regionIdModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
string oldIconHash = iconHashModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer), | |||
newIconHash = iconHashModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
VerificationLevel? oldVerificationLevel = verificationLevelModel?.OldValue?.ToObject<VerificationLevel>(discord.ApiClient.Serializer), | |||
newVerificationLevel = verificationLevelModel?.NewValue?.ToObject<VerificationLevel>(discord.ApiClient.Serializer); | |||
ulong? oldOwnerId = ownerIdModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer), | |||
newOwnerId = ownerIdModel?.NewValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
MfaLevel? oldMfaLevel = mfaLevelModel?.OldValue?.ToObject<MfaLevel>(discord.ApiClient.Serializer), | |||
newMfaLevel = mfaLevelModel?.NewValue?.ToObject<MfaLevel>(discord.ApiClient.Serializer); | |||
int? oldContentFilter = contentFilterModel?.OldValue?.ToObject<int>(discord.ApiClient.Serializer), | |||
newContentFilter = contentFilterModel?.NewValue?.ToObject<int>(discord.ApiClient.Serializer); | |||
IUser oldOwner = null; | |||
if (oldOwnerId != null) | |||
@@ -33,13 +33,13 @@ namespace Discord.Rest | |||
var usesModel = changes.FirstOrDefault(x => x.ChangedProperty == "uses"); | |||
var maxUsesModel = changes.FirstOrDefault(x => x.ChangedProperty == "max_uses"); | |||
var maxAge = maxAgeModel.NewValue.ToObject<int>(); | |||
var code = codeModel.NewValue.ToObject<string>(); | |||
var temporary = temporaryModel.NewValue.ToObject<bool>(); | |||
var inviterId = inviterIdModel.NewValue.ToObject<ulong>(); | |||
var channelId = channelIdModel.NewValue.ToObject<ulong>(); | |||
var uses = usesModel.NewValue.ToObject<int>(); | |||
var maxUses = maxUsesModel.NewValue.ToObject<int>(); | |||
var maxAge = maxAgeModel.NewValue.ToObject<int>(discord.ApiClient.Serializer); | |||
var code = codeModel.NewValue.ToObject<string>(discord.ApiClient.Serializer); | |||
var temporary = temporaryModel.NewValue.ToObject<bool>(discord.ApiClient.Serializer); | |||
var inviterId = inviterIdModel.NewValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var channelId = channelIdModel.NewValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var uses = usesModel.NewValue.ToObject<int>(discord.ApiClient.Serializer); | |||
var maxUses = maxUsesModel.NewValue.ToObject<int>(discord.ApiClient.Serializer); | |||
var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); | |||
var inviter = RestUser.Create(discord, inviterInfo); | |||
@@ -33,13 +33,13 @@ namespace Discord.Rest | |||
var usesModel = changes.FirstOrDefault(x => x.ChangedProperty == "uses"); | |||
var maxUsesModel = changes.FirstOrDefault(x => x.ChangedProperty == "max_uses"); | |||
var maxAge = maxAgeModel.OldValue.ToObject<int>(); | |||
var code = codeModel.OldValue.ToObject<string>(); | |||
var temporary = temporaryModel.OldValue.ToObject<bool>(); | |||
var inviterId = inviterIdModel.OldValue.ToObject<ulong>(); | |||
var channelId = channelIdModel.OldValue.ToObject<ulong>(); | |||
var uses = usesModel.OldValue.ToObject<int>(); | |||
var maxUses = maxUsesModel.OldValue.ToObject<int>(); | |||
var maxAge = maxAgeModel.OldValue.ToObject<int>(discord.ApiClient.Serializer); | |||
var code = codeModel.OldValue.ToObject<string>(discord.ApiClient.Serializer); | |||
var temporary = temporaryModel.OldValue.ToObject<bool>(discord.ApiClient.Serializer); | |||
var inviterId = inviterIdModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var channelId = channelIdModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var uses = usesModel.OldValue.ToObject<int>(discord.ApiClient.Serializer); | |||
var maxUses = maxUsesModel.OldValue.ToObject<int>(discord.ApiClient.Serializer); | |||
var inviterInfo = log.Users.FirstOrDefault(x => x.Id == inviterId); | |||
var inviter = RestUser.Create(discord, inviterInfo); | |||
@@ -26,16 +26,16 @@ namespace Discord.Rest | |||
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>(); | |||
int? oldMaxAge = maxAgeModel?.OldValue?.ToObject<int>(discord.ApiClient.Serializer), | |||
newMaxAge = maxAgeModel?.NewValue?.ToObject<int>(discord.ApiClient.Serializer); | |||
string oldCode = codeModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer), | |||
newCode = codeModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
bool? oldTemporary = temporaryModel?.OldValue?.ToObject<bool>(discord.ApiClient.Serializer), | |||
newTemporary = temporaryModel?.NewValue?.ToObject<bool>(discord.ApiClient.Serializer); | |||
ulong? oldChannelId = channelIdModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer), | |||
newChannelId = channelIdModel?.NewValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
int? oldMaxUses = maxUsesModel?.OldValue?.ToObject<int>(discord.ApiClient.Serializer), | |||
newMaxUses = maxUsesModel?.NewValue?.ToObject<int>(discord.ApiClient.Serializer); | |||
var before = new InviteInfo(oldMaxAge, oldCode, oldTemporary, oldChannelId, oldMaxUses); | |||
var after = new InviteInfo(newMaxAge, newCode, newTemporary, newChannelId, newMaxUses); | |||
@@ -21,7 +21,7 @@ namespace Discord.Rest | |||
{ | |||
var changes = entry.Changes; | |||
var roleInfos = changes.SelectMany(x => x.NewValue.ToObject<API.Role[]>(), | |||
var roleInfos = changes.SelectMany(x => x.NewValue.ToObject<API.Role[]>(discord.ApiClient.Serializer), | |||
(model, role) => new { model.ChangedProperty, Role = role }) | |||
.Select(x => new MemberRoleEditInfo(x.Role.Name, x.Role.Id, x.ChangedProperty == "$add")) | |||
.ToList(); | |||
@@ -26,14 +26,14 @@ namespace Discord.Rest | |||
var muteModel = changes.FirstOrDefault(x => x.ChangedProperty == "mute"); | |||
var avatarModel = changes.FirstOrDefault(x => x.ChangedProperty == "avatar_hash"); | |||
string oldNick = nickModel?.OldValue?.ToObject<string>(), | |||
newNick = nickModel?.NewValue?.ToObject<string>(); | |||
bool? oldDeaf = deafModel?.OldValue?.ToObject<bool>(), | |||
newDeaf = deafModel?.NewValue?.ToObject<bool>(); | |||
bool? oldMute = muteModel?.OldValue?.ToObject<bool>(), | |||
newMute = muteModel?.NewValue?.ToObject<bool>(); | |||
string oldAvatar = avatarModel?.OldValue?.ToObject<string>(), | |||
newAvatar = avatarModel?.NewValue?.ToObject<string>(); | |||
string oldNick = nickModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer), | |||
newNick = nickModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
bool? oldDeaf = deafModel?.OldValue?.ToObject<bool>(discord.ApiClient.Serializer), | |||
newDeaf = deafModel?.NewValue?.ToObject<bool>(discord.ApiClient.Serializer); | |||
bool? oldMute = muteModel?.OldValue?.ToObject<bool>(discord.ApiClient.Serializer), | |||
newMute = muteModel?.NewValue?.ToObject<bool>(discord.ApiClient.Serializer); | |||
string oldAvatar = avatarModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer), | |||
newAvatar = avatarModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
var targetInfo = log.Users.FirstOrDefault(x => x.Id == entry.TargetId); | |||
var user = RestUser.Create(discord, targetInfo); | |||
@@ -22,17 +22,15 @@ namespace Discord.Rest | |||
var denyModel = changes.FirstOrDefault(x => x.ChangedProperty == "deny"); | |||
var allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow"); | |||
var deny = denyModel.NewValue.ToObject<ulong>(); | |||
var allow = allowModel.NewValue.ToObject<ulong>(); | |||
var deny = denyModel.NewValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var allow = allowModel.NewValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var permissions = new OverwritePermissions(allow, deny); | |||
var id = entry.Options.OverwriteTargetId.Value; | |||
var type = entry.Options.OverwriteType; | |||
PermissionTarget target = type == "member" ? PermissionTarget.User : PermissionTarget.Role; | |||
return new OverwriteCreateAuditLogData(new Overwrite(id, target, permissions)); | |||
return new OverwriteCreateAuditLogData(new Overwrite(id, type, permissions)); | |||
} | |||
/// <summary> | |||
@@ -24,14 +24,12 @@ namespace Discord.Rest | |||
var idModel = changes.FirstOrDefault(x => x.ChangedProperty == "id"); | |||
var allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow"); | |||
var deny = denyModel.OldValue.ToObject<ulong>(); | |||
var type = typeModel.OldValue.ToObject<string>(); | |||
var id = idModel.OldValue.ToObject<ulong>(); | |||
var allow = allowModel.OldValue.ToObject<ulong>(); | |||
var deny = denyModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var type = typeModel.OldValue.ToObject<PermissionTarget>(discord.ApiClient.Serializer); | |||
var id = idModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var allow = allowModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
PermissionTarget target = type == "member" ? PermissionTarget.User : PermissionTarget.Role; | |||
return new OverwriteDeleteAuditLogData(new Overwrite(id, target, new OverwritePermissions(allow, deny))); | |||
return new OverwriteDeleteAuditLogData(new Overwrite(id, type, new OverwritePermissions(allow, deny))); | |||
} | |||
/// <summary> | |||
@@ -25,17 +25,17 @@ namespace Discord.Rest | |||
var denyModel = changes.FirstOrDefault(x => x.ChangedProperty == "deny"); | |||
var allowModel = changes.FirstOrDefault(x => x.ChangedProperty == "allow"); | |||
var beforeAllow = allowModel?.OldValue?.ToObject<ulong>(); | |||
var afterAllow = allowModel?.NewValue?.ToObject<ulong>(); | |||
var beforeDeny = denyModel?.OldValue?.ToObject<ulong>(); | |||
var afterDeny = denyModel?.OldValue?.ToObject<ulong>(); | |||
var beforeAllow = allowModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var afterAllow = allowModel?.NewValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var beforeDeny = denyModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var afterDeny = denyModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var beforePermissions = new OverwritePermissions(beforeAllow ?? 0, beforeDeny ?? 0); | |||
var afterPermissions = new OverwritePermissions(afterAllow ?? 0, afterDeny ?? 0); | |||
PermissionTarget target = entry.Options.OverwriteType == "member" ? PermissionTarget.User : PermissionTarget.Role; | |||
var type = entry.Options.OverwriteType; | |||
return new OverwriteUpdateAuditLogData(beforePermissions, afterPermissions, entry.Options.OverwriteTargetId.Value, target); | |||
return new OverwriteUpdateAuditLogData(beforePermissions, afterPermissions, entry.Options.OverwriteTargetId.Value, type); | |||
} | |||
/// <summary> | |||
@@ -26,11 +26,11 @@ namespace Discord.Rest | |||
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>(); | |||
uint? colorRaw = colorModel?.NewValue?.ToObject<uint>(discord.ApiClient.Serializer); | |||
bool? mentionable = mentionableModel?.NewValue?.ToObject<bool>(discord.ApiClient.Serializer); | |||
bool? hoist = hoistModel?.NewValue?.ToObject<bool>(discord.ApiClient.Serializer); | |||
string name = nameModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
ulong? permissionsRaw = permissionsModel?.NewValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
Color? color = null; | |||
GuildPermissions? permissions = null; | |||
@@ -26,11 +26,11 @@ namespace Discord.Rest | |||
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>(); | |||
uint? colorRaw = colorModel?.OldValue?.ToObject<uint>(discord.ApiClient.Serializer); | |||
bool? mentionable = mentionableModel?.OldValue?.ToObject<bool>(discord.ApiClient.Serializer); | |||
bool? hoist = hoistModel?.OldValue?.ToObject<bool>(discord.ApiClient.Serializer); | |||
string name = nameModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
ulong? permissionsRaw = permissionsModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
Color? color = null; | |||
GuildPermissions? permissions = null; | |||
@@ -27,16 +27,16 @@ namespace Discord.Rest | |||
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>(); | |||
uint? oldColorRaw = colorModel?.OldValue?.ToObject<uint>(discord.ApiClient.Serializer), | |||
newColorRaw = colorModel?.NewValue?.ToObject<uint>(discord.ApiClient.Serializer); | |||
bool? oldMentionable = mentionableModel?.OldValue?.ToObject<bool>(discord.ApiClient.Serializer), | |||
newMentionable = mentionableModel?.NewValue?.ToObject<bool>(discord.ApiClient.Serializer); | |||
bool? oldHoist = hoistModel?.OldValue?.ToObject<bool>(discord.ApiClient.Serializer), | |||
newHoist = hoistModel?.NewValue?.ToObject<bool>(discord.ApiClient.Serializer); | |||
string oldName = nameModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer), | |||
newName = nameModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
ulong? oldPermissionsRaw = permissionsModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer), | |||
newPermissionsRaw = permissionsModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
Color? oldColor = null, | |||
newColor = null; | |||
@@ -26,9 +26,9 @@ namespace Discord.Rest | |||
var typeModel = changes.FirstOrDefault(x => x.ChangedProperty == "type"); | |||
var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
var channelId = channelIdModel.NewValue.ToObject<ulong>(); | |||
var type = typeModel.NewValue.ToObject<WebhookType>(); | |||
var name = nameModel.NewValue.ToObject<string>(); | |||
var channelId = channelIdModel.NewValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var type = typeModel.NewValue.ToObject<WebhookType>(discord.ApiClient.Serializer); | |||
var name = nameModel.NewValue.ToObject<string>(discord.ApiClient.Serializer); | |||
var webhookInfo = log.Webhooks?.FirstOrDefault(x => x.Id == entry.TargetId); | |||
var webhook = RestWebhook.Create(discord, (IGuild)null, webhookInfo); | |||
@@ -28,10 +28,10 @@ namespace Discord.Rest | |||
var nameModel = changes.FirstOrDefault(x => x.ChangedProperty == "name"); | |||
var avatarHashModel = changes.FirstOrDefault(x => x.ChangedProperty == "avatar_hash"); | |||
var channelId = channelIdModel.OldValue.ToObject<ulong>(); | |||
var type = typeModel.OldValue.ToObject<WebhookType>(); | |||
var name = nameModel.OldValue.ToObject<string>(); | |||
var avatarHash = avatarHashModel?.OldValue?.ToObject<string>(); | |||
var channelId = channelIdModel.OldValue.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var type = typeModel.OldValue.ToObject<WebhookType>(discord.ApiClient.Serializer); | |||
var name = nameModel.OldValue.ToObject<string>(discord.ApiClient.Serializer); | |||
var avatarHash = avatarHashModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
return new WebhookDeleteAuditLogData(entry.TargetId.Value, channelId, type, name, avatarHash); | |||
} | |||
@@ -25,18 +25,18 @@ namespace Discord.Rest | |||
var channelIdModel = changes.FirstOrDefault(x => x.ChangedProperty == "channel_id"); | |||
var avatarHashModel = changes.FirstOrDefault(x => x.ChangedProperty == "avatar_hash"); | |||
var oldName = nameModel?.OldValue?.ToObject<string>(); | |||
var oldChannelId = channelIdModel?.OldValue?.ToObject<ulong>(); | |||
var oldAvatar = avatarHashModel?.OldValue?.ToObject<string>(); | |||
var oldName = nameModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
var oldChannelId = channelIdModel?.OldValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var oldAvatar = avatarHashModel?.OldValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
var before = new WebhookInfo(oldName, oldChannelId, oldAvatar); | |||
var newName = nameModel?.NewValue?.ToObject<string>(); | |||
var newChannelId = channelIdModel?.NewValue?.ToObject<ulong>(); | |||
var newAvatar = avatarHashModel?.NewValue?.ToObject<string>(); | |||
var newName = nameModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
var newChannelId = channelIdModel?.NewValue?.ToObject<ulong>(discord.ApiClient.Serializer); | |||
var newAvatar = avatarHashModel?.NewValue?.ToObject<string>(discord.ApiClient.Serializer); | |||
var after = new WebhookInfo(newName, newChannelId, newAvatar); | |||
var webhookInfo = log.Webhooks?.FirstOrDefault(x => x.Id == entry.TargetId); | |||
var webhook = RestWebhook.Create(discord, (IGuild)null, webhookInfo); | |||
var webhook = webhookInfo != null ? RestWebhook.Create(discord, (IGuild)null, webhookInfo) : null; | |||
return new WebhookUpdateAuditLogData(webhook, before, after); | |||
} | |||