Changeset 46 in code for trunk/downstream.go


Ignore:
Timestamp:
Feb 7, 2020, 12:08:27 PM (5 years ago)
Author:
contact
Message:

Handle downstream MODE messages

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r45 r46  
    247247                        uc.messages <- msg
    248248                })
     249        case "MODE":
     250                var name string
     251                if err := parseMessageParams(msg, &name); err != nil {
     252                        return err
     253                }
     254
     255                var modeStr string
     256                if len(msg.Params) > 1 {
     257                        modeStr = msg.Params[1]
     258                }
     259
     260                if msg.Prefix.Name != name {
     261                        ch, err := c.user.getChannel(name)
     262                        if err != nil {
     263                                return err
     264                        }
     265
     266                        if modeStr != "" {
     267                                ch.conn.messages <- msg
     268                        } else {
     269                                c.messages <- &irc.Message{
     270                                        Prefix:  c.srv.prefix(),
     271                                        Command: irc.RPL_CHANNELMODEIS,
     272                                        Params:  []string{ch.Name, string(ch.modes)},
     273                                }
     274                        }
     275                } else {
     276                        if name != c.nick {
     277                                return ircError{&irc.Message{
     278                                        Command: irc.ERR_USERSDONTMATCH,
     279                                        Params:  []string{c.nick, "Cannot change mode for other users"},
     280                                }}
     281                        }
     282
     283                        if modeStr != "" {
     284                                c.user.forEachUpstream(func(uc *upstreamConn) {
     285                                        uc.messages <- msg
     286                                })
     287                        } else {
     288                                c.messages <- &irc.Message{
     289                                        Prefix:  c.srv.prefix(),
     290                                        Command: irc.RPL_UMODEIS,
     291                                        Params:  []string{""}, // TODO
     292                                }
     293                        }
     294                }
    249295        default:
    250296                c.logger.Printf("unhandled message: %v", msg)
Note: See TracChangeset for help on using the changeset viewer.