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);
}
Пример #2
0
static void irc_get_info(PurpleConnection *gc, const char *who)
{
	struct irc_conn *irc = gc->proto_data;
	const char *args[2];
	args[0] = who;
	args[1] = NULL;
	irc_cmd_whois(irc, "whois", NULL, args);
}
Пример #3
0
/**
* @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 ChatNetworkingIRC::send( const std::string& msg, const std::string& channel )
{
    // ignore input if no valid session exists
    if ( !_p_session )
        return;

    if ( !msg.length() )
        return;

    if ( msg[ 0 ] == '/' )
    {
        // check for /msg commands, send them raw
        if ( ( msg.length() > 4 ) && !msg.compare( 0, 4, "/msg" ) )
        {
            std::string cmd = msg.substr( 4, msg.length() );
            irc_send_raw( _p_session, cmd.c_str() );
            return;
        }

        std::vector< std::string > args;
        yaf3d::explode( msg, " ", &args );

        // all commands without arguments go here
        if ( args.size() == 1 )
        {
            if ( args[ 0 ] == "/names" )
            {
                requestMemberList( channel );
            }
            else if ( args[ 0 ] == "/part" )
            {
                requestLeaveChannel( channel );
            }
            else
            {
                recvMessage( channel, "* ", IRC_CMD_LIST );
            }

        }
        // all commands with one single argument go here
        else if ( args.size() == 2 )        
        {
            if ( args[ 0 ] == "/nick" )
            {
                irc_cmd_nick( _p_session, args[ 1 ].c_str() );
            }
            else if ( args[ 0 ] == "/join" )           
            {
                //! TODO: what is "key" about?
                irc_cmd_join( _p_session, args[ 1 ].c_str(), NULL );
            }
            else if ( args[ 0 ] == "/whois" )
            {
                irc_cmd_whois( _p_session, args[ 1 ].c_str() );
            }
            else
            {
                recvMessage( channel, "* ", IRC_CMD_LIST );
            }
        }
    }
    else
    {
        irc_cmd_msg( _p_session, channel.c_str(), msg.c_str() );
    }
}
Пример #5
0
void dazeus::Server::whois( const std::string &destination ) {
	irc_cmd_whois(IRC, destination.c_str());
}
Пример #6
0
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;
}