diff --git a/src/Discord.Net/DiscordClient.Channels.cs b/src/Discord.Net/DiscordClient.Channels.cs index 0a2fdae20..93ff48468 100644 --- a/src/Discord.Net/DiscordClient.Channels.cs +++ b/src/Discord.Net/DiscordClient.Channels.cs @@ -150,14 +150,18 @@ namespace Discord if (channel == null) throw new ArgumentNullException(nameof(channel)); CheckReady(); - await _api.EditChannel(channel.Id, name: name, topic: topic).ConfigureAwait(false); + if (name != null || topic != null) + await _api.EditChannel(channel.Id, name: name, topic: topic).ConfigureAwait(false); if (position != null) { - int oldPos = channel.Position; - int newPos = position.Value; - int minPos; Channel[] channels = channel.Server.Channels.Where(x => x.Type == channel.Type).OrderBy(x => x.Position).ToArray(); + int oldPos = Array.IndexOf(channels, channel); + var newPosChannel = channels.Where(x => x.Position > position).FirstOrDefault(); + int newPos = (newPosChannel != null ? Array.IndexOf(channels, newPosChannel) : channels.Length) - 1; + if (newPos < 0) + newPos = 0; + int minPos; if (oldPos < newPos) //Moving Down { @@ -185,7 +189,7 @@ namespace Discord if (channels == null) throw new ArgumentNullException(nameof(channels)); CheckReady(); - return _api.ReorderChannels(server.Id, channels.Select(x => x.Id), after.Position); + return _api.ReorderChannels(server.Id, channels.Select(x => x.Id), after?.Position ?? 0); } /// Destroys the provided channel.