浏览代码

fix #1178

tags/v2.4.0-rc1
Shivaram Lingamneni 3 年前
父节点
当前提交
5a9e79f06c
共有 3 个文件被更改,包括 18 次插入3 次删除
  1. 14
    2
      irc/channel.go
  2. 2
    0
      irc/help.go
  3. 2
    1
      irc/modes/modes.go

+ 14
- 2
irc/channel.go 查看文件

1287
 		chname = fmt.Sprintf("%s%s", modes.ChannelModePrefixes[minPrefixMode], chname)
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
 	// send echo-message
1302
 	// send echo-message
1291
 	rb.addEchoMessage(clientOnlyTags, details.nickMask, details.accountName, command, chname, message)
1303
 	rb.addEchoMessage(clientOnlyTags, details.nickMask, details.accountName, command, chname, message)
1292
 
1304
 
1293
 	for _, member := range channel.Members() {
1305
 	for _, member := range channel.Members() {
1294
 		if minPrefixMode != modes.Mode(0) && !channel.ClientIsAtLeast(member, minPrefixMode) {
1306
 		if minPrefixMode != modes.Mode(0) && !channel.ClientIsAtLeast(member, minPrefixMode) {
1295
-			// STATUSMSG
1307
+			// STATUSMSG or OpModerated
1296
 			continue
1308
 			continue
1297
 		}
1309
 		}
1298
 
1310
 
1320
 		}
1332
 		}
1321
 	}
1333
 	}
1322
 
1334
 
1323
-	// #959: don't save STATUSMSG
1335
+	// #959: don't save STATUSMSG (or OpModerated)
1324
 	if minPrefixMode == modes.Mode(0) {
1336
 	if minPrefixMode == modes.Mode(0) {
1325
 		channel.AddHistoryItem(history.Item{
1337
 		channel.AddHistoryItem(history.Item{
1326
 			Type:        histType,
1338
 			Type:        histType,

+ 2
- 0
irc/help.go 查看文件

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

+ 2
- 1
irc/modes/modes.go 查看文件

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

正在加载...
取消
保存