示例#1
0
        private void eUsersList_DoubleClick(object sender, EventArgs e)
        {
            var userItem = eUsersList.SelectedItem;

            if (userItem == null)
            {
                return;
            }

            Match m = Regex.Match(userItem.ToString(), "^[@+]?(.*)$");

            string targetNick = m.Groups[1].Value;

            var ctx = ContextCollection.GetByName(targetNick);

            if (ctx == null)
            {
                ContextCollection.Add(new IrcQuery(targetNick));
            }
            else
            {
                ContextCollection.Current = ctx;
                UpdateContext();
            }
        }
        static public void PrivmsgAction(Message message)
        {
            if (message.ParamsArray[1] == ContextCollection.Server.Client.Nickname) // Private message
            {
                var ctx = ContextCollection.GetByName(message.Nick);

                if (ctx != null)
                {
                    ctx.WriteMessage(message.Nick, message.Text);
                }
                else
                {
                    IrcQuery query = new IrcQuery(message.Nick);

                    ContextCollection.Add(query, true);
                    query.WriteMessage(message.Nick, message.Text);
                }
            }
            else // Channel
            {
                var ctx = ContextCollection.GetByName(message.ParamsArray[1]);

                if (ctx != null)
                {
                    ctx.WriteMessage(message.Nick, message.Text);
                }
            }
        }
        static public void NamesEndAction(Message message)
        {
            var ctx = ContextCollection.GetByName(message.ParamsArray[2]);

            if (ctx == ContextCollection.Current)
            {
                Program.MainWindow.UpdateUsersList();
            }
        }
        static public void TopicInfoAction(Message message)
        {
            var ctx = ContextCollection.GetByName(message.ParamsArray[2]);

            var timeSpan = TimeSpan.FromSeconds(double.Parse(message.ParamsArray[4]));
            var epoch    = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            var dateTime = epoch.Add(timeSpan).ToLocalTime();

            ctx.WriteLine(RTF.ColourString("Topic set by " + message.ParamsArray[3] + " on " + dateTime, IrcColor.Green));
        }
        static public void NamesAction(Message message)
        {
            var ctx = ContextCollection.GetByName(message.ParamsArray[3]);

            string[] names = message.Text.Split(' ');

            foreach (string name in names)
            {
                ((IrcChannel)ctx).Users.Add(name);
            }
        }
        static public void TopicChangeAction(Message message)
        {
            var ctx = ContextCollection.GetByName(message.ParamsArray[1]);

            ctx.WriteLine(RTF.ColourString(message.Nick + " changed topic to: " + message.Text, IrcColor.Green));
            ctx.Topic = message.Text;

            if (ctx == ContextCollection.Current)
            {
                Program.MainWindow.UpdateTopic();
            }
        }
        static public void TopicAction(Message message)
        {
            var ctx = ContextCollection.GetByName(message.ParamsArray[2]);

            ctx.Topic = message.Text;
            ctx.WriteLine(RTF.ColourString("Topic for " + message.ParamsArray[2] + ": " + message.Text, IrcColor.Green));

            if (ctx == ContextCollection.Current)
            {
                Program.MainWindow.UpdateTopic();
            }
        }
        static public void ModeAction(Message message)
        {
            var ctx = ContextCollection.GetByName(message.ParamsArray[1]);

            if (ctx != null)
            {
                ctx.WriteLine(RTF.ColourString(message.Nick + " sets mode" + message.Params, IrcColor.Green));
                ContextCollection.Server.SendQuery("NAMES " + message.ParamsArray[1]);
            }
            else
            {
                ContextCollection.Server.WriteLine(RTF.ColourString(message.Nick + " sets mode " + message.Text, IrcColor.Green));
            }
        }
        static public void KickAction(Message message)
        {
            var ctx = ContextCollection.GetByName(message.ParamsArray[1]);

            if (ContextCollection.Server.Client.Nickname == message.ParamsArray[2])
            {
                ContextCollection.Server.WriteLine(string.Format("You were kicked from {0} by {1} ({2})", message.ParamsArray[1], message.Nick, message.Text));
                ContextCollection.Remove(ctx);
            }
            else
            {
                ctx.WriteLine(RTF.ColourString(string.Format("{0} has been kicked by {1} ({2})", message.ParamsArray[2], message.Nick, message.Text), IrcColor.Orange));
                ctx.UsersList.Remove(message.ParamsArray[2]);
                Program.MainWindow.UpdateUsersList();
            }
        }
示例#10
0
        static public void JoinAction(Message message)
        {
            if (message.Nick == ContextCollection.Server.Client.Nickname)
            {
                ContextCollection.Add(new IrcChannel(message.ParamsArray[1]));
            }
            else
            {
                var ctx = ContextCollection.GetByName(message.ParamsArray[1]);

                if (ctx != null)
                {
                    ((IrcChannel)ctx).Users.Add(message.Nick);
                    ctx.WriteLine(RTF.ColourString(message.Nick + " (" + message.Ident + "@" + message.Host + ") has joined.", IrcColor.Orange));

                    Program.MainWindow.UpdateUsersList();
                }
            }
        }
示例#11
0
        static public void PartAction(Message message)
        {
            if (message.Nick == ContextCollection.Server.Client.Nickname)
            {
                ContextCollection.Remove(ContextCollection.GetByName(message.ParamsArray[1]));
            }
            else
            {
                var ctx = ContextCollection.GetByName(message.ParamsArray[1]);

                if (ctx != null)
                {
                    ((IrcChannel)ctx).Users.Remove(message.Nick);
                    ctx.WriteLine(RTF.ColourString(message.Nick + " has left.", IrcColor.Orange));


                    Program.MainWindow.UpdateUsersList();
                }
            }
        }
示例#12
0
        static public void QueryCommand(string _params)
        {
            Match m = Regex.Match(_params.Trim(), @"^([A-Za-z0-9_\-\[\]\\^{}|`]+)$");

            if (m.Groups[1] == null || m.Groups[1].Value.Length == 0)
            {
                ContextCollection.Current.WriteLine("Usage: /query [<nickname>]");
                return;
            }

            var ctx = ContextCollection.GetByName(m.Groups[1].Value);

            if (ctx == null)
            {
                IrcQuery query = new IrcQuery(m.Groups[1].Value);
                ContextCollection.Add(query);
            }
            else
            {
                ContextCollection.Current = ctx;
                Program.MainWindow.UpdateContext();
            }
        }