Browse Source

fix #1161

tags/v2.2.0-rc1
Shivaram Lingamneni 4 years ago
parent
commit
696980367d
3 changed files with 16 additions and 22 deletions
  1. 7
    0
      irc/channel.go
  2. 9
    2
      irc/handlers.go
  3. 0
    20
      irc/server.go

+ 7
- 0
irc/channel.go View File

1460
 		rb.Add(nil, inviter.server.name, RPL_AWAY, cnick, tnick, invitee.AwayMessage())
1460
 		rb.Add(nil, inviter.server.name, RPL_AWAY, cnick, tnick, invitee.AwayMessage())
1461
 	}
1461
 	}
1462
 }
1462
 }
1463
+
1464
+// data for RPL_LIST
1465
+func (channel *Channel) listData() (memberCount int, name, topic string) {
1466
+	channel.stateMutex.RLock()
1467
+	defer channel.stateMutex.RUnlock()
1468
+	return len(channel.members), channel.name, channel.topic
1469
+}

+ 9
- 2
irc/handlers.go View File

1530
 		}
1530
 		}
1531
 	}
1531
 	}
1532
 
1532
 
1533
+	nick := client.Nick()
1534
+	rplList := func(channel *Channel) {
1535
+		if members, name, topic := channel.listData(); members != 0 {
1536
+			rb.Add(nil, client.server.name, RPL_LIST, nick, name, strconv.Itoa(members), topic)
1537
+		}
1538
+	}
1539
+
1533
 	clientIsOp := client.HasMode(modes.Operator)
1540
 	clientIsOp := client.HasMode(modes.Operator)
1534
 	if len(channels) == 0 {
1541
 	if len(channels) == 0 {
1535
 		for _, channel := range server.channels.Channels() {
1542
 		for _, channel := range server.channels.Channels() {
1537
 				continue
1544
 				continue
1538
 			}
1545
 			}
1539
 			if matcher.Matches(channel) {
1546
 			if matcher.Matches(channel) {
1540
-				client.RplList(channel, rb)
1547
+				rplList(channel)
1541
 			}
1548
 			}
1542
 		}
1549
 		}
1543
 	} else {
1550
 	} else {
1555
 				continue
1562
 				continue
1556
 			}
1563
 			}
1557
 			if matcher.Matches(channel) {
1564
 			if matcher.Matches(channel) {
1558
-				client.RplList(channel, rb)
1565
+				rplList(channel)
1559
 			}
1566
 			}
1560
 		}
1567
 		}
1561
 	}
1568
 	}

+ 0
- 20
irc/server.go View File

967
 	return true
967
 	return true
968
 }
968
 }
969
 
969
 
970
-// RplList returns the RPL_LIST numeric for the given channel.
971
-func (target *Client) RplList(channel *Channel, rb *ResponseBuffer) {
972
-	// get the correct number of channel members
973
-	var memberCount int
974
-	if target.HasMode(modes.Operator) || channel.hasClient(target) {
975
-		memberCount = len(channel.Members())
976
-	} else {
977
-		for _, member := range channel.Members() {
978
-			if !member.HasMode(modes.Invisible) {
979
-				memberCount++
980
-			}
981
-		}
982
-	}
983
-
984
-	// #704: some channels are kept around even with no members
985
-	if memberCount != 0 {
986
-		rb.Add(nil, target.server.name, RPL_LIST, target.nick, channel.name, strconv.Itoa(memberCount), channel.topic)
987
-	}
988
-}
989
-
990
 var (
970
 var (
991
 	infoString1 = strings.Split(`      ▄▄▄   ▄▄▄·  ▄▄ •        ▐ ▄
971
 	infoString1 = strings.Split(`      ▄▄▄   ▄▄▄·  ▄▄ •        ▐ ▄
992
 ▪     ▀▄ █·▐█ ▀█ ▐█ ▀ ▪▪     •█▌▐█▪
972
 ▪     ▀▄ █·▐█ ▀█ ▐█ ▀ ▪▪     •█▌▐█▪

Loading…
Cancel
Save