aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitlbee.h1
-rw-r--r--doc/user-guide/commands.xml10
-rw-r--r--irc.c1
-rw-r--r--root_commands.c31
4 files changed, 42 insertions, 1 deletions
diff --git a/bitlbee.h b/bitlbee.h
index 15592020..5f98deef 100644
--- a/bitlbee.h
+++ b/bitlbee.h
@@ -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>&amp;bitlbee</default>
+
+ <description>
+ <para>
+ Normally the control channel where you can see all your contacts is called "&amp;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>
diff --git a/irc.c b/irc.c
index ee7b4b0d..b33a483b 100644
--- a/irc.c
+++ b/irc.c
@@ -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;