Browse Source

fix #1178

tags/v2.4.0-rc1
Shivaram Lingamneni 3 years ago
parent
commit
5a9e79f06c
3 changed files with 18 additions and 3 deletions
  1. 14
    2
      irc/channel.go
  2. 2
    0
      irc/help.go
  3. 2
    1
      irc/modes/modes.go

+ 14
- 2
irc/channel.go View File

@@ -1287,12 +1287,24 @@ func (channel *Channel) SendSplitMessage(command string, minPrefixMode modes.Mod
1287 1287
 		chname = fmt.Sprintf("%s%s", modes.ChannelModePrefixes[minPrefixMode], chname)
1288 1288
 	}
1289 1289
 
1290
+	if channel.flags.HasMode(modes.OpModerated) {
1291
+		channel.stateMutex.RLock()
1292
+		cuModes := channel.members[client]
1293
+		channel.stateMutex.RUnlock()
1294
+		if cuModes.HighestChannelUserMode() == modes.Mode(0) {
1295
+			// max(statusmsg_minmode, halfop)
1296
+			if minPrefixMode == modes.Mode(0) || minPrefixMode == modes.Voice {
1297
+				minPrefixMode = modes.Halfop
1298
+			}
1299
+		}
1300
+	}
1301
+
1290 1302
 	// send echo-message
1291 1303
 	rb.addEchoMessage(clientOnlyTags, details.nickMask, details.accountName, command, chname, message)
1292 1304
 
1293 1305
 	for _, member := range channel.Members() {
1294 1306
 		if minPrefixMode != modes.Mode(0) && !channel.ClientIsAtLeast(member, minPrefixMode) {
1295
-			// STATUSMSG
1307
+			// STATUSMSG or OpModerated
1296 1308
 			continue
1297 1309
 		}
1298 1310
 
@@ -1320,7 +1332,7 @@ func (channel *Channel) SendSplitMessage(command string, minPrefixMode modes.Mod
1320 1332
 		}
1321 1333
 	}
1322 1334
 
1323
-	// #959: don't save STATUSMSG
1335
+	// #959: don't save STATUSMSG (or OpModerated)
1324 1336
 	if minPrefixMode == modes.Mode(0) {
1325 1337
 		channel.AddHistoryItem(history.Item{
1326 1338
 			Type:        histType,

+ 2
- 0
irc/help.go View File

@@ -56,6 +56,8 @@ Oragono supports the following channel modes:
56 56
   +C  |  Clients are blocked from sending CTCP messages in the channel.
57 57
   +u  |  Auditorium mode: JOIN, PART, QUIT, NAMES, and WHO are hidden
58 58
          hidden from unvoiced clients.
59
+  +U  |  Op-moderated mode: messages from unprivileged clients are sent
60
+         only to channel operators.
59 61
 
60 62
 = Prefixes =
61 63
 

+ 2
- 1
irc/modes/modes.go View File

@@ -23,7 +23,7 @@ var (
23 23
 	SupportedChannelModes = Modes{
24 24
 		BanMask, ChanRoleplaying, ExceptMask, InviteMask, InviteOnly, Key,
25 25
 		Moderated, NoOutside, OpOnlyTopic, RegisteredOnly, RegisteredOnlySpeak,
26
-		Secret, UserLimit, NoCTCP, Auditorium,
26
+		Secret, UserLimit, NoCTCP, Auditorium, OpModerated,
27 27
 	}
28 28
 )
29 29
 
@@ -128,6 +128,7 @@ const (
128 128
 	Secret              Mode = 's' // flag
129 129
 	UserLimit           Mode = 'l' // flag arg
130 130
 	NoCTCP              Mode = 'C' // flag
131
+	OpModerated         Mode = 'U' // flag
131 132
 )
132 133
 
133 134
 var (

Loading…
Cancel
Save