Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef _IRC_H_
- #define _IRC_H_
- #include <string.h>
- #include <stdio.h>
- #include <winsock2.h>
- #include <windows.h>
- #include <ws2tcpip.h>
- #include <stdlib.h>
- #include <time.h>
- class IrcCantConnectException
- {
- char message[1024];
- public:
- IrcCantConnectException(const char *hostname)
- {
- strcpy(message,"IRC failed to connect to ");
- strcat(message,hostname);
- }
- const char *getMessage() {return message;}
- };
- class IrcConnection
- {
- SOCKET sock;
- char recvbuf[4096];
- char recvbuf2[4096];
- char sendbuf[4096];
- int receiving;
- int receiving2;
- protected:
- bool operational;
- char mynick[256];
- const char *server_;
- const char *user_;
- const char *nick_;
- const char *password_;
- const char *channel_;
- public:
- IrcConnection() {sock=NULL;*recvbuf='\0';receiving=0;}
- void IrcConnectTo(const char *server,const char *user,const char *nick,const char *password,const char *channel)
- {
- int reply;
- printf("\nNICK is %s\n\n",nick);
- hostent *h=gethostbyname(server);
- int addrlen=sizeof(sockaddr_in);
- sockaddr_in addr;
- sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
- if(sock==INVALID_SOCKET) throw "Failed to create socket";
- if(!h) throw "gethostbyname failed";
- //WSAStringToAddress(*h->h_addr_list,AF_INET,NULL,(sockaddr*)&addr,&addrlen);
- addr.sin_addr.S_un.S_addr=*(unsigned long*)*h->h_addr_list;
- addr.sin_family=AF_INET;
- addr.sin_port=htons(IRCPORT);
- if(connect(sock,(sockaddr*)&addr,sizeof addr)==SOCKET_ERROR)
- throw "Failed to connect to server";
- operational=true;
- if(nick)
- {
- sprintf(recvbuf,"NICK %s",nick);
- Send(recvbuf);
- reply=GetReply();
- strcpy(mynick,nick);
- }
- if(!user) user=nick;
- {
- sprintf(recvbuf,"USER %s 127.0.0.1 %s :IrcTelnetBot",user,server);
- Send(recvbuf);
- reply=GetReply();
- }
- if(password)
- {
- sprintf(recvbuf,"PRIVMSG NickServ :IDENTIFY %s",password);
- Send(recvbuf);
- Recv(false);
- reply=GetReply();
- }
- if(channel)
- {
- while(reply!=375) reply=GetReply();
- sprintf(recvbuf,"JOIN %s",channel);
- Send(recvbuf);
- reply=GetReply();
- }
- Send("PRIVMSG NickServ :SET UNFILTERED ON");
- receiving=0;
- Recv(false);
- channel_=channel;
- nick_=nick;
- user_=user;
- password_=password;
- server_=server;
- }
- void Send(const char *message,SOCKET s=NULL)
- {
- int result;
- if(s==NULL) s=sock;
- if(s==sock && !operational) throw "Send on unoperational connection";
- if(s)
- {
- sprintf(sendbuf,"%s\n",message);
- if(s==sock)
- {
- if((result=send(s,sendbuf,strlen(sendbuf),0))==SOCKET_ERROR || result==0)
- {
- sock=NULL;
- receiving=0;
- *recvbuf=*sendbuf='\0';
- printf("%s was disconnected: %s\n",mynick,message);
- fflush(stdout);
- }
- else
- printf("%s: %s\n",mynick,message),fflush(stdout);
- }
- else
- {
- send(s,sendbuf,strlen(sendbuf),0);
- printf("(2) %s: %s\n",mynick,message),fflush(stdout);
- }
- }
- else
- {
- operational=false;
- throw "Send without a connection";
- }
- }
- int GetReply()
- {
- begin:
- char *str=(char*)Recv(true);
- char *pStr;
- if(str && *str==':') str=strchr(str,' ')+1;
- if(str==NULL) return -1;
- for(pStr=str;*pStr;++pStr)
- *pStr=tolower(*pStr);
- if(strstr(str,"ping ")==str && *mynick)
- {
- str+=5;
- if(!*str || !*(str-1))
- {
- sprintf(sendbuf,"PONG %s",mynick);
- Send(sendbuf);
- }
- else
- {
- sprintf(sendbuf,"PONG %s %s",mynick,str);
- Send(sendbuf);
- }
- goto begin;
- }
- pStr=strchr(str,' ');
- if(pStr && strstr(pStr,"kick ")==pStr && strstr(pStr+5,mynick)==pStr+5)
- {
- closesocket(sock);
- sock=NULL;
- IrcConnectTo(server_,user_,nick_,password_,channel_);
- return 0;
- }
- if(*str<'0' || *str>'9')
- return -1;
- return atoi(str);
- }
- const char *Recv(bool wait,SOCKET s=NULL)
- {
- if(s==NULL) s=sock;
- if(s==sock && !operational) return NULL;
- if(!s) return NULL;
- if(!wait)
- {
- fd_set fds;
- timeval tv={0,0};
- FD_ZERO(&fds);
- FD_SET(s,&fds);
- select(s+1,&fds,NULL,NULL,&tv);
- if(!FD_ISSET(s,&fds))
- return NULL;
- }
- char ch;
- char *buf=(s==sock?recvbuf:recvbuf2);
- int result;
- int *receivingvar=(s==sock?&receiving:&receiving2);
- while(true) // Not really
- {
- if(s!=sock)
- {
- fd_set fds;
- timeval tv={0,0};
- FD_ZERO(&fds);
- FD_SET(s,&fds);
- select(s+1,&fds,NULL,NULL,&tv);
- if(!FD_ISSET(s,&fds))
- {
- buf[(*receivingvar)++]='\0';
- break;
- }
- }
- if((result=recv(s,&ch,1,0))==SOCKET_ERROR || result==0)
- {
- if(s==sock)
- {
- Send("QUIT :Socket error");
- sock=NULL;
- }
- return NULL;
- }
- if(s!=sock && ch=='\x1B')
- {
- while(ch!='m' && ch!='\r' && ch!='\n')
- {
- if((result=recv(s,&ch,1,0))==SOCKET_ERROR || result==0)
- {
- if(s==sock)
- {
- Send("QUIT :Socket error");
- sock=NULL;
- }
- return NULL;
- }
- }
- if(ch=='m')
- {
- if((result=recv(s,&ch,1,0))==SOCKET_ERROR || result==0)
- {
- if(s==sock)
- {
- Send("QUIT :Socket error");
- sock=NULL;
- }
- return NULL;
- }
- }
- }
- if(ch=='\r' || ch=='\0')
- ;
- else if(ch=='\n')
- {
- buf[(*receivingvar)++]='\0';
- break;
- }
- else
- buf[(*receivingvar)++]=ch;
- }
- *receivingvar=0;
- if(!*buf)
- return NULL;
- printf("(R%s) %s: %s\n",(s==sock?"":"2"),mynick,buf);
- fflush(stdout);
- return buf;
- }
- ~IrcConnection()
- {
- if(sock)
- {
- Send("QUIT :IRC bot shutting down");
- closesocket(sock);
- sock=NULL;
- }
- }
- bool IsConnected() {return (sock!=NULL);}
- SOCKET GetSocket() {return sock;}
- };
- class IrcUserBot : public IrcConnection
- {
- char nick[64];
- char password[64];
- char sendbuf[4096];
- char recvbuf[4096];
- SOCKET connected_to;
- char bound_to[256];
- static int cur_number;
- int nSentMessage;
- bool being_stupid;
- public:
- IrcUserBot() {*nick=*password=*bound_to=*sendbuf=*recvbuf='\0';connected_to=NULL;nSentMessage=0;being_stupid=false;}
- void Construct()
- {
- *sendbuf=*recvbuf=*bound_to='\0';connected_to=NULL;
- if(cur_number>=NNICKS)
- {
- sprintf(nick,"%s%i",BOTPREFIX,cur_number);
- sprintf(password,"%s%i",PASSPREFIX,cur_number);
- IrcConnectTo(SERVER,nick,nick,password,CHANNEL);
- }
- else
- {
- strcpy(nick,Nicks[cur_number]);
- sprintf(password,"%s%i",PASSPREFIX,cur_number);
- IrcConnectTo(SERVER,nick,nick,password,CHANNEL);
- }
- ++cur_number;
- nSentMessage=0;
- }
- void DebugMessage(const char *message)
- {
- sprintf(sendbuf,"PRIVMSG %s :%s",CHANNEL,message);
- Send(sendbuf);
- }
- void CheckBot()
- {
- char *str; // str is the complete message
- char *pStr; // pStr is the message not including the source.
- char *pUserFrom;
- char *pUserTo;
- char *pMessage;
- if(!IsConnected()) IrcConnectTo(SERVER,nick,nick,password,CHANNEL);
- if(!(str=(char*)Recv(false)))
- return;
- pStr=strchr(str,' ');
- if(pStr && strstr(pStr,"404 ")==pStr)
- {
- closesocket(GetSocket());
- if(cur_number>=NNICKS)
- {
- sprintf(nick,"%s%i",BOTPREFIX,cur_number);
- sprintf(password,"%s%i",PASSPREFIX,cur_number);
- IrcConnectTo(SERVER,nick,nick,password,CHANNEL);
- }
- else
- {
- strcpy(nick,Nicks[cur_number]);
- sprintf(password,"pass%i",PASSPREFIX,cur_number);
- IrcConnectTo(SERVER,nick,nick,password,CHANNEL);
- }
- cur_number++;
- return;
- }
- {
- char *p;
- for(p=pStr;*p && *p!=' ';++p)
- *p=tolower(*p);
- }
- if(pStr && strstr(pStr,"kick ")==pStr && strstr(pStr+5,mynick)==pStr+5)
- {
- closesocket(GetSocket());
- IrcConnectTo(server_,user_,nick_,password_,channel_);
- return;
- }
- if((pStr && strstr(pStr,"ping")==pStr) || strstr(str,"ping")==str)
- {
- if(!pStr)
- {
- sprintf(sendbuf,"PONG %s",nick);
- Send(sendbuf);
- return;
- }
- pUserFrom=pStr+1;
- if(strchr(pUserFrom,' '))
- *strchr(pUserFrom,' ')='\0';
- sprintf(sendbuf,"PONG %s %s",nick,pUserFrom);
- Send(sendbuf);
- return;
- }
- pStr=strchr(str,' ');
- {
- char *p;
- for(p=pStr+1;*p && *p!=' ';++p)
- *p=tolower(*p);
- }
- if(!pStr || (strstr(pStr+1,"privmsg")!=pStr+1)) return;
- char *pCommand=pStr+1;
- ++pStr;
- if(*str!=':') return;
- pUserFrom=str+1;
- *pStr='\0';
- pUserTo=strchr(pStr+1,' ')+1;
- if(pUserTo-1==NULL) return;
- pStr=strchr(pUserTo,' ');
- if(!pStr) return;
- else (*pStr='\0'),(pMessage=pStr+1);
- if(*pMessage==':') ++pMessage;
- pStr=strchr(pUserFrom,'!');
- if(pStr) *pStr='\0';
- if((pMessage[1]=='j' || pMessage[1]=='J'
- || pMessage[1]=='p' || pMessage[1]=='P' || pMessage[1]=='?') && *pMessage=='!' && pMessage[2]==' ')
- {
- if(strcmp(pUserFrom,BOTMASTER))
- {
- sprintf(sendbuf,"PRIVMSG %s :Only %s can make me join or part channels or be stupid",(*pUserTo=='#'?pUserTo:pUserFrom),BOTMASTER);
- Send(sendbuf);
- }
- else if(pMessage[1]=='?')
- {
- being_stupid=!being_stupid;
- sprintf(sendbuf,"PRIVMSG %s :being_stupid is now %s",BOTMASTER,(being_stupid?"true":"false"));
- Send(sendbuf);
- }
- else if(pMessage[1]=='j' || pMessage[1]=='J')
- {
- sprintf(sendbuf,"JOIN %s",pMessage+3);
- Send(sendbuf);
- }
- else //it must be p or P
- {
- sprintf(sendbuf,"PART %s",pMessage+3);
- Send(sendbuf);
- }
- }
- else if((pMessage[1]=='R' || pMessage[1]=='r') && *pMessage=='!' && pMessage[2]==' ')
- {
- if(strcmp(pUserFrom,BOTMASTER))
- {
- sprintf(sendbuf,"PRIVMSG %s :Only %s can use !r",(*pUserTo=='#'?pUserTo:pUserFrom),BOTMASTER);
- Send(sendbuf);
- }
- else
- {
- Send(pMessage+3);
- }
- }
- else if((pMessage[1]=='m' || pMessage[1]=='M') && pMessage[0]=='!' && pMessage[2]==' ')
- {
- char *pSpace=strchr(pMessage+3,' ');
- if(pSpace==NULL)
- return;
- pMessage+=3;
- *pSpace++='\0';
- if(*pMessage=='#' && strcmp(pMessage,CHANNEL))
- {
- sprintf(sendbuf,"JOIN %s",pMessage);
- Send(sendbuf);
- }
- if(!strcmpi(pMessage,mynick))
- {
- sprintf(sendbuf,"PRIVMSG %s :%s has attempted to crash me. I will now either crash or be kicked off for excess flood. LOL.",CHANNEL,pUserFrom);
- Send(sendbuf);
- }
- sprintf(sendbuf,"PRIVMSG %s :%s",pMessage,pSpace);
- Send(sendbuf);
- if(*pMessage=='#' && strcmp(pMessage,CHANNEL))
- {
- sprintf(sendbuf,"PART %s",pMessage);
- Send(sendbuf);
- }
- }
- else if((pMessage[1]=='t' || pMessage[1]=='T') && pMessage[0]=='!' && pMessage[2]==' ')
- {
- char *pSpace=strchr(pMessage+3,' ');
- if(pSpace==NULL)
- return;
- pMessage+=3;
- *pSpace++='\0';
- if(*pMessage=='#' && strcmp(pMessage,CHANNEL))
- {
- sprintf(sendbuf,"JOIN %s",pMessage);
- Send(sendbuf);
- }
- if(strcmpi(pMessage,mynick))
- {
- sprintf(sendbuf,"PRIVMSG %s :%s",pMessage,pSpace);
- Send(sendbuf);
- }
- }
- else if(*pMessage=='\001')
- {
- if(pMessage[1]=='P' && pMessage[2]=='I' && pMessage[3]=='N' && pMessage[4]=='G')
- {
- sprintf(sendbuf,"PRIVMSG %s :\001PING 1123\001",pUserFrom);
- Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :\001VERSION\001",pUserFrom);
- Send(sendbuf);
- sprintf(sendbuf,"NOTICE %s :%s",pUserFrom,pMessage);
- Send(sendbuf);
- }
- else if(pMessage[1]=='V' && pMessage[2]=='E' && pMessage[3]=='R' && pMessage[4]=='S')
- {
- sprintf(sendbuf,"NOTICE %s :\001VERSION None of your business!\001",pUserFrom);
- Send(sendbuf);
- }
- }
- else if(pMessage[1]=='!' && pMessage[0]=='!' && pMessage[2]==' ')
- {
- if(!strcmpi(pMessage+3,mynick))
- {
- sprintf(sendbuf,"PRIVMSG %s :%s has attempted to crash me. I will now either crash or be kicked off for excess flood. LOL.",CHANNEL,pUserFrom);
- Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :Sending endless string of pings to myself...",CHANNEL);
- Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :\001PING 1123\001",mynick);
- Send(sendbuf);
- }
- else
- {
- sprintf(sendbuf,"PRIVMSG %s :%s",pMessage+3,pMessage);
- Send(sendbuf);
- }
- }
- else if(isdigit(pMessage[1]) && pMessage[0]=='!' && pMessage[2]==' ')
- {
- if(*(pMessage+3))
- {
- pUserTo=pMessage+3;
- if(strcmp(pUserTo,CHANNEL))
- {
- sprintf(sendbuf,"JOIN %s",pUserTo);
- Send(sendbuf);
- }
- }
- Send("NICK SpammingBot");
- for(int k=0;k<pMessage[1]-'0';k++)
- {
- try
- {
- if(GetSocket()==NULL)
- break;
- sprintf(sendbuf,"PRIVMSG %s :spamming. Buy my iPod!",pUserTo);
- Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :spamming. Buy my iPhone!",pUserTo);
- Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :spamming. Get the latest offer on all chocolate bar accessories!",pUserTo);
- Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :spamming. All the latest travel insurance stuff and nonsense!",pUserTo);
- Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :spamming. Go to #arianne!!",pUserTo);
- Send(sendbuf);
- } catch(...) {break;}
- }
- sprintf(sendbuf,"NICK %s",mynick);
- Send(sendbuf);
- if(*(pMessage+3) && strcmp(pUserTo,CHANNEL))
- {
- sprintf(sendbuf,"JOIN %s",pUserTo);
- Send(sendbuf);
- }
- }
- else if((pMessage[1]=='c' || pMessage[1]=='C') && pMessage[0]=='!' && pMessage[2]==' ')
- {
- if(*pUserTo!='#')
- pUserTo=pUserFrom;
- char *tok=strtok(pMessage," ");
- int sugars=0;
- int milk=1;
- int type=0;
- int size=4;
- char *drink="coffee";
- bool magnetic=false;
- bool decaf=false;
- char *other_milk="";
- char *other_size="";
- char *target=pUserFrom;
- char message[1024]="";
- #define MILK_COLD 1
- #define MILK_GOAT 5
- #define MILK_HOT 3
- #define MILK_NONE 0
- #define MILK_FROTHED 2
- #define MILK_OTHER -1
- #define TYPE_NORMAL 0
- #define TYPE_ESPRESSO 1
- #define TYPE_TURKISH 2
- #define TYPE_ICED 3
- tok=strtok(NULL," ");
- while(tok)
- {
- if(*tok!='-')
- {
- strcat(message," ");
- strcat(message,tok);
- tok=strtok(NULL," ");
- continue;
- }
- tok++;
- switch(*tok)
- {
- case 'e':type=TYPE_ESPRESSO;break;
- case 'T':type=TYPE_TURKISH;break;
- case 'i':type=TYPE_ICED;break;
- case 'm':
- {
- char *p;
- for(p=tok;*p;++p)
- *p=tolower(*p);
- }
- tok++;
- if(!strcmp(tok,"hot"))
- milk=MILK_HOT;
- else if(!strcmp(tok,"cold"))
- milk=MILK_COLD;
- else if(!strcmp(tok,"none"))
- milk=MILK_NONE;
- else if(!strcmp(tok,"frth"))
- milk=MILK_FROTHED;
- else if(!strcmp(tok,"goat"))
- milk=MILK_GOAT;
- else if(!strcmp(tok,"agnet") || !strcmp(tok,"agnetic") || !strcmp(tok,"chocolate"))
- magnetic=true;
- else
- {
- milk=MILK_OTHER;
- other_milk=tok;
- for(char *pStr=other_milk;*pStr;pStr++)
- if(*pStr=='_') *pStr=' ';
- }
- break;
- case 's':
- tok++;
- sugars=atoi(tok);
- break;
- case 'M':
- drink="message";
- size=-1;
- other_size="bottle";
- milk=MILK_NONE;
- break;
- case 'z':
- case 'S':
- tok++;
- if(*tok<'0' || *tok>'9')
- {
- size=-1;
- other_size=tok;
- for(char *pStr=other_size;*pStr;pStr++)
- if(*pStr=='_') *pStr=' ';
- }
- else
- size=atoi(tok);
- break;
- case '-':
- tok++;
- if(strstr(tok,"other=")==tok)
- {
- tok+=6;
- drink=tok;
- for(char *pStr=drink;*pStr;pStr++)
- if(*pStr=='_') *pStr=' ';
- }
- else if(strstr(tok,"target=")==tok)
- {
- tok+=7;
- target=tok;
- }
- else if(!strcmp(tok,"help"))
- {
- sprintf(sendbuf,"PRIVMSG %s :Usage: !c [--target={NICK|CHANNEL}] [-T] [-d] [-e] [--other=DRINKTYPE] [-mMILKTYPE] [-sNUMBER_OF_SUGARS] [-zSIZE]",pUserTo);Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :-T: Turkish coffee -d: Decaf coffee -e: Espresso coffee",pUserTo);Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :--other=DRINKTYPE: Make a non-coffee drink",pUserTo);Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :-mMILKTYPE milktype can be none, hot, cold, frth, agnet, agnetic, or chocolate or a user defined string",pUserTo);Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :-zSIZE size can be 1, 2, 3, 4, 5, 6, or a user defined string",pUserTo);Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :--target={NICK|CHANNEL} Give the coffee to the specified nick/channel",pUserTo);Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :-sNUMBER_OF_SUGARS Give a negative value for an infinite number",pUserTo);Send(sendbuf);
- Sleep(5000);
- sprintf(sendbuf,"PRIVMSG %s :Usage: !t NICK|CHANNEL MESSAGE",pUserTo);Send(sendbuf);
- sprintf(sendbuf,"PRIVMSG %s :Send the specified MESSAGE to the specified NICK or CHANNEL (if a channel, the bot must be in that channel)",pUserTo);Send(sendbuf);
- return;
- }
- break;
- case 'd':decaf=true;break;
- }
- tok=strtok(NULL," ");
- }
- char coffeebuf[2048];
- sprintf(coffeebuf,"a%s%s %s",(decaf?" decaf":""),(type==TYPE_ESPRESSO?" espresso":(type==TYPE_TURKISH?" Turkish":(type==TYPE_ICED?" iced":""))),drink);
- char buf2[256];
- if(sugars>0)
- sprintf(buf2," with %i sugars",sugars);
- else if(sugars<0)
- strcpy(buf2," with an infinite number of sugars");
- else
- *buf2='\0';
- strcat(coffeebuf,buf2);
- strcat(coffeebuf," ");
- switch(size)
- {
- case 1:strcpy(buf2,"in a thimble");break;
- case 2:strcpy(buf2,"in an espresso cup");break;
- case 3:strcpy(buf2,"in a cafe-style coffee cup");break;
- case 4:strcpy(buf2,"in an office mug");break;
- case 5:strcpy(buf2,"in a sysadmin mug");break;
- case 6:strcpy(buf2,"in a bucket");break;
- case -1:sprintf(buf2,"in a %s",other_size);break;
- default:sprintf(buf2,"in an container of size %i",size);
- }
- strcat(coffeebuf,buf2);
- switch(milk)
- {
- case MILK_GOAT:strcpy(buf2," with a goat in it");break;
- case MILK_COLD:strcpy(buf2," with cold milk");break;
- case MILK_HOT:strcpy(buf2," with hot milk");break;
- case MILK_NONE:strcpy(buf2," with no milk");break;
- case MILK_FROTHED:strcpy(buf2," with frothed milk");break;
- case MILK_OTHER:sprintf(buf2," with %s milk",other_milk);break;
- default:sprintf(buf2," with a milk value of %i",milk);
- }
- strcat(coffeebuf,buf2);
- if(*message)
- {
- sprintf(buf2," %s",message);
- strcat(coffeebuf,buf2);
- }
- if(*target=='#')
- {
- if(strcmp(target,CHANNEL))
- {
- sprintf(sendbuf,"JOIN %s",target);
- Send(sendbuf);
- }
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION is making %s for this channel\001",target,coffeebuf);
- Send(sendbuf);
- }
- else if(strcmp(pUserFrom,target))
- {
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION is making %s for you\001",target,coffeebuf);
- Send(sendbuf);
- }
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION is making %s for %s\001",pUserTo,coffeebuf,target);
- Send(sendbuf);
- #ifdef REPORT_TO_CHANNEL
- if(strcmp(pUserTo,CHANNEL))
- {
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION is making %s for %s\001",CHANNEL,coffeebuf,target);
- Send(sendbuf);
- }
- #endif
- if(milk>0 && milk<6)
- Sleep(milk*1000);
- if(magnetic)
- {
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION spills %s's coffee into a Magnetic Laser Device\001",pUserTo,target);
- Send(sendbuf);
- if(*target=='#')
- {
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION spills the channel's coffee into a Magnetic Laser Device\001",target,coffeebuf);
- Send(sendbuf);
- }
- else if(strcmp(pUserFrom,target))
- {
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION spills your coffee into a Magnetic Laser Device\001",target);
- Send(sendbuf);
- }
- #ifdef REPORT_TO_CHANNEL
- if(strcmp(pUserTo,CHANNEL))
- {
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION spills %s's coffee into a Magnetic Laser Device\001",CHANNEL,target);
- Send(sendbuf);
- }
- #endif
- char buffer[2048];
- strcpy(buffer,coffeebuf+2);
- sprintf(coffeebuf,"a magnetic %s which is emitting lots of blue light and a barely audible hum",buffer);
- }
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION gives %s %s\001",pUserTo,target,coffeebuf);
- Send(sendbuf);
- if(*target=='#')
- {
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION gives everyone in this channel %s\001",target,coffeebuf);
- Send(sendbuf);
- if(strcmp(target,CHANNEL))
- {
- sprintf(sendbuf,"PART %s",target);
- Send(sendbuf);
- }
- }
- else if(strcmp(pUserFrom,target))
- {
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION gives you %s\001",target,coffeebuf);
- Send(sendbuf);
- }
- #ifdef REPORT_TO_CHANNEL
- if(strcmp(pUserTo,CHANNEL))
- {
- sprintf(sendbuf,"PRIVMSG %s :\001ACTION gives %s %s\001",CHANNEL,target,coffeebuf);
- Send(sendbuf);
- }
- #endif
- }
- else
- {
- if((*pMessage!='!' || pMessage[2]!=' ') && *pMessage!='\001')
- {
- //if(*pUserTo=='#' && strcmp(pUserTo,CHANNEL))
- //{
- //sprintf(sendbuf,"PRIVMSG %s :%s: <%s> %s",CHANNEL,pUserTo,pUserFrom,pMessage);
- //Send(sendbuf);
- //}
- return;
- }
- if(being_stupid)
- {
- char *target=(*pUserTo=='#'?pUserTo:pUserFrom);
- sprintf(sendbuf,"PRIVMSG %s :%s",target,pMessage);
- }
- }
- }
- bool IsBound() {return (connected_to!=NULL);}
- ~IrcUserBot()
- {
- if(connected_to)
- {
- sprintf(sendbuf,"QUIT :IRC bot shutting down",CHANNEL);
- Send(sendbuf);
- closesocket(connected_to);
- }
- }
- };
- extern IrcUserBot bots[NBOTS];
- extern IrcConnection botmain;
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement