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:
parent
40b79a3908
commit
0cce7774d5
1 changed files with 27 additions and 0 deletions
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue