Fixed several issues

This commit is contained in:
RogueException
2015-12-16 18:56:34 -04:00
parent 21ac5c5d74
commit b8e4f6c5da
64 changed files with 295 additions and 215 deletions

View File

@@ -3,8 +3,13 @@ using Newtonsoft.Json;
namespace Discord.API.Client namespace Discord.API.Client
{ {
public class MemberVoiceState : MemberReference public class MemberVoiceState
{ {
[JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))]
public ulong GuildId { get; set; }
[JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))]
public ulong UserId { get; set; }
[JsonProperty("channel_id"), JsonConverter(typeof(NullableLongStringConverter))] [JsonProperty("channel_id"), JsonConverter(typeof(NullableLongStringConverter))]
public ulong? ChannelId { get; set; } public ulong? ChannelId { get; set; }
[JsonProperty("session_id")] [JsonProperty("session_id")]

View File

@@ -0,0 +1,23 @@
using Discord.API.Converters;
using Newtonsoft.Json;
namespace Discord.API.Client
{
public class Role
{
[JsonProperty("id"), JsonConverter(typeof(LongStringConverter))]
public ulong Id { get; set; }
[JsonProperty("permissions")]
public uint? Permissions { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("position")]
public int? Position { get; set; }
[JsonProperty("hoist")]
public bool? Hoist { get; set; }
[JsonProperty("color")]
public uint? Color { get; set; }
[JsonProperty("managed")]
public bool? Managed { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
using Newtonsoft.Json;
namespace Discord.API.Client
{
public class User : UserReference
{
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("verified")]
public bool? IsVerified { get; set; }
}
}

View File

@@ -6,8 +6,8 @@ namespace Discord.API.Client.GatewaySocket
public sealed class GuildBanAddEvent public sealed class GuildBanAddEvent
{ {
[JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))]
public ulong GuildId { get; } public ulong GuildId { get; set; }
[JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))]
public ulong UserId { get; } public ulong UserId { get; set; }
} }
} }

View File

@@ -6,8 +6,8 @@ namespace Discord.API.Client.GatewaySocket
public sealed class GuildBanRemoveEvent public sealed class GuildBanRemoveEvent
{ {
[JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))]
public ulong GuildId { get; } public ulong GuildId { get; set; }
[JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))]
public ulong UserId { get; } public ulong UserId { get; set; }
} }
} }

View File

@@ -6,8 +6,8 @@ namespace Discord.API.Client.GatewaySocket
public sealed class GuildRoleCreateEvent public sealed class GuildRoleCreateEvent
{ {
[JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))]
public ulong GuildId { get; } public ulong GuildId { get; set; }
[JsonProperty("role")] [JsonProperty("role")]
public Role Data { get; } public Role Data { get; set; }
} }
} }

View File

@@ -6,8 +6,8 @@ namespace Discord.API.Client.GatewaySocket
public sealed class GuildRoleUpdateEvent public sealed class GuildRoleUpdateEvent
{ {
[JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))]
public ulong GuildId { get; } public ulong GuildId { get; set; }
[JsonProperty("role")] [JsonProperty("role")]
public Role Data { get; } public Role Data { get; set; }
} }
} }

View File

@@ -7,26 +7,26 @@ namespace Discord.API.Client.GatewaySocket
public sealed class ReadState public sealed class ReadState
{ {
[JsonProperty("id")] [JsonProperty("id")]
public string ChannelId { get; } public string ChannelId { get; set; }
[JsonProperty("mention_count")] [JsonProperty("mention_count")]
public int MentionCount { get; } public int MentionCount { get; set; }
[JsonProperty("last_message_id")] [JsonProperty("last_message_id")]
public string LastMessageId { get; } public string LastMessageId { get; set; }
} }
[JsonProperty("v")] [JsonProperty("v")]
public int Version { get; } public int Version { get; set; }
[JsonProperty("user")] [JsonProperty("user")]
public User User { get; } public User User { get; set; }
[JsonProperty("session_id")] [JsonProperty("session_id")]
public string SessionId { get; } public string SessionId { get; set; }
[JsonProperty("read_state")] [JsonProperty("read_state")]
public ReadState[] ReadStates { get; } public ReadState[] ReadStates { get; set; }
[JsonProperty("guilds")] [JsonProperty("guilds")]
public ExtendedGuild[] Guilds { get; } public ExtendedGuild[] Guilds { get; set; }
[JsonProperty("private_channels")] [JsonProperty("private_channels")]
public Channel[] PrivateChannels { get; } public Channel[] PrivateChannels { get; set; }
[JsonProperty("heartbeat_interval")] [JsonProperty("heartbeat_interval")]
public int HeartbeatInterval { get; } public int HeartbeatInterval { get; set; }
} }
} }

View File

@@ -5,6 +5,6 @@ namespace Discord.API.Client.GatewaySocket
public sealed class RedirectEvent public sealed class RedirectEvent
{ {
[JsonProperty("url")] [JsonProperty("url")]
public string Url { get; } public string Url { get; set; }
} }
} }

View File

@@ -5,6 +5,6 @@ namespace Discord.API.Client.GatewaySocket
public sealed class ResumedEvent public sealed class ResumedEvent
{ {
[JsonProperty("heartbeat_interval")] [JsonProperty("heartbeat_interval")]
public int HeartbeatInterval { get; } public int HeartbeatInterval { get; set; }
} }
} }

View File

@@ -6,10 +6,10 @@ namespace Discord.API.Client.GatewaySocket
public sealed class TypingStartEvent public sealed class TypingStartEvent
{ {
[JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))]
public ulong UserId { get; } public ulong UserId { get; set; }
[JsonProperty("channel_id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("channel_id"), JsonConverter(typeof(LongStringConverter))]
public ulong ChannelId { get; } public ulong ChannelId { get; set; }
[JsonProperty("timestamp")] [JsonProperty("timestamp")]
public int Timestamp { get; } public int Timestamp { get; set; }
} }
} }

View File

@@ -6,10 +6,10 @@ namespace Discord.API.Client.GatewaySocket
public sealed class VoiceServerUpdateEvent public sealed class VoiceServerUpdateEvent
{ {
[JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))]
public ulong GuildId { get; } public ulong GuildId { get; set; }
[JsonProperty("endpoint")] [JsonProperty("endpoint")]
public string Endpoint { get; } public string Endpoint { get; set; }
[JsonProperty("token")] [JsonProperty("token")]
public string Token { get; } public string Token { get; set; }
} }
} }

View File

