]> jfr.im git - solanum.git/blobdiff - extensions/m_okick.c
ircd: send tags on every message
[solanum.git] / extensions / m_okick.c
index 156a046e1e0d4672e919b56d6b3e31f0e7b9d070..3bdfda6dfa2768c3bf80e2c068795a19811abd0d 100644 (file)
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
- *
- *  $Id: m_okick.c 3554 2007-08-10 22:31:14Z jilles $
  */
 
 #include "stdinc.h"
 #include "channel.h"
 #include "client.h"
-#include "irc_string.h"
+#include "match.h"
 #include "ircd.h"
 #include "numeric.h"
 #include "send.h"
 #include "packet.h"
 #include "s_conf.h"
 #include "s_serv.h"
+#include "messages.h"
+#include "logger.h"
 
-static int mo_okick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
+static const char okick_desc[] = "Allow admins to forcibly kick users from channels with the OKICK command";
 
+static void mo_okick(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
 
 struct Message okick_msgtab = {
-       "OKICK", 0, 0, 0, MFLG_SLOW,
+       "OKICK", 0, 0, 0, 0,
        {mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_okick, 4}}
 };
 
 mapi_clist_av1 okick_clist[] = { &okick_msgtab, NULL };
 
-DECLARE_MODULE_AV1(okick, NULL, NULL, okick_clist, NULL, NULL, "$Revision: 3554 $");
+DECLARE_MODULE_AV2(okick, NULL, NULL, okick_clist, NULL, NULL, NULL, NULL, okick_desc);
 
 /*
 ** m_okick
-**      parv[0] = sender prefix
 **      parv[1] = channel
 **      parv[2] = client to kick
 **      parv[3] = kick comment
 */
-static int
-mo_okick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
+static void
+mo_okick(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
 {
        struct Client *who;
        struct Client *target_p;
@@ -73,8 +73,8 @@ mo_okick(struct Client *client_p, struct Client *source_p, int parc, const char
 
        if(*parv[2] == '\0')
        {
-               sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "KICK");
-               return 0;
+               sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, source_p->name, "KICK");
+               return;
        }
 
        if(MyClient(source_p) && !IsFloodDone(source_p))
@@ -94,29 +94,28 @@ mo_okick(struct Client *client_p, struct Client *source_p, int parc, const char
        if(!chptr)
        {
                sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL, form_str(ERR_NOSUCHCHANNEL), name);
-               return 0;
+               return;
        }
 
 
        if((p = strchr(parv[2], ',')))
                *p = '\0';
-       user = LOCAL_COPY(parv[2]);     // strtoken(&p2, parv[2], ","); 
+       user = LOCAL_COPY(parv[2]);     // strtoken(&p2, parv[2], ",");
        if(!(who = find_chasing(source_p, user, &chasing)))
        {
-               return 0;
+               return;
        }
 
        if((target_p = find_client(user)) == NULL)
        {
-               sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, parv[0], user);
-               return 0;
+               sendto_one(source_p, form_str(ERR_NOSUCHNICK), user);
+               return;
        }
 
        if((msptr = find_channel_membership(chptr, target_p)) == NULL)
        {
-               sendto_one(source_p, form_str(ERR_USERNOTINCHANNEL),
-                          me.name, parv[0], parv[1], parv[2]);
-               return 0;
+               sendto_one(source_p, form_str(ERR_USERNOTINCHANNEL), parv[1], parv[2]);
+               return;
        }
 
        sendto_wallops_flags(UMODE_WALLOP, &me,
@@ -132,12 +131,9 @@ mo_okick(struct Client *client_p, struct Client *source_p, int parc, const char
                        me.name, chptr->chname, target_p->name,
                        source_p->name, source_p->username, source_p->host);
 
-       sendto_channel_local(ALL_MEMBERS, chptr, ":%s KICK %s %s :%s",
+       sendto_channel_local(&me, ALL_MEMBERS, chptr, ":%s KICK %s %s :%s",
                             me.name, chptr->chname, who->name, comment);
        sendto_server(&me, chptr, CAP_TS6, NOCAPS,
                      ":%s KICK %s %s :%s", me.id, chptr->chname, who->id, comment);
-       sendto_server(&me, chptr, NOCAPS, CAP_TS6,
-                     ":%s KICK %s %s :%s", me.name, chptr->chname, who->name, comment);
        remove_user_from_channel(msptr);
-       return 0;
 }