diff options
author | delthas <delthas@dille.cc> | 2021-11-16 18:19:19 +0100 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2021-11-16 22:28:50 +0100 |
commit | 916a9c82d67d81a83fa50b2e5e0c80774dd28cb2 (patch) | |
tree | ddb30ec1fc8fd262f7763e1fd24ca4a2be01d8ac /irc/session.go | |
parent | Fix part-ing a channel with duplicate name in other networks (diff) |
Add support for user buffers
Diffstat (limited to 'irc/session.go')
-rw-r--r-- | irc/session.go | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/irc/session.go b/irc/session.go index 881cc4d..7e1c664 100644 --- a/irc/session.go +++ b/irc/session.go @@ -218,20 +218,32 @@ func (s *Session) Users() []string { return users } -// Names returns the list of users in the given channel, or nil if this channel -// is not known by the session. +// Names returns the list of users in the given target, or nil if the target +// is not a known channel or nick in the session. // The list is sorted according to member name. -func (s *Session) Names(channel string) []Member { +func (s *Session) Names(target string) []Member { var names []Member - if c, ok := s.channels[s.Casemap(channel)]; ok { - names = make([]Member, 0, len(c.Members)) - for u, pl := range c.Members { - names = append(names, Member{ - PowerLevel: pl, - Name: u.Name.Copy(), - Away: u.Away, - }) + if s.IsChannel(target) { + if c, ok := s.channels[s.Casemap(target)]; ok { + names = make([]Member, 0, len(c.Members)) + for u, pl := range c.Members { + names = append(names, Member{ + PowerLevel: pl, + Name: u.Name.Copy(), + Away: u.Away, + }) + } } + } else if u, ok := s.users[s.Casemap(target)]; ok { + names = append(names, Member{ + Name: u.Name.Copy(), + Away: u.Away, + }) + names = append(names, Member{ + Name: &Prefix{ + Name: s.nick, + }, + }) } sort.Sort(members(names)) return names |