public string recv() { byte[] data = new byte[2048]; sock.Receive(data, 2048, System.Net.Sockets.SocketFlags.None); mail = System.Text.ASCIIEncoding.UTF8.GetString(data).Replace("\0", ""); if (mail.Contains(" ")) { if (mail.Substring(0, 4) == "PING") { string pserv = mail.Substring(mail.IndexOf(":"), mail.Length - mail.IndexOf(":")); pserv = pserv.TrimEnd((char)0); mail = "PING from " + pserv + "\r" + "PONG to " + pserv; send("PONG " + pserv); } else if (mail.Substring(mail.IndexOf(" ") + 1, 7) == "PRIVMSG") { string[] tmparr = null; mail = mail.Remove(0, 1); tmparr = mail.Split('!'); rnick = tmparr[0]; tmparr = mail.Split(':'); rmsg = tmparr[1]; bool nickblacklisted = isBlacklisted(rnick); if (nickblacklisted == false) { if (rmsg.Contains("!respond") == true) { string response = "PRIVMSG " + channel + " :Response"; send(response); } else if (rmsg.Contains("!greet ")) { string query = rmsg.Remove(0, 7); try { int queryindex = Int32.Parse(query); if (queryindex <= greetnumber) { FervorLibrary.Library Greeting = new FervorLibrary.Library(); string returngreet = Greeting.greet(queryindex); string response = "PRIVMSG " + channel + " :" + returngreet; send(response); } else { send("PRIVMSG " + channel + " :I don't know that many languages!"); } } catch (Exception ex) { send("PRIVMSG " + channel + " :Something went wrong: " + ex); } } else if (rmsg.Contains("!farewell ")) { string query = rmsg.Remove(0, 10); try { int queryindex = Int32.Parse(query); if (queryindex <= greetnumber) { FervorLibrary.Library Farewelling = new FervorLibrary.Library(); string returnfarewell = Farewelling.farewell(queryindex); string response = "PRIVMSG " + channel + " :" + returnfarewell; send(response); } else { send("PRIVMSG " + channel + " :I don't know that many languages!"); } } catch (Exception ex) { send("PRIVMSG " + channel + " :Something went wrong: " + ex); } } else if (rmsg.Contains("!md5 ")) { generateMD5message (); } else if (rmsg.Contains("!register ")) { reqreguser (); } else if (rmsg.Contains("!registerlist")) { listregs (); } else if (rmsg.Contains("!clearregisterlist")) { clearregs (); } else if (rmsg.Contains("!active ")) { activateUser (); } else if (rmsg.Contains("!deactivate")) { deactivateUser (); } else if (rmsg.Contains("!adduser ")) { System.IO.StreamReader sr = new StreamReader(".activeusers"); string[] users = sr.ReadToEnd().Split(':'); sr.Close(); foreach (string x in users) { if (x.Contains(rnick)) { string query = rmsg.Remove(0, 9); ObsidianFunctions.Functions obsidfunc = new ObsidianFunctions.Functions(); string list = obsidfunc.addUser(query); send("PRIVMSG " + channel + " :" + list); } } } else if (rmsg.Contains("!removeuser ")) { System.IO.StreamReader sr = new StreamReader(".activeusers"); string[] users = sr.ReadToEnd().Split(':'); sr.Close(); foreach (string x in users) { if (x.Contains(rnick)) { string query = rmsg.Remove(0, 12); ObsidianFunctions.Functions obsidfunc = new ObsidianFunctions.Functions(); string list = obsidfunc.removeUser(query); send("PRIVMSG " + channel + " :" + list); } } } else if (rmsg.Contains("!userlist")) { listUsers(); } else if (rmsg.Contains("!botquit")) { bool nickisuser = isActiveUser(rnick); if (nickisuser == true) { send("QUIT"); } else { send("PRIVMSG " + channel + " :Insufficient permissions!"); } } else if (rmsg.Contains("!addops ")) { if (isOperator == true) { string query = rmsg.Remove(0, 8); bool nickisuser = isActiveUser(rnick); if (nickisuser == true) { send("MODE " + channel + " +o " + query); } else { send("PRIVMSG " + channel + " :Insufficient permissions!"); } } } else if (rmsg.Contains("!removeops ")) { if (isOperator == true) { string query = rmsg.Remove(0, 11); bool nickisuser = isActiveUser(rnick); if (nickisuser == true) { send("MODE " + channel + " -o " + query); } else { send("PRIVMSG " + channel + " :Insufficient permissions!"); } } } else if (rmsg.Contains("!kick ")) { if (isOperator == true) { string query = rmsg.Remove(0, 6); bool nickuser = isActiveUser(rnick); if (nickuser == true) { send("KICK " + channel + " " + query + " User-requested kick"); } else { send("PRIVMSG " + channel + " :Insufficient permissions!"); } } } else if (rmsg.Contains("!batch ")) { string query = rmsg.Remove(0, 7); bool nickuser = isActiveUser(rnick); if (rnick == ownernick && nickuser == true) { ObsidianFunctions.Functions ObsidFunc = new ObsidianFunctions.Functions(); ObsidFunc.batch(query); send("PRIVMSG " + channel + " :Success!"); } else { send("PRIVMSG " + channel + " :Insufficient Permissions!"); } } else if (rmsg.Contains("!cscompile ")) { string query = rmsg.Remove(0, 11).Replace("\0", "").Trim(); bool nickuser = isActiveUser(rnick); if (rnick == ownernick && nickuser == true) { ObsidianFunctions.Functions ObsidFunc = new Functions(); say(channel, ObsidFunc.CSCompile(query)); } else { send("PRIVMSG " + channel + " :Insufficient Permissions!"); } } else if (rmsg.Contains("!log start")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { isLogging = true; send("PRIVMSG " + channel + " :Success!"); } else { send("PRIVMSG " + channel + " :Insufficient Permissions!"); } } else if (rmsg.Contains("!log stop")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { isLogging = false; send("PRIVMSG " + channel + " :Success!"); } else { send("PRIVMSG " + channel + " :Insufficient Permissions!"); } } else if (rmsg.Contains("!calc ")) { ObsidianFunctions.Functions ObsidFunc = new ObsidianFunctions.Functions(); string query = rmsg.Remove(0, 6); float answer = ObsidFunc.calc(query); send("PRIVMSG " + channel + " :" + answer.ToString()); } else if (rmsg.Contains("!isOperator true")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { isOperator = true; send("PRIVMSG " + channel + " :isOperator = true"); } else { send("PRIVMSG " + channel + " :Insufficient Permissions!"); } } else if (rmsg.Contains("!isOperator false")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { isOperator = false; send("PRIVMSG " + channel + " :isOperator = false"); } else { send("PRIVMSG " + channel + " :Insufficient Permissions!"); } } else if (rmsg.Contains("!botchat")) { if (talkingTo != "nobody") { send("PRIVMSG " + rnick + " :Sorry, I'm already talking with someone"); } else { talkingTo = rnick; FervorLibrary.Library Greetings = new FervorLibrary.Library(); Random rand = new Random(); int indexgreet = rand.Next(0, greetnumber); string greeting = Greetings.Greeting(rnick, indexgreet); send("PRIVMSG " + rnick + " :" + greeting); botChat(); } } else if (rmsg.Contains("quit")) { if (rnick == talkingTo) { talkingTo = "nobody"; } } else if (rnick == talkingTo) { Request r = new Request(rmsg, chatUser, chatBot); Result res = chatBot.Chat(r); send("PRIVMSG " + talkingTo + " :" + res.Output); } else if (rmsg.Contains("!udefine ")) { string query = rmsg.Remove(0, 9); ObsidianFunctions.Functions ObsidFunc = new ObsidianFunctions.Functions(); string definition = ObsidFunc.uDefine(query); send("PRIVMSG " + channel + " :" + definition); } else if (rmsg.Contains("!ddefine ")) { string query = rmsg.Remove(0, 9); ObsidianFunctions.Functions ObsidFunc = new ObsidianFunctions.Functions(); string definition = ObsidFunc.dDefine(query); send("PRIVMSG " + channel + " :" + definition); } else if (rmsg.Contains("!canGreet true")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { canGreet = true; send("PRIVMSG " + channel + " :Success!"); } else { send("PRIVMSG " + channel + " :Insufficient permissions!"); } } else if (rmsg.Contains("!canGreet false")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { canGreet = false; send("PRIVMSG " + channel + " :Success!"); } else { send("PRIVMSG " + channel + " :Insufficient permissions!"); } } else if (rmsg.Contains("!wdefine ")) { string query = rmsg.Remove(0, 9); ObsidianFunctions.Functions ObsidFunc = new ObsidianFunctions.Functions(); string definition = ObsidFunc.wDefine(query); send("PRIVMSG " + channel + " :" + definition); } else if (rmsg.Contains("!sha1 ")) { Thread sha1hash = new Thread(generatesha1message); sha1hash.Start(); } else if (rmsg.Contains("!sha256 ")) { Thread sha256hash = new Thread(generatesha256message); sha256hash.Start(); } else if (rmsg.Contains("!sha384 ")) { Thread sha384hash = new Thread(generatesha384message); sha384hash.Start(); } else if (rmsg.Contains("!sha512 ")) { Thread sha512hash = new Thread(generatesha512message); sha512hash.Start(); } else if (rmsg.Contains("!blacklistadd ")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { string query = rmsg.Remove(0, 14); Functions ObsidFunc = new Functions(); blacklist = ObsidFunc.addBlacklist(query); string newlist = String.Join(":", blacklist); send("PRIVMSG " + channel + " :" + newlist); } else { send("PRIVMSG " + channel + " :Insufficient Permissions!"); } } else if (rmsg.Contains("!blacklistremove ")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { string query = rmsg.Remove(0, 17); Functions ObsidFunc = new Functions(); blacklist = ObsidFunc.removeBlacklist(query); string newlist = String.Join(":", blacklist); if (newlist == null || newlist == "") { newlist = "None"; } send("PRIVMSG " + channel + " :" + newlist); } else { send("PRIVMSG " + channel + ":Insufficient Permissions!"); } } else if (rmsg.Contains("!blacklist")) { listBlacklist(); } else if (rmsg.Contains("!get ")) { string query = rmsg.Remove(0, 5); if (query.StartsWith("me ")) { string query2 = query.Remove(0, 3); query = rnick + " " + query2; } say(channel, "Let me get that for you!"); say(channel, "\u0001ACTION " + "gives " + query + "\u0001"); say(channel, "There you go!"); } else if (rmsg.Contains("!google ")) { string query = rmsg.Remove(0, 8); string googleURL = "http://google.com/search?q=" + query; say(channel, googleURL); } else if (rmsg.Contains("!ircuserlist")) { Thread listircusers = new Thread(channelUsers); listircusers.Start(); Thread saylistircusers = new Thread(saychannelUsers); saylistircusers.Start(); } else if (rmsg.Contains("!message ")) { try { string sender = rnick; string query = rmsg.Remove(0, 9); string[] parsenick = query.Split('>'); string recipient = parsenick[0]; string message = "<" + sender + ">" + parsenick[1].Replace("~", ""); bool nickOnline = isOnline(recipient); if (nickOnline == true) { say(recipient, message); say(sender, "Message sent!"); } else if (nickOnline == false) { say(sender, "I'll tell " + recipient + " when he or she is online."); addMessage(recipient, message); } } catch (Exception ex) { say(rnick, ex.ToString()); } } else if (rmsg.Contains("!spamControl true")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { controlSpam = true; say(channel, "spamControl = true"); } else { say(rnick, "Insufficient permissions!"); } } else if (rmsg.Contains("!spamControl false")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { controlSpam = false; say(channel, "spamControl = false"); } else { say(rnick, "Insufficient permissions!"); } } else if (rmsg.Contains("forcequit")) { bool nickuser = isActiveUser(rnick); if (nickuser == true) { talkingTo = "nobody"; } else { say(rnick, "Insufficient permissions!"); } } //commands end } if (controlSpam == true) { if (rmsg == oldmsg) { increaseSpamCount(); if (spamcount >= 4) { if (isOperator == true) { send("KICK " + channel + " " + rnick + " No Spamming or Repeating one's self"); spamcount = 0; } else { send("PRIVMSG " + channel + " :Try not to spam or excessively repeat yourself"); spamcount = 0; } } } } if (isLogging == true) { logMsg(); } detectLang(); bool newMessages = hasMessages(rnick); if (newMessages == true) { sayMessages(rnick); } } else if (mail.Substring(mail.IndexOf(" ") + 1, 4) == "JOIN") { string[] tmparr = null; mail = mail.Remove(0, 1); tmparr = mail.Split('!'); rnick = tmparr[0]; if (canGreet == true) { FervorLibrary.Library Greetings = new FervorLibrary.Library(); Random rand = new Random(); int indexgreet = rand.Next(0, greetnumber); string greeting = Greetings.Greeting(rnick, indexgreet); string greetingmessage = "PRIVMSG " + channel + " :" + greeting; send(greetingmessage); } bool newMessages = hasMessages(rnick); if (newMessages == true) { sayMessages(rnick); } } else if (mail.Substring(mail.IndexOf(" ") + 1, 4) == "PART" | mail.Substring(mail.IndexOf(" ") + 1, 4) == "QUIT") { string[] tmparr = null; mail = mail.Remove(0, 1); tmparr = mail.Split('!'); rnick = tmparr[0]; if (canGreet == true) { FervorLibrary.Library Farewells = new FervorLibrary.Library(); Random rand = new Random(); int indexfarewell = rand.Next(0, farewellnumber); string farewell = Farewells.Farewell(rnick, indexfarewell); string farewellmessage = "PRIVMSG " + channel + " :" + farewell; send(farewellmessage); } Thread deactive = new Thread(deactivateUser); deactive.Start(); if (rnick == talkingTo) { talkingTo = "nobody"; } } else if (mail.Substring(mail.IndexOf(" ") + 1, 4) == "MODE") { mail = mail.Replace("\0", "").Trim(); int nameopslength = nick.Length + 3; string action = mail.Substring(mail.Length - nameopslength); if (action.StartsWith("+o") | action.StartsWith("+r") | action.StartsWith("+h")) { isOperator = true; send("PRIVMSG " + channel + " :isOperator = true"); } else if (action.StartsWith("-o") | action.StartsWith("-r") | action.StartsWith("-h")) { isOperator = false; send("PRIVMSG " + channel + " :isOperator = false"); } } else if (mail.Substring(mail.IndexOf(" ") + 1, 4) == "KICK") { string[] tmparr = null; mail = mail.Remove(0, 1); tmparr = mail.Split('!'); rnick = tmparr[0]; tmparr = mail.Split(':'); rmsg = tmparr[1]; deactivateUser(); } else if (mail.Substring(mail.IndexOf(" ") + 1, 4) == "NICK") { string[] tmparr = null; mail = mail.Remove(0, 1); tmparr = mail.Split('!'); rnick = tmparr[0]; tmparr = mail.Split(':'); string newnick = tmparr[1]; deactivateUser(); bool newMessages = hasMessages(newnick); if (newMessages == true) { sayMessages(newnick); } } } oldMsg(); return mail; }