aboutsummaryrefslogtreecommitdiffstats
path: root/irc_commands.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2010-04-11 21:53:27 +0200
committerWilmer van der Gaast <wilmer@gaast.net>2010-04-11 21:53:27 +0200
commitffa1173a0ea836029bae1f41ec13c64b39bfb6a4 (patch)
treea4bd6df138c24daaebd3329234c7a07502aa1a8f /irc_commands.c
parentdbb0ce32e607dbcd6c5ad4d5ab309e969afd6fd4 (diff)
Allow the user to change his/her nick. My old concern was that it gets hairy
when dealing with the storage/NickServ part. But meh, just reset all that state when the nick changes and require the user to re-register if s/he wants to save stuff. The only problem's when s/he identifies and may end up getting every account added twice.
Diffstat (limited to 'irc_commands.c')
-rw-r--r--irc_commands.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/irc_commands.c b/irc_commands.c
index 57268d07..b1b764b9 100644
--- a/irc_commands.c
+++ b/irc_commands.c
@@ -72,11 +72,7 @@ static void irc_cmd_user( irc_t *irc, char **cmd )
static void irc_cmd_nick( irc_t *irc, char **cmd )
{
- if( irc->user->nick )
- {
- irc_send_num( irc, 438, ":The hand of the deity is upon thee, thy nick may not change" );
- }
- else if( irc_user_by_name( irc, cmd[1] ) )
+ if( irc_user_by_name( irc, cmd[1] ) )
{
irc_send_num( irc, 433, ":This nick is already in use" );
}
@@ -85,6 +81,17 @@ static void irc_cmd_nick( irc_t *irc, char **cmd )
/* [SH] Invalid characters. */
irc_send_num( irc, 432, ":This nick contains invalid characters" );
}
+ else if( irc->user->nick )
+ {
+ if( irc->status & USTATUS_IDENTIFIED )
+ {
+ irc_setpass( irc, NULL );
+ irc->status &= ~USTATUS_IDENTIFIED;
+ irc_umode_set( irc, "-R", 1 );
+ }
+
+ irc_user_set_nick( irc->user, cmd[1] );
+ }
else
{
irc->user->nick = g_strdup( cmd[1] );