From 641401da4df520fa850fade69d42e3bae442bff9 Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Wed, 4 May 2016 12:24:04 -0400 Subject: [PATCH 1/2] Add support for changing Nicknames! User.Edit(nickname: "foo"); --- src/Discord.Net/API/Client/Rest/UpdateMember.cs | 2 ++ src/Discord.Net/Models/User.cs | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net/API/Client/Rest/UpdateMember.cs b/src/Discord.Net/API/Client/Rest/UpdateMember.cs index ce1649bdd..24a25ce02 100644 --- a/src/Discord.Net/API/Client/Rest/UpdateMember.cs +++ b/src/Discord.Net/API/Client/Rest/UpdateMember.cs @@ -21,6 +21,8 @@ namespace Discord.API.Client.Rest public ulong? VoiceChannelId { get; set; } [JsonProperty("roles"), JsonConverter(typeof(LongStringArrayConverter))] public ulong[] RoleIds { get; set; } + [JsonProperty("nick")] + public string Nickname { get; set; } public UpdateMemberRequest(ulong guildId, ulong userId) { diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs index b2ab47135..486c999b2 100644 --- a/src/Discord.Net/Models/User.cs +++ b/src/Discord.Net/Models/User.cs @@ -247,7 +247,7 @@ namespace Discord LastActivityAt = activity ?? DateTime.UtcNow; } - public Task Edit(bool? isMuted = null, bool? isDeafened = null, Channel voiceChannel = null, IEnumerable roles = null) + public Task Edit(bool? isMuted = null, bool? isDeafened = null, Channel voiceChannel = null, IEnumerable roles = null, string nickname = null) { if (Server == null) throw new InvalidOperationException("Unable to edit users in a private channel"); @@ -263,7 +263,8 @@ namespace Discord IsMuted = isMuted ?? IsServerMuted, IsDeafened = isDeafened ?? IsServerDeafened, VoiceChannelId = voiceChannel?.Id, - RoleIds = roleIds + RoleIds = roleIds, + Nickname = nickname ?? Nickname }; return Client.ClientAPI.Send(request); } From d1f3dfe26aaf7c3b35cab3a003601a26f94a5a54 Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Sun, 8 May 2016 02:01:23 -0400 Subject: [PATCH 2/2] Shove in support for changing own nick (through `User.Edit(nickname:))` --- .../API/Client/Rest/UpdateOwnNick.cs | 23 ++++++++++++++++++++++ src/Discord.Net.Net45/Discord.Net.csproj | 1 + src/Discord.Net/Models/User.cs | 12 ++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/Discord.Net.Net45/API/Client/Rest/UpdateOwnNick.cs diff --git a/src/Discord.Net.Net45/API/Client/Rest/UpdateOwnNick.cs b/src/Discord.Net.Net45/API/Client/Rest/UpdateOwnNick.cs new file mode 100644 index 000000000..f936d9506 --- /dev/null +++ b/src/Discord.Net.Net45/API/Client/Rest/UpdateOwnNick.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json; + +namespace Discord.API.Client.Rest +{ + [JsonObject(MemberSerialization.OptIn)] + public class UpdateOwnNick : IRestRequest + { + string IRestRequest.Method => "PATCH"; + string IRestRequest.Endpoint => $"guilds/{GuildId}/members/@me/nick"; + object IRestRequest.Payload => this; + + public ulong GuildId { get; set; } + + [JsonProperty("nick")] + public string Nickname { get; set; } + + public UpdateOwnNick(ulong guildId, string nickname) + { + GuildId = guildId; + Nickname = nickname; + } + } +} diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj index 56cd26bf7..f3b59e9cf 100644 --- a/src/Discord.Net.Net45/Discord.Net.csproj +++ b/src/Discord.Net.Net45/Discord.Net.csproj @@ -601,6 +601,7 @@ TaskManager.cs + diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs index 486c999b2..728247c2b 100644 --- a/src/Discord.Net/Models/User.cs +++ b/src/Discord.Net/Models/User.cs @@ -258,6 +258,15 @@ namespace Discord .Distinct() .ToArray(); + var tasks = new List(); + if (nickname != null && this == Server.CurrentUser) + { + var task = Client.ClientAPI.Send(new UpdateOwnNick(Server.Id, nickname)); + if (isMuted == null && isDeafened == null && voiceChannel == null && roles == null) + return task; + tasks.Add(task); + nickname = null; + } var request = new UpdateMemberRequest(Server.Id, Id) { IsMuted = isMuted ?? IsServerMuted, @@ -266,7 +275,8 @@ namespace Discord RoleIds = roleIds, Nickname = nickname ?? Nickname }; - return Client.ClientAPI.Send(request); + tasks.Add(Client.ClientAPI.Send(request)); + return Task.WhenAll(tasks); } public Task Kick()