A simple bot I made in C++ to connect to an IRC server and act as a Channel Operator.
Code:#include <winsock2.h> #include <stdio.h> #include <time.h> #define server "irc.mibbit.com" #define port 6667 #define nick "Meh" char chan[100] = "#Chatdom"; // YOU CAN'T DEFINE THIS, AS YOU COPY INTO IT, IT WILL CRASH... char buff[4096]; char buff2[4096]; char tmp[4096]; char tmp2[4096]; char *pointer; char *message; char *join; char *skip; char name[]="Defkult"; char password[]="lolbot"; int main() { time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); WSADATA WSAData; if(WSAStartup(MAKEWORD(2,2),&WSAData) != NO_ERROR) return 0; SOCKET sock; SOCKADDR_IN sin; if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) { WSACleanup(); return 0; } LPHOSTENT host; if(!(host = gethostbyname(server))) { WSACleanup(); return 1; } memset (&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr = *((LPIN_ADDR)*host->h_addr_list); sin.sin_port = htons(port); if(connect(sock,(LPSOCKADDR)&sin, sizeof(struct sockaddr)) == SOCKET_ERROR) return INVALID_SOCKET; memset(tmp,0,255); // set username sprintf(tmp,"USER %s \"\" \"KOr\" :%s\r\n", nick,name); // YAY NOW LOCKDOWN WONT THROW US OUT send(sock,tmp,strlen(tmp),0); memset(tmp,0,255); // set bot mode +B(BOT) //sprintf(tmp,"MODE %s +b\r\n",nick); //send(sock,tmp,strlen(tmp),0); //memset(tmp,0,255); // set bots nick sprintf(tmp,"NICK %s\r\n",nick); send(sock,tmp,strlen(tmp),0); memset(tmp,0,255); Sleep(100); sprintf(tmp,"NICKSERV identify %s\r\n",password); send(sock,tmp,strlen(tmp),0); memset(tmp,0,255); Sleep(100); // join chan sprintf(tmp,"JOIN %s\r\n",chan); send(sock,tmp,strlen(tmp),0); Sleep(100); printf("Join Successful\n"); memset(tmp,0,255); Sleep(10); memset(buff,0,4096); while(recv(sock, buff, sizeof(buff), 0) > 0) { printf(buff); //to find out wat the shit is going wrong //Make so it replys to the chan the command is in.. strcpy(buff2, buff); if((pointer = strtok(buff2," ")) == NULL) continue; if((pointer = strtok(NULL, " ")) == NULL) continue; if((pointer = strtok(NULL, " ")) == NULL) continue; strncpy(chan, pointer,99); // ADDED BOUNDS CHECK memset(buff2,0,4096); //free(pointer); if(strncmp(buff, "PING", 4) == 0) { sprintf(buff, "PONG\r\n"); send(sock, buff, sizeof(buff), 0); memset(buff,0,4096); continue; } // Test Command, just to make sure its all working....:P else if (strstr(buff,"*test") != NULL) { sprintf(tmp, "NOTICE %s test\r\n", name); send(sock,tmp,strlen(tmp),0); memset(buff,0,4096); continue; } else if(strstr(buff,"*offended") != NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); message = strtok(pointer, " "); message = strtok(NULL, "\r\n"); sprintf(tmp, "notice %s Here is the link: http://tinyurl.com/ypu4rs\r\n",pointer); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } else if(strstr(buff,"*info") != NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); message = strtok(pointer, " "); message = strtok(NULL, "\r\n"); sprintf(tmp, "notice %s Here is the link: http://micurl.com/ofr1fz\r\n",pointer); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } //Notice Command usage *notice <nick> else if(strstr(buff,"*notice") != NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); message = strtok(pointer, " "); message = strtok(NULL, "\r\n"); sprintf(tmp, "notice %s :%s\r\n",pointer ,message); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } //Kick Command usage *kick <nick> else if(strstr(buff,"*kick")!=NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); sprintf(tmp, "KICK %s %s\r\n",chan ,pointer); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } //Inivte Command usage *invite <nick> else if(strstr(buff,"*invite")!=NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); sprintf(tmp, "INVITE %s %s\r\n",pointer ,chan); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } //Kickban Command usage *kickban <nick> else if(strstr(buff,"*kickban")!=NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); sprintf(tmp, "MODE +b %s\r\n",pointer); send(sock,tmp,strlen(tmp),0); Sleep(100); sprintf(tmp, "KICK %s %s\r\n",chan ,pointer); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } //unban Command usage *unban <nick> else if(strstr(buff,"*unban")!=NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); sprintf(tmp, "MODE -b %s %s\r\n",chan ,pointer); send(sock,tmp,strlen(tmp),0); } //Join Command uasge *join <channel> else if (strstr(buff,"*join")!=NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); sprintf(tmp, "JOIN %s\r\n",pointer); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } else if (strstr(buff,"*time")!=NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); sprintf(tmp, "NOTICE #chatdom Time@Me: %s\n",asctime(timeinfo)); send(sock,tmp,4096,0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } //Private Message, usage *pm <recipient> <message> else if(strstr(buff,"*pm")!=NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); message = strtok(pointer, " "); message = strtok(NULL, "\r\n"); sprintf(tmp, "privmsg %s :%s\r\n",pointer ,message); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } //Quit Section usage *quit <die or part> else if (strstr(buff,"*quit")!=NULL) { pointer = strtok(buff, "*"); pointer = strtok(NULL," "); pointer = strtok(NULL,"\r\n"); message = strtok(buff, "!"); if (message[0]==':'){ skip = buff+1; } puts(skip); if(strstr(skip,name)!=NULL){ if (strstr(pointer,"die")!=NULL) { sprintf(tmp, "QUIT Time to die...\r\n"); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } if (strstr(pointer,"part")!=NULL) { sprintf(tmp, "PART %s\r\n",chan); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); free(pointer); } } else { sprintf(tmp, "privmsg %s :Auth Required\r\n", skip); send(sock,tmp,strlen(tmp),0); memset(tmp,0,4096); memset(buff,0,4096); } //End Quit Section } } Sleep(100); WSACleanup(); return 0; }
Results 1 to 1 of 1
Thread: [C++]IRC Bot
- 01 Jul. 2010 04:51pm #1
[C++]IRC Bot