@@ -19,13 +19,13 @@ module
19
19
}
20
20
*** <<<MODULE MANAGER END>>>
21
21
*/
22
-
22
+ #define MTAG_MUTED "valware.uk/muted"
23
23
#include "unrealircd.h"
24
24
25
25
ModuleHeader MOD_HEADER
26
26
= {
27
27
"third/mute" ,
28
- "1.2 " ,
28
+ "1.4 " ,
29
29
"Globally mute a user" ,
30
30
"Valware" ,
31
31
"unrealircd-6" ,
@@ -56,7 +56,7 @@ typedef struct
56
56
57
57
static muteconf ourconf ;
58
58
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 );
60
60
void mute_free (ModData * m );
61
61
const char * mute_serialize (ModData * m );
62
62
void mute_unserialize (const char * str , ModData * m );
@@ -67,20 +67,29 @@ int mutecheck_usermsg(Client *client, Client *target, const char **text, const c
67
67
int mute_configtest (ConfigFile * cf , ConfigEntry * ce , int type , int * errs );
68
68
int mute_configrun (ConfigFile * cf , ConfigEntry * ce , int type );
69
69
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 );
70
72
71
73
ModDataInfo * mute_md ;
72
74
MOD_TEST ()
73
75
{
74
76
memset (& ourconf , 0 , sizeof (ourconf ));
75
-
76
77
HookAdd (modinfo -> handle , HOOKTYPE_CONFIGTEST , 0 , mute_configtest );
77
78
return MOD_SUCCESS ;
78
79
}
79
80
MOD_INIT () {
80
- ModDataInfo mreq ;
81
+ ModDataInfo mreq ; // For MD
82
+ MessageTagHandlerInfo mtag ; // For message-tagging
81
83
82
84
MARK_AS_GLOBAL_MODULE (modinfo );
83
85
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
+
84
93
setconf ();
85
94
memset (& mreq , 0 , sizeof (mreq ));
86
95
mreq .name = "mute" ;
@@ -96,6 +105,7 @@ MOD_INIT() {
96
105
97
106
CommandAdd (modinfo -> handle , MSG_MUTE , CMD_MUTE , 2 , CMD_OPER );
98
107
CommandAdd (modinfo -> handle , MSG_UNMUTE , CMD_UNMUTE , 2 , CMD_OPER );
108
+ HookAddVoid (modinfo -> handle , HOOKTYPE_NEW_MESSAGE , 0 , mtag_add_muted );
99
109
HookAdd (modinfo -> handle , HOOKTYPE_CAN_SEND_TO_CHANNEL , -1 , mutecheck_chmsg );
100
110
HookAdd (modinfo -> handle , HOOKTYPE_CAN_SEND_TO_USER , -1 , mutecheck_usermsg );
101
111
HookAdd (modinfo -> handle , HOOKTYPE_CONFIGRUN , 0 , mute_configrun );
@@ -140,6 +150,26 @@ static void send_to_client_lol(Client *client, char **p)
140
150
sendto_one (client , NULL , ":%s %03d %s :%s" , me .name , RPL_TEXT , client -> name , * p );
141
151
}
142
152
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
+
143
173
static char * help_mute [] = {
144
174
"***** /MUTE *****" ,
145
175
"-" ,
@@ -193,7 +223,7 @@ CMD_FUNC(CMD_MUTE)
193
223
194
224
if (parc < 2 )
195
225
{
196
- sendnumeric (client , ERR_NEEDMOREPARAMS , "MUTE" );
226
+ sendnumeric (client , ERR_NEEDMOREPARAMS , MSG_MUTE );
197
227
return ;
198
228
}
199
229
@@ -233,12 +263,12 @@ CMD_FUNC(CMD_MUTE)
233
263
}
234
264
if (IsOper (target ) && client != target ) // let them mute themselves why not
235
265
{
236
- sendnumeric (client , ERR_CANNOTDOCOMMAND , "MUTE" , "Permission denied!" );
266
+ sendnumeric (client , ERR_CANNOTDOCOMMAND , MSG_MUTE , "Permission denied!" );
237
267
return ;
238
268
}
239
269
if (IsMuted (target ))
240
270
{
241
- sendnumeric (client , ERR_CANNOTDOCOMMAND , "MUTE" , "That user is already muted" );
271
+ sendnumeric (client , ERR_CANNOTDOCOMMAND , MSG_MUTE , "That user is already muted" );
242
272
return ;
243
273
}
244
274
Mute (target );
@@ -255,7 +285,7 @@ CMD_FUNC(CMD_UNMUTE)
255
285
256
286
if (parc < 2 )
257
287
{
258
- sendnumeric (client , ERR_NEEDMOREPARAMS , "UMUTE" );
288
+ sendnumeric (client , ERR_NEEDMOREPARAMS , MSG_UNMUTE );
259
289
return ;
260
290
}
261
291
@@ -271,12 +301,12 @@ CMD_FUNC(CMD_UNMUTE)
271
301
}
272
302
if (IsOper (target ) && target != client )
273
303
{
274
- sendnumeric (client , ERR_CANNOTDOCOMMAND , "UNMUTE" , "Permission denied!" );
304
+ sendnumeric (client , ERR_CANNOTDOCOMMAND , MSG_UNMUTE , "Permission denied!" );
275
305
return ;
276
306
}
277
307
if (!IsMuted (target ))
278
308
{
279
- sendnumeric (client , ERR_CANNOTDOCOMMAND , "UNMUTE" , "That user was not muted" );
309
+ sendnumeric (client , ERR_CANNOTDOCOMMAND , MSG_UNMUTE , "That user was not muted" );
280
310
return ;
281
311
}
282
312
Unmute (target );
@@ -474,3 +504,20 @@ int who_the_hell_be_muted_lol(Client *client, Client *target, NameValuePrioList
474
504
475
505
return HOOK_CONTINUE ;
476
506
}
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