From ef376dc054d45b1e058c9c5a5346975827f557f9 Mon Sep 17 00:00:00 2001 From: Brandon Smith Date: Thu, 20 Aug 2015 14:40:32 -0300 Subject: [PATCH] Added support for changing username, password and email. Added UserChanged event. --- src/Discord.Net/API/DiscordAPI.cs | 18 +++++++++++++++ src/Discord.Net/API/Endpoints.cs | 3 ++- src/Discord.Net/API/Models/APIRequests.cs | 26 +++++++++++++++++++++ src/Discord.Net/DiscordClient.Events.cs | 6 +++++ src/Discord.Net/DiscordClient.cs | 28 +++++++++++++++++++++++ 5 files changed, 80 insertions(+), 1 deletion(-) diff --git a/src/Discord.Net/API/DiscordAPI.cs b/src/Discord.Net/API/DiscordAPI.cs index d76097035..e3baa95ad 100644 --- a/src/Discord.Net/API/DiscordAPI.cs +++ b/src/Discord.Net/API/DiscordAPI.cs @@ -112,5 +112,23 @@ namespace Discord.API var request = new APIRequests.SetMemberDeaf { Deaf = false }; return Http.Patch(Endpoints.ServerMember(serverId, memberId)); } + + //Profile + public static Task ChangeUsername(string newUsername, string currentEmail, string currentPassword) + { + var request = new APIRequests.ChangeUsername { Username = newUsername, CurrentEmail = currentEmail, CurrentPassword = currentPassword }; + return Http.Patch(Endpoints.UserMe, request); + } + public static Task ChangeEmail(string newEmail, string currentPassword) + { + var request = new APIRequests.ChangeEmail { Email = newEmail, CurrentPassword = currentPassword }; + return Http.Patch(Endpoints.UserMe, request); + } + public static Task ChangePassword(string newPassword, string currentEmail, string currentPassword) + { + var request = new APIRequests.ChangePassword { NewPassword = newPassword, CurrentEmail = currentEmail, CurrentPassword = currentPassword }; + return Http.Patch(Endpoints.UserMe, request); + } + } } diff --git a/src/Discord.Net/API/Endpoints.cs b/src/Discord.Net/API/Endpoints.cs index 7d97d4cff..cf967bfe5 100644 --- a/src/Discord.Net/API/Endpoints.cs +++ b/src/Discord.Net/API/Endpoints.cs @@ -40,7 +40,8 @@ // /api/users public static readonly string Users = $"{BaseApi}/users"; - public static string UserChannels(string userId) => $"{Users}/{userId}/channels"; + public static string UserMe => $"{Users}/@me"; + public static string UserChannels(string userId) => $"{Users}/{userId}/channels"; public static string UserAvatar(string userId, string avatarId) => $"{Users}/{userId}/avatars/{avatarId}.jpg"; // /api/voice diff --git a/src/Discord.Net/API/Models/APIRequests.cs b/src/Discord.Net/API/Models/APIRequests.cs index 83d47ca07..f74bb77d1 100644 --- a/src/Discord.Net/API/Models/APIRequests.cs +++ b/src/Discord.Net/API/Models/APIRequests.cs @@ -75,5 +75,31 @@ namespace Discord.API.Models [JsonProperty(PropertyName = "deaf")] public bool Deaf; } + + public class ChangeUsername + { + [JsonProperty(PropertyName = "username")] + public string Username; + [JsonProperty(PropertyName = "email")] + public string CurrentEmail; + [JsonProperty(PropertyName = "password")] + public string CurrentPassword; + } + public class ChangeEmail + { + [JsonProperty(PropertyName = "email")] + public string Email; + [JsonProperty(PropertyName = "password")] + public string CurrentPassword; + } + public class ChangePassword + { + [JsonProperty(PropertyName = "new_password")] + public string NewPassword; + [JsonProperty(PropertyName = "email")] + public string CurrentEmail; + [JsonProperty(PropertyName = "password")] + public string CurrentPassword; + } } } diff --git a/src/Discord.Net/DiscordClient.Events.cs b/src/Discord.Net/DiscordClient.Events.cs index fd6b9765f..1428afa3c 100644 --- a/src/Discord.Net/DiscordClient.Events.cs +++ b/src/Discord.Net/DiscordClient.Events.cs @@ -89,6 +89,12 @@ namespace Discord public readonly User User; internal UserEventArgs(User user) { User = user; } } + public event EventHandler UserUpdated; + private void RaiseUserUpdated(User user) + { + if (UserUpdated != null) + UserUpdated(this, new UserEventArgs(user)); + } //Message public sealed class MessageEventArgs : EventArgs diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 01d2b3903..2ccdd26a7 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -381,6 +381,13 @@ namespace Discord break; //Settings + case "USER_UPDATE": + { + var data = e.Event.ToObject(); + var user = _users.Update(data.Id, data); + RaiseUserUpdate(user); + } + break; case "USER_SETTINGS_UPDATE": { //TODO: Process this @@ -844,6 +851,27 @@ namespace Discord return DiscordAPI.Undeafen(serverId, userId); } + //Profile + public async Task ChangeUsername(string newName, string currentEmail, string currentPassword) + { + CheckReady(); + var response = await DiscordAPI.ChangeUsername(newName, currentEmail, currentPassword); + _users.Update(response.Id, response); + } + public async Task ChangeEmail(string newEmail, string currentPassword) + { + CheckReady(); + var response = await DiscordAPI.ChangeEmail(newEmail, currentPassword); + _users.Update(response.Id, response); + } + public async Task ChangePassword(string newPassword, string currentEmail, string currentPassword) + { + CheckReady(); + var response = await DiscordAPI.ChangePassword(newPassword, currentEmail, currentPassword); + _users.Update(response.Id, response); + } + + //Helpers private void CheckReady() { if (!_isReady)