Changeset 43 in code for trunk/upstream.go
- Timestamp:
- Feb 7, 2020, 11:36:02 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/upstream.go
r42 r43 107 107 return nil 108 108 case "MODE": 109 if len(msg.Params) < 2 { 110 return newNeedMoreParamsError(msg.Command) 111 } 112 name := msg.Params[0] 113 modeStr := msg.Params[1] 109 var name, modeStr string 110 if err := parseMessageParams(msg, &name, &modeStr); err != nil { 111 return err 112 } 114 113 115 114 if name == msg.Prefix.Name { // user mode change … … 144 143 } 145 144 case irc.RPL_MYINFO: 146 if len(msg.Params) < 5 { 147 return newNeedMoreParamsError(msg.Command) 148 } 149 c.serverName = msg.Params[1] 150 c.availableUserModes = msg.Params[3] 151 c.availableChannelModes = msg.Params[4] 145 if err := parseMessageParams(msg, nil, &c.serverName, nil, &c.availableUserModes, &c.availableChannelModes); err != nil { 146 return err 147 } 152 148 if len(msg.Params) > 5 { 153 149 c.channelModesWithParam = msg.Params[5] 154 150 } 155 151 case "NICK": 156 if len(msg.Params) < 1 {157 return newNeedMoreParamsError(msg.Command)158 }159 newNick := msg.Params[0]152 var newNick string 153 if err := parseMessageParams(msg, &newNick); err != nil { 154 return err 155 } 160 156 161 157 if msg.Prefix.Name == c.nick { … … 175 171 }) 176 172 case "JOIN": 177 if len(msg.Params) < 1 { 178 return newNeedMoreParamsError(msg.Command) 179 } 180 181 for _, ch := range strings.Split(msg.Params[0], ",") { 173 var channels string 174 if err := parseMessageParams(msg, &channels); err != nil { 175 return err 176 } 177 178 for _, ch := range strings.Split(channels, ",") { 182 179 if msg.Prefix.Name == c.nick { 183 180 c.logger.Printf("joined channel %q", ch) … … 199 196 }) 200 197 case "PART": 201 if len(msg.Params) < 1 { 202 return newNeedMoreParamsError(msg.Command) 203 } 204 205 for _, ch := range strings.Split(msg.Params[0], ",") { 198 var channels string 199 if err := parseMessageParams(msg, &channels); err != nil { 200 return err 201 } 202 203 for _, ch := range strings.Split(channels, ",") { 206 204 if msg.Prefix.Name == c.nick { 207 205 c.logger.Printf("parted channel %q", ch) … … 220 218 }) 221 219 case irc.RPL_TOPIC, irc.RPL_NOTOPIC: 222 if len(msg.Params) < 3 { 223 return newNeedMoreParamsError(msg.Command) 224 } 225 ch, err := c.getChannel(msg.Params[1]) 220 var name, topic string 221 if err := parseMessageParams(msg, nil, &name, &topic); err != nil { 222 return err 223 } 224 ch, err := c.getChannel(name) 226 225 if err != nil { 227 226 return err 228 227 } 229 228 if msg.Command == irc.RPL_TOPIC { 230 ch.Topic = msg.Params[2]229 ch.Topic = topic 231 230 } else { 232 231 ch.Topic = "" 233 232 } 234 233 case "TOPIC": 235 if len(msg.Params) < 1 { 236 return newNeedMoreParamsError(msg.Command) 237 } 238 ch, err := c.getChannel(msg.Params[0]) 234 var name string 235 if err := parseMessageParams(msg, nil, &name); err != nil { 236 return err 237 } 238 ch, err := c.getChannel(name) 239 239 if err != nil { 240 240 return err … … 246 246 } 247 247 case rpl_topicwhotime: 248 if len(msg.Params) < 4 { 249 return newNeedMoreParamsError(msg.Command) 250 } 251 ch, err := c.getChannel(msg.Params[1]) 252 if err != nil { 253 return err 254 } 255 ch.TopicWho = msg.Params[2] 256 sec, err := strconv.ParseInt(msg.Params[3], 10, 64) 248 var name, who, timeStr string 249 if err := parseMessageParams(msg, nil, &name, &who, &timeStr); err != nil { 250 return err 251 } 252 ch, err := c.getChannel(name) 253 if err != nil { 254 return err 255 } 256 ch.TopicWho = who 257 sec, err := strconv.ParseInt(timeStr, 10, 64) 257 258 if err != nil { 258 259 return fmt.Errorf("failed to parse topic time: %v", err) … … 260 261 ch.TopicTime = time.Unix(sec, 0) 261 262 case irc.RPL_NAMREPLY: 262 if len(msg.Params) < 4 { 263 return newNeedMoreParamsError(msg.Command) 264 } 265 ch, err := c.getChannel(msg.Params[2]) 266 if err != nil { 267 return err 268 } 269 270 status, err := parseChannelStatus(msg.Params[1]) 263 var name, statusStr, members string 264 if err := parseMessageParams(msg, nil, &statusStr, &name, &members); err != nil { 265 return err 266 } 267 ch, err := c.getChannel(name) 268 if err != nil { 269 return err 270 } 271 272 status, err := parseChannelStatus(statusStr) 271 273 if err != nil { 272 274 return err … … 274 276 ch.Status = status 275 277 276 for _, s := range strings.Split(m sg.Params[3], " ") {278 for _, s := range strings.Split(members, " ") { 277 279 membership, nick := parseMembershipPrefix(s) 278 280 ch.Members[nick] = membership 279 281 } 280 282 case irc.RPL_ENDOFNAMES: 281 if len(msg.Params) < 2 { 282 return newNeedMoreParamsError(msg.Command) 283 } 284 ch, err := c.getChannel(msg.Params[1]) 283 var name string 284 if err := parseMessageParams(msg, nil, &name); err != nil { 285 return err 286 } 287 ch, err := c.getChannel(name) 285 288 if err != nil { 286 289 return err … … 323 326 Params: []string{c.upstream.Nick}, 324 327 } 325 326 328 c.messages <- &irc.Message{ 327 329 Command: "USER",
Note:
See TracChangeset
for help on using the changeset viewer.