Просмотр исходного кода

Merge pull request #2064 from slingamn/issue2063

fix #2063
tags/v2.12.0-rc1
Shivaram Lingamneni 1 год назад
Родитель
Сommit
bf33fba33a
Аккаунт пользователя с таким Email не найден
2 измененных файлов: 11 добавлений и 5 удалений
  1. 10
    4
      irc/channel.go
  2. 1
    1
      irctest

+ 10
- 4
irc/channel.go Просмотреть файл

@@ -1228,20 +1228,26 @@ func (channel *Channel) CanSpeak(client *Client) (bool, modes.Mode) {
1228 1228
 	channel.stateMutex.RLock()
1229 1229
 	memberData, hasClient := channel.members[client]
1230 1230
 	channel.stateMutex.RUnlock()
1231
-	clientModes := memberData.modes
1231
+
1232
+	highestMode := func() modes.Mode {
1233
+		if !hasClient {
1234
+			return modes.Mode(0)
1235
+		}
1236
+		return memberData.modes.HighestChannelUserMode()
1237
+	}
1232 1238
 
1233 1239
 	if !hasClient && channel.flags.HasMode(modes.NoOutside) {
1234 1240
 		// TODO: enforce regular +b bans on -n channels?
1235 1241
 		return false, modes.NoOutside
1236 1242
 	}
1237
-	if channel.isMuted(client) && clientModes.HighestChannelUserMode() == modes.Mode(0) {
1243
+	if channel.isMuted(client) && highestMode() == modes.Mode(0) {
1238 1244
 		return false, modes.BanMask
1239 1245
 	}
1240
-	if channel.flags.HasMode(modes.Moderated) && clientModes.HighestChannelUserMode() == modes.Mode(0) {
1246
+	if channel.flags.HasMode(modes.Moderated) && highestMode() == modes.Mode(0) {
1241 1247
 		return false, modes.Moderated
1242 1248
 	}
1243 1249
 	if channel.flags.HasMode(modes.RegisteredOnlySpeak) && client.Account() == "" &&
1244
-		clientModes.HighestChannelUserMode() == modes.Mode(0) {
1250
+		highestMode() == modes.Mode(0) {
1245 1251
 		return false, modes.RegisteredOnlySpeak
1246 1252
 	}
1247 1253
 	return true, modes.Mode('?')

+ 1
- 1
irctest

@@ -1 +1 @@
1
-Subproject commit 3b7f81e22c317eae885f5a942767ba4f6a30414e
1
+Subproject commit bb8a6b6c3d3e55c1146c3c9f8224983d88a42b17

Загрузка…
Отмена
Сохранить