/// <summary> /// Set or unset modes for a channel. /// </summary> /// <param name="channel">The channel on which to set modes.</param> /// <param name="modes">The list modes to set or unset.</param> public async Task ModeAsync(string channel, IEnumerable <IrcChannelMode> modes) { var ircChannelModes = modes as IList <IrcChannelMode> ?? modes.ToList(); if (!ircChannelModes.Any()) { await SendAsync("MODE", new IrcTarget(channel)); return; } var enumerator = ircChannelModes.GetEnumerator(); var modeChunk = new List <IrcChannelMode>(); int i = 0; while (enumerator.MoveNext()) { modeChunk.Add(enumerator.Current); if (++i == 3) { await SendAsync("MODE", new IrcTarget(channel), IrcChannelMode.RenderModes(modeChunk)); modeChunk.Clear(); i = 0; } } if (modeChunk.Count > 0) { await SendAsync("MODE", new IrcTarget(channel), IrcChannelMode.RenderModes(modeChunk)); } }