private void ChannelModeChangeHandler(object sender, ChannelModeChangeInfo e, string name) { string msg = string.Format(" * {0} sets mode {1} on {2}.", e.Nick.Nickname, e.Modes.ModesToString(), e.Channel); AddToBuffer(name, e.Channel, string.Format("[{0}] {1}", e.TimeStamp.ToString("HH:mm:ss"), msg)); }
/// <summary> /// Update a channel's mode. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void HandleChannelModeChange(object sender, ChannelModeChangeInfo e) { ChannelRWLock.EnterWriteLock(); Channel channel = Channels.Find(chan => chan.Name == e.Channel); if (channel != null) { foreach (ChannelModeInfo mode in e.Modes) { switch (mode.Mode) { case ChannelMode.v: case ChannelMode.h: case ChannelMode.o: case ChannelMode.a: case ChannelMode.q: Nick changedNick = channel.GetNick(mode.Parameter); if (changedNick != null) { PrivilegeMode priv; Enum.TryParse(mode.Mode.ToString(), out priv); if (mode.Set) { changedNick.AddPrivilege(priv); } else { changedNick.RemovePrivilege(priv); } } break; case ChannelMode.b: if (mode.Set) { channel.AddBan(mode.Parameter); } else { channel.RemoveBan(mode.Parameter); } break; case ChannelMode.k: if (mode.Set) { channel.AddMode(mode.Mode); channel.Key = mode.Parameter; } else { channel.RemoveMode(mode.Mode); channel.Key = string.Empty; } break; default: if (mode.Set) { channel.AddMode(mode.Mode); } else { channel.RemoveMode(mode.Mode); } break; } } Command.SendWho(channel.Name); } ChannelRWLock.ExitWriteLock(); }
private void RelayChannelMode(object sender, ChannelModeChangeInfo e) { string msg = string.Format("[{0}] * {1} sets mode {2} on {3}.", e.Channel, e.Nick.Nickname, e.Modes.ModesToString(), e.Channel); ProcessRelay(e.Channel, RelayType.Mode, msg, null, e.Modes); }