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,3 +1460,10 @@ func (channel *Channel) Invite(invitee *Client, inviter *Client, rb *ResponseBuf
1460 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,6 +1530,13 @@ func listHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
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 1540
 	clientIsOp := client.HasMode(modes.Operator)
1534 1541
 	if len(channels) == 0 {
1535 1542
 		for _, channel := range server.channels.Channels() {
@@ -1537,7 +1544,7 @@ func listHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
1537 1544
 				continue
1538 1545
 			}
1539 1546
 			if matcher.Matches(channel) {
1540
-				client.RplList(channel, rb)
1547
+				rplList(channel)
1541 1548
 			}
1542 1549
 		}
1543 1550
 	} else {
@@ -1555,7 +1562,7 @@ func listHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
1555 1562
 				continue
1556 1563
 			}
1557 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,26 +967,6 @@ func (matcher *elistMatcher) Matches(channel *Channel) bool {
967 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 970
 var (
991 971
 	infoString1 = strings.Split(`      ▄▄▄   ▄▄▄·  ▄▄ •        ▐ ▄
992 972
 ▪     ▀▄ █·▐█ ▀█ ▐█ ▀ ▪▪     •█▌▐█▪

Loading…
Cancel
Save