diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-05-02 19:48:26 +0100 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-05-02 19:48:26 +0100 |
commit | bce78c8e6b9363175943a1b10df76fdbd87ba0c8 (patch) | |
tree | 20b02a4b702e05ecaecc7d07d82dcf0fcdf6ab1b /irc_channel.c | |
parent | a4cdf43ba4247914985765ef26a1d77239a15a10 (diff) |
Restored classical control channel behaviour (the ability to talk to
contacts in there).
Diffstat (limited to 'irc_channel.c')
-rw-r--r-- | irc_channel.c | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/irc_channel.c b/irc_channel.c index 27f33619..60c2e422 100644 --- a/irc_channel.c +++ b/irc_channel.c @@ -144,13 +144,38 @@ gboolean irc_channel_name_ok( const char *name ) /* Channel-type dependent functions, for control channels: */ static gboolean control_channel_privmsg( irc_channel_t *ic, const char *msg ) { - char cmd[strlen(msg)+1]; + irc_t *irc = ic->irc; + const char *s; - g_free( ic->irc->last_root_cmd ); - ic->irc->last_root_cmd = g_strdup( ic->name ); + /* Scan for non-whitespace chars followed by a colon: */ + for( s = msg; *s && !isspace( *s ) && *s != ':'; s ++ ) {} - strcpy( cmd, msg ); - root_command_string( ic->irc, cmd ); + if( *s == ':' ) + { + char to[s-msg+1]; + irc_user_t *iu; + + strncpy( to, msg, s - msg ); + while( *(++s) && isspace( *s ) ) {} + + iu = irc_user_by_name( irc, to ); + if( iu && iu->f->privmsg ) + { + iu->flags &= ~IRC_USER_PRIVATE; + iu->f->privmsg( iu, s ); + } + } + else + { + /* TODO: Maybe just use root->privmsg here now? */ + char cmd[strlen(msg)+1]; + + g_free( ic->irc->last_root_cmd ); + ic->irc->last_root_cmd = g_strdup( ic->name ); + + strcpy( cmd, msg ); + root_command_string( ic->irc, cmd ); + } return TRUE; } |