channel: Send channel NOTICEs properly

This commit is contained in:
Daniel Oaks 2016-11-29 21:41:26 +10:00
parent 7068072292
commit 5eafd2656e
2 changed files with 12 additions and 16 deletions

View File

@ -321,6 +321,15 @@ func (channel *Channel) CanSpeak(client *Client) bool {
// PrivMsg sends a private message to everyone in this channel. // PrivMsg sends a private message to everyone in this channel.
func (channel *Channel) PrivMsg(minPrefix *ChannelMode, clientOnlyTags *map[string]ircmsg.TagValue, client *Client, message string) { func (channel *Channel) PrivMsg(minPrefix *ChannelMode, clientOnlyTags *map[string]ircmsg.TagValue, client *Client, message string) {
channel.sendMessage("PRIVMSG", minPrefix, clientOnlyTags, client, message)
}
// Notice sends a private message to everyone in this channel.
func (channel *Channel) Notice(minPrefix *ChannelMode, clientOnlyTags *map[string]ircmsg.TagValue, client *Client, message string) {
channel.sendMessage("NOTICE", minPrefix, clientOnlyTags, client, message)
}
func (channel *Channel) sendMessage(cmd string, minPrefix *ChannelMode, clientOnlyTags *map[string]ircmsg.TagValue, client *Client, message string) {
if !channel.CanSpeak(client) { if !channel.CanSpeak(client) {
client.Send(nil, client.server.name, ERR_CANNOTSENDTOCHAN, channel.name, "Cannot send to channel") client.Send(nil, client.server.name, ERR_CANNOTSENDTOCHAN, channel.name, "Cannot send to channel")
return return
@ -339,9 +348,9 @@ func (channel *Channel) PrivMsg(minPrefix *ChannelMode, clientOnlyTags *map[stri
continue continue
} }
if member.capabilities[MessageTags] { if member.capabilities[MessageTags] {
member.SendFromClient(client, clientOnlyTags, client.nickMaskString, "PRIVMSG", channel.name, message) member.SendFromClient(client, clientOnlyTags, client.nickMaskString, cmd, channel.name, message)
} else { } else {
member.SendFromClient(client, nil, client.nickMaskString, "PRIVMSG", channel.name, message) member.SendFromClient(client, nil, client.nickMaskString, cmd, channel.name, message)
} }
} }
} }
@ -455,19 +464,6 @@ func (channel *Channel) applyModeMask(client *Client, mode ChannelMode, op ModeO
return false return false
} }
func (channel *Channel) Notice(client *Client, message string) {
if !channel.CanSpeak(client) {
client.Send(nil, client.server.name, ERR_CANNOTSENDTOCHAN, channel.name, "Cannot send to channel")
return
}
for member := range channel.members {
if member == client {
continue
}
member.SendFromClient(client, nil, client.nickMaskString, "NOTICE", channel.name, message)
}
}
func (channel *Channel) Quit(client *Client) { func (channel *Channel) Quit(client *Client) {
channel.members.Remove(client) channel.members.Remove(client)
client.channels.Remove(channel) client.channels.Remove(channel)

View File

@ -1314,7 +1314,7 @@ func noticeHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
// errors silently ignored with NOTICE as per RFC // errors silently ignored with NOTICE as per RFC
continue continue
} }
channel.PrivMsg(lowestPrefix, clientOnlyTags, client, message) channel.Notice(lowestPrefix, clientOnlyTags, client, message)
} else { } else {
target, err := CasefoldName(targetString) target, err := CasefoldName(targetString)
if err != nil { if err != nil {