Skip to content

Commit eb55786

Browse files
authored
Merge pull request #82 from ValwareIRC/patch-20
MUTE: Add oper-visible message-tag
2 parents fb39005 + bc79a45 commit eb55786

File tree

1 file changed

+58
-11
lines changed

1 file changed

+58
-11
lines changed

files/mute.c

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ module
1919
}
2020
*** <<<MODULE MANAGER END>>>
2121
*/
22-
22+
#define MTAG_MUTED "valware.uk/muted"
2323
#include "unrealircd.h"
2424

2525
ModuleHeader MOD_HEADER
2626
= {
2727
"third/mute",
28-
"1.2",
28+
"1.4",
2929
"Globally mute a user",
3030
"Valware",
3131
"unrealircd-6",
@@ -56,7 +56,7 @@ typedef struct
5656

5757
static muteconf ourconf;
5858
static void send_to_client_lol(Client *client, char **p);
59-
59+
void mtag_add_muted(Client *client, MessageTag *recv_mtags, MessageTag **mtag_list, const char *signature);
6060
void mute_free(ModData *m);
6161
const char *mute_serialize(ModData *m);
6262
void mute_unserialize(const char *str, ModData *m);
@@ -67,20 +67,29 @@ int mutecheck_usermsg(Client *client, Client *target, const char **text, const c
6767
int mute_configtest(ConfigFile *cf, ConfigEntry *ce, int type, int *errs);
6868
int mute_configrun(ConfigFile *cf, ConfigEntry *ce, int type);
6969
int who_the_hell_be_muted_lol(Client *client, Client *target, NameValuePrioList **list);
70+
int muted_mtag_is_ok(Client *client, const char *name, const char *value);
71+
int muted_mtag_should_send_to_client(Client *target);
7072

7173
ModDataInfo *mute_md;
7274
MOD_TEST()
7375
{
7476
memset(&ourconf, 0, sizeof(ourconf));
75-
7677
HookAdd(modinfo->handle, HOOKTYPE_CONFIGTEST, 0, mute_configtest);
7778
return MOD_SUCCESS;
7879
}
7980
MOD_INIT() {
80-
ModDataInfo mreq;
81+
ModDataInfo mreq; // For MD
82+
MessageTagHandlerInfo mtag; // For message-tagging
8183

8284
MARK_AS_GLOBAL_MODULE(modinfo);
8385

86+
memset(&mtag, 0, sizeof(mtag));
87+
mtag.name = MTAG_MUTED;
88+
mtag.is_ok = muted_mtag_is_ok;
89+
mtag.should_send_to_client = muted_mtag_should_send_to_client;
90+
mtag.flags = MTAG_HANDLER_FLAGS_NO_CAP_NEEDED;
91+
MessageTagHandlerAdd(modinfo->handle, &mtag);
92+
8493
setconf();
8594
memset(&mreq, 0, sizeof(mreq));
8695
mreq.name = "mute";
@@ -96,6 +105,7 @@ MOD_INIT() {
96105

97106
CommandAdd(modinfo->handle, MSG_MUTE, CMD_MUTE, 2, CMD_OPER);
98107
CommandAdd(modinfo->handle, MSG_UNMUTE, CMD_UNMUTE, 2, CMD_OPER);
108+
HookAddVoid(modinfo->handle, HOOKTYPE_NEW_MESSAGE, 0, mtag_add_muted);
99109
HookAdd(modinfo->handle, HOOKTYPE_CAN_SEND_TO_CHANNEL, -1, mutecheck_chmsg);
100110
HookAdd(modinfo->handle, HOOKTYPE_CAN_SEND_TO_USER, -1, mutecheck_usermsg);
101111
HookAdd(modinfo->handle, HOOKTYPE_CONFIGRUN, 0, mute_configrun);
@@ -140,6 +150,26 @@ static void send_to_client_lol(Client *client, char **p)
140150
sendto_one(client, NULL, ":%s %03d %s :%s", me.name, RPL_TEXT, client->name, *p);
141151
}
142152

153+
void mtag_add_muted(Client *client, MessageTag *recv_mtags, MessageTag **mtag_list, const char *signature)
154+
{
155+
MessageTag *m;
156+
157+
if (IsUser(client) && IsMuted(client))
158+
{
159+
MessageTag *m = find_mtag(recv_mtags, MTAG_MUTED);
160+
if (m)
161+
{
162+
m = duplicate_mtag(m);
163+
} else {
164+
165+
m = safe_alloc(sizeof(MessageTag));
166+
safe_strdup(m->name, MTAG_MUTED);
167+
m->value = NULL;
168+
}
169+
AddListItem(m, *mtag_list);
170+
}
171+
}
172+
143173
static char *help_mute[] = {
144174
"***** /MUTE *****",
145175
"-",
@@ -193,7 +223,7 @@ CMD_FUNC(CMD_MUTE)
193223

194224
if (parc < 2)
195225
{
196-
sendnumeric(client, ERR_NEEDMOREPARAMS, "MUTE");
226+
sendnumeric(client, ERR_NEEDMOREPARAMS, MSG_MUTE);
197227
return;
198228
}
199229

@@ -233,12 +263,12 @@ CMD_FUNC(CMD_MUTE)
233263
}
234264
if (IsOper(target) && client != target) // let them mute themselves why not
235265
{
236-
sendnumeric(client, ERR_CANNOTDOCOMMAND, "MUTE", "Permission denied!");
266+
sendnumeric(client, ERR_CANNOTDOCOMMAND, MSG_MUTE, "Permission denied!");
237267
return;
238268
}
239269
if (IsMuted(target))
240270
{
241-
sendnumeric(client, ERR_CANNOTDOCOMMAND, "MUTE", "That user is already muted");
271+
sendnumeric(client, ERR_CANNOTDOCOMMAND, MSG_MUTE, "That user is already muted");
242272
return;
243273
}
244274
Mute(target);
@@ -255,7 +285,7 @@ CMD_FUNC(CMD_UNMUTE)
255285

256286
if (parc < 2)
257287
{
258-
sendnumeric(client, ERR_NEEDMOREPARAMS, "UMUTE");
288+
sendnumeric(client, ERR_NEEDMOREPARAMS, MSG_UNMUTE);
259289
return;
260290
}
261291

@@ -271,12 +301,12 @@ CMD_FUNC(CMD_UNMUTE)
271301
}
272302
if (IsOper(target) && target != client)
273303
{
274-
sendnumeric(client, ERR_CANNOTDOCOMMAND, "UNMUTE", "Permission denied!");
304+
sendnumeric(client, ERR_CANNOTDOCOMMAND, MSG_UNMUTE, "Permission denied!");
275305
return;
276306
}
277307
if (!IsMuted(target))
278308
{
279-
sendnumeric(client, ERR_CANNOTDOCOMMAND, "UNMUTE", "That user was not muted");
309+
sendnumeric(client, ERR_CANNOTDOCOMMAND, MSG_UNMUTE, "That user was not muted");
280310
return;
281311
}
282312
Unmute(target);
@@ -474,3 +504,20 @@ int who_the_hell_be_muted_lol(Client *client, Client *target, NameValuePrioList
474504

475505
return HOOK_CONTINUE;
476506
}
507+
508+
int muted_mtag_is_ok(Client *client, const char *name, const char *value)
509+
{
510+
if (IsServer(client))
511+
return 1;
512+
513+
return 0;
514+
}
515+
516+
int muted_mtag_should_send_to_client(Client *target)
517+
{
518+
if (IsServer(target) || IsOper(target))
519+
return 1;
520+
return 0;
521+
522+
523+
}

0 commit comments

Comments
 (0)