Changeset 42 in code for trunk


Ignore:
Timestamp:
Feb 7, 2020, 11:19:42 AM (5 years ago)
Author:
contact
Message:

Allow changing nickname

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r40 r42  
    235235func (c *downstreamConn) handleMessageRegistered(msg *irc.Message) error {
    236236        switch msg.Command {
    237         case "NICK", "USER":
     237        case "USER":
    238238                return ircError{&irc.Message{
    239239                        Command: irc.ERR_ALREADYREGISTERED,
    240                         Params: []string{
    241                                 c.nick,
    242                                 "You may not reregister",
    243                         },
     240                        Params:  []string{c.nick, "You may not reregister"},
    244241                }}
     242        case "NICK":
     243                c.user.forEachUpstream(func(uc *upstreamConn) {
     244                        uc.messages <- msg
     245                })
    245246        default:
    246247                c.logger.Printf("unhandled message: %v", msg)
    247248                return newUnknownCommandError(msg.Command)
    248249        }
    249 }
     250        return nil
     251}
  • trunk/upstream.go

    r40 r42  
    3939
    4040        registered bool
     41        nick       string
    4142        closed     bool
    4243        modes      modeSet
     
    113114
    114115                if name == msg.Prefix.Name { // user mode change
    115                         if name != c.upstream.Nick {
     116                        if name != c.nick {
    116117                                return fmt.Errorf("received MODE message for unknow nick %q", name)
    117118                        }
     
    152153                        c.channelModesWithParam = msg.Params[5]
    153154                }
     155        case "NICK":
     156                if len(msg.Params) < 1 {
     157                        return newNeedMoreParamsError(msg.Command)
     158                }
     159                newNick := msg.Params[0]
     160
     161                if msg.Prefix.Name == c.nick {
     162                        c.logger.Printf("changed nick from %q to %q", c.nick, newNick)
     163                        c.nick = newNick
     164                }
     165
     166                for _, ch := range c.channels {
     167                        if membership, ok := ch.Members[msg.Prefix.Name]; ok {
     168                                delete(ch.Members, msg.Prefix.Name)
     169                                ch.Members[newNick] = membership
     170                        }
     171                }
     172
     173                c.user.forEachDownstream(func(dc *downstreamConn) {
     174                        dc.messages <- msg
     175                })
    154176        case "JOIN":
    155177                if len(msg.Params) < 1 {
     
    158180
    159181                for _, ch := range strings.Split(msg.Params[0], ",") {
    160                         if msg.Prefix.Name == c.upstream.Nick {
     182                        if msg.Prefix.Name == c.nick {
    161183                                c.logger.Printf("joined channel %q", ch)
    162184                                c.channels[ch] = &upstreamChannel{
     
    182204
    183205                for _, ch := range strings.Split(msg.Params[0], ",") {
    184                         if msg.Prefix.Name == c.upstream.Nick {
     206                        if msg.Prefix.Name == c.nick {
    185207                                c.logger.Printf("parted channel %q", ch)
    186208                                delete(c.channels, ch)
     
    296318        defer c.Close()
    297319
     320        c.nick = c.upstream.Nick
    298321        c.messages <- &irc.Message{
    299322                Command: "NICK",
Note: See TracChangeset for help on using the changeset viewer.