diff options
-rw-r--r-- | include/modules.h | 8 | ||||
-rw-r--r-- | src/protocol/inspircd12.cpp | 5 | ||||
-rw-r--r-- | src/protocol/ratbox.c | 10 | ||||
-rw-r--r-- | src/users.c | 7 |
4 files changed, 24 insertions, 6 deletions
diff --git a/include/modules.h b/include/modules.h index 8bf3077ad..f08e87015 100644 --- a/include/modules.h +++ b/include/modules.h @@ -506,6 +506,12 @@ class CoreExport Module */ virtual void OnServerConnect(Server *s) { } + /** Called after a user changed the nick + * @param u The user. + * @param oldnick the old nick of the user + */ + virtual void OnUserNickChange(User *u, const char *oldnick) { } + /** Called before a command is due to be executed. * @param u The user executing the command * @param service The service the command is associated with @@ -542,7 +548,7 @@ enum Implementation { I_BEGIN, I_OnUserKicked, I_OnReload, I_OnBotAssign, I_OnBotUnAssign, I_OnUserConnect, I_OnServerConnect, - I_OnPreCommand, I_OnPostCommand, + I_OnPreCommand, I_OnPostCommand, I_OnUserNickChange, I_OnSaveDatabase, I_OnBackupDatabase, I_END }; diff --git a/src/protocol/inspircd12.cpp b/src/protocol/inspircd12.cpp index df7c1220b..8e9f88845 100644 --- a/src/protocol/inspircd12.cpp +++ b/src/protocol/inspircd12.cpp @@ -699,13 +699,12 @@ class InspIRCdProto : public IRCDProto } } - void SendAccountLogin(User *u, NickCore *account) + void SendAccountLogin(User *u, NickCore *account) { send_cmd(TS6SID, "METADATA %s accountname :%s", u->GetUID().c_str(), account->display); - } - void SendAccountLogout(User *u, NickCore *account) + void SendAccountLogout(User *u, NickCore *account) { send_cmd(TS6SID, "METADATA %s accountname :", u->GetUID().c_str()); } diff --git a/src/protocol/ratbox.c b/src/protocol/ratbox.c index 4829377d9..d87d0b64e 100644 --- a/src/protocol/ratbox.c +++ b/src/protocol/ratbox.c @@ -663,6 +663,16 @@ class RatboxProto : public IRCDTS6Proto send_cmd(source->uid, "INVITE %s %s", u ? u->GetUID().c_str(): nick, chan); } + void SendAccountLogin(User *u, NickCore *account) + { + send_cmd(TS6SID, "ENCAP * SU %s %s", u->GetUID().c_str(), account->display); + } + + void SendAccountLogout(User *u, NickCore *account) + { + send_cmd(TS6SID, "ENCAP * SU %s", u->GetUID().c_str()); + } + int IsNickValid(const char *nick) { /* TS6 Save extension -Certus */ diff --git a/src/users.c b/src/users.c index dd232e713..25e52404c 100644 --- a/src/users.c +++ b/src/users.c @@ -687,7 +687,7 @@ User *do_nick(const char *source, const char *nick, const char *username, const } user->SetNewNick(nick); - send_event(EVENT_CHANGE_NICK, 1, nick); + FOREACH_MOD(I_OnUserNickChange, OnUserNickChange(user, source)); if ((old_na ? old_na->nc : NULL) == user->nc) nc_changed = 0; @@ -700,7 +700,10 @@ User *do_nick(const char *source, const char *nick, const char *username, const } else { - ircdproto->SendUnregisteredNick(user); + if (!nick_identified(user) || !nick_recognized(user)) + { + ircdproto->SendUnregisteredNick(user); + } } } |