* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
- * $Id: m_kick.c 258 2005-09-21 23:57:17Z nenolod $
+ * $Id: m_kick.c 3317 2007-03-28 23:17:06Z jilles $
*/
#include "stdinc.h"
-#include "tools.h"
#include "channel.h"
#include "client.h"
-#include "irc_string.h"
+#include "match.h"
#include "ircd.h"
#include "numeric.h"
#include "send.h"
#include "hash.h"
#include "packet.h"
#include "s_serv.h"
+#include "hook.h"
static int m_kick(struct Client *, struct Client *, int, const char **);
#define mg_kick { m_kick, 3 }
mapi_clist_av1 kick_clist[] = { &kick_msgtab, NULL };
-DECLARE_MODULE_AV1(kick, NULL, NULL, kick_clist, NULL, NULL, "$Revision: 258 $");
+DECLARE_MODULE_AV1(kick, NULL, NULL, kick_clist, NULL, NULL, "$Revision: 3317 $");
/*
** m_kick
-** parv[0] = sender prefix
** parv[1] = channel
** parv[2] = client to kick
** parv[3] = kick comment
if(MyClient(source_p) && !IsFloodDone(source_p))
flood_endgrace(source_p);
- comment = LOCAL_COPY((EmptyString(parv[3])) ? parv[2] : parv[3]);
- if(strlen(comment) > (size_t) REASONLEN)
- comment[REASONLEN] = '\0';
-
*buf = '\0';
if((p = strchr(parv[1], ',')))
*p = '\0';
return 0;
}
- if(!is_chanop(msptr))
+ if(get_channel_access(source_p, msptr) < CHFL_CHANOP)
{
if(MyConnect(source_p))
{
return 0;
}
+ if(MyClient(source_p))
+ {
+ hook_data_channel_approval hookdata;
+
+ hookdata.client = source_p;
+ hookdata.chptr = chptr;
+ hookdata.msptr = msptr;
+ hookdata.target = who;
+ hookdata.approved = 1;
+
+ call_hook(h_can_kick, &hookdata);
+
+ if (!hookdata.approved)
+ return 0;
+ }
+
+ comment = LOCAL_COPY((EmptyString(parv[3])) ? who->name : parv[3]);
+ if(strlen(comment) > (size_t) REASONLEN)
+ comment[REASONLEN] = '\0';
+
/* jdc
* - In the case of a server kicking a user (i.e. CLEARCHAN),
* the kick should show up as coming from the server which did
sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
":%s KICK %s %s :%s",
use_id(source_p), chptr->chname, use_id(who), comment);
- sendto_server(client_p, chptr, NOCAPS, CAP_TS6,
- ":%s KICK %s %s :%s",
- source_p->name, chptr->chname, who->name, comment);
remove_user_from_channel(msptr);
}
else if (MyClient(source_p))