Browse Source

Added more user-friendly entity properties to rest params

tags/1.0-rc
RogueException 9 years ago
parent
commit
7896afdc92
11 changed files with 61 additions and 69 deletions
  1. +17
    -3
      src/Discord.Net/API/DiscordAPIClient.cs
  2. +2
    -0
      src/Discord.Net/API/Rest/CreateDMChannelParams.cs
  3. +3
    -0
      src/Discord.Net/API/Rest/DeleteMessagesParams.cs
  4. +1
    -0
      src/Discord.Net/API/Rest/GetChannelMessagesParams.cs
  5. +5
    -3
      src/Discord.Net/API/Rest/ModifyGuildEmbedParams.cs
  6. +11
    -3
      src/Discord.Net/API/Rest/ModifyGuildMemberParams.cs
  7. +11
    -6
      src/Discord.Net/API/Rest/ModifyGuildParams.cs
  8. +4
    -4
      src/Discord.Net/Entities/Users/GuildUser.cs
  9. +0
    -47
      src/Discord.Net/Net/Converters/DirectionConverter.cs
  10. +0
    -2
      src/Discord.Net/Net/Converters/DiscordContractResolver.cs
  11. +7
    -1
      src/Discord.Net/Utilities/Optional.cs

+ 17
- 3
src/Discord.Net/API/DiscordAPIClient.cs View File

@@ -535,7 +535,7 @@ namespace Discord.API
Preconditions.NotEqual(args.AFKChannelId, 0, nameof(args.AFKChannelId));
Preconditions.AtLeast(args.AFKTimeout, 0, nameof(args.AFKTimeout));
Preconditions.NotNullOrEmpty(args.Name, nameof(args.Name));
Preconditions.NotNull(args.Owner, nameof(args.Owner));
Preconditions.GreaterThan(args.OwnerId, 0, nameof(args.OwnerId));
Preconditions.NotNull(args.Region, nameof(args.Region));
Preconditions.AtLeast(args.VerificationLevel, 0, nameof(args.VerificationLevel));

@@ -831,7 +831,21 @@ namespace Discord.API

int limit = args.Limit;
ulong? relativeId = args.RelativeMessageId.IsSpecified ? args.RelativeMessageId.Value : (ulong?)null;
string relativeDir = args.RelativeDirection == Direction.After ? "after" : "before";
string relativeDir;

switch (args.RelativeDirection)
{
case Direction.Before:
default:
relativeDir = "before";
break;
case Direction.After:
relativeDir = "after";
break;
case Direction.Around:
relativeDir = "around";
break;
}
int runs = (limit + DiscordConfig.MaxMessagesPerBatch - 1) / DiscordConfig.MaxMessagesPerBatch;
int lastRunCount = limit - (runs - 1) * DiscordConfig.MaxMessagesPerBatch;
@@ -1079,7 +1093,7 @@ namespace Discord.API
public async Task<Channel> CreateDMChannelAsync(CreateDMChannelParams args, RequestOptions options = null)
{
Preconditions.NotNull(args, nameof(args));
Preconditions.NotEqual(args.RecipientId, 0, nameof(args.RecipientId));
Preconditions.GreaterThan(args.RecipientId, 0, nameof(args.Recipient));

return await SendAsync<Channel>("POST", $"users/@me/channels", args, options: options).ConfigureAwait(false);
}


+ 2
- 0
src/Discord.Net/API/Rest/CreateDMChannelParams.cs View File

@@ -6,5 +6,7 @@ namespace Discord.API.Rest
{
[JsonProperty("recipient_id")]
public ulong RecipientId { get; set; }
[JsonIgnore]
public IUser Recipient { set { RecipientId = value.Id; } }
}
}

+ 3
- 0
src/Discord.Net/API/Rest/DeleteMessagesParams.cs View File

@@ -1,5 +1,6 @@
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;

namespace Discord.API.Rest
{
@@ -7,5 +8,7 @@ namespace Discord.API.Rest
{
[JsonProperty("messages")]
public IEnumerable<ulong> MessageIds { get; set; }
[JsonIgnore]
public IEnumerable<IMessage> Messages { set { MessageIds = value.Select(x => x.Id); } }
}
}

