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()