Subject /invite to umodes +g and +R.

The behaviour is the same as /msg except that where
/msg would send RPL_UMODEGMSG to the user, the /invite
is instead let through. This counts as a notification
for caller_id_wait like RPL_UMODEGMSG.

Checks are on the target user's server, which means an
error message will appear after RPL_INVITING.
This must be because the accept list is not globally
known.
This commit is contained in:
Jilles Tjoelker 2010-02-15 23:07:14 +01:00
parent 0f18c084bb
commit 625a2b1f99
1 changed files with 27 additions and 0 deletions

View File

@ -188,6 +188,33 @@ m_invite(struct Client *client_p, struct Client *source_p, int parc, const char
if(MyConnect(target_p)) if(MyConnect(target_p))
{ {
if(!IsOper(source_p) && (IsSetCallerId(target_p) ||
(IsSetRegOnlyMsg(target_p) && !source_p->user->suser[0])) &&
!accept_message(source_p, target_p))
{
if (IsSetRegOnlyMsg(target_p) && !source_p->user->suser[0])
{
sendto_one_numeric(source_p, ERR_NONONREG,
form_str(ERR_NONONREG),
target_p->name);
return 0;
}
else
{
/* instead of sending RPL_UMODEGMSG,
* just let the invite through
*/
if((target_p->localClient->last_caller_id_time +
ConfigFileEntry.caller_id_wait) >= rb_current_time())
{
sendto_one_numeric(source_p, ERR_TARGUMODEG,
form_str(ERR_TARGUMODEG),
target_p->name);
return 0;
}
target_p->localClient->last_caller_id_time = rb_current_time();
}
}
add_reply_target(target_p, source_p); add_reply_target(target_p, source_p);
sendto_one(target_p, ":%s!%s@%s INVITE %s :%s", sendto_one(target_p, ":%s!%s@%s INVITE %s :%s",
source_p->name, source_p->username, source_p->host, source_p->name, source_p->username, source_p->host,