+ 1
- 0
src/Discord.Net/API/Rest/GetChannelMessagesParams.cs View File

@@ -6,5 +6,6 @@
public Direction RelativeDirection { get; set; } = Direction.Before;

public Optional<ulong> RelativeMessageId { get; set; }
public Optional<IMessage> RelativeMessage { set { RelativeMessageId = value.IsSpecified ? value.Value.Id : Optional.Create<ulong>(); } }
}
}

+ 5
- 3
src/Discord.Net/API/Rest/ModifyGuildEmbedParams.cs View File

@@ -1,5 +1,4 @@
using Discord.Net.Converters;
using Newtonsoft.Json;
using Newtonsoft.Json;

namespace Discord.API.Rest
{
@@ -7,7 +6,10 @@ namespace Discord.API.Rest
{
[JsonProperty("enabled")]
public Optional<bool> Enabled { get; set; }

[JsonProperty("channel")]
public Optional<IVoiceChannel> Channel { get; set; }
public Optional<ulong> ChannelId { get; set; }
[JsonIgnore]
public Optional<IVoiceChannel> Channel { set { ChannelId = value.IsSpecified ? value.Value.Id : Optional.Create<ulong>(); } }
}
}

+ 11
- 3
src/Discord.Net/API/Rest/ModifyGuildMemberParams.cs View File

@@ -1,18 +1,26 @@
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;

namespace Discord.API.Rest
{
public class ModifyGuildMemberParams
{
[JsonProperty("roles")]
public Optional<ulong[]> Roles { get; set; }
[JsonProperty("mute")]
public Optional<bool> Mute { get; set; }
[JsonProperty("deaf")]
public Optional<bool> Deaf { get; set; }
[JsonProperty("nick")]
public Optional<string> Nickname { get; set; }

[JsonProperty("roles")]
public Optional<IEnumerable<ulong>> RoleIds { get; set; }
[JsonIgnore]
public Optional<IEnumerable<IRole>> Roles { set { RoleIds = value.IsSpecified ? Optional.Create(value.Value.Select(x => x.Id)) : Optional.Create<IEnumerable<ulong>>(); } }

[JsonProperty("channel_id")]
public Optional<IVoiceChannel> VoiceChannel { get; set; }
public Optional<ulong> VoiceChannelId { get; set; }
[JsonIgnore]
public Optional<IVoiceChannel> VoiceChannel { set { VoiceChannelId = value.IsSpecified ? value.Value.Id : Optional.Create<ulong>(); } }
}
}

+ 11
- 6
src/Discord.Net/API/Rest/ModifyGuildParams.cs View File

@@ -1,5 +1,4 @@
using Discord.Net.Converters;
using Newtonsoft.Json;
using Newtonsoft.Json;
using System.IO;

namespace Discord.API.Rest
@@ -12,15 +11,21 @@ namespace Discord.API.Rest
public Optional<IVoiceRegion> Region { get; set; }
[JsonProperty("verification_level")]
public Optional<int> VerificationLevel { get; set; }
[JsonProperty("afk_channel_id")]
public Optional<ulong?> AFKChannelId { get; set; }
[JsonProperty("afk_timeout")]
public Optional<int> AFKTimeout { get; set; }
[JsonProperty("icon"), Image]
public Optional<Stream> Icon { get; set; }
[JsonProperty("owner_id")]
public Optional<GuildMember> Owner { get; set; }
[JsonProperty("splash"), Image]
public Optional<Stream> Splash { get; set; }

[JsonProperty("afk_channel_id")]
public Optional<ulong?> AFKChannelId { get; set; }
[JsonIgnore]
public Optional<IVoiceChannel> AFKChannel { set { OwnerId = value.IsSpecified ? value.Value.Id : Optional.Create<ulong>(); } }

[JsonProperty("owner_id")]
public Optional<ulong> OwnerId { get; set; }
[JsonIgnore]
public Optional<IGuildUser> Owner { set { OwnerId = value.IsSpecified ? value.Value.Id : Optional.Create<ulong>(); } }
}
}

