diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-03-19 00:09:50 +0000 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-03-19 00:09:50 +0000 |
commit | 0baed0da940c0d82280a5674d7fa8ad06d449384 (patch) | |
tree | 04648744d1b31b25aec1e033a830c26642da665d | |
parent | 5fbec3ddda0e3dcf2c300926978b9b363a77a0f7 (diff) |
Allow changing the name of the control channel at run-time.
-rw-r--r-- | bitlbee.h | 1 | ||||
-rw-r--r-- | doc/user-guide/commands.xml | 10 | ||||
-rw-r--r-- | irc.c | 1 | ||||
-rw-r--r-- | root_commands.c | 31 |
4 files changed, 42 insertions, 1 deletions
@@ -162,6 +162,7 @@ void root_command( irc_t *irc, char *command[] ); gboolean bitlbee_shutdown( gpointer data, gint fd, b_input_condition cond ); char *set_eval_root_nick( set_t *set, char *new_nick ); +char *set_eval_control_channel( set_t *set, char *new_name ); extern global_t global; diff --git a/doc/user-guide/commands.xml b/doc/user-guide/commands.xml index 700df7bb..f8ae4386 100644 --- a/doc/user-guide/commands.xml +++ b/doc/user-guide/commands.xml @@ -510,6 +510,16 @@ </bitlbee-setting> + <bitlbee-setting name="control_channel" type="string" scope="global"> + <default>&bitlbee</default> + + <description> + <para> + Normally the control channel where you can see all your contacts is called "&bitlbee". If you don't like this name, you can rename it to anything else using the <emphasis>rename</emphasis> command, or by changing this setting. + </para> + </description> + </bitlbee-setting> + <bitlbee-setting name="debug" type="boolean" scope="global"> <default>false</default> @@ -170,6 +170,7 @@ irc_t *irc_new( int fd ) s = set_add( &irc->set, "buddy_sendbuffer", "false", set_eval_bool, irc ); s = set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); s = set_add( &irc->set, "charset", "utf-8", set_eval_charset, irc ); + s = set_add( &irc->set, "control_channel", irc->channel, set_eval_control_channel, irc ); s = set_add( &irc->set, "debug", "false", set_eval_bool, irc ); s = set_add( &irc->set, "default_target", "root", NULL, irc ); s = set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc ); diff --git a/root_commands.c b/root_commands.c index 15e6e72a..e4e07605 100644 --- a/root_commands.c +++ b/root_commands.c @@ -1,7 +1,7 @@ /********************************************************************\ * BitlBee -- An IRC to other IM-networks gateway * * * - * Copyright 2002-2004 Wilmer van der Gaast and others * + * Copyright 2002-2010 Wilmer van der Gaast and others * \********************************************************************/ /* User manager (root) commands */ @@ -653,6 +653,21 @@ static void cmd_rename( irc_t *irc, char **cmd ) { irc_usermsg( irc, "Nick `%s' can't be changed", cmd[1] ); } + else if( g_strcasecmp( cmd[1], irc->channel ) == 0 ) + { + if( strchr( CTYPES, cmd[2][0] ) && nick_ok( cmd[2] + 1 ) ) + { + u = user_find( irc, irc->nick ); + + irc_part( irc, u, irc->channel ); + g_free( irc->channel ); + irc->channel = g_strdup( cmd[2] ); + irc_join( irc, u, irc->channel ); + + if( strcmp( cmd[0], "set_rename" ) != 0 ) + set_setstr( &irc->set, "control_channel", cmd[2] ); + } + } else if( user_find( irc, cmd[2] ) && ( nick_cmp( cmd[1], cmd[2] ) != 0 ) ) { irc_usermsg( irc, "Nick `%s' already exists", cmd[2] ); @@ -702,6 +717,20 @@ char *set_eval_root_nick( set_t *set, char *new_nick ) return strcmp( irc->mynick, new_nick ) == 0 ? new_nick : SET_INVALID; } +char *set_eval_control_channel( set_t *set, char *new_name ) +{ + irc_t *irc = set->data; + + if( strcmp( irc->channel, new_name ) != 0 ) + { + char *cmd[] = { "set_rename", irc->channel, new_name, NULL }; + + cmd_rename( irc, cmd ); + } + + return strcmp( irc->channel, new_name ) == 0 ? new_name : SET_INVALID; +} + static void cmd_remove( irc_t *irc, char **cmd ) { user_t *u; |