public void FilterMessage_ManyCtcp()
        {
            int count   = 10;
            var builder = new StringBuilder();

            for (int n = 0; n < count; n++)
            {
                builder.Append(CtcpDelimiter);
                builder.Append("TEST" + n + " " + "content" + n);
            }
            builder.Append(CtcpDelimiter);

            var message = new IrcMessage(this._user, "PRIVMSG", new string[] { "someone" }, builder.ToString());

            var res = CtcpUtils.FilterMessage(message);

            Assert.AreEqual(0, res.IrcMessages.Count);
            Assert.AreEqual(count, res.CtcpMessages.Count);
            for (int n = 0; n < count; n++)
            {
                Assert.AreEqual(message.Sender, res.CtcpMessages[n].Sender);
                Assert.AreEqual("TEST" + n, res.CtcpMessages[n].Command, true);
                Assert.AreEqual("content" + n, res.CtcpMessages[n].Content);
            }
        }
        public void DecodeMessage_RfcExample2()
        {
            // from the CTCP RFC: http://www.irchelp.org/irchelp/rfc/ctcpspec.html
            string text     = "SED " + '\x10' + "n\t\big" + '\x10' + '\x10' + @"\a" + '\x10' + @"0\\:";
            string expected = "SED \n\t\big" + '\x10' + '\x1' + '\0' + @"\:";

            Assert.AreEqual(expected, CtcpUtils.DecodeMessage(text));
        }
        public void DecodeMessage_RfcExample1()
        {
            // from the CTCP RFC: http://www.irchelp.org/irchelp/rfc/ctcpspec.html
            string text     = "Hi there!" + '\x10' + "nHow are you? " + @"\\K?";
            string expected = "Hi there!\nHow are you? " + @"\K?";

            Assert.AreEqual(expected, CtcpUtils.DecodeMessage(text));
        }
        public void EncodeMessage_RfcExample1()
        {
            // directly from the CTCP RFC: http://www.irchelp.org/irchelp/rfc/ctcpspec.html
            string text     = "Hi there!\n" + "How are you? " + @"\K?";
            string expected = CtcpDelimiter + @"Hi there!" + '\x10' + @"nHow are you? \\K?" + CtcpDelimiter;

            Assert.AreEqual(expected, CtcpUtils.EncodeMessage(text));
        }
        public void FilterMessage_OneCtcpMessage()
        {
            var message = new IrcMessage(this._user, "PRIVMSG", new string[] { "someone" }, CtcpDelimiter + "PING abc" + CtcpDelimiter);

            var res = CtcpUtils.FilterMessage(message);

            Assert.AreEqual(0, res.IrcMessages.Count);
            Assert.AreEqual(1, res.CtcpMessages.Count);
            Assert.AreEqual(message.Sender, res.CtcpMessages[0].Sender);
            Assert.AreEqual("PING", res.CtcpMessages[0].Command, true);
            Assert.AreEqual("abc", res.CtcpMessages[0].Content);
        }
        public void FilterMessage_CtcpThenIrc()
        {
            var message = new IrcMessage(this._user, "PRIVMSG", new string[] { "someone" }, CtcpDelimiter + "FINGER" + CtcpDelimiter + "Hi!");

            var res = CtcpUtils.FilterMessage(message);

            Assert.AreEqual(1, res.IrcMessages.Count);
            Assert.AreEqual(message.Sender, res.IrcMessages[0].Sender);
            Assert.AreEqual(message.Command, res.IrcMessages[0].Command, true);
            Assert.AreEqual(message.CommandArguments, res.IrcMessages[0].CommandArguments);
            Assert.AreEqual("Hi!", res.IrcMessages[0].Content);
            Assert.AreEqual(1, res.CtcpMessages.Count);
            Assert.AreEqual(message.Sender, res.CtcpMessages[0].Sender);
            Assert.AreEqual("FINGER", res.CtcpMessages[0].Command, true);
            Assert.AreEqual(string.Empty, res.CtcpMessages[0].Content);
        }
        /// <summary>
        /// Interprets an <see cref="IrcMessage"/> and returns the <see cref="IrcMessage"/>s that should be interpreted by an <see cref="IrcClient"/>.
        /// </summary>
        internal IEnumerable <IrcMessage> InterpretMessage(IrcMessage message)
        {
            if (!CtcpUtils.IsCtcpMessage(message))
            {
                return(new[] { message });
            }

            var info = CtcpUtils.FilterMessage(message);

            foreach (var ctcpMessage in info.CtcpMessages)
            {
                this.HandleMessage(ctcpMessage);
            }

            return(info.IrcMessages);
        }
        public void IsCtcpMessage_CtcpMessageInWrongCommand()
        {
            var message = new IrcMessage(this._user, "join", new[] { "example" }, CtcpDelimiter + "FINGER" + CtcpDelimiter);

            Assert.IsFalse(CtcpUtils.IsCtcpMessage(message));
        }
        public void IsCtcpMessage_CtcpMessage()
        {
            var message = new IrcMessage(this._user, "privmsg", new[] { "example" }, CtcpDelimiter + "FINGER" + CtcpDelimiter);

            Assert.IsTrue(CtcpUtils.IsCtcpMessage(message));
        }
        public void IsCtcpMessage_IrcMessage()
        {
            var message = new IrcMessage(this._user, "privmsg", new[] { "example" }, "Hi");

            Assert.IsFalse(CtcpUtils.IsCtcpMessage(message));
        }
        /// <summary>
        /// Sends a CTCP notice.
        /// </summary>
        /// <param name="text">The notice text.</param>
        /// <remarks>This is a low-level method that should be used to send custom CTCP commands if needed.</remarks>
        public void SendNotice(string text)
        {
            Validate.HasText(text, "text");

            this._user.SendNotice(CtcpUtils.EncodeMessage(text));
        }
Beispiel #12
0
        /// <summary>
        /// Sends a CTCP message to the <see cref="IrcChannel"/>.
        /// </summary>
        /// <param name="text">The message text.</param>
        /// <remarks>This is a low-level method that should be used to send custom CTCP commands if needed.</remarks>
        public void SendMessage(string text)
        {
            Validate.HasText(text, "text");

            this._channel.SendMessage(CtcpUtils.EncodeMessage(text));
        }