Added more user-friendly entity properties to rest params
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -6,5 +6,7 @@ namespace Discord.API.Rest
|
||||
{
|
||||
[JsonProperty("recipient_id")]
|
||||
public ulong RecipientId { get; set; }
|
||||
[JsonIgnore]
|
||||
public IUser Recipient { set { RecipientId = value.Id; } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>(); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>(); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>(); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>(); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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,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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user