void event_channel (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { char nickbuf[128]; if ( count != 2 ) return; printf ("'%s' said in channel %s: %s\n", origin ? origin : "someone", params[0], params[1] ); if ( !origin ) return; irc_target_get_nick (origin, nickbuf, sizeof(nickbuf)); if ( !strcmp (params[1], "quit") ) irc_cmd_quit (session, "of course, Master!"); if ( !strcmp (params[1], "help") ) { irc_cmd_msg (session, params[0], "quit, help, dcc chat, dcc send, ctcp"); } if ( !strcmp (params[1], "ctcp") ) { irc_cmd_ctcp_request (session, nickbuf, "PING 223"); irc_cmd_ctcp_request (session, nickbuf, "FINGER"); irc_cmd_ctcp_request (session, nickbuf, "VERSION"); irc_cmd_ctcp_request (session, nickbuf, "TIME"); } if ( !strcmp (params[1], "dcc chat") ) { irc_dcc_t dccid; irc_dcc_chat (session, 0, nickbuf, dcc_recv_callback, &dccid); printf ("DCC chat ID: %d\n", dccid); } if ( !strcmp (params[1], "dcc send") ) { irc_dcc_t dccid; irc_dcc_sendfile (session, 0, nickbuf, "irctest.c", dcc_file_recv_callback, &dccid); printf ("DCC send ID: %d\n", dccid); } if ( !strcmp (params[1], "topic") ) irc_cmd_topic (session, params[0], 0); else if ( strstr (params[1], "topic ") == params[1] ) irc_cmd_topic (session, params[0], params[1] + 6); if ( strstr (params[1], "mode ") == params[1] ) irc_cmd_channel_mode (session, params[0], params[1] + 5); if ( strstr (params[1], "nick ") == params[1] ) irc_cmd_nick (session, params[1] + 5); if ( strstr (params[1], "whois ") == params[1] ) irc_cmd_whois (session, params[1] + 5); }
/** * @brief Private Message Event * Diese Funktion wird aufgerufen, wenn der Bot eine Private Message erhält. * Loggt das Event. * Überprüft ob die geschickte Nachricht ein Befehl ist, wenn ja wird dieser ausgeführt. * Reagiert auf quit, help, topic <text>, nick <name>, log, logon, logoff, time, lastseen <name>, mode, whois. * @param session ein Pointer von irc_session_t, Session von der ein Event erzeugt wird. * @param event ein konstanter char Pointer, Event Name * @param origin ein konstanter char Pointer, Herkunfts Name (Person die die Private Nachricht geschickt hat) * @param params const char, Liste der Parameter (0 - Eigener Nick, 1 - Message Text) * @param count ein unsigned int, Anzahl der Parameter */ void event_privmsg (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { printf ("'%s' said me (%s): %s\n", origin ? origin : "someone", params[0], params[1] ); if ( !origin ) return; char nickbuf[128]; irc_target_get_nick (origin, nickbuf, sizeof(nickbuf)); if(logging==1) { char theTime[100]; struct tm * clock; time_t sec; time(&sec); clock = localtime(&sec); strftime(theTime, sizeof(theTime), "%Y-%m-%d %H:%M:%S", clock); char message[1024]; sprintf(message, "INSERT INTO log (name, chan, message, date) VALUES ('%s', 'said me (%s):', '%s', '%s');", nickbuf, params[0], params[1], theTime); logSQL(message); } if ( !strcmp (params[1], "quit") ) irc_cmd_quit (session, "of course, Master!"); if ( !strcmp (params[1], "help") ) { irc_cmd_msg (session, nickbuf, "quit, help, topic <text>, nick <name>, log, logon, logoff, time, lastseen <name>"); } if ( !strcmp (params[1], "time") ) { char theTime[100]; struct tm * clock; time_t sec; time(&sec); clock = localtime(&sec); strftime(theTime, sizeof(theTime), "%Y-%m-%d %H:%M:%S", clock); irc_cmd_msg (session, nickbuf, theTime); } if ( !strcmp (params[1], "logon") ) { logging = 1; irc_cmd_msg (session, nickbuf, "Logging eingeschaltet"); } if ( !strcmp (params[1], "logoff") ) { logging = 0; irc_cmd_msg (session, nickbuf, "Logging ausgeschaltet"); } if ( !strcmp (params[1], "log") ) { sqlite3_stmt *vm; sqlite3_open(DB_FILE, &dbhandle); sqlite3_prepare(dbhandle, "SELECT * FROM log", -1, &vm, NULL); while (sqlite3_step(vm) != SQLITE_DONE) { char text[1024]; sprintf(text, "(%s) %s %s %s", sqlite3_column_text(vm, 4), sqlite3_column_text(vm, 1),sqlite3_column_text(vm, 2),sqlite3_column_text(vm, 3)); irc_cmd_msg (session, nickbuf, text); } sqlite3_finalize(vm); sqlite3_close(dbhandle); } if ( strstr (params[1], "lastseen ") == params[1] ) { sqlite3_stmt *vm; sqlite3_open(DB_FILE, &dbhandle); char search[50]; char name[50]; sprintf(name, "%s", params[1] + 9); if(name[(strlen(name)-1)] == ' ') { name[(strlen(name)-1)] = '\0'; } sprintf(search, "SELECT * FROM log WHERE name = '%s' ORDER BY id DESC LIMIT 1", name); sqlite3_prepare(dbhandle, search, -1, &vm, NULL); sqlite3_step(vm); char text[1024]; if(sqlite3_column_text(vm, 1)!=NULL) { sprintf(text, "%s last seen %s", sqlite3_column_text(vm, 1), sqlite3_column_text(vm, 4)); } else { sprintf(text, "%s never seen", params[1]+9); } irc_cmd_msg (session, nickbuf, text); sqlite3_finalize(vm); sqlite3_close(dbhandle); } if ( !strcmp (params[1], "topic") ) irc_cmd_topic (session, params[0], 0); else if ( strstr (params[1], "topic ") == params[1] ) irc_cmd_topic (session, params[0], params[1] + 6); if ( strstr (params[1], "mode ") == params[1] ) irc_cmd_channel_mode (session, params[0], params[1] + 5); if ( strstr (params[1], "nick ") == params[1] ) { irc_cmd_nick (session, params[1] + 5); } if ( strstr (params[1], "whois ") == params[1] ) irc_cmd_whois (session, params[1] + 5); }
void event_channel (irc_session_t * irc_session, const char * event, const char * origin, const char ** params, unsigned int count) { char buffer[512]; char nickbuf[128]; char md5sum[MD5_HASHSUM_SIZE]; ConfigArrayPtr setting; SessionPtr session; if ( count != 2 ) return; params[1] = irc_color_strip_from_mirc( params[1] ); addlog ("'%s' said in channel %s: %s", origin ? origin : "someone", params[0], params[1] ); if ( !origin ) return; irc_target_get_nick( origin, nickbuf, sizeof(nickbuf) ); md5_string( origin, md5sum ); session = get_session( SESSION_IRC, md5sum ); if ( !strcmp (params[1], "help") ) { if( ( session->dbuser ) && ( session->dbuser->level >= LEVEL_MODERATOR ) ) snprintf(buffer, sizeof(buffer), "%s", irc_color_convert_to_mirc( "[B]Usage[/B] - quit, help, dcc send, topic, mode, whois, nick" ) ); else snprintf(buffer, sizeof(buffer), "%s", irc_color_convert_to_mirc( "[B]Usage[/B] - help, dcc send, login" ) ); irc_cmd_notice( irc_session, params[0], buffer ); } if ( !strcmp (params[1], "ctcp") ) { irc_cmd_ctcp_request (irc_session, nickbuf, "PING 223"); irc_cmd_ctcp_request (irc_session, nickbuf, "FINGER"); irc_cmd_ctcp_request (irc_session, nickbuf, "VERSION"); irc_cmd_ctcp_request (irc_session, nickbuf, "TIME"); } if ( !strcmp (params[1], "dcc chat") ) { irc_dcc_t dccid; irc_dcc_chat (irc_session, 0, nickbuf, dcc_recv_callback, &dccid); addlog ("DCC chat ID: %d", dccid); } if ( !strcmp (params[1], "dcc send") ) { irc_dcc_t dccid; setting = GetSetting( "HTTP Images" ); snprintf(buffer, sizeof(buffer), "%s/cookie.gif", setting->string_value ); irc_dcc_sendfile (irc_session, 0, nickbuf, buffer, dcc_file_send_callback, &dccid); addlog ("DCC send ID: %d", dccid); } if( ( session->dbuser ) && ( session->dbuser->level >= LEVEL_MODERATOR ) ) { if ( !strcmp (params[1], "quit") ) { irc_cmd_quit (irc_session, "of course, Master!"); } if ( !strcmp (params[1], "topic") ) { irc_cmd_topic (irc_session, params[0], 0); } else if ( strstr (params[1], "topic ") == params[1] ) { irc_cmd_topic (irc_session, params[0], params[1] + 6); } if ( strstr (params[1], "mode ") == params[1] ) irc_cmd_channel_mode (irc_session, params[0], params[1] + 5); if ( strstr (params[1], "nick ") == params[1] ) irc_cmd_nick (irc_session, params[1] + 5); if ( strstr (params[1], "whois ") == params[1] ) irc_cmd_whois (irc_session, params[1] + 5); } return; }