mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-10 22:19: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:
commit
a92ff15c34
@ -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) {
|
||||
|
17
irc/reply.go
17
irc/reply.go
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user