summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules.h8
-rw-r--r--src/protocol/inspircd12.cpp5
-rw-r--r--src/protocol/ratbox.c10
-rw-r--r--src/users.c7
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);
+ }
}
}