Changeset 35 in code for trunk/upstream.go


Ignore:
Timestamp:
Feb 7, 2020, 10:01:53 AM (5 years ago)
Author:
contact
Message:

Handle channel mode changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/upstream.go

    r34 r35  
    1919        TopicTime time.Time
    2020        Status    channelStatus
     21        modes     modeSet
    2122        Members   map[string]membership
    2223        complete  bool
     
    106107                        return newNeedMoreParamsError(msg.Command)
    107108                }
    108                 if nick := msg.Params[0]; nick != c.upstream.Nick {
    109                         return fmt.Errorf("received MODE message for unknow nick %q", nick)
    110                 }
    111                 return c.modes.Apply(msg.Params[1])
     109                name := msg.Params[0]
     110                modeStr := msg.Params[1]
     111
     112                if name == msg.Prefix.Name { // user mode change
     113                        if name != c.upstream.Nick {
     114                                return fmt.Errorf("received MODE message for unknow nick %q", name)
     115                        }
     116                        return c.modes.Apply(modeStr)
     117                } else { // channel mode change
     118                        ch, err := c.getChannel(name)
     119                        if err != nil {
     120                                return err
     121                        }
     122                        if err := ch.modes.Apply(modeStr); err != nil {
     123                                return err
     124                        }
     125
     126                        c.srv.lock.Lock()
     127                        for _, dc := range c.srv.downstreamConns {
     128                                dc.messages <- msg
     129                        }
     130                        c.srv.lock.Unlock()
     131                }
    112132        case "NOTICE":
    113133                c.logger.Print(msg)
Note: See TracChangeset for help on using the changeset viewer.