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; }