#include #include #ifdef _WIN32 #include #else #include #include #endif #include #include class Exception : std::exception { public: std::string message; Exception(std::string msg) throw() : std::exception() { message = msg; } virtual ~Exception() throw() { } }; class IRCBot { private: int sd; public: static const unsigned int EVENT_LOGIN = 1; void connect(std::string host, unsigned int port = 6667) { struct hostent *ip; struct sockaddr_in addr; #ifdef _WIN32 WSADATA wsaData; if(WSAStartup(MAKEWORD(2,2), &wsaData) != NO_ERROR) { throw Exception("Error in WSAStartup()"); } #endif // résolution dns if(!(ip = gethostbyname(host.c_str()))) { throw Exception("unknow host '"+host+"'"); } addr.sin_family = AF_INET; memcpy((char *) &addr.sin_addr.s_addr, ip->h_addr_list[0], ip->h_length); addr.sin_port = htons(port); if((sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { throw Exception("Cannot open socket");; } if(::connect(sd, (struct sockaddr *) &addr, sizeof(addr)) < 0); { throw Exception("Error in connect()"); } } void login(std::string nick, std::string name, std::string user = "") { if(user == "") { user = nick; } raw("USER "+user+" 0 *:"+name); raw("NICK "+nick); waitFor(EVENT_LOGIN); } void waitFor(unsigned int eventType) { } void loop() { } void raw(std::string data) { write(sd, (data+"\r\n").c_str(), data.length()+2); } void join(std::string channel) { } };