summaryrefslogtreecommitdiff
path: root/irc/session.go
diff options
context:
space:
mode:
authordelthas <delthas@dille.cc>2021-11-16 18:19:19 +0100
committerHubert Hirtz <hubert@hirtz.pm>2021-11-16 22:28:50 +0100
commit916a9c82d67d81a83fa50b2e5e0c80774dd28cb2 (patch)
treeddb30ec1fc8fd262f7763e1fd24ca4a2be01d8ac /irc/session.go
parentFix 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.go34
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