@@ -11,13 +11,13 @@ namespace Discord.API.Client
public class WebSocketMessage public class WebSocketMessage
{ {
[JsonProperty("op")] [JsonProperty("op")]
public int Operation { get; } public int Operation { get; set; }
[JsonProperty("d")]
public object Payload { get; }
[JsonProperty("t", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("t", NullValueHandling = NullValueHandling.Ignore)]
public string Type { get; } public string Type { get; set; }
[JsonProperty("s", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("s", NullValueHandling = NullValueHandling.Ignore)]
public int? Sequence { get; } public int? Sequence { get; set; }
[JsonProperty("d")]
public object Payload { get; set; }
public WebSocketMessage() { } public WebSocketMessage() { }
public WebSocketMessage(IWebSocketMessage msg) public WebSocketMessage(IWebSocketMessage msg)

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class AcceptInviteRequest : IRestRequest<InviteReference> public sealed class AcceptInviteRequest : IRestRequest<InviteReference>
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/invite/{InviteId}"; string IRestRequest.Endpoint => $"invite/{InviteId}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class AckMessageRequest : IRestRequest public sealed class AckMessageRequest : IRestRequest
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages/{MessageId}/ack"; string IRestRequest.Endpoint => $"channels/{ChannelId}/messages/{MessageId}/ack";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -0,0 +1,30 @@
using Discord.API.Converters;
using Newtonsoft.Json;
namespace Discord.API.Client.Rest
{
[JsonObject(MemberSerialization.OptIn)]
public sealed class AddChannelPermissionsRequest : IRestRequest
{
string IRestRequest.Method => "PUT";
string IRestRequest.Endpoint => $"channels/{ChannelId}/permissions";
object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false;
public ulong ChannelId { get; }
[JsonProperty("id"), JsonConverter(typeof(LongStringConverter))]
public ulong TargetId { get; set; }
[JsonProperty("type")]
public string TargetType { get; set; }
[JsonProperty("allow")]
public uint Allow { get; set; }
[JsonProperty("deny")]
public uint Deny { get; set; }
public AddChannelPermissionsRequest(ulong channelId)
{
ChannelId = channelId;
}
}
}

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class AddGuildBanRequest : IRestRequest public sealed class AddGuildBanRequest : IRestRequest
{ {
string IRestRequest.Method => "PUT"; string IRestRequest.Method => "PUT";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/bans/{UserId}?delete-message-days={PruneDays}"; string IRestRequest.Endpoint => $"guilds/{GuildId}/bans/{UserId}?delete-message-days={PruneDays}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class BroadcastTypingRequest : IRestRequest public sealed class BroadcastTypingRequest : IRestRequest
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/typing"; string IRestRequest.Endpoint => $"channels/{ChannelId}/typing";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class CreateChannelRequest : IRestRequest<Channel> public sealed class CreateChannelRequest : IRestRequest<Channel>
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/channels"; string IRestRequest.Endpoint => $"guilds/{GuildId}/channels";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class CreateGuildRequest : IRestRequest<Guild> public sealed class CreateGuildRequest : IRestRequest<Guild>
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds"; string IRestRequest.Endpoint => $"guilds";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class CreateInviteRequest : IRestRequest<Invite> public sealed class CreateInviteRequest : IRestRequest<Invite>
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/invites"; string IRestRequest.Endpoint => $"channels/{ChannelId}/invites";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest
public sealed class CreatePrivateChannelRequest : IRestRequest<Channel> public sealed class CreatePrivateChannelRequest : IRestRequest<Channel>
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/users/@me/channels"; string IRestRequest.Endpoint => $"users/@me/channels";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class CreateRoleRequest : IRestRequest<Role> public sealed class CreateRoleRequest : IRestRequest<Role>
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/roles"; string IRestRequest.Endpoint => $"guilds/{GuildId}/roles";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class DeleteChannelRequest : IRestRequest<Channel> public sealed class DeleteChannelRequest : IRestRequest<Channel>
{ {
string IRestRequest.Method => "DELETE"; string IRestRequest.Method => "DELETE";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}"; string IRestRequest.Endpoint => $"channels/{ChannelId}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class DeleteInviteRequest : IRestRequest<Invite> public sealed class DeleteInviteRequest : IRestRequest<Invite>
{ {
string IRestRequest.Method => "DELETE"; string IRestRequest.Method => "DELETE";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/invite/{InviteCode}"; string IRestRequest.Endpoint => $"invite/{InviteCode}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class DeleteMessageRequest : IRestRequest public sealed class DeleteMessageRequest : IRestRequest
{ {
string IRestRequest.Method => "DELETE"; string IRestRequest.Method => "DELETE";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages/{MessageId}"; string IRestRequest.Endpoint => $"channels/{ChannelId}/messages/{MessageId}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class DeleteRoleRequest : IRestRequest public sealed class DeleteRoleRequest : IRestRequest
{ {
string IRestRequest.Method => "DELETE"; string IRestRequest.Method => "DELETE";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/roles/{RoleId}"; string IRestRequest.Endpoint => $"guilds/{GuildId}/roles/{RoleId}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class GatewayRequest : IRestRequest<GatewayResponse> public sealed class GatewayRequest : IRestRequest<GatewayResponse>
{ {
string IRestRequest.Method => "GET"; string IRestRequest.Method => "GET";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/gateway"; string IRestRequest.Endpoint => $"gateway";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;
} }

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class GetInviteRequest : IRestRequest<InviteReference> public sealed class GetInviteRequest : IRestRequest<InviteReference>
{ {
string IRestRequest.Method => "GET"; string IRestRequest.Method => "GET";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/invite/{InviteCode}"; string IRestRequest.Endpoint => $"invite/{InviteCode}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class GetInvitesRequest : IRestRequest<InviteReference[]> public sealed class GetInvitesRequest : IRestRequest<InviteReference[]>
{ {
string IRestRequest.Method => "GET"; string IRestRequest.Method => "GET";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/invites"; string IRestRequest.Endpoint => $"guilds/{GuildId}/invites";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -15,7 +15,7 @@ namespace Discord.API.Client.Rest
this.AddQueryParam(query, "limit", Limit.ToString()); this.AddQueryParam(query, "limit", Limit.ToString());
if (RelativeDir != null) if (RelativeDir != null)
this.AddQueryParam(query, RelativeDir, RelativeId.Value.ToString()); this.AddQueryParam(query, RelativeDir, RelativeId.Value.ToString());
return $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages{query}"; return $"channels/{ChannelId}/messages{query}";
} }
} }
object IRestRequest.Payload => null; object IRestRequest.Payload => null;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class GetVoiceRegionsRequest : IRestRequest<GetVoiceRegionsResponse[]> public sealed class GetVoiceRegionsRequest : IRestRequest<GetVoiceRegionsResponse[]>
{ {
string IRestRequest.Method => "GET"; string IRestRequest.Method => "GET";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/voice/regions"; string IRestRequest.Endpoint => $"voice/regions";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;
} }

View File

@@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest
public sealed class GetWidgetRequest : IRestRequest<GetWidgetResponse> public sealed class GetWidgetRequest : IRestRequest<GetWidgetResponse>
{ {
string IRestRequest.Method => "GET"; string IRestRequest.Method => "GET";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/servers/{GuildId}/widget.json"; string IRestRequest.Endpoint => $"servers/{GuildId}/widget.json";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class KickMemberRequest : IRestRequest public sealed class KickMemberRequest : IRestRequest
{ {
string IRestRequest.Method => "DELETE"; string IRestRequest.Method => "DELETE";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/members/{UserId}"; string IRestRequest.Endpoint => $"guilds/{GuildId}/members/{UserId}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class LeaveGuildRequest : IRestRequest<Guild> public sealed class LeaveGuildRequest : IRestRequest<Guild>
{ {
string IRestRequest.Method => "DELETE"; string IRestRequest.Method => "DELETE";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}"; string IRestRequest.Endpoint => $"guilds/{GuildId}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -0,0 +1,24 @@
using Newtonsoft.Json;
namespace Discord.API.Client.Rest
{
[JsonObject(MemberSerialization.OptIn)]
public sealed class LoginRequest : IRestRequest<LoginResponse>
{
string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"auth/login";
object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false;
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("password")]
public string Password { get; set; }
}
public sealed class LoginResponse
{
[JsonProperty("token")]
public string Token { get; set; }
}
}

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class LogoutRequest : IRestRequest public sealed class LogoutRequest : IRestRequest
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/auth/logout"; string IRestRequest.Endpoint => $"auth/logout";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;
} }

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class PruneMembersRequest : IRestRequest<PruneMembersResponse> public sealed class PruneMembersRequest : IRestRequest<PruneMembersResponse>
{ {
string IRestRequest.Method => IsSimulation ? "GET" : "POST"; string IRestRequest.Method => IsSimulation ? "GET" : "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/prune?days={Days}"; string IRestRequest.Endpoint => $"guilds/{GuildId}/prune?days={Days}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class RemoveChannelPermissionsRequest : IRestRequest public sealed class RemoveChannelPermissionsRequest : IRestRequest
{ {
string IRestRequest.Method => "DELETE"; string IRestRequest.Method => "DELETE";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/permissions/{TargetId}"; string IRestRequest.Endpoint => $"channels/{ChannelId}/permissions/{TargetId}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class RemoveGuildBanRequest : IRestRequest public sealed class RemoveGuildBanRequest : IRestRequest
{ {
string IRestRequest.Method => "DELETE"; string IRestRequest.Method => "DELETE";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/bans/{UserId}"; string IRestRequest.Endpoint => $"guilds/{GuildId}/bans/{UserId}";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -8,7 +8,7 @@ namespace Discord.API.Client.Rest
public sealed class ReorderChannelsRequest : IRestRequest public sealed class ReorderChannelsRequest : IRestRequest
{ {
string IRestRequest.Method => "PATCH"; string IRestRequest.Method => "PATCH";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/channels"; string IRestRequest.Endpoint => $"guilds/{GuildId}/channels";
object IRestRequest.Payload object IRestRequest.Payload
{ {
get get

View File

@@ -8,7 +8,7 @@ namespace Discord.API.Client.Rest
public sealed class ReorderRolesRequest : IRestRequest<Role[]> public sealed class ReorderRolesRequest : IRestRequest<Role[]>
{ {
string IRestRequest.Method => "PATCH"; string IRestRequest.Method => "PATCH";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/roles"; string IRestRequest.Endpoint => $"guilds/{GuildId}/roles";
object IRestRequest.Payload object IRestRequest.Payload
{ {
get get

View File

@@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest
public sealed class SendFileRequest : IRestFileRequest<Message> public sealed class SendFileRequest : IRestFileRequest<Message>
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages"; string IRestRequest.Endpoint => $"channels/{ChannelId}/messages";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;
string IRestFileRequest.Filename => Filename; string IRestFileRequest.Filename => Filename;

View File

@@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest
public sealed class SendMessageRequest : IRestRequest<Message> public sealed class SendMessageRequest : IRestRequest<Message>
{ {
string IRestRequest.Method => "POST"; string IRestRequest.Method => "POST";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages"; string IRestRequest.Endpoint => $"channels/{ChannelId}/messages";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class UpdateChannelRequest : IRestRequest<Channel> public sealed class UpdateChannelRequest : IRestRequest<Channel>
{ {
string IRestRequest.Method => "PATCH"; string IRestRequest.Method => "PATCH";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}"; string IRestRequest.Endpoint => $"channels/{ChannelId}";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest
public sealed class UpdateGuildRequest : IRestRequest<Guild> public sealed class UpdateGuildRequest : IRestRequest<Guild>
{ {
string IRestRequest.Method => "PATCH"; string IRestRequest.Method => "PATCH";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}"; string IRestRequest.Endpoint => $"guilds/{GuildId}";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -8,7 +8,7 @@ namespace Discord.API.Client.Rest
public sealed class UpdateMemberRequest : IRestRequest public sealed class UpdateMemberRequest : IRestRequest
{ {
string IRestRequest.Method => "PATCH"; string IRestRequest.Method => "PATCH";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/members/{UserId}"; string IRestRequest.Endpoint => $"guilds/{GuildId}/members/{UserId}";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest
public sealed class UpdateMessageRequest : IRestRequest<Message> public sealed class UpdateMessageRequest : IRestRequest<Message>
{ {
string IRestRequest.Method => "PATCH"; string IRestRequest.Method => "PATCH";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages/{MessageId}"; string IRestRequest.Endpoint => $"channels/{ChannelId}/messages/{MessageId}";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class UpdateProfileRequest : IRestRequest<User> public sealed class UpdateProfileRequest : IRestRequest<User>
{ {
string IRestRequest.Method => "PATCH"; string IRestRequest.Method => "PATCH";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/users/@me"; string IRestRequest.Endpoint => $"users/@me";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest
public sealed class UpdateRoleRequest : IRestRequest<Role> public sealed class UpdateRoleRequest : IRestRequest<Role>
{ {
string IRestRequest.Method => "PATCH"; string IRestRequest.Method => "PATCH";
string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/roles/{RoleId}"; string IRestRequest.Endpoint => $"guilds/{GuildId}/roles/{RoleId}";
object IRestRequest.Payload => this; object IRestRequest.Payload => this;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;

View File

@@ -7,20 +7,20 @@ namespace Discord.API.Status
public class Incident public class Incident
{ {
[JsonProperty("page")] [JsonProperty("page")]
public PageData Page { get; } public PageData Page { get; set; }
[JsonProperty("scheduled_maintenances")] [JsonProperty("scheduled_maintenances")]
public MaintenanceData[] ScheduledMaintenances { get; } public MaintenanceData[] ScheduledMaintenances { get; set; }
public sealed class PageData public sealed class PageData
{ {
[JsonProperty("id"), JsonConverter(typeof(LongStringConverter))] [JsonProperty("id"), JsonConverter(typeof(LongStringConverter))]
public ulong Id { get; } public ulong Id { get; set; }
[JsonProperty("name")] [JsonProperty("name")]
public string Name { get; } public string Name { get; set; }
[JsonProperty("url")] [JsonProperty("url")]
public string Url { get; } public string Url { get; set; }
[JsonProperty("updated-at")] [JsonProperty("updated-at")]
public DateTime? UpdatedAt { get; } public DateTime? UpdatedAt { get; set; }
} }
public sealed class MaintenanceData public sealed class MaintenanceData

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Status.Rest
public sealed class GetActiveIncidentsRequest : IRestRequest<Incident> public sealed class GetActiveIncidentsRequest : IRestRequest<Incident>
{ {
string IRestRequest.Method => "GET"; string IRestRequest.Method => "GET";
string IRestRequest.Endpoint => $"{DiscordConfig.StatusAPIUrl}/scheduled-maintenances/active.json"; string IRestRequest.Endpoint => $"scheduled-maintenances/active.json";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;
} }

View File

@@ -6,7 +6,7 @@ namespace Discord.API.Status.Rest
public sealed class GetUpcomingIncidentsRequest : IRestRequest<Incident> public sealed class GetUpcomingIncidentsRequest : IRestRequest<Incident>
{ {
string IRestRequest.Method => "GET"; string IRestRequest.Method => "GET";
string IRestRequest.Endpoint => $"{DiscordConfig.StatusAPIUrl}/scheduled-maintenances/upcoming.json"; string IRestRequest.Endpoint => $"scheduled-maintenances/upcoming.json";
object IRestRequest.Payload => null; object IRestRequest.Payload => null;
bool IRestRequest.IsPrivate => false; bool IRestRequest.IsPrivate => false;
} }

View File

@@ -120,7 +120,7 @@ namespace Discord
CheckReady(); CheckReady();
var request = new CreateChannelRequest(server.Id) { Name = name, Type = type.Value }; var request = new CreateChannelRequest(server.Id) { Name = name, Type = type.Value };
var response = await _rest.Send(request).ConfigureAwait(false); var response = await _clientRest.Send(request).ConfigureAwait(false);
var channel = _channels.GetOrAdd(response.Id, response.GuildId, response.Recipient?.Id); var channel = _channels.GetOrAdd(response.Id, response.GuildId, response.Recipient?.Id);
channel.Update(response); channel.Update(response);
@@ -139,7 +139,7 @@ namespace Discord
if (channel == null) if (channel == null)
{ {
var request = new CreatePrivateChannelRequest() { RecipientId = user.Id }; var request = new CreatePrivateChannelRequest() { RecipientId = user.Id };
var response = await _rest.Send(request).ConfigureAwait(false); var response = await _clientRest.Send(request).ConfigureAwait(false);
var recipient = _users.GetOrAdd(response.Recipient.Id, null); var recipient = _users.GetOrAdd(response.Recipient.Id, null);
recipient.Update(response.Recipient); recipient.Update(response.Recipient);
@@ -163,7 +163,7 @@ namespace Discord
Topic = topic ?? channel.Topic, Topic = topic ?? channel.Topic,
Position = channel.Position Position = channel.Position
}; };
await _rest.Send(request).ConfigureAwait(false); await _clientRest.Send(request).ConfigureAwait(false);
} }
if (position != null) if (position != null)
@@ -207,7 +207,7 @@ namespace Discord
ChannelIds = channels.Select(x => x.Id).ToArray(), ChannelIds = channels.Select(x => x.Id).ToArray(),
StartPos = after != null ? after.Position + 1 : channels.Min(x => x.Position) StartPos = after != null ? after.Position + 1 : channels.Min(x => x.Position)
}; };
return _rest.Send(request); return _clientRest.Send(request);
} }
/// <summary> Destroys the provided channel. </summary> /// <summary> Destroys the provided channel. </summary>
@@ -216,7 +216,7 @@ namespace Discord
if (channel == null) throw new ArgumentNullException(nameof(channel)); if (channel == null) throw new ArgumentNullException(nameof(channel));
CheckReady(); CheckReady();
try { await _rest.Send(new DeleteChannelRequest(channel.Id)).ConfigureAwait(false); } try { await _clientRest.Send(new DeleteChannelRequest(channel.Id)).ConfigureAwait(false); }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
} }
} }

View File

@@ -24,7 +24,7 @@ namespace Discord
if (index >= 0) if (index >= 0)
inviteIdOrXkcd = inviteIdOrXkcd.Substring(index + 1); inviteIdOrXkcd = inviteIdOrXkcd.Substring(index + 1);
var response = await _rest.Send(new GetInviteRequest(inviteIdOrXkcd)).ConfigureAwait(false); var response = await _clientRest.Send(new GetInviteRequest(inviteIdOrXkcd)).ConfigureAwait(false);
var invite = new Invite(response.Code, response.XkcdPass); var invite = new Invite(response.Code, response.XkcdPass);
invite.Update(response); invite.Update(response);
return invite; return invite;
@@ -36,7 +36,7 @@ namespace Discord
if (server == null) throw new ArgumentNullException(nameof(server)); if (server == null) throw new ArgumentNullException(nameof(server));
CheckReady(); CheckReady();
var response = await _rest.Send(new GetInvitesRequest(server.Id)).ConfigureAwait(false); var response = await _clientRest.Send(new GetInvitesRequest(server.Id)).ConfigureAwait(false);
return response.Select(x => return response.Select(x =>
{ {
var invite = new Invite(x.Code, x.XkcdPass); var invite = new Invite(x.Code, x.XkcdPass);
@@ -77,7 +77,7 @@ namespace Discord
WithXkcdPass = withXkcd WithXkcdPass = withXkcd
}; };
var response = await _rest.Send(request).ConfigureAwait(false); var response = await _clientRest.Send(request).ConfigureAwait(false);
var invite = new Invite(response.Code, response.XkcdPass); var invite = new Invite(response.Code, response.XkcdPass);
return invite; return invite;
} }
@@ -88,7 +88,7 @@ namespace Discord
if (invite == null) throw new ArgumentNullException(nameof(invite)); if (invite == null) throw new ArgumentNullException(nameof(invite));
CheckReady(); CheckReady();
try { await _rest.Send(new DeleteInviteRequest(invite.Code)).ConfigureAwait(false); } try { await _clientRest.Send(new DeleteInviteRequest(invite.Code)).ConfigureAwait(false); }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
} }
@@ -98,7 +98,7 @@ namespace Discord
if (invite == null) throw new ArgumentNullException(nameof(invite)); if (invite == null) throw new ArgumentNullException(nameof(invite));
CheckReady(); CheckReady();
return _rest.Send(new AcceptInviteRequest(invite.Code)); return _clientRest.Send(new AcceptInviteRequest(invite.Code));
} }
} }
} }

View File

@@ -164,7 +164,7 @@ namespace Discord
Filename = filename, Filename = filename,
Stream = stream Stream = stream
}; };
var model = await _rest.Send(request).ConfigureAwait(false); var model = await _clientRest.Send(request).ConfigureAwait(false);
var msg = _messages.GetOrAdd(model.Id, channel.Id, model.Author.Id); var msg = _messages.GetOrAdd(model.Id, channel.Id, model.Author.Id);
msg.Update(model); msg.Update(model);
@@ -229,7 +229,7 @@ namespace Discord
Nonce = null, Nonce = null,
IsTTS = isTextToSpeech IsTTS = isTextToSpeech
}; };
var model = await _rest.Send(request).ConfigureAwait(false); var model = await _clientRest.Send(request).ConfigureAwait(false);
msg = _messages.GetOrAdd(model.Id, channel.Id, model.Author.Id); msg = _messages.GetOrAdd(model.Id, channel.Id, model.Author.Id);
msg.Update(model); msg.Update(model);
RaiseMessageSent(msg); RaiseMessageSent(msg);
@@ -262,7 +262,7 @@ namespace Discord
Content = text, Content = text,
MentionedUserIds = mentionedUsers.Select(x => x.Id).ToArray() MentionedUserIds = mentionedUsers.Select(x => x.Id).ToArray()
}; };
await _rest.Send(request).ConfigureAwait(false); await _clientRest.Send(request).ConfigureAwait(false);
} }
} }
@@ -273,7 +273,7 @@ namespace Discord
CheckReady(); CheckReady();
var request = new DeleteMessageRequest(message.Id, message.Channel.Id); var request = new DeleteMessageRequest(message.Id, message.Channel.Id);
try { await _rest.Send(request).ConfigureAwait(false); } try { await _clientRest.Send(request).ConfigureAwait(false); }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
} }
public async Task DeleteMessages(IEnumerable<Message> messages) public async Task DeleteMessages(IEnumerable<Message> messages)
@@ -284,7 +284,7 @@ namespace Discord
foreach (var message in messages) foreach (var message in messages)
{ {
var request = new DeleteMessageRequest(message.Id, message.Channel.Id); var request = new DeleteMessageRequest(message.Id, message.Channel.Id);
try { await _rest.Send(request).ConfigureAwait(false); } try { await _clientRest.Send(request).ConfigureAwait(false); }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
} }
} }
@@ -307,7 +307,7 @@ namespace Discord
RelativeDir = relativeDir == RelativeDirection.Before ? "before" : "after", RelativeDir = relativeDir == RelativeDirection.Before ? "before" : "after",
RelativeId = relativeMessageId RelativeId = relativeMessageId
}; };
var msgs = await _rest.Send(request).ConfigureAwait(false); var msgs = await _clientRest.Send(request).ConfigureAwait(false);
return msgs.Select(x => return msgs.Select(x =>
{ {
Message msg = null; Message msg = null;
@@ -336,7 +336,7 @@ namespace Discord
if (message == null) throw new ArgumentNullException(nameof(message)); if (message == null) throw new ArgumentNullException(nameof(message));
if (!message.IsAuthor) if (!message.IsAuthor)
_rest.Send(new AckMessageRequest(message.Id, message.Channel.Id)); _clientRest.Send(new AckMessageRequest(message.Id, message.Channel.Id));
} }
/// <summary> Deserializes messages from JSON format and imports them into the message cache.</summary> /// <summary> Deserializes messages from JSON format and imports them into the message cache.</summary>
@@ -401,7 +401,7 @@ namespace Discord
Nonce = IdConvert.ToString(msg.Id), //Nonce Nonce = IdConvert.ToString(msg.Id), //Nonce
IsTTS = msg.IsTTS IsTTS = msg.IsTTS
}; };
await _rest.Send(request).ConfigureAwait(false); await _clientRest.Send(request).ConfigureAwait(false);
} }
else else
{ {
@@ -410,7 +410,7 @@ namespace Discord
Content = queuedMessage.Text, Content = queuedMessage.Text,
MentionedUserIds = queuedMessage.MentionedUsers MentionedUserIds = queuedMessage.MentionedUsers
}; };
await _rest.Send(request).ConfigureAwait(false); await _clientRest.Send(request).ConfigureAwait(false);
} }
} }
catch (WebException) { break; } catch (WebException) { break; }

View File

@@ -73,7 +73,7 @@ namespace Discord
Allow = allow?.RawValue ?? 0, Allow = allow?.RawValue ?? 0,
Deny = deny?.RawValue ?? 0 Deny = deny?.RawValue ?? 0
}; };
return _rest.Send(request); return _clientRest.Send(request);
} }
public Task RemoveChannelPermissions(Channel channel, User user) public Task RemoveChannelPermissions(Channel channel, User user)
@@ -97,7 +97,7 @@ namespace Discord
try try
{ {
var perms = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != userOrRoleId).FirstOrDefault(); var perms = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != userOrRoleId).FirstOrDefault();
await _rest.Send(new RemoveChannelPermissionsRequest(channel.Id, userOrRoleId)).ConfigureAwait(false); await _clientRest.Send(new RemoveChannelPermissionsRequest(channel.Id, userOrRoleId)).ConfigureAwait(false);
} }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
} }

