All pastes #504286 Raw Edit

Something

public text v1 · immutable
·published 2007-05-23 03:18 UTC
rendered paste body
#pragma comment(lib, "ws2_32") 
#include <windows.h> 
#include <winsock.h> 
#include <stdio.h> 

//structure of the bot info 
typedef struct BotInfo{ 
   SOCKET BotSock; 
   char *szServer; 
   char *szChannel; 
   char *szNick; 
   char *szPong; 
   char *szRecvBuff; 
   int nPort; 
   char *EntryMsg; 
}BOTINFO, *PBOTINFO; 

//the receive and functions part - change this part to costumize it 
DWORD WINAPI Recieve(LPVOID lpParam) 
{ 
   PBOTINFO dibi = (PBOTINFO)lpParam; 
   char *szCmd = (char*)malloc(513); char *szStr; 
   while(TRUE){ 
      Sleep(4); 
      recv(dibi->BotSock, szCmd, strlen(szCmd), 0); 
      if((szStr = strstr(szCmd, ":DaBuKe!"))){ 
      //checks if the person speaking is ME, as in ME MYSELF AND I, change it to :[insert username here]! for it to adapt 
         //now, the list of commands received 
         if((szStr = strstr(szCmd, ":!nick"))) 
         { 
            char *szCom = (char*)malloc(513); //creates space for buffer to be sent to irc 
            sprintf(szCom, "NICK %s\r\n\0", szStr + 7); //put's in those things into the buffer 
            send(dibi->BotSock, szCom, strlen(szCom), 0); //sends the buffer through the dibi socket, strlen(szCom) to prevent overflow 
            /* 
            the same type of lines except with different commands. Refer to http://www.irchelp.org/irchelp/rfc/rfc.html for 
            irc protocol reference. 
            */ 
         } 
         else if((szStr = strstr(szCmd, ":!op"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s +o %s\r\n\0", dibi->szChannel, szStr+5); 
            send(dibi->BotSock, szCom, strlen(szCom), 0);    
         } 
         else if((szStr = strstr(szCmd, ":!deop"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s -o %s\r\n0", dibi->szChannel, szStr+7); 
            send(dibi->BotSock, szCom, strlen(szCom), 0);    

         } 
         else if((szStr = strstr(szCmd, ":!hop"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s +h %s\r\n\0", dibi->szChannel, szStr+6); 
            send(dibi->BotSock, szCom, strlen(szCom), 0);    
         } 
         else if((szStr = strstr(szCmd, ":!dehop"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s -h %s\r\n\0", dibi->szChannel, szStr+6); 
            send(dibi->BotSock, szCom, strlen(szCom), 0);    
         } 
         else if((szStr = strstr(szCmd, ":!kick"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "KICK %s %s :You just got owned by DaBuKe\r\n\0", dibi->szChannel, szStr+7); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!password"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s +k %s\r\n\0", dibi->szChannel, szStr+11); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!nopassword"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s -k\r\n\0", dibi->szChannel); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!topic"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "TOPIC %s :%s\r\n\0", dibi->szChannel, szStr+8); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!leave"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "PART %s\r\n\0", dibi->szChannel); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!ban"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s +b %s\r\n\0", dibi->szChannel, szStr+6); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!unban"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s -b %s\r\n\0", dibi->szChannel, szStr+8); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!stfu"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s -v %s\r\n\0", dibi->szChannel, szStr+7); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!unstfu"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "MODE %s +v %s\r\n\0", dibi->szChannel, szStr+9); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!version"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "PRIVMSG %s his is %s talking in %s. Version: 0.1 SF OWNS JALL", dibi->szChannel, dibi->szNick, dibi->szChannel); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!cycle"))){ 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "PART %s\r\n\0", szStr + 7); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
            sprintf(szCom, "JOIN %s\r\n\0", szStr + 7); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         else if((szStr = strstr(szCmd, ":!powertrip"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom = "MODE %s +ohv %s\r\n\0", dibi->szChannel, szStr+12); 
            send(dibi->BotSock, szCom, strlen(szCom), 0); 
         } 
         /* 
         not done yet 

         else if((szStr = strst(szCmd, ":!talk"))) 
         { 
            char *szCom = (char*)mallc(513); 
            sprintf(szCom, " 
         } 
          
         else if((szStr = strstr(szCmd, ":!ultikill"))) 
         { 
            char *szCom = (char*)malloc(513); 
            sprintf(szCom, "KICK %s miniman 
         } 
    
         */ 

      } 



//replies to ping, keeps the bot alive 
DWORD KeepAlive(LPVOID lpParam) 
{ 
   char *szRec = (char*)malloc(513); 
   recv(dibi->BotSock, szRec, strlen(szRec), 0) 
   if(szRec == PING) 
   { 
      szRec[1] = 'O'; 
      send(dibi->BotSock, szRec, strlen(szRec), 0); 
   } 

} 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 
{ 

   //struct bot info for IRC server, channel, nickname , port, etc. 
   BOTINFO dibi = { 
      0, 
      "irc.srv.com", 
      "#CPP", 
      "CppBot", 
      new char[513], 
      new char[513], 
      6667, 
      "SFBOT Version 1.0" 
   }; 
   WSADATA wsaData; 
   WSAStartup(MAKEWORD(2, 0), &wsaData); 
   dibi.BotSock = socket(AF_INET, SOCK_STREAM, 0); 
   if(dibi.BotSock == INVALID_SOCKET){ 
      Report("Failed to create Socket!"); 
      WSACleanup(); 
      return FALSE; 
   } 

   SOCKADDR_IN SockInfo; 
   PHOSTENT pheServer = gethostbyname(dibi.szServer); 
   SockInfo.sin_addr = *(struct in_addr *)pheServer->h_addr_list[0]; 
   SockInfo.sin_family = AF_INET; 
   SockInfo.sin_port = htons(dibi.nPort); 

   int nResult = connect(dibi.BotSock, (SOCKADDR*)&SockInfo, sizeof(SockInfo)); 
   if(nResult == SOCKET_ERROR){ 
      Report("Failed to connect to server!"); 
      WSACleanup(); 
      return FALSE; 
   } 

   CreateThread(0, NULL, (LPTHREAD_START_ROUTINE)&Recieve, &dibi, NULL, NULL); 
   CreateThread(0, NULL, (LPTHREAD_START_ROUTINE)&KeepAlive, &dibi, NULL, NULL); 

   char *szConn = (char*)malloc(513); 
   sprintf(szConn, "USER %s . . :SF\r\nNICK %s\r\n\0", dibi.szNick, dibi.szNick); 
   send(dibi.BotSock, szConn, strlen(szConn), 0); 
    
   char *szJoin = (char*)malloc(513); 
   sprintf(szJoin, "JOIN %s\r\n\0", biMini.szChannel); 
   send(dibi.BotSock, szJoin, strlen(szJoin), 0); 

   Sleep(10000); 
   char *szSay = (char*)malloc(513); 
   sprintf(szSay, "PRIVMSG NickServ :identify operator\r\n\0", biMini.szChannel); 
   send(dibi.BotSock, szSay, strlen(szSay), 0); 

   char *szMsg = (char*)malloc(513); 
   sprintf(szMsg, "PRIVMSG %s :%s\r\n\0", biMini.szChannel, biMini.EntryMsg); 
   send(dibi.BotSock, szMsg, strlen(szMsg), 0); 

    
//msg loop 
   MSG Msg; 
   while(GetMessage(&Msg, NULL, 0, 0)){ 
      TranslateMessage(&Msg); 
      DispatchMessage(&Msg); 
   } 
   delete dibi.szRecvBuff, dibi.szPong; 
   return 0; 
}