From 625a2b1f99dc8cb84d864720da82d01d09ee38a9 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Mon, 15 Feb 2010 23:07:14 +0100 Subject: [PATCH] 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. --- modules/m_invite.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/modules/m_invite.c b/modules/m_invite.c index e7fe218..b8782d0 100644 --- a/modules/m_invite.c +++ b/modules/m_invite.c @@ -188,6 +188,33 @@ m_invite(struct Client *client_p, struct Client *source_p, int parc, const char 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); sendto_one(target_p, ":%s!%s@%s INVITE %s :%s", source_p->name, source_p->username, source_p->host,