+ 4
- 4
src/Discord.Net/Entities/Users/GuildUser.cs View File

@@ -124,7 +124,7 @@ namespace Discord
args.Nickname = new Optional<string>(); //Remove
}

if (!isCurrentUser || args.Deaf.IsSpecified || args.Mute.IsSpecified || args.Roles.IsSpecified)
if (!isCurrentUser || args.Deaf.IsSpecified || args.Mute.IsSpecified || args.RoleIds.IsSpecified)
{
await Discord.ApiClient.ModifyGuildMemberAsync(Guild.Id, Id, args).ConfigureAwait(false);
if (args.Deaf.IsSpecified)
@@ -133,8 +133,8 @@ namespace Discord
IsMute = args.Mute.Value;
if (args.Nickname.IsSpecified)
Nickname = args.Nickname.Value ?? "";
if (args.Roles.IsSpecified)
Roles = args.Roles.Value.Select(x => Guild.GetRole(x)).Where(x => x != null).ToImmutableArray();
if (args.RoleIds.IsSpecified)
Roles = args.RoleIds.Value.Select(x => Guild.GetRole(x)).Where(x => x != null).ToImmutableArray();
}
}
public async Task KickAsync()
@@ -153,7 +153,7 @@ namespace Discord
public async Task<IDMChannel> CreateDMChannelAsync()
{
var args = new CreateDMChannelParams { RecipientId = Id };
var args = new CreateDMChannelParams { Recipient = this };
var model = await Discord.ApiClient.CreateDMChannelAsync(args).ConfigureAwait(false);

return new DMChannel(Discord, User, model);


+ 0
- 47
src/Discord.Net/Net/Converters/DirectionConverter.cs View File

@@ -1,47 +0,0 @@
using Newtonsoft.Json;
using System;

namespace Discord.Net.Converters
{
public class DirectionConverter : JsonConverter
{
public static readonly DirectionConverter Instance = new DirectionConverter();

public override bool CanConvert(Type objectType) => true;
public override bool CanRead => true;
public override bool CanWrite => true;

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
switch ((string)reader.Value)
{
case "before":
return Direction.Before;
case "after":
return Direction.After;
case "around":
return Direction.Around;
default:
throw new JsonSerializationException("Unknown direction");
}
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
switch ((Direction)value)
{
case Direction.Before:
writer.WriteValue("before");
break;
case Direction.After:
writer.WriteValue("after");
break;
case Direction.Around:
writer.WriteValue("around");
break;
default:
throw new JsonSerializationException("Invalid direction");
}
}
}
}

+ 0
- 2
src/Discord.Net/Net/Converters/DiscordContractResolver.cs View File

@@ -77,8 +77,6 @@ namespace Discord.Net.Converters
return PermissionTargetConverter.Instance;
if (type == typeof(UserStatus))
return UserStatusConverter.Instance;
if (type == typeof(Direction))
return DirectionConverter.Instance;

//Special
if (type == typeof(Stream) && propInfo.GetCustomAttribute<ImageAttribute>() != null)


+ 7
- 1
src/Discord.Net/Utilities/Optional.cs View File

@@ -7,6 +7,7 @@ namespace Discord
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public struct Optional<T>
{
public static Optional<T> Unspecified => default(Optional<T>);
private readonly T _value;

/// <summary> Gets the value for this paramter. </summary>
@@ -28,7 +29,7 @@ namespace Discord
_value = value;
IsSpecified = true;
}
public T GetValueOrDefault() => _value;
public T GetValueOrDefault(T defaultValue) => IsSpecified ? _value : defaultValue;

@@ -46,4 +47,9 @@ namespace Discord
public static implicit operator Optional<T>(T value) => new Optional<T>(value);
public static explicit operator T(Optional<T> value) => value.Value;
}
public static class Optional
{
public static Optional<T> Create<T>() => Optional<T>.Unspecified;
public static Optional<T> Create<T>(T value) => new Optional<T>(value);
}
}

Loading…
Cancel
Save