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/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..728247c2b 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"); @@ -258,14 +258,25 @@ 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, IsDeafened = isDeafened ?? IsServerDeafened, VoiceChannelId = voiceChannel?.Id, - RoleIds = roleIds + RoleIds = roleIds, + Nickname = nickname ?? Nickname }; - return Client.ClientAPI.Send(request); + tasks.Add(Client.ClientAPI.Send(request)); + return Task.WhenAll(tasks); } public Task Kick()