View File

@@ -87,7 +87,7 @@ namespace Discord
CheckReady(); CheckReady();
var request1 = new CreateRoleRequest(server.Id); var request1 = new CreateRoleRequest(server.Id);
var response1 = await _rest.Send(request1).ConfigureAwait(false); var response1 = await _clientRest.Send(request1).ConfigureAwait(false);
var role = _roles.GetOrAdd(response1.Id, server.Id); var role = _roles.GetOrAdd(response1.Id, server.Id);
role.Update(response1); role.Update(response1);
@@ -98,7 +98,7 @@ namespace Discord
Color = (color ?? Color.Default).RawValue, Color = (color ?? Color.Default).RawValue,
IsHoisted = isHoisted IsHoisted = isHoisted
}; };
var response2 = await _rest.Send(request2).ConfigureAwait(false); var response2 = await _clientRest.Send(request2).ConfigureAwait(false);
role.Update(response2); role.Update(response2);
return role; return role;
@@ -117,7 +117,7 @@ namespace Discord
IsHoisted = isHoisted ?? role.IsHoisted IsHoisted = isHoisted ?? role.IsHoisted
}; };
var response = await _rest.Send(request1).ConfigureAwait(false); var response = await _clientRest.Send(request1).ConfigureAwait(false);
if (position != null) if (position != null)
{ {
@@ -146,7 +146,7 @@ namespace Discord
RoleIds = roles.Skip(minPos).Select(x => x.Id).ToArray(), RoleIds = roles.Skip(minPos).Select(x => x.Id).ToArray(),
StartPos = minPos StartPos = minPos
}; };
await _rest.Send(request2).ConfigureAwait(false); await _clientRest.Send(request2).ConfigureAwait(false);
} }
} }
@@ -155,7 +155,7 @@ namespace Discord
if (role == null) throw new ArgumentNullException(nameof(role)); if (role == null) throw new ArgumentNullException(nameof(role));
CheckReady(); CheckReady();
try { await _rest.Send(new DeleteRoleRequest(role.Server.Id, role.Id)).ConfigureAwait(false); } try { await _clientRest.Send(new DeleteRoleRequest(role.Server.Id, role.Id)).ConfigureAwait(false); }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
} }
@@ -166,7 +166,7 @@ namespace Discord
if (startPos < 0) throw new ArgumentOutOfRangeException(nameof(startPos), "startPos must be a positive integer."); if (startPos < 0) throw new ArgumentOutOfRangeException(nameof(startPos), "startPos must be a positive integer.");
CheckReady(); CheckReady();
return _rest.Send(new ReorderRolesRequest(server.Id) return _clientRest.Send(new ReorderRolesRequest(server.Id)
{ {
RoleIds = roles.Select(x => x.Id).ToArray(), RoleIds = roles.Select(x => x.Id).ToArray(),
StartPos = startPos StartPos = startPos

View File

@@ -94,7 +94,7 @@ namespace Discord
Region = region.Id, Region = region.Id,
IconBase64 = Base64Image(iconType, icon, null) IconBase64 = Base64Image(iconType, icon, null)
}; };
var response = await _rest.Send(request).ConfigureAwait(false); var response = await _clientRest.Send(request).ConfigureAwait(false);
var server = _servers.GetOrAdd(response.Id); var server = _servers.GetOrAdd(response.Id);
server.Update(response); server.Update(response);
@@ -115,7 +115,7 @@ namespace Discord
AFKChannelId = server.AFKChannel?.Id, AFKChannelId = server.AFKChannel?.Id,
AFKTimeout = server.AFKTimeout AFKTimeout = server.AFKTimeout
}; };
var response = await _rest.Send(request).ConfigureAwait(false); var response = await _clientRest.Send(request).ConfigureAwait(false);
server.Update(response); server.Update(response);
} }
@@ -125,7 +125,7 @@ namespace Discord
if (server == null) throw new ArgumentNullException(nameof(server)); if (server == null) throw new ArgumentNullException(nameof(server));
CheckReady(); CheckReady();
try { await _rest.Send(new LeaveGuildRequest(server.Id)).ConfigureAwait(false); } try { await _clientRest.Send(new LeaveGuildRequest(server.Id)).ConfigureAwait(false); }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
} }
@@ -133,7 +133,7 @@ namespace Discord
{ {
CheckReady(); CheckReady();
var regions = await _rest.Send(new GetVoiceRegionsRequest()).ConfigureAwait(false); var regions = await _clientRest.Send(new GetVoiceRegionsRequest()).ConfigureAwait(false);
return regions.Select(x => new Region(x.Id, x.Name, x.Hostname, x.Port)); return regions.Select(x => new Region(x.Id, x.Name, x.Hostname, x.Port));
} }
} }

