3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-29 07:29:31 +01:00

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 {
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 := "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,
changes ChannelModeChanges) string {
return NewStringReply(client, MODE, "%s %s", channel, changes)