diff --git a/irc/client.go b/irc/client.go index 0d2a556d..07716fd5 100644 --- a/irc/client.go +++ b/irc/client.go @@ -255,11 +255,17 @@ func (c *Client) Id() string { } // Friends refers to clients that share a channel with this client. -func (client *Client) Friends() ClientSet { +func (client *Client) Friends(Capabilities ...Capability) ClientSet { friends := make(ClientSet) friends.Add(client) for channel := range client.channels { for member := range channel.members { + // make sure they have all the required caps + for _, Cap := range Capabilities { + if !member.capabilities[Cap] { + continue + } + } friends.Add(member) } } diff --git a/irc/server.go b/irc/server.go index ebbe068e..10a17641 100644 --- a/irc/server.go +++ b/irc/server.go @@ -862,7 +862,7 @@ func awayHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool { client.Send(nil, server.name, "MODE", client.nick, client.nick, modech.String()) // dispatch away-notify - for friend := range client.Friends() { + for friend := range client.Friends(AwayNotify) { if client.flags[Away] { friend.SendFromClient(client, nil, client.nickMaskString, "AWAY", client.awayMessage) } else {