A simple bot I made in C++ to connect to an IRC server and act as a Channel Operator.


#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;
}


[/0][/4096][/4096][/4096][/4096][/100]