Exemplo n.º 1
0
        /// <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));
            }
        }