Changeset 159 in code for trunk/upstream.go


Ignore:
Timestamp:
Mar 25, 2020, 11:15:26 PM (5 years ago)
Author:
delthas
Message:

Add KICK support

Downstream and upstream message handling are slightly different because
downstreams can send KICK messages with multiple channels or users,
while upstreams can only send KICK messages with one channel and one
user (according to the RFC).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/upstream.go

    r157 r159  
    583583                        })
    584584                }
     585        case "KICK":
     586                if msg.Prefix == nil {
     587                        return fmt.Errorf("expected a prefix")
     588                }
     589
     590                var channel, user string
     591                if err := parseMessageParams(msg, &channel, &user); err != nil {
     592                        return err
     593                }
     594
     595                var reason string
     596                if len(msg.Params) > 2 {
     597                        reason = msg.Params[1]
     598                }
     599
     600                if user == uc.nick {
     601                        uc.logger.Printf("kicked from channel %q by %s", channel, msg.Prefix.Name)
     602                        delete(uc.channels, channel)
     603                } else {
     604                        ch, err := uc.getChannel(channel)
     605                        if err != nil {
     606                                return err
     607                        }
     608                        delete(ch.Members, user)
     609                }
     610
     611                uc.forEachDownstream(func(dc *downstreamConn) {
     612                        params := []string{dc.marshalChannel(uc, channel), dc.marshalNick(uc, user)}
     613                        if reason != "" {
     614                                params = append(params, reason)
     615                        }
     616                        dc.SendMessage(&irc.Message{
     617                                Prefix:  dc.marshalUserPrefix(uc, msg.Prefix),
     618                                Command: "KICK",
     619                                Params:  params,
     620                        })
     621                })
    585622        case "QUIT":
    586623                if msg.Prefix == nil {
Note: See TracChangeset for help on using the changeset viewer.