private void client_PrivateMessage(Client sender, PrivateMessage privateMessage) { if (Channel.IsChannel(privateMessage.Recipient)) { Channel channel = Chats.SingleOrDefault(chat => chat.Name == privateMessage.Recipient) as Channel; if (channel == null) { channel = new Channel(privateMessage.Recipient); Chats.Add(channel); } channel.Messages.Add(privateMessage); User user = users.SingleOrDefault(usr => usr.Complete == privateMessage.User); if (user == null) { user = new User(privateMessage.User, true); users.Add(user); } if (user.IsNickServIdentified == null) { user.RequestNickServAuthentication(client); } } else { } }
public ClientBehaviour() { connection = new FakeConnection(line => clientLines.Enqueue(line)); client = new Client(connection, new ClientConfig() { Nickname = nickname, Username = username, UserMode = usermode, Password = password }); client.Message += (sender, message) => serverLines.Enqueue(message.Line); clientThread = new Thread((ParameterizedThreadStart)((object delay) => client.Run((Action)delay))); clientThread.IsBackground = true; clientThread.Start((Action)(() => Thread.Sleep(100))); }
static bool check_auth(Client sender, string user) { foreach (string s in iSettings[sender].auth) { if (s == user) { return true; } } return false; }
static void c_Message(Client sender, Iris.Irc.ServerMessages.Message message) { ircSettings i = iSettings[sender]; if (i.log == true) { } Console.WriteLine(message.Line); Console.Write("> "); }
public ClientStateTracker(Client client) { this.client = client; this.client.Message += client_Message; this.client.PrivateMessage += client_PrivateMessage; this.client.Notice += client_Notice; this.client.NickMessage += client_NickMessage; this.client.JoinMessage += client_JoinMessage; this.client.PartMessage += client_PartMessage; this.client.QuitMessage += client_QuitMessage; }
static void client_PrivateMessage(Client sender, PrivateMessage privateMessage) { string user = privateMessage.User.Split('!')[0]; string rcpt = privateMessage.Recipient; if (privateMessage.Recipient == sender.Config.Nickname) { rcpt = user; } if (privateMessage.Message.StartsWith(".")) { string cmd = privateMessage.Message; string msg = ""; if (privateMessage.Message.Contains(' ')) { cmd = privateMessage.Message.Substring(0, privateMessage.Message.IndexOf(' ')); msg = privateMessage.Message.Substring(cmd.Length + 1, privateMessage.Message.Length - cmd.Length - 1); } switch (cmd.ToUpper()) { case ".JOIN": if (msg.Contains(' ')) { msg = msg.Split(' ')[0]; } sender.Join(msg); break; case ".PART": if (msg.Contains(' ')) { sender.Leave(msg.Split(' ')[0]); } else { if (rcpt.StartsWith("#")) { sender.Leave(rcpt); } } break; case ".WAVE": sender.Send(rcpt, "o/"); break; case ".SEEN": break; } } }
private static void Main(string[] args) { var ircConnection = new IrcConnection(new ServerDetails() { Port = 6667, Address = "irc.esper.net", Name = "Esper.net" }); var client = new Client(ircConnection, new ClientConfig() { Nickname = "Iris", Password = "******", UserMode = 0, Username = "******" }); client.Message += (sender, message) => { if (message is PrivateMessage) { var privmsg = (PrivateMessage)message; Console.WriteLine(privmsg.User + ": " + privmsg.Message); } else Console.WriteLine(message.Line.Remove(0, message.Line.IndexOf(':', 2) + 1)); }; var clientThread = new Thread((ParameterizedThreadStart)((object delay) => client.Run((Action)delay))) { Name = "Client - Esper.net", IsBackground = true }; clientThread.Start((Action)(() => Thread.Sleep(100))); //Needs the delay action passed in because Portable Class Libraries don't support Threads ... Console.WriteLine("Write exit to ... well ... exit."); var readLine = ""; while (true) { readLine = Console.ReadLine(); if (readLine.ToLower() == "exit") break; ircConnection.SendLine(readLine); } client.Stop(); Console.WriteLine("Threads should be stopping."); Console.ReadLine(); }
private static void Main(string[] args) { IrcConnection ircConnection = new IrcConnection(new ServerDetails() { Port = 6667, Address = "irc.esper.net", Name = "Esper.net" }); Client client = new Client(ircConnection, new ClientConfig() { Nickname = "Nish|Iris", Password = "", UserMode = 0, Username = "******" }); client.Message += (sender, line) => Console.WriteLine(line); client.PrivateMessage += client_PrivateMessage; client.Connected += client_Connected; Thread clientThread = new Thread((ParameterizedThreadStart)((object delay) => client.Run((Action)delay))); clientThread.Name = "Client - Esper.net"; clientThread.IsBackground = true; clientThread.Start((Action)(() => Thread.Sleep(100))); //Needs the delay action passed in because Portable Class Libraries don't support Threads ... Console.WriteLine("Press enter to stop threads."); Console.ReadLine(); client.Stop(); Console.WriteLine("Threads should be stopping."); Console.ReadLine(); }
/// <summary> /// Sends a authentication request for the current User to NickServ. /// </summary> /// <param name="client">The client used for sending the message.</param> public void RequestNickServAuthentication(Client client) { NickServIdentificationRequested = DateTime.Now; client.SendLine(Messages.Client.NamedMessageType.Private + " NickServ :ACC " + Nickname); }
static void find_seen(Client sender, string user, string rcpt, string msg) { ircSettings i = iSettings[sender]; string db = i.server.Split('.')[1] + ".db"; if (File.Exists(db)) { if (msg.Contains(' ')) { msg = msg.Split(' ')[0]; } msg = msg.Replace("\'", ""); SQLiteConnection sql = new SQLiteConnection("data source=" + db); sql.Open(); using (SQLiteCommand com = new SQLiteCommand(sql)) { com.CommandText = "SELECT * FROM seen WHERE UPPER(sUSER)='" + msg.ToUpper() + "'"; using (SQLiteDataReader res = com.ExecuteReader()) { if (res.HasRows) { while (res.Read()) { string sUser = res["sUSER"].ToString(); string sChannel = res["sCHANNEL"].ToString(); string sMsg = res["sMSG"].ToString(); string sDate = res["sDATE"].ToString(); if (sChannel.StartsWith("#") == false) { sChannel = "PRIVATE"; } sMsg = sMsg.Replace("'", "\'"); sender.Send(rcpt, "Last seen " + sUser + " in " + sChannel + " at " + sDate + " saying: '" + sMsg + "'"); } } else { sender.Send(rcpt, msg + " has not been seen :("); } } } sql.Close(); sql.Dispose(); } else { sender.Send(rcpt, msg + " has not been seen :("); } }
private void client_PartMessage(Client sender, PartMessage partMessage) { }
private void client_Notice(Client sender, Notice notice) { }
private void client_NickMessage(Client sender, NickMessage nickMessage) { }
private void client_Message(Client sender, Message message) { }
private void client_JoinMessage(Client sender, JoinMessage joinMessage) { }
static void processCommand(string msg) { if (msg.Length > 0) { switch (msg.Substring(0, 1).ToLower()) { case "a": if (msg.Contains(' ')) { string[] settings = msg.Split(' '); if (settings.Length >= 3) { Client c = ircClient[settings[1]]; ircSettings i = iSettings[c]; i.auth.Add(settings[2]); iSettings[c] = i; } } break; case "j": if (msg.Contains(' ')) { string[] settings = msg.Split(' '); if (settings.Length >= 3) { Client c = ircClient[settings[1]]; c.Join(settings[2]); Console.WriteLine("Joining channel " + settings[2] + " on " + settings[1]); } else { Console.WriteLine("Invalid parameters! eg: 'j client channel'"); } } break; case "l": if (msg.Contains(' ')) { string[] settings = msg.Split(' '); if (settings.Length >= 3) { Client c = ircClient[settings[1]]; c.Leave(settings[2]); Console.WriteLine("Leaving channel " + settings[2] + " on " + settings[1]); } else { Console.WriteLine("Invalid parameters! eg: 'l client channel'"); } } break; case "c": if (msg.Contains(' ')) { string server = msg.Split(' ')[1]; IrcConnection irc = new IrcConnection(new ServerDetails() { Port = 6667, Address = server, Name = server.Split('.')[1] }); Client c = new Client(irc, new ClientConfig() { Nickname = "Nish", Password = "", UserMode = 0, Username = "******" }); c.Message += c_Message; c.PrivateMessage += c_PrivateMessage; c.Connected += c_Connected; ircSettings i = new ircSettings(); i.auth = new List<string>(); i.auth.Add("Nishtown"); i.server = irc.Server.Address; i.log = false; i.greet = false; ircClient.Add(irc.Server.Name, c); iSettings.Add(c, i); Thread clientThread = new Thread((ParameterizedThreadStart)((object delay) => c.Run((Action)delay))); clientThread.Name = irc.Server.Name; clientThread.IsBackground = true; clientThread.Start((Action)(() => Thread.Sleep(100))); } break; case "d": if (msg.Contains(' ')) { string[] settings = msg.Split(' '); Client c = ircClient[settings[1]]; c.Stop(); } break; default: Console.WriteLine("Invalid chat command"); break; } } }
private void client_QuitMessage(Client sender, QuitMessage quitMessage) { }
private void client_PrivateMessage(Client sender, PrivateMessage privateMessage) { }
static void client_Connected(Client sender) { Console.WriteLine("Connected!"); }
static void update_seen(Client sender, string user, string rcpt, string message) { ircSettings i = iSettings[sender]; string db = i.server.Split('.')[1] + ".db"; string tbl = @"CREATE TABLE IF NOT EXISTS seen ( sDATE TEXT NULL, sCHANNEL TEXT NULL, sUSER TEXT NULL, sMSG TEXT NULL)"; if (File.Exists(db)) { SQLiteConnection sql = new SQLiteConnection("data source=" + db); sql.Open(); using (SQLiteCommand com = new SQLiteCommand(sql)) { if (message.Contains('\'')) { message = message.Replace("\'", "'"); } com.CommandText = tbl; com.ExecuteNonQuery(); com.CommandText = "INSERT INTO seen (sDATE, sCHANNEL, sUSER, sMSG) SELECT '" + DateTime.Now.ToString() + "','" + rcpt + "','" + user + "','" + message + "' WHERE NOT EXISTS(SELECT 1 FROM seen WHERE sUSER='******')"; com.ExecuteNonQuery(); com.CommandText = "UPDATE seen SET sDATE='" + DateTime.Now.ToString() + "',sCHANNEL='" + rcpt + "',sUSER='******',sMSG='" + message + "' WHERE sUSER='******'"; com.ExecuteNonQuery(); } sql.Close(); sql.Dispose(); } else { SQLiteConnection.CreateFile(db); SQLiteConnection sql = new SQLiteConnection("data source=" + db); sql.Open(); using (SQLiteCommand com = new SQLiteCommand(sql)) { com.CommandText = tbl; com.ExecuteNonQuery(); } sql.Close(); sql.Dispose(); } }
static void c_PrivateMessage(Client sender, Iris.Irc.ServerMessages.PrivateMessage privateMessage) { ircSettings i = iSettings[sender]; string user = privateMessage.User.Split('!')[0]; string rcpt = privateMessage.Recipient; if (privateMessage.Recipient == sender.Config.Nickname) { rcpt = user; } update_seen(sender, user, rcpt, privateMessage.Message); if (privateMessage.Message.StartsWith(".")) { string cmd = privateMessage.Message; string msg = ""; if (privateMessage.Message.Contains(' ')) { cmd = privateMessage.Message.Substring(0, privateMessage.Message.IndexOf(' ')); msg = privateMessage.Message.Substring(cmd.Length + 1, privateMessage.Message.Length - cmd.Length - 1); } if (check_auth(sender, user)) { switch (cmd.ToUpper()) { case ".JOIN": if (msg.Contains(' ')) { msg = msg.Split(' ')[0]; } sender.Join(msg); break; case ".PART": if (msg.Contains(' ')) { sender.Leave(msg.Split(' ')[0]); } else { if (rcpt.StartsWith("#")) { sender.Leave(rcpt); } } break; case ".GOOGLE": sender.Send(rcpt, "https://www.google.com.au/search?q=" + msg.Replace(' ', '+')); break; case ".WAVE": sender.Send(rcpt, "o/"); break; case ".SEEN": if (check_auth(sender, user)) { find_seen(sender, user, rcpt, msg); } break; case ".INFO": sender.Send(rcpt, "An IRC BOT Written by Nishtown, Based off IRIS by Banane9"); break; case ".ADDAUTH": if (check_auth(sender, user)) { if (msg.Contains(' ')) { msg = msg.Split(' ')[0]; } i.auth.Add(msg); iSettings[sender] = i; } break; } } } }
static void c_Connected(Client sender) { Console.WriteLine(iSettings[sender].server + " connected as '" + iSettings[sender].server.Split('.')[1] + "'!"); Console.Write("> "); }