private void OnModeReceived(object sender, ModeEventArgs e) { var channel = e.Target.ToLowerInvariant(); if (this.watchedChannels.ContainsKey(channel)) { var changes = ModeChanges.FromChangeList(e.Changes); var triggerBotOpped = false; var triggerBotDeOpped = false; this.logger.DebugFormat("Mode change seen on {0}: {1}", channel, string.Join(" ", e.Changes)); lock (this.channelStatus) { if (changes.Ops.Contains(this.ircClient.Nickname)) { triggerBotOpped = true; changes.Ops.Remove(this.ircClient.Nickname); } if (changes.Deops.Contains(this.ircClient.Nickname)) { triggerBotDeOpped = true; changes.Deops.Remove(this.ircClient.Nickname); } this.SyncChangesToChannel(this.channelStatus[channel], changes); } if (triggerBotOpped) { this.logger.InfoFormat("Bot opped on {0}", channel); this.OnBotOpped(channel); } if (triggerBotDeOpped) { this.logger.InfoFormat("Bot deopped on {0}", channel); this.OnBotDeOpped(channel); } if (!changes.IsEmpty()) { this.logger.InfoFormat("Mode change on {0}", channel); this.OnModeChange(channel); } } }
public void ShouldParseRemovalOfParameterisedModes() { var fromChangeList = ModeChanges.FromChangeList(new [] { "+g-icfnt" }); Assert.IsEmpty(fromChangeList.Bans); Assert.IsEmpty(fromChangeList.Quiets); Assert.IsEmpty(fromChangeList.Unbans); Assert.IsEmpty(fromChangeList.Unquiets); Assert.IsEmpty(fromChangeList.Exempts); Assert.IsEmpty(fromChangeList.Unexempts); Assert.IsEmpty(fromChangeList.Ops); Assert.IsEmpty(fromChangeList.Deops); Assert.IsNull(fromChangeList.Moderated); Assert.IsNull(fromChangeList.ReducedModeration); Assert.IsNull(fromChangeList.RegisteredOnly); }