From b8e4f6c5dab74874cd9de0d3940794c8c7b55b8c Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 16 Dec 2015 18:56:34 -0400 Subject: [PATCH] Fixed several issues --- .../API/Client/Common/MemberVoiceState.cs | 7 +- src/Discord.Net/API/Client/Common/Role.cs | 23 +++ src/Discord.Net/API/Client/Common/User.cs | 12 ++ .../GatewaySocket/Events/GuildBanAdd.cs | 4 +- .../GatewaySocket/Events/GuildBanRemove.cs | 4 +- .../GatewaySocket/Events/GuildRoleCreate.cs | 4 +- .../GatewaySocket/Events/GuildRoleUpdate.cs | 4 +- .../API/Client/GatewaySocket/Events/Ready.cs | 20 +- .../Client/GatewaySocket/Events/Redirect.cs | 2 +- .../Client/GatewaySocket/Events/Resumed.cs | 2 +- .../GatewaySocket/Events/TypingStart.cs | 6 +- .../GatewaySocket/Events/VoiceServerUpdate.cs | 8 +- .../API/Client/IWebSocketMessage.cs | 10 +- .../API/Client/Rest/AcceptInvite.cs | 2 +- src/Discord.Net/API/Client/Rest/AckMessage.cs | 2 +- .../API/Client/Rest/AddChannelPermission.cs | 30 +++ .../API/Client/Rest/AddGuildBan.cs | 2 +- .../API/Client/Rest/BroadcastTyping.cs | 2 +- .../API/Client/Rest/CreateChannel.cs | 2 +- .../API/Client/Rest/CreateGuild.cs | 2 +- .../API/Client/Rest/CreateInvite.cs | 2 +- .../API/Client/Rest/CreatePrivateChannel.cs | 2 +- src/Discord.Net/API/Client/Rest/CreateRole.cs | 2 +- .../API/Client/Rest/DeleteChannel.cs | 2 +- .../API/Client/Rest/DeleteInvite.cs | 2 +- .../API/Client/Rest/DeleteMessage.cs | 2 +- src/Discord.Net/API/Client/Rest/DeleteRole.cs | 2 +- src/Discord.Net/API/Client/Rest/Gateway.cs | 2 +- src/Discord.Net/API/Client/Rest/GetInvite.cs | 2 +- src/Discord.Net/API/Client/Rest/GetInvites.cs | 2 +- .../API/Client/Rest/GetMessages.cs | 2 +- .../API/Client/Rest/GetVoiceRegions.cs | 2 +- src/Discord.Net/API/Client/Rest/GetWidget.cs | 2 +- src/Discord.Net/API/Client/Rest/KickMember.cs | 2 +- src/Discord.Net/API/Client/Rest/LeaveGuild.cs | 2 +- src/Discord.Net/API/Client/Rest/Login.cs | 24 +++ src/Discord.Net/API/Client/Rest/Logout.cs | 2 +- .../API/Client/Rest/PruneMembers.cs | 2 +- .../Client/Rest/RemoveChannelPermission.cs | 2 +- .../API/Client/Rest/RemoveGuildBan.cs | 2 +- .../API/Client/Rest/ReorderChannels.cs | 2 +- .../API/Client/Rest/ReorderRoles.cs | 2 +- src/Discord.Net/API/Client/Rest/SendFile.cs | 2 +- .../API/Client/Rest/SendMessage.cs | 2 +- .../API/Client/Rest/UpdateChannel.cs | 2 +- .../API/Client/Rest/UpdateGuild.cs | 2 +- .../API/Client/Rest/UpdateMember.cs | 2 +- .../API/Client/Rest/UpdateMessage.cs | 2 +- .../API/Client/Rest/UpdateProfile.cs | 2 +- src/Discord.Net/API/Client/Rest/UpdateRole.cs | 2 +- src/Discord.Net/API/Status/Common/Incident.cs | 12 +- src/Discord.Net/API/Status/Rest/Active.cs | 2 +- src/Discord.Net/API/Status/Rest/Upcoming.cs | 2 +- src/Discord.Net/DiscordClient.Channels.cs | 10 +- src/Discord.Net/DiscordClient.Invites.cs | 10 +- src/Discord.Net/DiscordClient.Messages.cs | 18 +- src/Discord.Net/DiscordClient.Permissions.cs | 4 +- src/Discord.Net/DiscordClient.Roles.cs | 12 +- src/Discord.Net/DiscordClient.Servers.cs | 8 +- src/Discord.Net/DiscordClient.Users.cs | 16 +- src/Discord.Net/DiscordClient.cs | 177 ++++++++---------- src/Discord.Net/Models/Server.cs | 2 +- src/Discord.Net/Net/Rest/RestClient.cs | 6 +- src/Discord.Net/Net/Rest/SharpRestEngine.cs | 1 - 64 files changed, 295 insertions(+), 215 deletions(-) create mode 100644 src/Discord.Net/API/Client/Common/Role.cs create mode 100644 src/Discord.Net/API/Client/Common/User.cs create mode 100644 src/Discord.Net/API/Client/Rest/AddChannelPermission.cs create mode 100644 src/Discord.Net/API/Client/Rest/Login.cs diff --git a/src/Discord.Net/API/Client/Common/MemberVoiceState.cs b/src/Discord.Net/API/Client/Common/MemberVoiceState.cs index 1f16b667b..4aab1774c 100644 --- a/src/Discord.Net/API/Client/Common/MemberVoiceState.cs +++ b/src/Discord.Net/API/Client/Common/MemberVoiceState.cs @@ -3,8 +3,13 @@ using Newtonsoft.Json; 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))] public ulong? ChannelId { get; set; } [JsonProperty("session_id")] diff --git a/src/Discord.Net/API/Client/Common/Role.cs b/src/Discord.Net/API/Client/Common/Role.cs new file mode 100644 index 000000000..59431989a --- /dev/null +++ b/src/Discord.Net/API/Client/Common/Role.cs @@ -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; } + } +} diff --git a/src/Discord.Net/API/Client/Common/User.cs b/src/Discord.Net/API/Client/Common/User.cs new file mode 100644 index 000000000..86c6f22f6 --- /dev/null +++ b/src/Discord.Net/API/Client/Common/User.cs @@ -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; } + } +} diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildBanAdd.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildBanAdd.cs index f58db2bf2..a89d19619 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildBanAdd.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildBanAdd.cs @@ -6,8 +6,8 @@ namespace Discord.API.Client.GatewaySocket public sealed class GuildBanAddEvent { [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] - public ulong GuildId { get; } + public ulong GuildId { get; set; } [JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))] - public ulong UserId { get; } + public ulong UserId { get; set; } } } diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildBanRemove.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildBanRemove.cs index 7b0dbed0c..c490fdc9a 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildBanRemove.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildBanRemove.cs @@ -6,8 +6,8 @@ namespace Discord.API.Client.GatewaySocket public sealed class GuildBanRemoveEvent { [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] - public ulong GuildId { get; } + public ulong GuildId { get; set; } [JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))] - public ulong UserId { get; } + public ulong UserId { get; set; } } } diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildRoleCreate.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildRoleCreate.cs index b181305fb..28f999d5f 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildRoleCreate.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildRoleCreate.cs @@ -6,8 +6,8 @@ namespace Discord.API.Client.GatewaySocket public sealed class GuildRoleCreateEvent { [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] - public ulong GuildId { get; } + public ulong GuildId { get; set; } [JsonProperty("role")] - public Role Data { get; } + public Role Data { get; set; } } } diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildRoleUpdate.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildRoleUpdate.cs index 614ffc2ab..291bab043 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildRoleUpdate.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildRoleUpdate.cs @@ -6,8 +6,8 @@ namespace Discord.API.Client.GatewaySocket public sealed class GuildRoleUpdateEvent { [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] - public ulong GuildId { get; } + public ulong GuildId { get; set; } [JsonProperty("role")] - public Role Data { get; } + public Role Data { get; set; } } } diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/Ready.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/Ready.cs index 7a276f4d3..e1ce84ace 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/Ready.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/Ready.cs @@ -7,26 +7,26 @@ namespace Discord.API.Client.GatewaySocket public sealed class ReadState { [JsonProperty("id")] - public string ChannelId { get; } + public string ChannelId { get; set; } [JsonProperty("mention_count")] - public int MentionCount { get; } + public int MentionCount { get; set; } [JsonProperty("last_message_id")] - public string LastMessageId { get; } + public string LastMessageId { get; set; } } [JsonProperty("v")] - public int Version { get; } + public int Version { get; set; } [JsonProperty("user")] - public User User { get; } + public User User { get; set; } [JsonProperty("session_id")] - public string SessionId { get; } + public string SessionId { get; set; } [JsonProperty("read_state")] - public ReadState[] ReadStates { get; } + public ReadState[] ReadStates { get; set; } [JsonProperty("guilds")] - public ExtendedGuild[] Guilds { get; } + public ExtendedGuild[] Guilds { get; set; } [JsonProperty("private_channels")] - public Channel[] PrivateChannels { get; } + public Channel[] PrivateChannels { get; set; } [JsonProperty("heartbeat_interval")] - public int HeartbeatInterval { get; } + public int HeartbeatInterval { get; set; } } } diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/Redirect.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/Redirect.cs index 64d7bb379..26b2afd2d 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/Redirect.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/Redirect.cs @@ -5,6 +5,6 @@ namespace Discord.API.Client.GatewaySocket public sealed class RedirectEvent { [JsonProperty("url")] - public string Url { get; } + public string Url { get; set; } } } diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/Resumed.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/Resumed.cs index 2f1980cc8..7fd608b25 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/Resumed.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/Resumed.cs @@ -5,6 +5,6 @@ namespace Discord.API.Client.GatewaySocket public sealed class ResumedEvent { [JsonProperty("heartbeat_interval")] - public int HeartbeatInterval { get; } + public int HeartbeatInterval { get; set; } } } diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/TypingStart.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/TypingStart.cs index 735cd61ed..ee8abebe6 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/TypingStart.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/TypingStart.cs @@ -6,10 +6,10 @@ namespace Discord.API.Client.GatewaySocket public sealed class TypingStartEvent { [JsonProperty("user_id"), JsonConverter(typeof(LongStringConverter))] - public ulong UserId { get; } + public ulong UserId { get; set; } [JsonProperty("channel_id"), JsonConverter(typeof(LongStringConverter))] - public ulong ChannelId { get; } + public ulong ChannelId { get; set; } [JsonProperty("timestamp")] - public int Timestamp { get; } + public int Timestamp { get; set; } } } diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/VoiceServerUpdate.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/VoiceServerUpdate.cs index c97c9e50d..0725cc5d8 100644 --- a/src/Discord.Net/API/Client/GatewaySocket/Events/VoiceServerUpdate.cs +++ b/src/Discord.Net/API/Client/GatewaySocket/Events/VoiceServerUpdate.cs @@ -6,10 +6,10 @@ namespace Discord.API.Client.GatewaySocket public sealed class VoiceServerUpdateEvent { [JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))] - public ulong GuildId { get; } + public ulong GuildId { get; set; } [JsonProperty("endpoint")] - public string Endpoint { get; } + public string Endpoint { get; set; } [JsonProperty("token")] - public string Token { get; } - } + public string Token { get; set; } + } } diff --git a/src/Discord.Net/API/Client/IWebSocketMessage.cs b/src/Discord.Net/API/Client/IWebSocketMessage.cs index 42b5460fd..2d1fc8e0c 100644 --- a/src/Discord.Net/API/Client/IWebSocketMessage.cs +++ b/src/Discord.Net/API/Client/IWebSocketMessage.cs @@ -11,13 +11,13 @@ namespace Discord.API.Client public class WebSocketMessage { [JsonProperty("op")] - public int Operation { get; } - [JsonProperty("d")] - public object Payload { get; } + public int Operation { get; set; } [JsonProperty("t", NullValueHandling = NullValueHandling.Ignore)] - public string Type { get; } + public string Type { get; set; } [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(IWebSocketMessage msg) diff --git a/src/Discord.Net/API/Client/Rest/AcceptInvite.cs b/src/Discord.Net/API/Client/Rest/AcceptInvite.cs index 5e69b7d71..0918645af 100644 --- a/src/Discord.Net/API/Client/Rest/AcceptInvite.cs +++ b/src/Discord.Net/API/Client/Rest/AcceptInvite.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class AcceptInviteRequest : IRestRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/invite/{InviteId}"; + string IRestRequest.Endpoint => $"invite/{InviteId}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/AckMessage.cs b/src/Discord.Net/API/Client/Rest/AckMessage.cs index a21abe9c4..3345dc4d4 100644 --- a/src/Discord.Net/API/Client/Rest/AckMessage.cs +++ b/src/Discord.Net/API/Client/Rest/AckMessage.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class AckMessageRequest : IRestRequest { 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; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/AddChannelPermission.cs b/src/Discord.Net/API/Client/Rest/AddChannelPermission.cs new file mode 100644 index 000000000..609a62e68 --- /dev/null +++ b/src/Discord.Net/API/Client/Rest/AddChannelPermission.cs @@ -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; + } + } +} diff --git a/src/Discord.Net/API/Client/Rest/AddGuildBan.cs b/src/Discord.Net/API/Client/Rest/AddGuildBan.cs index e9e1a0596..cc0e2a591 100644 --- a/src/Discord.Net/API/Client/Rest/AddGuildBan.cs +++ b/src/Discord.Net/API/Client/Rest/AddGuildBan.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class AddGuildBanRequest : IRestRequest { 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; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/BroadcastTyping.cs b/src/Discord.Net/API/Client/Rest/BroadcastTyping.cs index 8f7128aee..3a4f1cb6a 100644 --- a/src/Discord.Net/API/Client/Rest/BroadcastTyping.cs +++ b/src/Discord.Net/API/Client/Rest/BroadcastTyping.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class BroadcastTypingRequest : IRestRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/typing"; + string IRestRequest.Endpoint => $"channels/{ChannelId}/typing"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/CreateChannel.cs b/src/Discord.Net/API/Client/Rest/CreateChannel.cs index cbb9c9e50..5f5dcaaee 100644 --- a/src/Discord.Net/API/Client/Rest/CreateChannel.cs +++ b/src/Discord.Net/API/Client/Rest/CreateChannel.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class CreateChannelRequest : IRestRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/channels"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/channels"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/CreateGuild.cs b/src/Discord.Net/API/Client/Rest/CreateGuild.cs index 222788e39..e7b00934b 100644 --- a/src/Discord.Net/API/Client/Rest/CreateGuild.cs +++ b/src/Discord.Net/API/Client/Rest/CreateGuild.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class CreateGuildRequest : IRestRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds"; + string IRestRequest.Endpoint => $"guilds"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/CreateInvite.cs b/src/Discord.Net/API/Client/Rest/CreateInvite.cs index 61421826d..8a7657b10 100644 --- a/src/Discord.Net/API/Client/Rest/CreateInvite.cs +++ b/src/Discord.Net/API/Client/Rest/CreateInvite.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class CreateInviteRequest : IRestRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/invites"; + string IRestRequest.Endpoint => $"channels/{ChannelId}/invites"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/CreatePrivateChannel.cs b/src/Discord.Net/API/Client/Rest/CreatePrivateChannel.cs index c0c7c2578..526267590 100644 --- a/src/Discord.Net/API/Client/Rest/CreatePrivateChannel.cs +++ b/src/Discord.Net/API/Client/Rest/CreatePrivateChannel.cs @@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest public sealed class CreatePrivateChannelRequest : IRestRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/users/@me/channels"; + string IRestRequest.Endpoint => $"users/@me/channels"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/CreateRole.cs b/src/Discord.Net/API/Client/Rest/CreateRole.cs index 6330484e4..4ece5afb7 100644 --- a/src/Discord.Net/API/Client/Rest/CreateRole.cs +++ b/src/Discord.Net/API/Client/Rest/CreateRole.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class CreateRoleRequest : IRestRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/roles"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/roles"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/DeleteChannel.cs b/src/Discord.Net/API/Client/Rest/DeleteChannel.cs index 1366335be..f0e02ab8d 100644 --- a/src/Discord.Net/API/Client/Rest/DeleteChannel.cs +++ b/src/Discord.Net/API/Client/Rest/DeleteChannel.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class DeleteChannelRequest : IRestRequest { string IRestRequest.Method => "DELETE"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}"; + string IRestRequest.Endpoint => $"channels/{ChannelId}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/DeleteInvite.cs b/src/Discord.Net/API/Client/Rest/DeleteInvite.cs index d965f19e8..8864e85b5 100644 --- a/src/Discord.Net/API/Client/Rest/DeleteInvite.cs +++ b/src/Discord.Net/API/Client/Rest/DeleteInvite.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class DeleteInviteRequest : IRestRequest { string IRestRequest.Method => "DELETE"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/invite/{InviteCode}"; + string IRestRequest.Endpoint => $"invite/{InviteCode}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/DeleteMessage.cs b/src/Discord.Net/API/Client/Rest/DeleteMessage.cs index 476a516e1..419ce6768 100644 --- a/src/Discord.Net/API/Client/Rest/DeleteMessage.cs +++ b/src/Discord.Net/API/Client/Rest/DeleteMessage.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class DeleteMessageRequest : IRestRequest { string IRestRequest.Method => "DELETE"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages/{MessageId}"; + string IRestRequest.Endpoint => $"channels/{ChannelId}/messages/{MessageId}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/DeleteRole.cs b/src/Discord.Net/API/Client/Rest/DeleteRole.cs index c547c7824..256c1b4a8 100644 --- a/src/Discord.Net/API/Client/Rest/DeleteRole.cs +++ b/src/Discord.Net/API/Client/Rest/DeleteRole.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class DeleteRoleRequest : IRestRequest { string IRestRequest.Method => "DELETE"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/roles/{RoleId}"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/roles/{RoleId}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/Gateway.cs b/src/Discord.Net/API/Client/Rest/Gateway.cs index baa24bf74..e728b46a0 100644 --- a/src/Discord.Net/API/Client/Rest/Gateway.cs +++ b/src/Discord.Net/API/Client/Rest/Gateway.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class GatewayRequest : IRestRequest { string IRestRequest.Method => "GET"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/gateway"; + string IRestRequest.Endpoint => $"gateway"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; } diff --git a/src/Discord.Net/API/Client/Rest/GetInvite.cs b/src/Discord.Net/API/Client/Rest/GetInvite.cs index 5683adad8..46fd449b0 100644 --- a/src/Discord.Net/API/Client/Rest/GetInvite.cs +++ b/src/Discord.Net/API/Client/Rest/GetInvite.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class GetInviteRequest : IRestRequest { string IRestRequest.Method => "GET"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/invite/{InviteCode}"; + string IRestRequest.Endpoint => $"invite/{InviteCode}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/GetInvites.cs b/src/Discord.Net/API/Client/Rest/GetInvites.cs index 546e09015..4dce7d044 100644 --- a/src/Discord.Net/API/Client/Rest/GetInvites.cs +++ b/src/Discord.Net/API/Client/Rest/GetInvites.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class GetInvitesRequest : IRestRequest { string IRestRequest.Method => "GET"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/invites"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/invites"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/GetMessages.cs b/src/Discord.Net/API/Client/Rest/GetMessages.cs index 51c7bf2e3..5e58c6488 100644 --- a/src/Discord.Net/API/Client/Rest/GetMessages.cs +++ b/src/Discord.Net/API/Client/Rest/GetMessages.cs @@ -15,7 +15,7 @@ namespace Discord.API.Client.Rest this.AddQueryParam(query, "limit", Limit.ToString()); if (RelativeDir != null) this.AddQueryParam(query, RelativeDir, RelativeId.Value.ToString()); - return $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages{query}"; + return $"channels/{ChannelId}/messages{query}"; } } object IRestRequest.Payload => null; diff --git a/src/Discord.Net/API/Client/Rest/GetVoiceRegions.cs b/src/Discord.Net/API/Client/Rest/GetVoiceRegions.cs index 60882d8c6..2b7f3a869 100644 --- a/src/Discord.Net/API/Client/Rest/GetVoiceRegions.cs +++ b/src/Discord.Net/API/Client/Rest/GetVoiceRegions.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class GetVoiceRegionsRequest : IRestRequest { string IRestRequest.Method => "GET"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/voice/regions"; + string IRestRequest.Endpoint => $"voice/regions"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; } diff --git a/src/Discord.Net/API/Client/Rest/GetWidget.cs b/src/Discord.Net/API/Client/Rest/GetWidget.cs index bb4e46f23..cf5121396 100644 --- a/src/Discord.Net/API/Client/Rest/GetWidget.cs +++ b/src/Discord.Net/API/Client/Rest/GetWidget.cs @@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest public sealed class GetWidgetRequest : IRestRequest { string IRestRequest.Method => "GET"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/servers/{GuildId}/widget.json"; + string IRestRequest.Endpoint => $"servers/{GuildId}/widget.json"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/KickMember.cs b/src/Discord.Net/API/Client/Rest/KickMember.cs index 482967a1a..217f4ea42 100644 --- a/src/Discord.Net/API/Client/Rest/KickMember.cs +++ b/src/Discord.Net/API/Client/Rest/KickMember.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class KickMemberRequest : IRestRequest { string IRestRequest.Method => "DELETE"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/members/{UserId}"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/members/{UserId}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/LeaveGuild.cs b/src/Discord.Net/API/Client/Rest/LeaveGuild.cs index 881cdb3be..d0651b45a 100644 --- a/src/Discord.Net/API/Client/Rest/LeaveGuild.cs +++ b/src/Discord.Net/API/Client/Rest/LeaveGuild.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class LeaveGuildRequest : IRestRequest { string IRestRequest.Method => "DELETE"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}"; + string IRestRequest.Endpoint => $"guilds/{GuildId}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/Login.cs b/src/Discord.Net/API/Client/Rest/Login.cs new file mode 100644 index 000000000..70e5e46a0 --- /dev/null +++ b/src/Discord.Net/API/Client/Rest/Login.cs @@ -0,0 +1,24 @@ +using Newtonsoft.Json; + +namespace Discord.API.Client.Rest +{ + [JsonObject(MemberSerialization.OptIn)] + public sealed class LoginRequest : IRestRequest + { + 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; } + } +} diff --git a/src/Discord.Net/API/Client/Rest/Logout.cs b/src/Discord.Net/API/Client/Rest/Logout.cs index 45a752174..5df18dbe1 100644 --- a/src/Discord.Net/API/Client/Rest/Logout.cs +++ b/src/Discord.Net/API/Client/Rest/Logout.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class LogoutRequest : IRestRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/auth/logout"; + string IRestRequest.Endpoint => $"auth/logout"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; } diff --git a/src/Discord.Net/API/Client/Rest/PruneMembers.cs b/src/Discord.Net/API/Client/Rest/PruneMembers.cs index 2e1cdc552..466e756cb 100644 --- a/src/Discord.Net/API/Client/Rest/PruneMembers.cs +++ b/src/Discord.Net/API/Client/Rest/PruneMembers.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class PruneMembersRequest : IRestRequest { 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; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/RemoveChannelPermission.cs b/src/Discord.Net/API/Client/Rest/RemoveChannelPermission.cs index 0579606d6..c99de20e9 100644 --- a/src/Discord.Net/API/Client/Rest/RemoveChannelPermission.cs +++ b/src/Discord.Net/API/Client/Rest/RemoveChannelPermission.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class RemoveChannelPermissionsRequest : IRestRequest { string IRestRequest.Method => "DELETE"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/permissions/{TargetId}"; + string IRestRequest.Endpoint => $"channels/{ChannelId}/permissions/{TargetId}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/RemoveGuildBan.cs b/src/Discord.Net/API/Client/Rest/RemoveGuildBan.cs index b6ed30973..b2f58e41c 100644 --- a/src/Discord.Net/API/Client/Rest/RemoveGuildBan.cs +++ b/src/Discord.Net/API/Client/Rest/RemoveGuildBan.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class RemoveGuildBanRequest : IRestRequest { string IRestRequest.Method => "DELETE"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/bans/{UserId}"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/bans/{UserId}"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/ReorderChannels.cs b/src/Discord.Net/API/Client/Rest/ReorderChannels.cs index 6999578e9..2f1d79a24 100644 --- a/src/Discord.Net/API/Client/Rest/ReorderChannels.cs +++ b/src/Discord.Net/API/Client/Rest/ReorderChannels.cs @@ -8,7 +8,7 @@ namespace Discord.API.Client.Rest public sealed class ReorderChannelsRequest : IRestRequest { string IRestRequest.Method => "PATCH"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/channels"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/channels"; object IRestRequest.Payload { get diff --git a/src/Discord.Net/API/Client/Rest/ReorderRoles.cs b/src/Discord.Net/API/Client/Rest/ReorderRoles.cs index cb083af86..e91c2bea7 100644 --- a/src/Discord.Net/API/Client/Rest/ReorderRoles.cs +++ b/src/Discord.Net/API/Client/Rest/ReorderRoles.cs @@ -8,7 +8,7 @@ namespace Discord.API.Client.Rest public sealed class ReorderRolesRequest : IRestRequest { string IRestRequest.Method => "PATCH"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/roles"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/roles"; object IRestRequest.Payload { get diff --git a/src/Discord.Net/API/Client/Rest/SendFile.cs b/src/Discord.Net/API/Client/Rest/SendFile.cs index 16fdd1d17..1dce18850 100644 --- a/src/Discord.Net/API/Client/Rest/SendFile.cs +++ b/src/Discord.Net/API/Client/Rest/SendFile.cs @@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest public sealed class SendFileRequest : IRestFileRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages"; + string IRestRequest.Endpoint => $"channels/{ChannelId}/messages"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; string IRestFileRequest.Filename => Filename; diff --git a/src/Discord.Net/API/Client/Rest/SendMessage.cs b/src/Discord.Net/API/Client/Rest/SendMessage.cs index 195998ea4..775330d76 100644 --- a/src/Discord.Net/API/Client/Rest/SendMessage.cs +++ b/src/Discord.Net/API/Client/Rest/SendMessage.cs @@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest public sealed class SendMessageRequest : IRestRequest { string IRestRequest.Method => "POST"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages"; + string IRestRequest.Endpoint => $"channels/{ChannelId}/messages"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/UpdateChannel.cs b/src/Discord.Net/API/Client/Rest/UpdateChannel.cs index 91294c461..d93733b01 100644 --- a/src/Discord.Net/API/Client/Rest/UpdateChannel.cs +++ b/src/Discord.Net/API/Client/Rest/UpdateChannel.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class UpdateChannelRequest : IRestRequest { string IRestRequest.Method => "PATCH"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}"; + string IRestRequest.Endpoint => $"channels/{ChannelId}"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/UpdateGuild.cs b/src/Discord.Net/API/Client/Rest/UpdateGuild.cs index 7a5433f03..c5e781ff8 100644 --- a/src/Discord.Net/API/Client/Rest/UpdateGuild.cs +++ b/src/Discord.Net/API/Client/Rest/UpdateGuild.cs @@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest public sealed class UpdateGuildRequest : IRestRequest { string IRestRequest.Method => "PATCH"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}"; + string IRestRequest.Endpoint => $"guilds/{GuildId}"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/UpdateMember.cs b/src/Discord.Net/API/Client/Rest/UpdateMember.cs index 4dcf34b4e..3bf1d0bc3 100644 --- a/src/Discord.Net/API/Client/Rest/UpdateMember.cs +++ b/src/Discord.Net/API/Client/Rest/UpdateMember.cs @@ -8,7 +8,7 @@ namespace Discord.API.Client.Rest public sealed class UpdateMemberRequest : IRestRequest { string IRestRequest.Method => "PATCH"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/members/{UserId}"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/members/{UserId}"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/UpdateMessage.cs b/src/Discord.Net/API/Client/Rest/UpdateMessage.cs index 564714374..831e91ee9 100644 --- a/src/Discord.Net/API/Client/Rest/UpdateMessage.cs +++ b/src/Discord.Net/API/Client/Rest/UpdateMessage.cs @@ -7,7 +7,7 @@ namespace Discord.API.Client.Rest public sealed class UpdateMessageRequest : IRestRequest { string IRestRequest.Method => "PATCH"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/channels/{ChannelId}/messages/{MessageId}"; + string IRestRequest.Endpoint => $"channels/{ChannelId}/messages/{MessageId}"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/UpdateProfile.cs b/src/Discord.Net/API/Client/Rest/UpdateProfile.cs index 686a8cd20..d89e60983 100644 --- a/src/Discord.Net/API/Client/Rest/UpdateProfile.cs +++ b/src/Discord.Net/API/Client/Rest/UpdateProfile.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class UpdateProfileRequest : IRestRequest { string IRestRequest.Method => "PATCH"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/users/@me"; + string IRestRequest.Endpoint => $"users/@me"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Client/Rest/UpdateRole.cs b/src/Discord.Net/API/Client/Rest/UpdateRole.cs index adb765e26..fca96d8a9 100644 --- a/src/Discord.Net/API/Client/Rest/UpdateRole.cs +++ b/src/Discord.Net/API/Client/Rest/UpdateRole.cs @@ -6,7 +6,7 @@ namespace Discord.API.Client.Rest public sealed class UpdateRoleRequest : IRestRequest { string IRestRequest.Method => "PATCH"; - string IRestRequest.Endpoint => $"{DiscordConfig.ClientAPIUrl}/guilds/{GuildId}/roles/{RoleId}"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/roles/{RoleId}"; object IRestRequest.Payload => this; bool IRestRequest.IsPrivate => false; diff --git a/src/Discord.Net/API/Status/Common/Incident.cs b/src/Discord.Net/API/Status/Common/Incident.cs index 84e4be02b..aa64a04bd 100644 --- a/src/Discord.Net/API/Status/Common/Incident.cs +++ b/src/Discord.Net/API/Status/Common/Incident.cs @@ -7,20 +7,20 @@ namespace Discord.API.Status public class Incident { [JsonProperty("page")] - public PageData Page { get; } + public PageData Page { get; set; } [JsonProperty("scheduled_maintenances")] - public MaintenanceData[] ScheduledMaintenances { get; } + public MaintenanceData[] ScheduledMaintenances { get; set; } public sealed class PageData { [JsonProperty("id"), JsonConverter(typeof(LongStringConverter))] - public ulong Id { get; } + public ulong Id { get; set; } [JsonProperty("name")] - public string Name { get; } + public string Name { get; set; } [JsonProperty("url")] - public string Url { get; } + public string Url { get; set; } [JsonProperty("updated-at")] - public DateTime? UpdatedAt { get; } + public DateTime? UpdatedAt { get; set; } } public sealed class MaintenanceData diff --git a/src/Discord.Net/API/Status/Rest/Active.cs b/src/Discord.Net/API/Status/Rest/Active.cs index 8f78cab82..fe4fb1726 100644 --- a/src/Discord.Net/API/Status/Rest/Active.cs +++ b/src/Discord.Net/API/Status/Rest/Active.cs @@ -6,7 +6,7 @@ namespace Discord.API.Status.Rest public sealed class GetActiveIncidentsRequest : IRestRequest { string IRestRequest.Method => "GET"; - string IRestRequest.Endpoint => $"{DiscordConfig.StatusAPIUrl}/scheduled-maintenances/active.json"; + string IRestRequest.Endpoint => $"scheduled-maintenances/active.json"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; } diff --git a/src/Discord.Net/API/Status/Rest/Upcoming.cs b/src/Discord.Net/API/Status/Rest/Upcoming.cs index 676362714..1b6b48321 100644 --- a/src/Discord.Net/API/Status/Rest/Upcoming.cs +++ b/src/Discord.Net/API/Status/Rest/Upcoming.cs @@ -6,7 +6,7 @@ namespace Discord.API.Status.Rest public sealed class GetUpcomingIncidentsRequest : IRestRequest { string IRestRequest.Method => "GET"; - string IRestRequest.Endpoint => $"{DiscordConfig.StatusAPIUrl}/scheduled-maintenances/upcoming.json"; + string IRestRequest.Endpoint => $"scheduled-maintenances/upcoming.json"; object IRestRequest.Payload => null; bool IRestRequest.IsPrivate => false; } diff --git a/src/Discord.Net/DiscordClient.Channels.cs b/src/Discord.Net/DiscordClient.Channels.cs index 6d95cf9c9..dcecf3e91 100644 --- a/src/Discord.Net/DiscordClient.Channels.cs +++ b/src/Discord.Net/DiscordClient.Channels.cs @@ -120,7 +120,7 @@ namespace Discord CheckReady(); 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); channel.Update(response); @@ -139,7 +139,7 @@ namespace Discord if (channel == null) { 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); recipient.Update(response.Recipient); @@ -163,7 +163,7 @@ namespace Discord Topic = topic ?? channel.Topic, Position = channel.Position }; - await _rest.Send(request).ConfigureAwait(false); + await _clientRest.Send(request).ConfigureAwait(false); } if (position != null) @@ -207,7 +207,7 @@ namespace Discord ChannelIds = channels.Select(x => x.Id).ToArray(), StartPos = after != null ? after.Position + 1 : channels.Min(x => x.Position) }; - return _rest.Send(request); + return _clientRest.Send(request); } /// Destroys the provided channel. @@ -216,7 +216,7 @@ namespace Discord if (channel == null) throw new ArgumentNullException(nameof(channel)); 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) { } } } diff --git a/src/Discord.Net/DiscordClient.Invites.cs b/src/Discord.Net/DiscordClient.Invites.cs index 48f8c8151..02dcfb3d3 100644 --- a/src/Discord.Net/DiscordClient.Invites.cs +++ b/src/Discord.Net/DiscordClient.Invites.cs @@ -24,7 +24,7 @@ namespace Discord if (index >= 0) 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); invite.Update(response); return invite; @@ -36,7 +36,7 @@ namespace Discord if (server == null) throw new ArgumentNullException(nameof(server)); 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 => { var invite = new Invite(x.Code, x.XkcdPass); @@ -77,7 +77,7 @@ namespace Discord 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); return invite; } @@ -88,7 +88,7 @@ namespace Discord if (invite == null) throw new ArgumentNullException(nameof(invite)); 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) { } } @@ -98,7 +98,7 @@ namespace Discord if (invite == null) throw new ArgumentNullException(nameof(invite)); CheckReady(); - return _rest.Send(new AcceptInviteRequest(invite.Code)); + return _clientRest.Send(new AcceptInviteRequest(invite.Code)); } } } \ No newline at end of file diff --git a/src/Discord.Net/DiscordClient.Messages.cs b/src/Discord.Net/DiscordClient.Messages.cs index 49625c36b..513ce5d5d 100644 --- a/src/Discord.Net/DiscordClient.Messages.cs +++ b/src/Discord.Net/DiscordClient.Messages.cs @@ -164,7 +164,7 @@ namespace Discord Filename = filename, 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); msg.Update(model); @@ -229,7 +229,7 @@ namespace Discord Nonce = null, 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.Update(model); RaiseMessageSent(msg); @@ -262,7 +262,7 @@ namespace Discord Content = text, 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(); 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) { } } public async Task DeleteMessages(IEnumerable messages) @@ -284,7 +284,7 @@ namespace Discord foreach (var message in messages) { 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) { } } } @@ -307,7 +307,7 @@ namespace Discord RelativeDir = relativeDir == RelativeDirection.Before ? "before" : "after", RelativeId = relativeMessageId }; - var msgs = await _rest.Send(request).ConfigureAwait(false); + var msgs = await _clientRest.Send(request).ConfigureAwait(false); return msgs.Select(x => { Message msg = null; @@ -336,7 +336,7 @@ namespace Discord if (message == null) throw new ArgumentNullException(nameof(message)); if (!message.IsAuthor) - _rest.Send(new AckMessageRequest(message.Id, message.Channel.Id)); + _clientRest.Send(new AckMessageRequest(message.Id, message.Channel.Id)); } /// Deserializes messages from JSON format and imports them into the message cache. @@ -401,7 +401,7 @@ namespace Discord Nonce = IdConvert.ToString(msg.Id), //Nonce IsTTS = msg.IsTTS }; - await _rest.Send(request).ConfigureAwait(false); + await _clientRest.Send(request).ConfigureAwait(false); } else { @@ -410,7 +410,7 @@ namespace Discord Content = queuedMessage.Text, MentionedUserIds = queuedMessage.MentionedUsers }; - await _rest.Send(request).ConfigureAwait(false); + await _clientRest.Send(request).ConfigureAwait(false); } } catch (WebException) { break; } diff --git a/src/Discord.Net/DiscordClient.Permissions.cs b/src/Discord.Net/DiscordClient.Permissions.cs index f55c585c4..5b90e1cbb 100644 --- a/src/Discord.Net/DiscordClient.Permissions.cs +++ b/src/Discord.Net/DiscordClient.Permissions.cs @@ -73,7 +73,7 @@ namespace Discord Allow = allow?.RawValue ?? 0, Deny = deny?.RawValue ?? 0 }; - return _rest.Send(request); + return _clientRest.Send(request); } public Task RemoveChannelPermissions(Channel channel, User user) @@ -97,7 +97,7 @@ namespace Discord try { 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) { } } diff --git a/src/Discord.Net/DiscordClient.Roles.cs b/src/Discord.Net/DiscordClient.Roles.cs index bef739755..46879927e 100644 --- a/src/Discord.Net/DiscordClient.Roles.cs +++ b/src/Discord.Net/DiscordClient.Roles.cs @@ -87,7 +87,7 @@ namespace Discord CheckReady(); 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); role.Update(response1); @@ -98,7 +98,7 @@ namespace Discord Color = (color ?? Color.Default).RawValue, IsHoisted = isHoisted }; - var response2 = await _rest.Send(request2).ConfigureAwait(false); + var response2 = await _clientRest.Send(request2).ConfigureAwait(false); role.Update(response2); return role; @@ -117,7 +117,7 @@ namespace Discord IsHoisted = isHoisted ?? role.IsHoisted }; - var response = await _rest.Send(request1).ConfigureAwait(false); + var response = await _clientRest.Send(request1).ConfigureAwait(false); if (position != null) { @@ -146,7 +146,7 @@ namespace Discord RoleIds = roles.Skip(minPos).Select(x => x.Id).ToArray(), 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)); 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) { } } @@ -166,7 +166,7 @@ namespace Discord if (startPos < 0) throw new ArgumentOutOfRangeException(nameof(startPos), "startPos must be a positive integer."); CheckReady(); - return _rest.Send(new ReorderRolesRequest(server.Id) + return _clientRest.Send(new ReorderRolesRequest(server.Id) { RoleIds = roles.Select(x => x.Id).ToArray(), StartPos = startPos diff --git a/src/Discord.Net/DiscordClient.Servers.cs b/src/Discord.Net/DiscordClient.Servers.cs index 395195173..ff9beca83 100644 --- a/src/Discord.Net/DiscordClient.Servers.cs +++ b/src/Discord.Net/DiscordClient.Servers.cs @@ -94,7 +94,7 @@ namespace Discord Region = region.Id, 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); server.Update(response); @@ -115,7 +115,7 @@ namespace Discord AFKChannelId = server.AFKChannel?.Id, AFKTimeout = server.AFKTimeout }; - var response = await _rest.Send(request).ConfigureAwait(false); + var response = await _clientRest.Send(request).ConfigureAwait(false); server.Update(response); } @@ -125,7 +125,7 @@ namespace Discord if (server == null) throw new ArgumentNullException(nameof(server)); 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) { } } @@ -133,7 +133,7 @@ namespace Discord { 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)); } } diff --git a/src/Discord.Net/DiscordClient.Users.cs b/src/Discord.Net/DiscordClient.Users.cs index 70bac9e4b..5800fbbe1 100644 --- a/src/Discord.Net/DiscordClient.Users.cs +++ b/src/Discord.Net/DiscordClient.Users.cs @@ -218,7 +218,7 @@ namespace Discord VoiceChannelId = voiceChannel?.Id, RoleIds = roleIds.ToArray() }; - return _rest.Send(request); + return _clientRest.Send(request); } public Task KickUser(User user) @@ -228,7 +228,7 @@ namespace Discord CheckReady(); 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) { @@ -238,7 +238,7 @@ namespace Discord var request = new AddGuildBanRequest(user.Server.Id, user.Id); request.PruneDays = pruneDays; - return _rest.Send(request); + return _clientRest.Send(request); } public async Task UnbanUser(Server server, ulong userId) { @@ -246,7 +246,7 @@ namespace Discord if (userId <= 0) throw new ArgumentOutOfRangeException(nameof(userId)); 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) { } } @@ -261,7 +261,7 @@ namespace Discord Days = days, IsSimulation = simulate }; - var response = await _rest.Send(request).ConfigureAwait(false); + var response = await _clientRest.Send(request).ConfigureAwait(false); return response.Pruned; } @@ -289,7 +289,7 @@ namespace Discord AvatarBase64 = Base64Image(avatarType, avatar, _privateUser?.AvatarId) }; - await _rest.Send(request).ConfigureAwait(false); + await _clientRest.Send(request).ConfigureAwait(false); if (password != null) { @@ -298,8 +298,8 @@ namespace Discord Email = _currentUser.Email, Password = password }; - var loginResponse = await _rest.Send(loginRequest).ConfigureAwait(false); - _rest.SetToken(loginResponse.Token); + var loginResponse = await _clientRest.Send(loginRequest).ConfigureAwait(false); + _clientRest.SetToken(loginResponse.Token); } } diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 4be4393ef..c6fa25240 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -54,7 +54,7 @@ namespace Discord public partial class DiscordClient { private readonly LogService _log; - private readonly Logger _logger, _restLogger, _cacheLogger; + private readonly Logger _logger, _restLogger, _cacheLogger, _webSocketLogger; private readonly Dictionary _singletons; private readonly object _cacheLock; private readonly Semaphore _lock; @@ -73,8 +73,9 @@ namespace Discord private ConnectionState _state; /// Gives direct access to the underlying DiscordAPIClient. This can be used to modify objects not in cache. - public RestClient Rest => _rest; - private readonly RestClient _rest; + public RestClient ClientAPI => _clientRest; + public RestClient StatusAPI => _statusRest; + private readonly RestClient _clientRest, _statusRest; /// Returns the internal websocket object. public GatewaySocket WebSocket => _webSocket; @@ -122,7 +123,10 @@ namespace Discord //Services _singletons = new Dictionary(); _log = AddService(new LogService()); - _logger = CreateMainLogger(); + _logger = _log.CreateLogger("Client"); + _cacheLogger = _log.CreateLogger("Cache"); + _restLogger = _log.CreateLogger("Rest"); + _webSocketLogger = _log.CreateLogger("WebSocket"); //Async _lock = new Semaphore(1, 1); @@ -133,20 +137,17 @@ namespace Discord //Cache _cacheLock = new object(); - _channels = new Channels(this, _cacheLock); - _users = new Users(this, _cacheLock); - _messages = new Messages(this, _cacheLock, Config.MessageCacheSize > 0); - _roles = new Roles(this, _cacheLock); - _servers = new Servers(this, _cacheLock); - _globalUsers = new GlobalUsers(this, _cacheLock); - _cacheLogger = CreateCacheLogger(); + _channels = new Channels(this, _cacheLock); + _users = new Users(this, _cacheLock); + _messages = new Messages(this, _cacheLock, Config.MessageCacheSize > 0); + _roles = new Roles(this, _cacheLock); + _servers = new Servers(this, _cacheLock); + _globalUsers = new GlobalUsers(this, _cacheLock); //Networking - _restLogger = CreateRestLogger(); - _rest = new RestClient(_config, _restLogger); - - var webSocketLogger = _log.CreateLogger("WebSocket"); - _webSocket = new GatewaySocket(this, webSocketLogger); + _clientRest = new RestClient(_config, _restLogger, DiscordConfig.ClientAPIUrl); + _statusRest = new RestClient(_config, _restLogger, DiscordConfig.StatusAPIUrl); + _webSocket = new GatewaySocket(this, _webSocketLogger); _webSocket.Connected += (s, e) => { if (_state == ConnectionState.Connecting) @@ -162,94 +163,80 @@ namespace Discord _pendingMessages = new ConcurrentQueue(); Connected += async (s, e) => { - _rest.SetCancelToken(_cancelToken); + _clientRest.SetCancelToken(_cancelToken); await SendStatus().ConfigureAwait(false); }; //Import/Export _messageImporter = new JsonSerializer(); _messageImporter.ContractResolver = new Message.ImportResolver(); - } - private Logger CreateMainLogger() - { - Logger logger = _log.CreateLogger("Client"); + //Logging if (_log.Level >= LogSeverity.Info) { - JoinedServer += (s, e) => logger.Info($"Server Created: {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]"}"); - ServerAvailable += (s, e) => logger.Info($"Server Available: {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}"); - 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}"); - 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}"); - 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}"); - 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}"); - 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}"); - 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}"); - 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}"); - 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; + JoinedServer += (s, e) => _logger.Info($"Server Created: {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]"}"); + ServerAvailable += (s, e) => _logger.Info($"Server Available: {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}"); + 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}"); + 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}"); + 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}"); + 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}"); + 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}"); + 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}"); + 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}"); + ProfileUpdated += (s, e) => _logger.Info("Profile Updated"); + } if (_log.Level >= LogSeverity.Verbose) { - logger = _log.CreateLogger("Rest"); - _rest.OnRequest += (s, e) => - { - if (e.Payload != null) - 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"); - }; + 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 CreateCacheLogger() - { - Logger logger = null; + + if (_log.Level >= LogSeverity.Verbose) + { + _clientRest.OnRequest += (s, e) => + { + 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) { - logger = _log.CreateLogger("Cache"); - _channels.ItemCreated += (s, e) => logger.Debug( $"Created 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) => logger.Debug( $"Cleared Channels"); - _users.ItemCreated += (s, e) => logger.Debug( $"Created 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) => logger.Debug( $"Cleared Users"); - _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) => logger.Debug( $"Destroyed Message {IdConvert.ToString(e.Item.Server?.Id) ?? "[Private]"}/{e.Item.Channel.Id}/{e.Item.Id}"); - _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) => logger.Debug( $"Cleared Messages"); - _roles.ItemCreated += (s, e) => logger.Debug( $"Created 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) => logger.Debug( $"Cleared Roles"); - _servers.ItemCreated += (s, e) => logger.Debug( $"Created Server {e.Item.Id}"); - _servers.ItemDestroyed += (s, e) => logger.Debug( $"Destroyed Server {e.Item.Id}"); - _servers.Cleared += (s, e) => logger.Debug( $"Cleared Servers"); - _globalUsers.ItemCreated += (s, e) => logger.Debug( $"Created User {e.Item.Id}"); - _globalUsers.ItemDestroyed += (s, e) => logger.Debug( $"Destroyed User {e.Item.Id}"); - _globalUsers.Cleared += (s, e) => logger.Debug( $"Cleared Users"); + _channels.ItemCreated += (s, e) => _cacheLogger.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.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Channels"); + _users.ItemCreated += (s, e) => _cacheLogger.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.Cleared += (s, e) => _cacheLogger.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.ItemDestroyed += (s, e) => _cacheLogger.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.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Messages"); + _roles.ItemCreated += (s, e) => _cacheLogger.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.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Roles"); + _servers.ItemCreated += (s, e) => _cacheLogger.Debug($"Created Server {e.Item.Id}"); + _servers.ItemDestroyed += (s, e) => _cacheLogger.Debug($"Destroyed Server {e.Item.Id}"); + _servers.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Servers"); + _globalUsers.ItemCreated += (s, e) => _cacheLogger.Debug($"Created User {e.Item.Id}"); + _globalUsers.ItemDestroyed += (s, e) => _cacheLogger.Debug($"Destroyed User {e.Item.Id}"); + _globalUsers.Cleared += (s, e) => _cacheLogger.Debug($"Cleared Users"); } - return logger; } /// Connects to the Discord server with the provided email and password. @@ -342,7 +329,7 @@ namespace Discord if (token == null) { 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; SaveToken(tokenPath, key, token); useCache = false; @@ -351,17 +338,17 @@ namespace Discord else { 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 = token; - _rest.SetToken(token); + _clientRest.SetToken(token); //Get gateway and check token try { - var gatewayResponse = await _rest.Send(new GatewayRequest()).ConfigureAwait(false); + var gatewayResponse = await _clientRest.Send(new GatewayRequest()).ConfigureAwait(false); var gateway = gatewayResponse.Url; _gateway = gateway; if (_config.LogLevel >= LogSeverity.Verbose) @@ -395,7 +382,7 @@ namespace Discord while (_pendingMessages.TryDequeue(out ignored)) { } } - await _rest.Send(new LogoutRequest()).ConfigureAwait(false); + await _clientRest.Send(new LogoutRequest()).ConfigureAwait(false); _channels.Clear(); _users.Clear(); @@ -722,7 +709,7 @@ namespace Discord case "VOICE_STATE_UPDATE": { var data = e.Payload.ToObject(_webSocket.Serializer); - var user = _users[data.User.Id, data.GuildId]; + var user = _users[data.UserId, data.GuildId]; if (user != null) { /*var voiceChannel = user.VoiceChannel; diff --git a/src/Discord.Net/Models/Server.cs b/src/Discord.Net/Models/Server.cs index f42b77cba..3454f5ced 100644 --- a/src/Discord.Net/Models/Server.cs +++ b/src/Discord.Net/Models/Server.cs @@ -192,7 +192,7 @@ namespace Discord } foreach (var subModel in model.VoiceStates) { - var user = usersCache[subModel.User.Id, Id]; + var user = usersCache[subModel.UserId, Id]; if (user != null) user.Update(subModel); } diff --git a/src/Discord.Net/Net/Rest/RestClient.cs b/src/Discord.Net/Net/Rest/RestClient.cs index c5466a1bf..fb682a4c8 100644 --- a/src/Discord.Net/Net/Rest/RestClient.cs +++ b/src/Discord.Net/Net/Rest/RestClient.cs @@ -13,13 +13,13 @@ namespace Discord.Net.Rest private readonly IRestEngine _engine; private CancellationToken _cancelToken; - public RestClient(DiscordConfig config, Logger logger) + public RestClient(DiscordConfig config, Logger logger, string baseUrl) { _config = config; #if !DOTNET5_4 - _engine = new RestSharpEngine(config, logger, DiscordConfig.ClientAPIUrl); + _engine = new RestSharpEngine(config, logger, baseUrl); #else - //_engine = new BuiltInRestEngine(config, logger); + //_engine = new BuiltInRestEngine(config, logger, baseUrl); #endif } diff --git a/src/Discord.Net/Net/Rest/SharpRestEngine.cs b/src/Discord.Net/Net/Rest/SharpRestEngine.cs index 70c3d143d..c7b7134eb 100644 --- a/src/Discord.Net/Net/Rest/SharpRestEngine.cs +++ b/src/Discord.Net/Net/Rest/SharpRestEngine.cs @@ -1,5 +1,4 @@ #if !DOTNET5_4 -using Discord.API; using RestSharp; using System; using System.IO;