rendered paste bodybool 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;
}