#include "messages.h"
unsigned int CAP_REMOVE;
+static char part_buf[REASONLEN + 1];
-static int m_remove(struct Client *, struct Client *, int, const char **);
+static int m_remove(struct MsgBuf *, struct Client *, struct Client *, int, const char **);
+static void remove_quote_part(hook_data_privmsg_channel *);
struct Message remove_msgtab = {
- "REMOVE", 0, 0, 0, MFLG_SLOW,
+ "REMOVE", 0, 0, 0, 0,
{mg_unreg, {m_remove, 3}, {m_remove, 3}, {m_remove, 3}, mg_ignore, {m_remove, 3}}
};
mapi_clist_av1 remove_clist[] = { &remove_msgtab, NULL };
+mapi_hfn_list_av1 remove_hfnlist[] = {
+ { "privmsg_channel", (hookfn) remove_quote_part },
+ { NULL, NULL }
+};
static int
modinit(void)
capability_orphan(serv_capindex, "REMOVE");
}
-DECLARE_MODULE_AV1(remove, modinit, moddeinit, remove_clist, NULL, NULL, "$Revision: 3317 $");
+DECLARE_MODULE_AV1(remove, modinit, moddeinit, remove_clist, NULL, remove_hfnlist, "$Revision: 3317 $");
static int
-m_remove(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
+m_remove(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct membership *msptr;
struct Client *who;
return 0;
}
- if(get_channel_access(source_p, msptr, MODE_ADD) < CHFL_CHANOP)
+ if(get_channel_access(source_p, chptr, msptr, MODE_ADD, NULL) < CHFL_CHANOP)
{
if(MyConnect(source_p))
{
return 0;
}
+static void
+remove_quote_part(hook_data_privmsg_channel *data)
+{
+ if (data->approved || EmptyString(data->text) || data->msgtype != MESSAGE_TYPE_PART)
+ return;
+
+ rb_strlcpy(part_buf, "\"", sizeof(part_buf) - 1);
+ rb_strlcat(part_buf, data->text, sizeof(part_buf) - 1);
+ rb_strlcat(part_buf, "\"", sizeof(part_buf));
+
+ data->text = part_buf;
+}