From 0eebd6273cbee2c63ce2e75ad9eca553c0b13d5d Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Thu, 13 Oct 2016 18:08:08 +1000 Subject: [PATCH] AWAY: Only dispatch AWAY when cap-notify is used --- irc/client.go | 8 +++++++- irc/server.go | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) 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 {