Add me_svsjoin function to allow services to "force"join clients

to channels, primarily for ns_ajoin.
This commit is contained in:
JD Horelick 2010-03-30 21:20:26 -04:00
parent 36fb4e9a77
commit 1d59ea37bb
1 changed files with 26 additions and 0 deletions

View File

@ -43,6 +43,7 @@
#include "chmode.h"
static int m_join(struct Client *, struct Client *, int, const char **);
static int me_svsjoin(struct Client *, struct Client *, int, const char **);
static int ms_join(struct Client *, struct Client *, int, const char **);
static int ms_sjoin(struct Client *, struct Client *, int, const char **);
@ -51,6 +52,11 @@ struct Message join_msgtab = {
{mg_unreg, {m_join, 2}, {ms_join, 2}, mg_ignore, mg_ignore, {m_join, 2}}
};
struct Message svsjoin_msgtab = {
"SVSJOIN", 0, 0, 0, MFLG_SLOW,
{mg_ignore, mg_ignore, mg_ignore, mg_ignore, {me_svsjoin, 3}, mg_ignore}
};
struct Message sjoin_msgtab = {
"SJOIN", 0, 0, 0, MFLG_SLOW,
{mg_unreg, mg_ignore, mg_ignore, {ms_sjoin, 4}, mg_ignore, mg_ignore}
@ -86,6 +92,26 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p
return 0;
}
/*
* me_svsjoin - small function to allow services to forcejoin clients, mainly for ns_ajoin
* parv[1] = user to act on (join to a channel)
* parv[2] = channel
*/
static int
me_svsjoin(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct Client *target_p;
if(!(source_p->flags & FLAGS_SERVICE))
return 0;
if((target_p = find_person(parv[1])) == NULL)
return 0;
user_join(&me, target_p, parv[2], NULL);
return 0;
}
/*
* ms_join
* parv[1] = channel TS