Gå til innhold

Peter

Medlemmer
  • Innlegg

    2 109
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av Peter

  1. Jeg hadde aldri drevet med C++ i hele mitt liv, og gikk direkte på å lage en irc bot. Eneste fordelen jeg hadde var at jeg har laget en bot tidligere i PHP, men det er mye mer avansert i C++.

     

    Du burde lese om sockets og få til en oppkobling først og fremst. Deretter burde du sjekke IRC protokollen(e) for å se synaks osv.

     

    Noe jeg fant nyttig var å implementere PING PONG fra IRC protokollen og bare la boten idle på nettet en stund.

    På den måten fikk jeg masse rå-data som jeg kunne jobbe med når jeg skulle begynne å sortere dataene.

  2. heh, skulle AKKURAT til å edit'e inlegge mitt :p

     

    Skrev koden etter at jeg hadde skrevet teksten.. hadde tenkt å vise noe litt kulere...

     

    btw. hvorfor bruker du cerr?

    dayslepers dårlige inflytelse antar jeg, følger min læremesters fotspor og tips slavisk.

    Det er egentlig bare fordi jeg er slapp, selv om koden antakelig blir litt tregere av det.

  3. Trenger ikke COORD da, dette har jo med posisjonen til texten å gjøre, ikke noe med fargen.

    Burde også ta en titt på GetConsoleScreenBufferInfo() for å kunne gjenopprette fargene som var :)

     

    Denne bruker jeg:

    void ColorString(std::string str, WORD color)
    {
    CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
    HANDLE stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    
    GetConsoleScreenBufferInfo(stdHandle, &csbiInfo);
    SetConsoleTextAttribute(stdHandle, color);
    
    std::cerr << str;
    
    SetConsoleTextAttribute(stdHandle, csbiInfo.wAttributes);
    }
    

    WORD color kan være en blanding av (FOREGROUND | BACKGROUND)_(RED | BLUE | GREEN)

     

    Error_X bruker en annen funksjon textcolor(), men jeg har ikke sett den noe sted.

  4. class IrcAction
    {
    public:
    IrcAction(std::string s, std::string c, std::string t, std::string m)
    {
     unsigned int pos = s.find("!",1);
     if(pos == std::string::npos) return;
     sender[0] = s.substr(1,pos-1);
     sender[1] = s.substr(pos+1,s.find("@",pos+1)-1);
     sender[2] = s.substr(s.find("@",pos+1)+1);
     command   = c;
     target    = t;
     msg       = m;
    } // IrcAction constructor
    
    std::string getAction(void)
    {
     return command;
    }
    
    ~IrcAction()
    {
     delete sender;
     delete command;
     delete target;
     delete msg;
    } // IrcAction destructor
    private:
    std::string sender [3];
    std::string command;
    std::string target;
    std::string msg;
    };
    

     

    strlist strl = Explode(data, ' ');
         IrcAction irc(strl.getValue(0), strl.getValue(1), strl.getValue(2), Implode(strl, ' ', 3));
         switch(irc.getAction())
         {
         	case "QUIT":
           QUIT(sender, action, target, msg);
           break;
         	case "PART":
           //action.part();
           break;
         	case "TOPIC":
           //action.topic();
           break;
         	case "KICK":
           //action.kick();
           break;
         	case "PRIVMSG":
           //action.privmsg();
           break;
         	case "NOTICE":
           //action.notice();
              break;
             case "376": // 376 = end of MOTD = we are in!
             perform(sockfd, BMAX, lastmsg);
           break;
             default:
              break;
         }

     

    Målet er at jeg vil kunne få tak i de forskjellige variablene på en enkel måte.

    Dette er fordi jeg skal skrive logger osv, og da ville det vært kjekt å kunne skrive

    // sender[0] = nick, sender[1] = ident, sender[2] = adresse

     

    IrcAction irc;
    cout << irc::getVar(sender[0]) << " (" << irc::getVar(sender[2]) << ") sendte " << irc::getVar(command) << " til " << irc::getVar(target) << " med meldingen " << irc::getVar(msg) << '\n';

×
×
  • Opprett ny...