예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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);
        }