Merge pull request #30 from edmund-huber/user_mode

fix up MODE behavior to allow /mode <not-your-nick> and show per-channel modes, fixes #29
This commit is contained in:
Jeremy Latt 2014-03-29 11:49:13 -07:00
commit a92ff15c34
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 { 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) { 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) 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) return NewStringReply(client, MODE, "%s :%s", target.Nick(), changes)
} }
func RplCurrentMode(client *Client, target *Client) string {
globalFlags := "global:"
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 := NewText(fmt.Sprintf("user %s has %s%s", target.nick, globalFlags, perChannelFlags))
return RplNotice(client.server, client, response)
}
func RplChannelMode(client *Client, channel *Channel, func RplChannelMode(client *Client, channel *Channel,
changes ChannelModeChanges) string { changes ChannelModeChanges) string {
return NewStringReply(client, MODE, "%s %s", channel, changes) return NewStringReply(client, MODE, "%s %s", channel, changes)