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}}
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
struct Client *target_p;
char nick[NICKLEN];
- if (strlen(client_p->id) == 3)
+ if (strlen(client_p->id) == 3 || (source_p->preClient && !EmptyString(source_p->preClient->id)))
{
exit_client(client_p, client_p, client_p, "Mixing client and server protocol");
return;
struct Channel *chptr;
char note[NICKLEN + 10];
int samenick;
+ hook_cdata hook_info;
if (dosend)
{
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);
{
struct nd_entry *nd;
int samenick = irccmp(source_p->name, nick) ? 0 : 1;
+ hook_cdata hook_info;
/* client changing their nick - dont reset ts if its same */
if(!samenick)
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);