All pastes #636697 Raw Edit

Unnamed

public text v1 · immutable
#636697 ·published 2007-07-28 03:46 UTC
rendered paste body
bool DoIrcMsg(char *cMsg, char *cNick, char *cChannel, char *cServer, int iPort)
{
	// Declare variables...
	char buf[700],buf2[700];
	unsigned long sMode = 1;
	SOCKET Sock;
     
	// Create the socket...
	Sock = socket(AF_INET, SOCK_STREAM, 0);
	if(Sock == INVALID_SOCKET) return false;
	   
    // Resolve the hostname and connect...
	hostent *H = gethostbyname(cServer);
	if(!H) return false;
	SOCKADDR_IN SockAddr;
	SockAddr.sin_addr.S_un.S_un_b.s_b1 = H->h_addr[0];
	SockAddr.sin_addr.S_un.S_un_b.s_b2 = H->h_addr[1];
	SockAddr.sin_addr.S_un.S_un_b.s_b3 = H->h_addr[2];
	SockAddr.sin_addr.S_un.S_un_b.s_b4 = H->h_addr[3];
	SockAddr.sin_port = htons((u_short)iPort);
	SockAddr.sin_family = AF_INET;
	if(connect(Sock, (SOCKADDR*)&SockAddr, sizeof(SockAddr))==SOCKET_ERROR) return false;

	// Send the username, hostname, servername, realname...
	sMode = 1;
	ioctlsocket(Sock, FIONBIO, &sMode);
	sprintf(buf,"USER IrcMsger 127.0.0.1 %s :BotMsger\n",cServer);
	if(send(Sock,buf,(int)strlen(buf),0)<=0) return false;
	sMode = 0;
	ioctlsocket(Sock, FIONBIO, &sMode);

	// Send the nickname...
	sMode = 1;
	ioctlsocket(Sock, FIONBIO, &sMode);
	sprintf(buf,"NICK %s\n",cNick);
	if(send(Sock,buf,(int)strlen(buf),0)<=0) return false;
	sMode = 0;
	ioctlsocket(Sock, FIONBIO, &sMode);

	while(recv(Sock,buf2,sizeof(buf2),0) > 0)
	{
		if(buf2[0] == ':' || (buf2[0] == 'M' && buf2[1] == 'O' && buf2[2] == 'T' && buf2[3] == 'D'))
		{
			// Join the channel...
			sMode = 1;
			ioctlsocket(Sock, FIONBIO, &sMode);
			sprintf(buf, "JOIN #%s\n",cChannel);
			if(send(Sock,buf,(int)strlen(buf),0)<=0) return false;
			sMode = 0;
			ioctlsocket(Sock, FIONBIO, &sMode);

			// Say the message...
			sMode = 1;
			ioctlsocket(Sock, FIONBIO, &sMode);
			sprintf(buf, "PRIVMSG #%s :%s\n",cChannel,cMsg);
			if(send(Sock,buf,(int)strlen(buf),0)<=0) return false;
			sMode = 0;
			ioctlsocket(Sock, FIONBIO, &sMode);

			// Sent was a success...
			break;
		}
		// Recive ping...
		else if(buf2[0] == 'P' && buf2[1] == 'I' && buf2[2] == 'N' && buf2[3] == 'G')
		{
			int rPos=0;
			char tmp[50];
			while(buf2[rPos] != ':')
				rPos++;
			memcpy(tmp,&buf2[rPos],strlen(buf2)-rPos-1);
			sprintf(buf,"PONG %s\n",tmp);
			sMode = 1;
			ioctlsocket(Sock, FIONBIO, &sMode);
			if(send(Sock,buf,(int)strlen(buf),0)<=0) return false;
			sMode = 0;
			ioctlsocket(Sock, FIONBIO, &sMode);
		}
	}

	// Disconnect...
	Sleep(6000);
	closesocket(Sock);
	return true;
}