commit ef46f82

Hubert Hirtz  ·  2020-08-17 18:30:36 +0000 UTC
parent 190343e
irc: Send NAMES when multi-prefix is negociated
1 files changed,  +21, -12
+21, -12
 1@@ -469,18 +469,6 @@ func (s *Session) handleStart(msg Message) (err error) {
 2 					return
 3 				}
 4 			}
 5-		case "ACK":
 6-			for _, c := range strings.Split(msg.Params[2], " ") {
 7-				s.enabledCaps[c] = struct{}{}
 8-
 9-				if s.auth != nil && c == "sasl" {
10-					h := s.auth.Handshake()
11-					err = s.send("AUTHENTICATE %s\r\n", h)
12-					if err != nil {
13-						return
14-					}
15-				}
16-			}
17 		default:
18 			s.handle(msg)
19 		}
20@@ -535,6 +523,27 @@ func (s *Session) handle(msg Message) (err error) {
21 		case "ACK":
22 			for _, c := range strings.Split(msg.Params[2], " ") {
23 				s.enabledCaps[c] = struct{}{}
24+
25+				if s.auth != nil && c == "sasl" {
26+					h := s.auth.Handshake()
27+					err = s.send("AUTHENTICATE %s\r\n", h)
28+					if err != nil {
29+						return
30+					}
31+				} else if len(s.channels) != 0 && c == "multi-prefix" {
32+					// TODO merge NAMES commands
33+					var sb strings.Builder
34+					sb.Grow(512)
35+					for _, c := range s.channels {
36+						sb.WriteString("NAMES ")
37+						sb.WriteString(c.Name)
38+						sb.WriteString("\r\n")
39+					}
40+					err = s.send(sb.String())
41+					if err != nil {
42+						return
43+					}
44+				}
45 			}
46 		case "NAK":
47 			for _, c := range strings.Split(msg.Params[2], " ") {