View File

@@ -218,7 +218,7 @@ namespace Discord
VoiceChannelId = voiceChannel?.Id, VoiceChannelId = voiceChannel?.Id,
RoleIds = roleIds.ToArray() RoleIds = roleIds.ToArray()
}; };
return _rest.Send(request); return _clientRest.Send(request);
} }
public Task KickUser(User user) public Task KickUser(User user)
@@ -228,7 +228,7 @@ namespace Discord
CheckReady(); CheckReady();
var request = new KickMemberRequest(user.Server.Id, user.Id); var request = new KickMemberRequest(user.Server.Id, user.Id);
return _rest.Send(request); return _clientRest.Send(request);
} }
public Task BanUser(User user, int pruneDays = 0) public Task BanUser(User user, int pruneDays = 0)
{ {
@@ -238,7 +238,7 @@ namespace Discord
var request = new AddGuildBanRequest(user.Server.Id, user.Id); var request = new AddGuildBanRequest(user.Server.Id, user.Id);
request.PruneDays = pruneDays; request.PruneDays = pruneDays;
return _rest.Send(request); return _clientRest.Send(request);
} }
public async Task UnbanUser(Server server, ulong userId) public async Task UnbanUser(Server server, ulong userId)
{ {
@@ -246,7 +246,7 @@ namespace Discord
if (userId <= 0) throw new ArgumentOutOfRangeException(nameof(userId)); if (userId <= 0) throw new ArgumentOutOfRangeException(nameof(userId));
CheckReady(); CheckReady();
try { await _rest.Send(new RemoveGuildBanRequest(server.Id, userId)).ConfigureAwait(false); } try { await _clientRest.Send(new RemoveGuildBanRequest(server.Id, userId)).ConfigureAwait(false); }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
} }
@@ -261,7 +261,7 @@ namespace Discord
Days = days, Days = days,
IsSimulation = simulate IsSimulation = simulate
}; };
var response = await _rest.Send(request).ConfigureAwait(false); var response = await _clientRest.Send(request).ConfigureAwait(false);
return response.Pruned; return response.Pruned;
} }
@@ -289,7 +289,7 @@ namespace Discord
AvatarBase64 = Base64Image(avatarType, avatar, _privateUser?.AvatarId) AvatarBase64 = Base64Image(avatarType, avatar, _privateUser?.AvatarId)
}; };
await _rest.Send(request).ConfigureAwait(false); await _clientRest.Send(request).ConfigureAwait(false);
if (password != null) if (password != null)
{ {
@@ -298,8 +298,8 @@ namespace Discord
Email = _currentUser.Email, Email = _currentUser.Email,
Password = password Password = password
}; };
var loginResponse = await _rest.Send(loginRequest).ConfigureAwait(false); var loginResponse = await _clientRest.Send(loginRequest).ConfigureAwait(false);
_rest.SetToken(loginResponse.Token); _clientRest.SetToken(loginResponse.Token);
} }
} }

