Subject /invite to target change.

Similar to /msg, inviting a user that is not in a channel
you have op or voice in requires a free target; opers always
have a free target.

Being invited adds the source as a reply target.
This commit is contained in:
Jilles Tjoelker 2010-02-15 22:08:55 +01:00
parent 4f2685f3e1
commit 890af0e7c5

View file

@ -39,6 +39,7 @@
#include "parse.h" #include "parse.h"
#include "modules.h" #include "modules.h"
#include "packet.h" #include "packet.h"
#include "tgchange.h"
static int m_invite(struct Client *, struct Client *, int, const char **); static int m_invite(struct Client *, struct Client *, int, const char **);
@ -162,6 +163,14 @@ m_invite(struct Client *client_p, struct Client *source_p, int parc, const char
if(MyConnect(source_p)) if(MyConnect(source_p))
{ {
if (ConfigFileEntry.target_change && !IsOper(source_p) &&
!find_allowing_channel(source_p, target_p) &&
!add_target(source_p, target_p))
{
sendto_one(source_p, form_str(ERR_TARGCHANGE),
me.name, source_p->name, target_p->name);
return;
}
sendto_one(source_p, form_str(RPL_INVITING), sendto_one(source_p, form_str(RPL_INVITING),
me.name, source_p->name, me.name, source_p->name,
target_p->name, parv[2]); target_p->name, parv[2]);
@ -179,6 +188,7 @@ m_invite(struct Client *client_p, struct Client *source_p, int parc, const char
if(MyConnect(target_p)) if(MyConnect(target_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,
target_p->name, chptr->chname); target_p->name, chptr->chname);