Changeset 42 in code for trunk/upstream.go


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

Allow changing nickname

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.