Achtung: Nicht von mir!
Code:#include <iostream> #include <errno.h> #include <cstring> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <unistd.h> using namespace std; // substr is a clone of PHP's substr that I wrote char *substr (const char *str, int start, int end) { char *sub = new char[strlen(str)]; start -=1 ; for(int i = 0;start<end;i += 1) { sub[i] = str[start]; start += 1; } sub[end] = '\0'; return sub; } int main() { struct hostent *he; struct sockaddr_in their_addr; int sockfd; char msg[512]; char buffer[512]; int length; int stay = 1; cout << "SimpleBot" << endl << "A Simple IRC Bot" << endl; // Connect the socket to the server // lot of this will look fimiliar. if ((he=gethostbyname("irc.quickstrike.org")) == NULL) { perror("gethostbyname"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } their_addr.sin_family = AF_INET; their_addr.sin_port = htons(6667); their_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(their_addr.sin_zero), '\0', ; if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { perror("connect"); exit(1); } // Time to register with USER and NICK strcpy(msg,"USER simple simple simple :SimpleBot Example>br /<NICK SimpleIRC>br /<"); if (send(sockfd, msg, strlen(msg), 0) == -1) { perror("send"); } // Ok, now comes the fun part. Before you are able to do anything // else you need to reply to a ping with a pong. Since we want // to be able to respond again next time we get pinged, we'll // start the loop here. while (stay) { // get info from the server, put it in buffer if ((length=recv(sockfd, buffer, 511, 0)) == -1) { perror("recv"); exit(1); } buffer[length] = '\0'; // Go through buffer looking for ping, or other messages. for (int i = 0; buffer[i] != '\0'; i += 1) { // do we have "PING"? if (strncmp(substr(buffer,i,i+4),"PING",4) == 0) { // reply to ping with pong, also joining #testchan sprintf(msg, "PONG %s>br /<join :#testchan>br /<",substr(buffer,i+6,i+13)); if (send(sockfd, msg, strlen(msg), 0) == -1) { perror("send"); } } // do we have a "hello"? // note: in a real bot you would definatly want to extract the // user's message and work with that. if (strncmp(substr(buffer,i,i+5),"hello",5) == 0) { // send bye! to #testchan, then quit strcpy(msg, "PRIVMSG #testchan :bye!>br /<QUIT>br /<"); if (send(sockfd, msg, strlen(msg), 0) == -1) { perror("send"); } stay = 0; // leave our while() } } } close(sockfd); return 0; }






Zitieren
