fix up MODE behavior to allow /mode <not-your-nick> and show per-channel modes, fixes #29

This commit is contained in:
Edmund Huber 2014-03-22 22:15:52 +01:00
parent 37e15d7f62
commit e1c235a9ea
2 changed files with 20 additions and 3 deletions

View File

@ -145,10 +145,12 @@ func (m *ModeCommand) HandleServer(s *Server) {
}
}
// Who should get these replies?
if len(changes) > 0 {
client.Reply(RplMode(client, target, changes))
client.Reply(RplModeChanges(client, target, changes))
} else if client == target {
client.RplUModeIs(client)
}
client.Reply(RplCurrentMode(client, target))
}
func (msg *ChannelModeCommand) HandleServer(server *Server) {

View File

@ -119,10 +119,25 @@ func RplPart(client *Client, channel *Channel, message Text) string {
return NewStringReply(client, PART, "%s :%s", channel, message)
}
func RplMode(client *Client, target *Client, changes ModeChanges) string {
func RplModeChanges(client *Client, target *Client, changes ModeChanges) string {
return NewStringReply(client, MODE, "%s :%s", target.Nick(), changes)
}
func RplCurrentMode(client *Client, target *Client) string {
globalFlags := ""
for mode, _ := range target.flags {
globalFlags += mode.String()
}
perChannelFlags := ""
for channel, _ := range target.channels {
perChannelFlags += fmt.Sprintf(" %s:%s", channel.name, channel.members[target])
}
response := fmt.Sprintf("All user modes: %s%s", globalFlags, perChannelFlags)
return NewStringReply(client, NOTICE, "%s :%s", target.Nick(), response)
}
func RplChannelMode(client *Client, channel *Channel,
changes ChannelModeChanges) string {
return NewStringReply(client, MODE, "%s %s", channel, changes)