rendered paste body#include <iostream>#include <string>#include <unistd.h>#include <windows.h>#include <fstream>#define PUVODNI_MAJITEL "mad_eye"#define MSG_PREFIX1 "PRIVMSG " + channel + " :" + "\x03" + barv#define MSG_PREFIX "PRIVMSG " + channel + " :"using namespace std;string vysekni(string odkud, string zacatek, string konec){ int pivot1, pivot2; pivot1 = odkud.find(zacatek,0); pivot2 = odkud.find(konec,pivot1+1); if(pivot1 != string::npos) return odkud.substr(pivot1,pivot2 - pivot1); else return odkud;}void nahrad(string &odkud, string co, string cim){ int pivot; pivot = odkud.find(co,0); while(pivot != string::npos) { odkud.replace(pivot, co.size(), cim); pivot = odkud.find(co,0); }}void smazradky(string &odkud){ int pivot; pivot = odkud.find("\n",0); while(pivot != string::npos) { odkud[pivot] = ' '; pivot = odkud.find("\n",0); } pivot = odkud.find("\r",0); while(pivot != string::npos) { odkud[pivot] = ' '; pivot = odkud.find("\r",0); }}void smazradkyspec(string &odkud){ int pivot; pivot = odkud.find("\n",0); while(pivot != string::npos) { odkud[pivot] = '@'; pivot = odkud.find("\n",0); } pivot = odkud.find("\r",0); while(pivot != string::npos) { odkud[pivot] = ' '; pivot = odkud.find("\r",0); }}void smaztagy(string &odkud){ int pivot1, pivot2; pivot1 = odkud.find("<",0); pivot2 = odkud.find(">",pivot1); while(pivot1 != string::npos) { odkud.erase(pivot1, pivot2 - pivot1 + 1); pivot1 = odkud.find("<",0); pivot2 = odkud.find(">",pivot1); }}string posli(string co, string kam, string method){ WORD wVersionRequested = MAKEWORD(1,1); WSADATA data; string text, size, domena, cesta; char buffer[4], buf[1000]; hostent *host; sockaddr_in serverSock; int mySocket; int port = 80; int pivot, velikost; pivot = kam.find("/"); domena = kam.substr(0, pivot); cesta = kam.substr(pivot, kam.size() - pivot); if(method == "POST") { itoa(co.size(), buffer, 10); size = buffer; text = ("POST " + cesta + " HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\nHost: ") + domena + ("\nContent-Length: ") + size + ("\n\n") + co + ("\n\n\n\n"); } else if(method == "GET") { if (co != "")text = ("GET " + cesta + "?" + co + " HTTP/1.1\nHost: ") + domena + ("\n\n\n\n"); else text = ("GET " + cesta + " HTTP/1.1\nHost: ") + domena + ("\n\n\n\n"); } WSAStartup(wVersionRequested, &data); host = gethostbyname(domena.c_str()); mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); serverSock.sin_family = AF_INET; serverSock.sin_port = htons(port); memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length); connect(mySocket, (sockaddr *)&serverSock, sizeof(serverSock)); send(mySocket, text.c_str(), text.size() + 1, 0); text = ""; while ((velikost = (recv(mySocket, buf, 1000, 0)) != 0) && (velikost != -1)) { text += buf; } if (velikost == -1) cout << "Smula" << endl; closesocket(mySocket); WSACleanup(); return text;} int co_delat(int socket, char *buf, string &owner, string &jmeno, string &barv){ int pozice=0; int s1, s2, size; string cmd(""); string nick(""); string data(""); string buffer = buf; string channel(""); string init(""); /* jednorazove */ s1 = buffer.find("!~"); nick = buffer.substr(1,s1-1); if( (pozice = buffer.find("NOTICE AUTH :*** Checking ")) != string::npos) { init = "user " + jmeno + " " + jmeno + " " + jmeno + " :" + jmeno + "\n" + "nick " + jmeno + "\n"; send(socket, init.c_str() , init.size(), 0); } if( (pozice = buffer.find("PING :")) != string::npos) { string pom; int p1; p1 = buffer.find(" :"); pom = "PONG :" + buffer.substr(p1+2); send(socket, pom.c_str(), pom.size(), 0); } if(buffer.find(" :.") != string::npos) { string pom(""); s1 = buffer.find("PRIVMSG"); s2 = buffer.find(" ",s1); s1 = buffer.find(" ",s2+1); channel = buffer.substr(s2+1,s1-s2-1); if(channel == jmeno)channel = nick; s1 = buffer.find(" :."); if((s2 = buffer.find(" ", s1+1)) == string::npos)s2 = buffer.size()-2; cmd = buffer.substr(s1+2, s2-s1-2); s1 = buffer.size(); data = buffer.substr(s2+1, s1-s2-3); if( cmd == ".resetmajitel" && nick == PUVODNI_MAJITEL) { owner = PUVODNI_MAJITEL; pom = "PRIVMSG " + channel + " :muj majitel je nyni " + owner + "\n"; } else if( cmd == ".majiteli")pom = "PRIVMSG " + owner + " :" + data + "\n"; else if(nick == owner || owner == "vsichni"){ if( cmd == ".op")pom = "MODE " + channel + " +o " + data + "\n"; else if( cmd == ".deop")pom = "MODE " + channel + " -o " + data + "\n"; else if( cmd == ".hop")pom = "MODE " + channel + " +h " + data + "\n"; else if( cmd == ".dehop")pom = "MODE " + channel + " -h " + data + "\n"; else if( cmd == ".v")pom = "MODE " + channel + " +v " + data + "\n"; else if( cmd == ".dev")pom = "MODE " + channel + " -v " + data + "\n"; else if( cmd == ".vykopni")pom = "KICK " + channel + " " + data + " :Padej " + data + "\n"; else if( cmd == ".rekni" )pom = MSG_PREFIX + data + "\n"; else if( cmd == ".prijd")pom = "JOIN " + data + "\n"; else if( cmd == ".poslinasoom") { posli(("nick=botolus&vzkaz=") + data, "www.soom.cz/discussion/send.php", "POST"); pom = MSG_PREFIX + "poslal jsem na soom diskuzi: " + data + "\n"; } else if( cmd == ".get") { data = posli("", data, "GET"); smazradky(data); nahrad(data, " ", " "); nahrad(data, "'", "'"); nahrad(data, "<br>", "\nPRIVMSG " + channel + " :"); smaztagy(data); pom = "PRIVMSG " + channel + " :ODPOVED: " + data + "\n"; } else if( cmd == ".ascii" && data != "") { int i; string barva; i = data.find(" "); if(i != string::npos){ barva = data.substr(i+1, data.size()-i-1); data = data.substr(0,i); }else barva = "1"; char buffer[10000]; for(i=0;i<10000;i++) { buffer[i]='\0'; } data = ".\\" + data + ".asc"; ifstream in(data.c_str(), ios::ate); if(!in)pom = MSG_PREFIX + "\x03" + "5 bohuzel, tento asciiart nebyl nalezen\n"; else { i = in.tellg(); if(i >= 10000)i = 9999; in.seekg (0, ios::beg); in.read(buffer, i); in.close(); buffer[i+1]='\0'; data = buffer; smazradkyspec(data); nahrad(data, "@", "\nPRIVMSG " + channel + " :\x03" + barva); pom = MSG_PREFIX + "\x03" + barva + data + "\n"; } } else if( cmd == ".getkeylog") { int i; char buffer[10000]; for(i=0;i<10000;i++) { buffer[i]='\0'; } data = ".\\key.txt"; ifstream in(data.c_str(), ios::ate); if(!in)pom = MSG_PREFIX + "\x03" + "5 bohuzel, logfile nebyl nalezenn"; else { i = in.tellg(); if(i >= 10000)i = 9999; in.seekg (0, ios::beg); in.read(buffer, i); in.close(); buffer[i+1]='\0'; data = buffer; smazradky(data); pom = MSG_PREFIX + data + "\n"; } } else if( cmd == ".google" && data != "") { nahrad(data, "%20", ""); nahrad(data, " ", "%20"); data = posli(("hl=en&q=") + data, "www.google.com/search", "GET"); data = vysekni(data, "<p class=g>", "Cached"); smazradky(data); nahrad(data, " ", " "); nahrad(data, "'", "'"); nahrad(data, "<br>", "\nPRIVMSG " + channel + " :\x03" + "5"); smaztagy(data); cout << data << endl; pom = MSG_PREFIX + "\x03" + "3" + data + "\n"; } else if( cmd == ".lamer" && data != "") { nahrad(data, "%20", ""); nahrad(data, " ", "%20"); data = posli(("item=show&id=") + data, "www.lamer.cz/", "GET"); smazradky(data); data = vysekni(data, "<div id=\"quotes\">", "</div>"); nahrad(data, " ", " "); nahrad(data, "'", "'"); nahrad(data, "<br />", "\nPRIVMSG " + channel + " :\x03" + "2"); smaztagy(data); nahrad(data, "<", "<"); nahrad(data, ">", ">"); cout << data << endl; pom = MSG_PREFIX + "\x03" + "2" + data + "\n"; } else if( cmd == ".vypadni")pom = "PART " + channel + " \n"; else if( cmd == ".chcipni")pom = "QUIT Gasp. \n"; else if( cmd == ".setmajitel") { owner = data; pom = "PRIVMSG " + channel + " :muj majitel je nyni " + owner + "\n"; } else if( cmd == ".setbarva") { barv = data; pom = MSG_PREFIX + "zmenil jsem barvu textu\n"; } else if( cmd == ".reknis")pom = "PRIVMSG #soom :\x03" + barv + data + "\n"; else if( cmd == ".setnick") { jmeno = data; pom = "nick " + jmeno + "\n"; } else if( cmd == ".regnise")pom = "PRIVMSG nickserv :identify 123789\n"; else if( cmd == ".predstav")pom = MSG_PREFIX + "Dobry den jsem bot patrici stvoriteli jmenem mad_eye\n"; else if( cmd == ".cmd") { if (nick == "mad_eye") pom = MSG_PREFIX + "spoustim " + data + "\n" ; else pom = MSG_PREFIX + "Sorry, ale na tohle ses moc malej pan\n" ; } else pom = MSG_PREFIX + "Nerozumim prikazu \"" + cmd + "\"\n"; }else pom = MSG_PREFIX + "NE, posloucham jen majitele: " + owner + "\n"; send( socket, pom.c_str(), pom.size(), 0); } if(buffer.find(" :"+jmeno) != string::npos) { string pom(""); s1 = buffer.find("PRIVMSG"); s2 = buffer.find(" ",s1); s1 = buffer.find(" ",s2+1); channel = buffer.substr(s2+1,s1-s2-1); pom = MSG_PREFIX + nick + ": neber jmeno bozi nadarmo\n"; send( socket, pom.c_str(), pom.size(), 0); }}int main(int argc, char *argv[]){int i;int Socket_hlavni;hostent *host;sockaddr_in Socket_nastaveni;fd_set mnozina;char buffer[65536];string owner(PUVODNI_MAJITEL);string nick("botolus"),barva("1");WORD wVersionRequested = MAKEWORD(1,1);WSADATA data;if( argc < 3){ cout << "Syntaxe je :\n" << argv[0] << " <ip> <port>\n"; return -1;}WSAStartup(wVersionRequested, &data);host = gethostbyname(argv[1]);Socket_hlavni = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);Socket_nastaveni.sin_family = AF_INET;Socket_nastaveni.sin_port = htons(atoi(argv[2]));memcpy(&(Socket_nastaveni.sin_addr), host->h_addr, host->h_length);connect(Socket_hlavni, (sockaddr *)&Socket_nastaveni, sizeof(Socket_nastaveni));FD_ZERO( &mnozina);FD_SET( Socket_hlavni, &mnozina);while( (select(Socket_hlavni+1, &mnozina, NULL, NULL, NULL)) > 0){ for(i=0;i<65536;i++) { buffer[i]='\0'; } if( (recv( Socket_hlavni, buffer, 65536, 0)) != 0) { cout << buffer; co_delat( Socket_hlavni, buffer, owner, nick, barva); } else { return -1; }} closesocket(Socket_hlavni); WSACleanup();}