This is MY chatbot, so if you intend to use it keep the comments in it that attribute it to ME
So far it only goes to whatever server that it is compiled to go to, but if you have half a brain you can change that.
Have a nice day.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock2.h>
#include <wininet.h>
int main(int argc, char *argv[])
{
SYSTEMTIME timestruct;
WSADATA wsadata;
HOSTENT* phostent;
DWORD* ipaddress;
IN_ADDR myinaddr;
SOCKADDR_IN sockaddrin;
HANDLE hFile;
SOCKET s;
DWORD blankspace=0;
DWORD sparedword;
char* bigbuf;
int i,j,res,len;
char buffer[3000];
char sparebuff[512];
char recvd[200];
char rcpt[200];
char smrecvd[50];
char cmnd[200];
char authlist[20][30];
char numauthed=0;
BOOL joined=FALSE;
DWORD cmd=0;
BOOL authed=FALSE;
int timeout=3000;
hFile=CreateFile(\"log.txt\",GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
SetFilePointer(hFile,0,NULL,FILE_END);
bigbuf=malloc(4096);
//outputbuf=malloc(3000);
ZeroMemory(buffer,513);
ZeroMemory(bigbuf,4096);
printf(\"Winsock starting up...\\n\");
if(!WSAStartup(2,&wsadata)){
printf(\"Checking we have required version: %X\\n\", wsadata.wVersion);
if(wsadata.wVersion==2){
printf(\"Resolving IP...\\n\");
if(phostent=gethostbyname(\"irc.servername.com\")){
ipaddress=(DWORD*) phostent->h_addr_list[0];
printf(\"Populating sockaddr_in struct\\n\");
sockaddrin.sin_family=AF_INET;
sockaddrin.sin_port=2842; //6667
sockaddrin.sin_addr.S_un.S_addr=ipaddress[0];
myinaddr.S_un.S_addr=sockaddrin.sin_addr.S_un.S_addr;//ipaddress[0];
printf(\"IP resolved as %s\\n\",inet_ntoa(myinaddr));
printf(\"Creating socket\\n\");
if((s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))!=INVALID_SOCKET){
printf(\"Connecting through socket\\n\");
if(connect(s,(SOCKADDR*)&sockaddrin,sizeof(SOCKADDR_IN))==0){
printf(\"Connected\\n\");
i=0;
res=recv(s,buffer,512,0);
printf(\"%s\",buffer);
Sleep(500);
printf(\"Sending NICK command\\r\\n\");
send(s,\"NICK gayface\\r\\n\",13,0);
printf(\"Sent NICK command\\r\\n\");
send(s,\"USER gayface d d gayface\\r\\n\",25,0);
printf(\"Sent USER command\\r\\n\");
res=0;
while(TRUE){
if((res=recv(s,bigbuf,4095,0))>3) {
printf(\"Processing\\r\\n\");
//do parsing here
len=0;
res=0;
cmd=FALSE;
for(i=0;i<strlen(bigbuf);i++){
if(res==0 & bigbuf[i]==\' \'){
cmd=0;
if(bigbuf[len]==\'\\n\')
len++;
if(bigbuf[len]==\':\')
len++;
res++;
lstrcpyn(recvd,&bigbuf[len],i-len+1);
printf(\"Message from: %s\\r\\n\",recvd);
len=i;
if(!strcmp(recvd,\"PING\")){
j=i;
res=i;
res++;
if(bigbuf[res]==\' \')
res++;
if(bigbuf[res]==\':\')
res++;
while(TRUE){
j++;
if(bigbuf[j]==\'\\n\'){
sprintf(buffer,\"PONG \");
lstrcpyn(&buffer[5],&bigbuf[res],j-i+1);
send(s,buffer,strlen(buffer)-1,0);
printf(\"Sent %s\",buffer);
ZeroMemory(buffer,3000);
break;
}
}
res=0;
}
}
else if(res==1 & bigbuf[i]==\' \'){
res++;
lstrcpyn(buffer,&bigbuf[len+1],5);
if(!strcmp(buffer,\"PART\")){
printf(\"Part command received\\r\\n\");
cmd=3;
}
if(!strcmp(buffer,\"JOIN\")){
printf(\"Join command received\\r\\n\");
cmd=4;
}
if(!strcmp(buffer,\"QUIT\")){
printf(\"Quit command received\\r\\n\");
cmd=5;
}
if(cmd==3 | cmd==4){
for(j=i;bigbuf[j]!=\'\\r\';j++);
res=0;
if(bigbuf[i+1]==\':\')
res++;
lstrcpyn(rcpt,&bigbuf[i+1+res],j-i-res);
printf(\"join/part command received from %s\\r\\n\",rcpt);
res=3;
len=i;
}
else if(cmd==5){
len=i;
res=3;
strcpy(rcpt,\"QUIT\");
}
}
else if(res==2 & bigbuf[i]==\' \'){
res++;
len++;
lstrcpyn(buffer,&bigbuf[len],i-len+1);
printf(\"Command was %s\\r\\n\",buffer);
lstrcpyn(sparebuff,buffer,8);
if(!strcmp(sparebuff,\"PRIVMSG\")){
cmd=1;
lstrcpyn(rcpt,&bigbuf[len+8],i-len+1-8);
printf(\"Sent to %s\\r\\n\",rcpt);
}
lstrcpyn(sparebuff,buffer,5);
if(!strcmp(sparebuff,\"MODE\")){
cmd=2;
lstrcpyn(rcpt,&bigbuf[len+5],i-len+1-5);
printf(\"Mode changed in %s\\r\\n\",rcpt);
}
len=i;
}
else if(res==3 & bigbuf[i]==\'\\n\'){
if(bigbuf[len]==\' \')
len++;
if(bigbuf[len]==\':\')
len++;
res=0;
lstrcpyn(buffer,&bigbuf[len],i-len+1);
printf(\"Message is: %s\\r\\n\\r\\n\", buffer);
len=i;
if(cmd){
authed=FALSE;
for(j=0;j<strlen(recvd);j++){
if(recvd[j]==\'!\')
recvd[j]=0;
}
if(!strcmp(rcpt,\"#cpp\") | cmd==5){
GetLocalTime(×truct);
sprintf(sparebuff,\"%u/%u/%u [%u:%2u:%2u] \", timestruct.wDay, timestruct.wMonth, timestruct.wYear, timestruct.wHour, timestruct.wMinute,timestruct.wSecond);
WriteFile(hFile,sparebuff,strlen(sparebuff),&sparedword,NULL);
if(cmd==1)
sprintf(sparebuff,\"<%s> %s\\r\\n\",recvd,buffer);
if(cmd==2)
sprintf(sparebuff,\"* %s sets mode: %s\\r\\n\",recvd,buffer);
if(cmd==3)
sprintf(sparebuff,\"* %s has left %s\\r\\n\",recvd,buffer);
if(cmd==4)
sprintf(sparebuff,\"* %s has joined %s\\r\\n\",recvd,buffer);
if(cmd==5)
sprintf(sparebuff,\"* %s has quit IRC\\r\\n\",recvd);
WriteFile(hFile,sparebuff,strlen(sparebuff),&sparedword,NULL);
}
for(j=0;j<numauthed;j++){
if(!strcmp(authlist[j],recvd))
authed=TRUE;
}
printf(\"Received PRIVMSG\\r\\n\");
j=strlen(buffer);
if(buffer[j-1]==\' \' || buffer[j-1]==\'\\r\' || buffer[j-1]==\'\\n\')
buffer[j-1]=0;
lstrcpyn(sparebuff,buffer,6);
if(!strcmp(sparebuff,\".join\") & authed & cmd==1){
printf(\"Received .join\\r\\n\");
lstrcpy(sparebuff,&buffer[6]);
sprintf(buffer,\"JOIN %s\\r\\n\",sparebuff);
printf(\"Sending command: %s\\r\\n\",buffer);
send(s,buffer,strlen(buffer)-1,0);
} else if(!strcmp(sparebuff,\".auth\") & !authed & cmd==1){
printf(\"Received .auth\\r\\n\");
lstrcpy(sparebuff,&buffer[6]);
if(!strcmp(sparebuff,\"password\")){
for(j=0;buffer[j]!=\'!\' & j<strlen(buffer);j++);
lstrcpyn(authlist[numauthed],recvd,j-3);
printf(\"%s has been authed\\r\\n\",authlist[numauthed]);
sprintf(sparebuff,\"PRIVMSG %s Authed\\r\\n\",authlist[numauthed]);
send(s,sparebuff,strlen(sparebuff)-1,0);
numauthed++;
}
}
lstrcpyn(sparebuff,buffer,5);
if(!strcmp(sparebuff,\".say\") & authed & cmd==1){
printf(\"Received .say\\r\\n\");
lstrcpy(sparebuff,&buffer[5]);
sprintf(buffer,\"PRIVMSG %s\\r\\n\",sparebuff);
printf(\"Sending command: %s\\r\\n\",buffer);
send(s,buffer,strlen(buffer)-1,0);
} else if(!strcmp(sparebuff,\".raw\") & authed & cmd==1){
printf(\"Received .raw\\r\\n\");
lstrcpy(sparebuff,&buffer[5]);
sprintf(buffer,\"%s\\r\\n\",sparebuff);
printf(\"Sending command: %s\\r\\n\",buffer);
send(s,buffer,strlen(buffer)-1,0);
}
}
}
}
if(i-len>5)
printf(\"Raw dump of leftovers: %s\\r\\n\",&bigbuf[len]);
ZeroMemory(bigbuf,4095);
}
}
}
}
}
}
WSACleanup();
}
system(\"PAUSE\");
return 0;
}