aboutsummaryrefslogtreecommitdiffstats
path: root/root_commands.c
diff options
context:
space:
mode:
Diffstat (limited to 'root_commands.c')
-rw-r--r--root_commands.c176
1 files changed, 102 insertions, 74 deletions
diff --git a/root_commands.c b/root_commands.c
index 040d885c..e0cd15b9 100644
--- a/root_commands.c
+++ b/root_commands.c
@@ -126,9 +126,12 @@ static void cmd_help( irc_t *irc, char **cmd )
}
}
+static void cmd_account( irc_t *irc, char **cmd );
+
static void cmd_identify( irc_t *irc, char **cmd )
{
storage_status_t status = storage_load( irc->nick, cmd[1], irc );
+ char *account_on[] = { "account", "on", NULL };
switch (status) {
case STORAGE_INVALID_PASSWORD:
@@ -138,11 +141,14 @@ static void cmd_identify( irc_t *irc, char **cmd )
irc_usermsg( irc, "The nick is (probably) not registered" );
break;
case STORAGE_OK:
- irc_usermsg( irc, "Password accepted" );
+ irc_usermsg( irc, "Password accepted, settings and accounts loaded" );
irc_umode_set( irc, "+R", 1 );
+ if( set_getbool( &irc->set, "auto_connect" ) )
+ cmd_account( irc, account_on );
break;
+ case STORAGE_OTHER_ERROR:
default:
- irc_usermsg( irc, "Something very weird happened" );
+ irc_usermsg( irc, "Unknown error while loading configuration" );
break;
}
}
@@ -162,6 +168,7 @@ static void cmd_register( irc_t *irc, char **cmd )
break;
case STORAGE_OK:
+ irc_usermsg( irc, "Account successfully created" );
irc->status |= USTATUS_IDENTIFIED;
irc_umode_set( irc, "+R", 1 );
break;
@@ -225,9 +232,8 @@ static void cmd_account( irc_t *irc, char **cmd )
}
a = account_add( irc, prpl, cmd[3], cmd[4] );
-
if( cmd[5] )
- a->server = g_strdup( cmd[5] );
+ set_setstr( &a->set, "server", cmd[5] );
irc_usermsg( irc, "Account successfully added" );
}
@@ -305,7 +311,7 @@ static void cmd_account( irc_t *irc, char **cmd )
irc_usermsg( irc, "Trying to get all accounts connected..." );
for( a = irc->accounts; a; a = a->next )
- if( !a->gc )
+ if( !a->gc && a->auto_connect )
account_on( irc, a );
}
else
@@ -351,6 +357,76 @@ static void cmd_account( irc_t *irc, char **cmd )
return;
}
}
+ else if( g_strcasecmp( cmd[1], "set" ) == 0 )
+ {
+ char *acc_handle, *set_name = NULL, *tmp;
+
+ if( !cmd[2] )
+ {
+ irc_usermsg( irc, "Not enough parameters given (need %d)", 2 );
+ return;
+ }
+
+ acc_handle = g_strdup( cmd[2] );
+ if( ( tmp = strchr( acc_handle, '/' ) ) )
+ {
+ *tmp = 0;
+ set_name = tmp + 1;
+ }
+ a = account_get( irc, acc_handle );
+
+ if( a == NULL )
+ {
+ g_free( acc_handle );
+ irc_usermsg( irc, "Invalid account" );
+ return;
+ }
+
+ if( cmd[3] )
+ {
+ set_t *s = set_find( &a->set, set_name );
+
+ if( a->gc && s && s->flags & ACC_SET_OFFLINE_ONLY )
+ {
+ g_free( acc_handle );
+ irc_usermsg( irc, "This setting can only be changed when the account is %s-line", "off" );
+ return;
+ }
+ else if( !a->gc && s && s->flags & ACC_SET_ONLINE_ONLY )
+ {
+ g_free( acc_handle );
+ irc_usermsg( irc, "This setting can only be changed when the account is %s-line", "on" );
+ return;
+ }
+
+ set_setstr( &a->set, set_name, cmd[3] );
+
+ if( ( strcmp( cmd[3], "=" ) ) == 0 && cmd[4] )
+ irc_usermsg( irc, "Warning: Correct syntax: \002account set <variable> <value>\002 (without =)" );
+ }
+ if( set_name ) /* else 'forgotten' on purpose.. Must show new value after changing */
+ {
+ char *s = set_getstr( &a->set, set_name );
+ if( s )
+ irc_usermsg( irc, "%s = `%s'", set_name, s );
+ else
+ irc_usermsg( irc, "%s is empty", set_name );
+ }
+ else
+ {
+ set_t *s = a->set;
+ while( s )
+ {
+ if( s->value || s->def )
+ irc_usermsg( irc, "%s = `%s'", s->key, s->value?s->value:s->def );
+ else
+ irc_usermsg( irc, "%s is empty", s->key );
+ s = s->next;
+ }
+ }
+
+ g_free( acc_handle );
+ }
else
{
irc_usermsg( irc, "Unknown command: account %s. Please use \x02help commands\x02 to get a list of available commands.", cmd[1] );
@@ -393,14 +469,14 @@ static void cmd_add( irc_t *irc, char **cmd )
}
else
{
- nick_set( irc, cmd[2], a->gc->prpl, cmd[3] );
+ nick_set( a, cmd[2], cmd[3] );
}
}
/* By making this optional, you can talk to people without having to
add them to your *real* (server-side) contact list. */
if( add_for_real )
- a->gc->prpl->add_buddy( a->gc, cmd[2] );
+ a->gc->acc->prpl->add_buddy( a->gc, cmd[2] );
add_buddy( a->gc, NULL, cmd[2], cmd[2] );
@@ -434,13 +510,13 @@ static void cmd_info( irc_t *irc, char **cmd )
return;
}
- if( !gc->prpl->get_info )
+ if( !gc->acc->prpl->get_info )
{
irc_usermsg( irc, "Command `%s' not supported by this protocol", cmd[0] );
}
else
{
- gc->prpl->get_info( gc, cmd[2] );
+ gc->acc->prpl->get_info( gc, cmd[2] );
}
}
@@ -475,7 +551,7 @@ static void cmd_rename( irc_t *irc, char **cmd )
}
else if( u->send_handler == buddy_send_handler )
{
- nick_set( irc, u->handle, u->gc->prpl, cmd[2] );
+ nick_set( u->gc->acc, u->handle, cmd[2] );
}
irc_usermsg( irc, "Nick successfully changed" );
@@ -494,9 +570,9 @@ static void cmd_remove( irc_t *irc, char **cmd )
}
s = g_strdup( u->handle );
- u->gc->prpl->remove_buddy( u->gc, u->handle, NULL );
+ u->gc->acc->prpl->remove_buddy( u->gc, u->handle, NULL );
user_del( irc, cmd[1] );
- nick_del( irc, cmd[1] );
+ nick_del( u->gc->acc, s );
irc_usermsg( irc, "Buddy `%s' (nick %s) removed from contact list", s, cmd[1] );
g_free( s );
@@ -551,7 +627,7 @@ static void cmd_block( irc_t *irc, char **cmd )
return;
}
- if( !gc->prpl->add_deny || !gc->prpl->rem_permit )
+ if( !gc->acc->prpl->add_deny || !gc->acc->prpl->rem_permit )
{
irc_usermsg( irc, "Command `%s' not supported by this protocol", cmd[0] );
}
@@ -610,7 +686,7 @@ static void cmd_allow( irc_t *irc, char **cmd )
return;
}
- if( !gc->prpl->rem_deny || !gc->prpl->add_permit )
+ if( !gc->acc->prpl->rem_deny || !gc->acc->prpl->add_permit )
{
irc_usermsg( irc, "Command `%s' not supported by this protocol", cmd[0] );
}
@@ -665,16 +741,18 @@ static void cmd_set( irc_t *irc, char **cmd )
{
if( cmd[1] && cmd[2] )
{
- set_setstr( irc, cmd[1], cmd[2] );
+ set_setstr( &irc->set, cmd[1], cmd[2] );
if( ( strcmp( cmd[2], "=" ) ) == 0 && cmd[3] )
irc_usermsg( irc, "Warning: Correct syntax: \002set <variable> <value>\002 (without =)" );
}
if( cmd[1] ) /* else 'forgotten' on purpose.. Must show new value after changing */
{
- char *s = set_getstr( irc, cmd[1] );
+ char *s = set_getstr( &irc->set, cmd[1] );
if( s )
irc_usermsg( irc, "%s = `%s'", cmd[1], s );
+ else
+ irc_usermsg( irc, "%s is empty", cmd[1] );
}
else
{
@@ -683,6 +761,8 @@ static void cmd_set( irc_t *irc, char **cmd )
{
if( s->value || s->def )
irc_usermsg( irc, "%s = `%s'", s->key, s->value?s->value:s->def );
+ else
+ irc_usermsg( irc, "%s is empty", s->key );
s = s->next;
}
}
@@ -726,7 +806,7 @@ static void cmd_blist( irc_t *irc, char **cmd )
{
if( online == 1 )
{
- g_snprintf( s, sizeof( s ) - 1, "%s@%s (%s)", u->user, u->host, u->gc->user->prpl->name );
+ g_snprintf( s, sizeof( s ) - 1, "%s@%s (%s)", u->user, u->host, u->gc->acc->prpl->name );
irc_usermsg( irc, format, u->nick, s, "Online" );
}
@@ -737,7 +817,7 @@ static void cmd_blist( irc_t *irc, char **cmd )
{
if( away == 1 )
{
- g_snprintf( s, sizeof( s ) - 1, "%s@%s (%s)", u->user, u->host, u->gc->user->prpl->name );
+ g_snprintf( s, sizeof( s ) - 1, "%s@%s (%s)", u->user, u->host, u->gc->acc->prpl->name );
irc_usermsg( irc, format, u->nick, s, u->away );
}
n_away ++;
@@ -747,7 +827,7 @@ static void cmd_blist( irc_t *irc, char **cmd )
{
if( offline == 1 )
{
- g_snprintf( s, sizeof( s ) - 1, "%s@%s (%s)", u->user, u->host, u->gc->user->prpl->name );
+ g_snprintf( s, sizeof( s ) - 1, "%s@%s (%s)", u->user, u->host, u->gc->acc->prpl->name );
irc_usermsg( irc, format, u->nick, s, "Offline" );
}
n_offline ++;
@@ -772,7 +852,7 @@ static void cmd_nick( irc_t *irc, char **cmd )
{
irc_usermsg( irc, "Your name is `%s'" , a->gc->displayname ? a->gc->displayname : "NULL" );
}
- else if ( !a->gc->prpl->set_info )
+ else if ( !a->prpl->set_info )
{
irc_usermsg( irc, "Command `%s' not supported by this protocol", cmd[0] );
}
@@ -780,7 +860,7 @@ static void cmd_nick( irc_t *irc, char **cmd )
{
irc_usermsg( irc, "Setting your name to `%s'", cmd[2] );
- a->gc->prpl->set_info( a->gc, cmd[2] );
+ a->prpl->set_info( a->gc, cmd[2] );
}
}
@@ -799,62 +879,11 @@ static void cmd_qlist( irc_t *irc, char **cmd )
for( num = 0; q; q = q->next, num ++ )
if( q->gc ) /* Not necessary yet, but it might come later */
- irc_usermsg( irc, "%d, %s(%s): %s", num, q->gc->prpl->name, q->gc->username, q->question );
+ irc_usermsg( irc, "%d, %s(%s): %s", num, q->gc->acc->prpl->name, q->gc->username, q->question );
else
irc_usermsg( irc, "%d, BitlBee: %s", num, q->question );
}
-static void cmd_import_buddies( irc_t *irc, char **cmd )
-{
- struct gaim_connection *gc;
- account_t *a;
- nick_t *n;
-
- if( !( a = account_get( irc, cmd[1] ) ) )
- {
- irc_usermsg( irc, "Invalid account" );
- return;
- }
- else if( !( ( gc = a->gc ) && ( a->gc->flags & OPT_LOGGED_IN ) ) )
- {
- irc_usermsg( irc, "That account is not on-line" );
- return;
- }
-
- if( cmd[2] )
- {
- if( g_strcasecmp( cmd[2], "clear" ) == 0 )
- {
- user_t *u;
-
- for( u = irc->users; u; u = u->next )
- if( u->gc == gc )
- {
- u->gc->prpl->remove_buddy( u->gc, u->handle, NULL );
- user_del( irc, u->nick );
- }
-
- irc_usermsg( irc, "Old buddy list cleared." );
- }
- else
- {
- irc_usermsg( irc, "Invalid argument: %s", cmd[2] );
- return;
- }
- }
-
- for( n = gc->irc->nicks; n; n = n->next )
- {
- if( n->proto == gc->prpl && !user_findhandle( gc, n->handle ) )
- {
- gc->prpl->add_buddy( gc, n->handle );
- add_buddy( gc, NULL, n->handle, NULL );
- }
- }
-
- irc_usermsg( irc, "Sent all add requests. Please wait for a while, the server needs some time to handle all the adds." );
-}
-
const command_t commands[] = {
{ "help", 0, cmd_help, 0 },
{ "identify", 1, cmd_identify, 0 },
@@ -873,7 +902,6 @@ const command_t commands[] = {
{ "no", 0, cmd_yesno, 0 },
{ "blist", 0, cmd_blist, 0 },
{ "nick", 1, cmd_nick, 0 },
- { "import_buddies", 1, cmd_import_buddies, 0 },
{ "qlist", 0, cmd_qlist, 0 },
{ NULL }
};