diff --git a/modules/core/m_nick.c b/modules/core/m_nick.c index 81f916ec..ec57b93a 100644 --- a/modules/core/m_nick.c +++ b/modules/core/m_nick.c @@ -79,6 +79,9 @@ static void perform_nick_collides(struct Client *, struct Client *, static void perform_nickchange_collides(struct Client *, struct Client *, struct Client *, int, const char **, time_t, const char *); +static int h_local_nick_change; +static int h_remote_nick_change; + struct Message nick_msgtab = { "NICK", 0, 0, 0, 0, {{mr_nick, 0}, {m_nick, 0}, {mc_nick, 3}, {ms_nick, 0}, mg_ignore, {m_nick, 0}} @@ -99,10 +102,16 @@ struct Message save_msgtab = { mapi_clist_av1 nick_clist[] = { &nick_msgtab, &uid_msgtab, &euid_msgtab, &save_msgtab, NULL }; +mapi_hlist_av1 nick_hlist[] = { + { "local_nick_change", &h_local_nick_change }, + { "remote_nick_change", &h_remote_nick_change }, + { NULL, NULL } +}; + static const char nick_desc[] = "Provides the NICK client and server commands as well as the UID, EUID, and SAVE TS6 server commands"; -DECLARE_MODULE_AV2(nick, NULL, NULL, nick_clist, NULL, NULL, NULL, NULL, nick_desc); +DECLARE_MODULE_AV2(nick, NULL, NULL, nick_clist, nick_hlist, NULL, NULL, NULL, nick_desc); /* mr_nick() * parv[1] = nickname @@ -615,6 +624,7 @@ change_local_nick(struct Client *client_p, struct Client *source_p, struct Channel *chptr; char note[NICKLEN + 10]; int samenick; + hook_data hook_info; if (dosend) { @@ -658,6 +668,11 @@ change_local_nick(struct Client *client_p, struct Client *source_p, invalidate_bancache_user(source_p); } + hook_info.client = source_p; + hook_info.arg1 = source_p->name; + hook_info.arg2 = nick; + call_hook(h_local_nick_change, &hook_info); + sendto_realops_snomask(SNO_NCHANGE, L_ALL, "Nick change: From %s to %s [%s@%s]", source_p->name, nick, source_p->username, source_p->host); @@ -716,6 +731,7 @@ change_remote_nick(struct Client *client_p, struct Client *source_p, { struct nd_entry *nd; int samenick = irccmp(source_p->name, nick) ? 0 : 1; + hook_data hook_info; /* client changing their nick - dont reset ts if its same */ if(!samenick) @@ -724,6 +740,11 @@ change_remote_nick(struct Client *client_p, struct Client *source_p, monitor_signoff(source_p); } + hook_info.client = source_p; + hook_info.arg1 = source_p->name; + hook_info.arg2 = nick; + call_hook(h_remote_nick_change, &hook_info); + sendto_common_channels_local(source_p, NOCAPS, NOCAPS, ":%s!%s@%s NICK :%s", source_p->name, source_p->username, source_p->host, nick);