commit 94b025d

Hubert Hirtz  ·  2020-10-19 12:25:14 +0000 UTC
parent 8fb22a1
Handle KICK messages
2 files changed,  +27, -2
+26, -1
 1@@ -700,7 +700,7 @@ func (s *Session) handle(msg Message) (err error) {
 2 				for u := range c.Members {
 3 					s.cleanUser(u)
 4 				}
 5-				s.evts <- SelfPartEvent{Channel: msg.Params[0]}
 6+				s.evts <- SelfPartEvent{Channel: c.Name}
 7 			}
 8 		} else if c, ok := s.channels[channelCf]; ok {
 9 			if u, ok := s.users[nickCf]; ok {
10@@ -715,6 +715,31 @@ func (s *Session) handle(msg Message) (err error) {
11 				}
12 			}
13 		}
14+	case "KICK":
15+		channelCf := s.Casemap(msg.Params[0])
16+		nickCf := s.Casemap(msg.Params[1])
17+
18+		if nickCf == s.nickCf {
19+			if c, ok := s.channels[channelCf]; ok {
20+				delete(s.channels, channelCf)
21+				for u := range c.Members {
22+					s.cleanUser(u)
23+				}
24+				s.evts <- SelfPartEvent{Channel: c.Name}
25+			}
26+		} else if c, ok := s.channels[channelCf]; ok {
27+			if u, ok := s.users[nickCf]; ok {
28+				delete(c.Members, u)
29+				s.cleanUser(u)
30+				s.typings.Done(channelCf, nickCf)
31+
32+				s.evts <- UserPartEvent{
33+					User:    u.Name.Copy(),
34+					Channel: c.Name,
35+					Time:    msg.TimeOrNow(),
36+				}
37+			}
38+		}
39 	case "QUIT":
40 		nickCf := s.Casemap(msg.Prefix.Name)
41 
+1, -1
1@@ -311,7 +311,7 @@ func (msg *Message) IsValid() bool {
2 		return 8 <= len(msg.Params)
3 	case "JOIN", "NICK", "PART", "TAGMSG":
4 		return 1 <= len(msg.Params) && msg.Prefix != nil
5-	case "PRIVMSG", "NOTICE", "TOPIC":
6+	case "KICK", "PRIVMSG", "NOTICE", "TOPIC":
7 		return 2 <= len(msg.Params) && msg.Prefix != nil
8 	case "QUIT":
9 		return msg.Prefix != nil