From 93bf06bcb6653457a427f609c294396ae3cf3318 Mon Sep 17 00:00:00 2001 From: RogueException Date: Thu, 12 May 2016 23:43:34 -0300 Subject: [PATCH] Added support for changing nicknames --- src/Discord.Net/API/DiscordRawClient.cs | 7 ++++ .../API/Rest/ModifyCurrentUserNickParams.cs | 10 ++++++ src/Discord.Net/Discord.Net.csproj | 1 + .../Rest/Entities/Users/GuildUser.cs | 32 +++++++++++++------ 4 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 src/Discord.Net/API/Rest/ModifyCurrentUserNickParams.cs diff --git a/src/Discord.Net/API/DiscordRawClient.cs b/src/Discord.Net/API/DiscordRawClient.cs index effc5fde2..d641c7947 100644 --- a/src/Discord.Net/API/DiscordRawClient.cs +++ b/src/Discord.Net/API/DiscordRawClient.cs @@ -738,6 +738,13 @@ namespace Discord.API return await Send("PATCH", "users/@me", args).ConfigureAwait(false); } + public async Task ModifyCurrentUserNick(ulong guildId, ModifyCurrentUserNickParams args) + { + if (args == null) throw new ArgumentNullException(nameof(args)); + if (args.Nickname == "") throw new ArgumentOutOfRangeException(nameof(args.Nickname)); + + await Send("PATCH", $"guilds/{guildId}/members/@me/nick", args).ConfigureAwait(false); + } public async Task CreateDMChannel(CreateDMChannelParams args) { if (args == null) throw new ArgumentNullException(nameof(args)); diff --git a/src/Discord.Net/API/Rest/ModifyCurrentUserNickParams.cs b/src/Discord.Net/API/Rest/ModifyCurrentUserNickParams.cs new file mode 100644 index 000000000..38cd54991 --- /dev/null +++ b/src/Discord.Net/API/Rest/ModifyCurrentUserNickParams.cs @@ -0,0 +1,10 @@ +using Newtonsoft.Json; + +namespace Discord.API.Rest +{ + public class ModifyCurrentUserNickParams + { + [JsonProperty("nick")] + public string Nickname { get; set; } + } +} diff --git a/src/Discord.Net/Discord.Net.csproj b/src/Discord.Net/Discord.Net.csproj index a681e2931..b178e48e5 100644 --- a/src/Discord.Net/Discord.Net.csproj +++ b/src/Discord.Net/Discord.Net.csproj @@ -70,6 +70,7 @@ + diff --git a/src/Discord.Net/Rest/Entities/Users/GuildUser.cs b/src/Discord.Net/Rest/Entities/Users/GuildUser.cs index 5ee975b21..79aa60093 100644 --- a/src/Discord.Net/Rest/Entities/Users/GuildUser.cs +++ b/src/Discord.Net/Rest/Entities/Users/GuildUser.cs @@ -83,15 +83,29 @@ namespace Discord.Rest var args = new ModifyGuildMemberParams(); func(args); - await Discord.BaseClient.ModifyGuildMember(Guild.Id, Id, args).ConfigureAwait(false); - if (args.Deaf.IsSpecified) - IsDeaf = args.Deaf; - if (args.Mute.IsSpecified) - IsMute = args.Mute; - if (args.Nickname.IsSpecified) - Nickname = args.Nickname; - if (args.Roles.IsSpecified) - _roles = args.Roles.Value.Select(x => Guild.GetRole(x)).Where(x => x != null).ToImmutableArray(); + + bool isCurrentUser = IsCurrentUser; + if (isCurrentUser && args.Nickname.IsSpecified) + { + var nickArgs = new ModifyCurrentUserNickParams + { + Nickname = args.Nickname.Value + }; + await Discord.BaseClient.ModifyCurrentUserNick(Guild.Id, nickArgs).ConfigureAwait(false); + } + + if (!isCurrentUser || args.Deaf.IsSpecified || args.Mute.IsSpecified || args.Roles.IsSpecified) + { + await Discord.BaseClient.ModifyGuildMember(Guild.Id, Id, args).ConfigureAwait(false); + if (args.Deaf.IsSpecified) + IsDeaf = args.Deaf; + if (args.Mute.IsSpecified) + IsMute = args.Mute; + if (args.Nickname.IsSpecified) + Nickname = args.Nickname; + if (args.Roles.IsSpecified) + _roles = args.Roles.Value.Select(x => Guild.GetRole(x)).Where(x => x != null).ToImmutableArray(); + } }