Add hooks for local and remote nick changes

This commit is contained in:
Stephen Bennett 2008-11-09 18:54:00 +00:00 committed by William Pitcock
parent 6d16f66be6
commit f32b9ebd63

View file

@ -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);