View File

@@ -54,7 +54,7 @@ namespace Discord
public partial class DiscordClient public partial class DiscordClient
{ {
private readonly LogService _log; private readonly LogService _log;
private readonly Logger _logger, _restLogger, _cacheLogger; private readonly Logger _logger, _restLogger, _cacheLogger, _webSocketLogger;
private readonly Dictionary<Type, object> _singletons; private readonly Dictionary<Type, object> _singletons;
private readonly object _cacheLock; private readonly object _cacheLock;
private readonly Semaphore _lock; private readonly Semaphore _lock;
@@ -73,8 +73,9 @@ namespace Discord
private ConnectionState _state; private ConnectionState _state;
/// <summary> Gives direct access to the underlying DiscordAPIClient. This can be used to modify objects not in cache. </summary> /// <summary> Gives direct access to the underlying DiscordAPIClient. This can be used to modify objects not in cache. </summary>
public RestClient Rest => _rest; public RestClient ClientAPI => _clientRest;
private readonly RestClient _rest; public RestClient StatusAPI => _statusRest;
private readonly RestClient _clientRest, _statusRest;
/// <summary> Returns the internal websocket object. </summary> /// <summary> Returns the internal websocket object. </summary>
public GatewaySocket WebSocket => _webSocket; public GatewaySocket WebSocket => _webSocket;
@@ -122,7 +123,10 @@ namespace Discord
//Services //Services
_singletons = new Dictionary<Type, object>(); _singletons = new Dictionary<Type, object>();
_log = AddService(new LogService()); _log = AddService(new LogService());
_logger = CreateMainLogger(); _logger = _log.CreateLogger("Client");
_cacheLogger = _log.CreateLogger("Cache");
_restLogger = _log.CreateLogger("Rest");
_webSocketLogger = _log.CreateLogger("WebSocket");
//Async //Async
_lock = new Semaphore(1, 1); _lock = new Semaphore(1, 1);
@@ -133,20 +137,17 @@ namespace Discord
//Cache //Cache
_cacheLock = new object(); _cacheLock = new object();
_channels = new Channels(this, _cacheLock); _channels = new Channels(this, _cacheLock);
_users = new Users(this, _cacheLock); _users = new Users(this, _cacheLock);
_messages = new Messages(this, _cacheLock, Config.MessageCacheSize > 0); _messages = new Messages(this, _cacheLock, Config.MessageCacheSize > 0);
_roles = new Roles(this, _cacheLock); _roles = new Roles(this, _cacheLock);
_servers = new Servers(this, _cacheLock); _servers = new Servers(this, _cacheLock);
_globalUsers = new GlobalUsers(this, _cacheLock); _globalUsers = new GlobalUsers(this, _cacheLock);
_cacheLogger = CreateCacheLogger();
//Networking //Networking
_restLogger = CreateRestLogger(); _clientRest = new RestClient(_config, _restLogger, DiscordConfig.ClientAPIUrl);
_rest = new RestClient(_config, _restLogger); _statusRest = new RestClient(_config, _restLogger, DiscordConfig.StatusAPIUrl);
_webSocket = new GatewaySocket(this, _webSocketLogger);
var webSocketLogger = _log.CreateLogger("WebSocket");
_webSocket = new GatewaySocket(this, webSocketLogger);
_webSocket.Connected += (s, e) => _webSocket.Connected += (s, e) =>
{ {
if (_state == ConnectionState.Connecting) if (_state == ConnectionState.Connecting)
@@ -162,94 +163,80 @@ namespace Discord
_pendingMessages = new ConcurrentQueue<MessageQueueItem>(); _pendingMessages = new ConcurrentQueue<MessageQueueItem>();
Connected += async (s, e) => Connected += async (s, e) =>
{ {
_rest.SetCancelToken(_cancelToken); _clientRest.SetCancelToken(_cancelToken);
await SendStatus().ConfigureAwait(false); await SendStatus().ConfigureAwait(false);
}; };
//Import/Export //Import/Export
_messageImporter = new JsonSerializer(); _messageImporter = new JsonSerializer();
_messageImporter.ContractResolver = new Message.ImportResolver(); _messageImporter.ContractResolver = new Message.ImportResolver();
}
private Logger CreateMainLogger() //Logging
{
Logger logger = _log.CreateLogger("Client");
if (_log.Level >= LogSeverity.Info) if (_log.Level >= LogSeverity.Info)
{ {
JoinedServer += (s, e) => logger.Info($"Server Created: {e.Server?.Name ?? "[Private]"}"); JoinedServer += (s, e) => _logger.Info($"Server Created: {e.Server?.Name ?? "[Private]"}");
LeftServer += (s, e) => logger.Info($"Server Destroyed: {e.Server?.Name ?? "[Private]"}"); LeftServer += (s, e) => _logger.Info($"Server Destroyed: {e.Server?.Name ?? "[Private]"}");
ServerUpdated += (s, e) => logger.Info($"Server Updated: {e.Server?.Name ?? "[Private]"}"); ServerUpdated += (s, e) => _logger.Info($"Server Updated: {e.Server?.Name ?? "[Private]"}");
ServerAvailable += (s, e) => logger.Info($"Server Available: {e.Server?.Name ?? "[Private]"}"); ServerAvailable += (s, e) => _logger.Info($"Server Available: {e.Server?.Name ?? "[Private]"}");
ServerUnavailable += (s, e) => logger.Info($"Server Unavailable: {e.Server?.Name ?? "[Private]"}"); ServerUnavailable += (s, e) => _logger.Info($"Server Unavailable: {e.Server?.Name ?? "[Private]"}");
ChannelCreated += (s, e) => logger.Info($"Channel Created: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}"); ChannelCreated += (s, e) => _logger.Info($"Channel Created: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}");
ChannelDestroyed += (s, e) => logger.Info($"Channel Destroyed: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}"); ChannelDestroyed += (s, e) => _logger.Info($"Channel Destroyed: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}");
ChannelUpdated += (s, e) => logger.Info($"Channel Updated: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}"); ChannelUpdated += (s, e) => _logger.Info($"Channel Updated: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}");
MessageReceived += (s, e) => logger.Info($"Message Received: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}"); MessageReceived += (s, e) => _logger.Info($"Message Received: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}");
MessageDeleted += (s, e) => logger.Info($"Message Deleted: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}"); MessageDeleted += (s, e) => _logger.Info($"Message Deleted: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}");
MessageUpdated += (s, e) => logger.Info($"Message Update: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}"); MessageUpdated += (s, e) => _logger.Info($"Message Update: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}");
RoleCreated += (s, e) => logger.Info($"Role Created: {e.Server?.Name ?? "[Private]"}/{e.Role?.Name}"); RoleCreated += (s, e) => _logger.Info($"Role Created: {e.Server?.Name ?? "[Private]"}/{e.Role?.Name}");
RoleUpdated += (s, e) => logger.Info($"Role Updated: {e.Server?.Name ?? "[Private]"}/{e.Role?.Name}"); RoleUpdated += (s, e) => _logger.Info($"Role Updated: {e.Server?.Name ?? "[Private]"}/{e.Role?.Name}");
RoleDeleted += (s, e) => logger.Info($"Role Deleted: {e.Server?.Name ?? "[Private]"}/{e.Role?.Name}"); RoleDeleted += (s, e) => _logger.Info($"Role Deleted: {e.Server?.Name ?? "[Private]"}/{e.Role?.Name}");
UserBanned += (s, e) => logger.Info($"Banned User: {e.Server?.Name ?? "[Private]" }/{e.UserId}"); UserBanned += (s, e) => _logger.Info($"Banned User: {e.Server?.Name ?? "[Private]" }/{e.UserId}");
UserUnbanned += (s, e) => logger.Info($"Unbanned User: {e.Server?.Name ?? "[Private]"}/{e.UserId}"); UserUnbanned += (s, e) => _logger.Info($"Unbanned User: {e.Server?.Name ?? "[Private]"}/{e.UserId}");
UserJoined += (s, e) => logger.Info($"User Joined: {e.Server?.Name ?? "[Private]"}/{e.User.Name}"); UserJoined += (s, e) => _logger.Info($"User Joined: {e.Server?.Name ?? "[Private]"}/{e.User.Name}");
UserLeft += (s, e) => logger.Info($"User Left: {e.Server?.Name ?? "[Private]"}/{e.User.Name}"); UserLeft += (s, e) => _logger.Info($"User Left: {e.Server?.Name ?? "[Private]"}/{e.User.Name}");
UserUpdated += (s, e) => logger.Info($"User Updated: {e.Server?.Name ?? "[Private]"}/{e.User.Name}"); UserUpdated += (s, e) => _logger.Info($"User Updated: {e.Server?.Name ?? "[Private]"}/{e.User.Name}");
UserVoiceStateUpdated += (s, e) => logger.Info($"Voice Updated: {e.Server?.Name ?? "[Private]"}/{e.User.Name}"); UserVoiceStateUpdated += (s, e) => _logger.Info($"Voice Updated: {e.Server?.Name ?? "[Private]"}/{e.User.Name}");
ProfileUpdated += (s, e) => logger.Info("Profile Updated"); ProfileUpdated += (s, e) => _logger.Info("Profile Updated");
} }
if (_log.Level >= LogSeverity.Verbose)
{
UserIsTypingUpdated += (s, e) => logger.Verbose($"Is Typing: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.User?.Name}");
MessageAcknowledged += (s, e) => logger.Verbose($"Ack Message: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}");
MessageSent += (s, e) => logger.Verbose($"Sent Message: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}");
UserPresenceUpdated += (s, e) => logger.Verbose($"Presence Updated: {e.Server?.Name ?? "[Private]"}/{e.User?.Name}");
}
return logger;
}
private Logger CreateRestLogger()
{
Logger logger = null;
if (_log.Level >= LogSeverity.Verbose) if (_log.Level >= LogSeverity.Verbose)
{ {
logger = _log.CreateLogger("Rest"); UserIsTypingUpdated += (s, e) => _logger.Verbose($"Is Typing: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.User?.Name}");
_rest.OnRequest += (s, e) => MessageAcknowledged += (s, e) => _logger.Verbose($"Ack Message: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}");
{ MessageSent += (s, e) => _logger.Verbose($"Sent Message: {e.Server?.Name ?? "[Private]"}/{e.Channel?.Name}/{e.Message?.Id}");
if (e.Payload != null) UserPresenceUpdated += (s, e) => _logger.Verbose($"Presence Updated: {e.Server?.Name ?? "[Private]"}/{e.User?.Name}");
logger.Verbose( $"{e.Method} {e.Path}: {Math.Round(e.ElapsedMilliseconds, 2)} ms ({e.Payload})");
else
logger.Verbose( $"{e.Method} {e.Path}: {Math.Round(e.ElapsedMilliseconds, 2)} ms");
};
} }
return logger;
} if (_log.Level >= LogSeverity.Verbose)
private Logger CreateCacheLogger() {
{ _clientRest.OnRequest += (s, e) =>
Logger logger = null; {
if (e.Payload != null)
_restLogger.Verbose($"{e.Method} {e.Path}: {Math.Round(e.ElapsedMilliseconds, 2)} ms ({e.Payload})");
else
_restLogger.Verbose($"{e.Method} {e.Path}: {Math.Round(e.ElapsedMilliseconds, 2)} ms");
};
}
if (_log.Level >= LogSeverity.Debug) if (_log.Level >= LogSeverity.Debug)
{ {
logger = _log.CreateLogger("Cache"); _channels.ItemCreated += (s, e) => _cacheLogger.Debug($"Created Channel {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}");
_channels.ItemCreated += (s, e) => logger.Debug( $"Created Channel {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}"); _channels.ItemDestroyed += (s, e) => _cacheLogger.Debug($"Destroyed Channel {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}");
_channels.ItemDestroyed += (s, e) => logger.Debug( $"Destroyed Channel {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}"); _channels.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Channels");
_channels.Cleared += (s, e) => logger.Debug( $"Cleared Channels"); _users.ItemCreated += (s, e) => _cacheLogger.Debug($"Created User {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}");
_users.ItemCreated += (s, e) => logger.Debug( $"Created User {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}"); _users.ItemDestroyed += (s, e) => _cacheLogger.Debug($"Destroyed User {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}");
_users.ItemDestroyed += (s, e) => logger.Debug( $"Destroyed User {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}"); _users.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Users");
_users.Cleared += (s, e) => logger.Debug( $"Cleared Users"); _messages.ItemCreated += (s, e) => _cacheLogger.Debug($"Created Message {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Channel.Id}/{e.Item.Id}");
_messages.ItemCreated += (s, e) => logger.Debug( $"Created Message {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Channel.Id}/{e.Item.Id}"); _messages.ItemDestroyed += (s, e) => _cacheLogger.Debug($"Destroyed Message {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Channel.Id}/{e.Item.Id}");
_messages.ItemDestroyed += (s, e) => logger.Debug( $"Destroyed Message {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Channel.Id}/{e.Item.Id}"); _messages.ItemRemapped += (s, e) => _cacheLogger.Debug($"Remapped Message {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Channel.Id}/[{e.OldId} -> {e.NewId}]");
_messages.ItemRemapped += (s, e) => logger.Debug( $"Remapped Message {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Channel.Id}/[{e.OldId} -> {e.NewId}]"); _messages.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Messages");
_messages.Cleared += (s, e) => logger.Debug( $"Cleared Messages"); _roles.ItemCreated += (s, e) => _cacheLogger.Debug($"Created Role {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}");
_roles.ItemCreated += (s, e) => logger.Debug( $"Created Role {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}"); _roles.ItemDestroyed += (s, e) => _cacheLogger.Debug($"Destroyed Role {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}");
_roles.ItemDestroyed += (s, e) => logger.Debug( $"Destroyed Role {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Id}"); _roles.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Roles");
_roles.Cleared += (s, e) => logger.Debug( $"Cleared Roles"); _servers.ItemCreated += (s, e) => _cacheLogger.Debug($"Created Server {e.Item.Id}");
_servers.ItemCreated += (s, e) => logger.Debug( $"Created Server {e.Item.Id}"); _servers.ItemDestroyed += (s, e) => _cacheLogger.Debug($"Destroyed Server {e.Item.Id}");
_servers.ItemDestroyed += (s, e) => logger.Debug( $"Destroyed Server {e.Item.Id}"); _servers.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Servers");
_servers.Cleared += (s, e) => logger.Debug( $"Cleared Servers"); _globalUsers.ItemCreated += (s, e) => _cacheLogger.Debug($"Created User {e.Item.Id}");
_globalUsers.ItemCreated += (s, e) => logger.Debug( $"Created User {e.Item.Id}"); _globalUsers.ItemDestroyed += (s, e) => _cacheLogger.Debug($"Destroyed User {e.Item.Id}");
_globalUsers.ItemDestroyed += (s, e) => logger.Debug( $"Destroyed User {e.Item.Id}"); _globalUsers.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Users");
_globalUsers.Cleared += (s, e) => logger.Debug( $"Cleared Users");
} }
return logger;
} }
/// <summary> Connects to the Discord server with the provided email and password. </summary> /// <summary> Connects to the Discord server with the provided email and password. </summary>
@@ -342,7 +329,7 @@ namespace Discord
if (token == null) if (token == null)
{ {
var request = new LoginRequest() { Email = email, Password = password }; var request = new LoginRequest() { Email = email, Password = password };
var response = await _rest.Send(request).ConfigureAwait(false); var response = await _clientRest.Send(request).ConfigureAwait(false);
token = response.Token; token = response.Token;
SaveToken(tokenPath, key, token); SaveToken(tokenPath, key, token);
useCache = false; useCache = false;
@@ -351,17 +338,17 @@ namespace Discord
else else
{ {
var request = new LoginRequest() { Email = email, Password = password }; var request = new LoginRequest() { Email = email, Password = password };
var response = await _rest.Send(request).ConfigureAwait(false); var response = await _clientRest.Send(request).ConfigureAwait(false);
token = response.Token; token = response.Token;
} }
} }
_token = token; _token = token;
_rest.SetToken(token); _clientRest.SetToken(token);
//Get gateway and check token //Get gateway and check token
try try
{ {
var gatewayResponse = await _rest.Send(new GatewayRequest()).ConfigureAwait(false); var gatewayResponse = await _clientRest.Send(new GatewayRequest()).ConfigureAwait(false);
var gateway = gatewayResponse.Url; var gateway = gatewayResponse.Url;
_gateway = gateway; _gateway = gateway;
if (_config.LogLevel >= LogSeverity.Verbose) if (_config.LogLevel >= LogSeverity.Verbose)
@@ -395,7 +382,7 @@ namespace Discord
while (_pendingMessages.TryDequeue(out ignored)) { } while (_pendingMessages.TryDequeue(out ignored)) { }
} }
await _rest.Send(new LogoutRequest()).ConfigureAwait(false); await _clientRest.Send(new LogoutRequest()).ConfigureAwait(false);
_channels.Clear(); _channels.Clear();
_users.Clear(); _users.Clear();
@@ -722,7 +709,7 @@ namespace Discord
case "VOICE_STATE_UPDATE": case "VOICE_STATE_UPDATE":
{ {
var data = e.Payload.ToObject<VoiceStateUpdateEvent>(_webSocket.Serializer); var data = e.Payload.ToObject<VoiceStateUpdateEvent>(_webSocket.Serializer);
var user = _users[data.User.Id, data.GuildId]; var user = _users[data.UserId, data.GuildId];
if (user != null) if (user != null)
{ {
/*var voiceChannel = user.VoiceChannel; /*var voiceChannel = user.VoiceChannel;

View File

@@ -192,7 +192,7 @@ namespace Discord
} }
foreach (var subModel in model.VoiceStates) foreach (var subModel in model.VoiceStates)
{ {
var user = usersCache[subModel.User.Id, Id]; var user = usersCache[subModel.UserId, Id];
if (user != null) if (user != null)
user.Update(subModel); user.Update(subModel);
} }

View File

@@ -13,13 +13,13 @@ namespace Discord.Net.Rest
private readonly IRestEngine _engine; private readonly IRestEngine _engine;
private CancellationToken _cancelToken; private CancellationToken _cancelToken;
public RestClient(DiscordConfig config, Logger logger) public RestClient(DiscordConfig config, Logger logger, string baseUrl)
{ {
_config = config; _config = config;
#if !DOTNET5_4 #if !DOTNET5_4
_engine = new RestSharpEngine(config, logger, DiscordConfig.ClientAPIUrl); _engine = new RestSharpEngine(config, logger, baseUrl);
#else #else
//_engine = new BuiltInRestEngine(config, logger); //_engine = new BuiltInRestEngine(config, logger, baseUrl);
#endif #endif
} }

View File

@@ -1,5 +1,4 @@
#if !DOTNET5_4 #if !DOTNET5_4
using Discord.API;
using RestSharp; using RestSharp;
using System; using System;
using System.IO; using System.IO;