Browse Source

modes: Fix modes, re-add +l and +k

tags/v0.1.0
Daniel Oaks 7 years ago
parent
commit
ad8df3c9a8
1 changed files with 38 additions and 4 deletions
  1. 38
    4
      irc/modes.go

+ 38
- 4
irc/modes.go View File

@@ -347,20 +347,30 @@ func cmodeHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
347 347
 			case BanMask, ExceptMask, InviteMask:
348 348
 				if len(msg.Params) > skipArgs {
349 349
 					change.arg = msg.Params[skipArgs]
350
-					skipArgs += 1
350
+					skipArgs++
351 351
 				} else {
352 352
 					change.op = List
353 353
 				}
354
-			case Key, UserLimit, ChannelFounder, ChannelAdmin, ChannelOperator, Halfop, Voice:
354
+			case ChannelFounder, ChannelAdmin, ChannelOperator, Halfop, Voice:
355 355
 				if len(msg.Params) > skipArgs {
356 356
 					change.arg = msg.Params[skipArgs]
357
-					skipArgs += 1
357
+					skipArgs++
358 358
 				} else {
359 359
 					continue
360 360
 				}
361
+			case Key, UserLimit:
362
+				// don't require value when removing
363
+				if change.op == Add {
364
+					if len(msg.Params) > skipArgs {
365
+						change.arg = msg.Params[skipArgs]
366
+						skipArgs++
367
+					} else {
368
+						continue
369
+					}
370
+				}
361 371
 			}
362 372
 
363
-			applied = append(applied, &change)
373
+			changes = append(changes, &change)
364 374
 		}
365 375
 
366 376
 		for _, change := range changes {
@@ -389,6 +399,30 @@ func cmodeHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
389 399
 					applied = append(applied, change)
390 400
 				}
391 401
 
402
+			case UserLimit:
403
+				switch change.op {
404
+				case Add:
405
+					val, err := strconv.ParseUint(change.arg, 10, 64)
406
+					if err == nil {
407
+						channel.userLimit = val
408
+						applied = append(applied, change)
409
+					}
410
+
411
+				case Remove:
412
+					channel.userLimit = 0
413
+					applied = append(applied, change)
414
+				}
415
+
416
+			case Key:
417
+				switch change.op {
418
+				case Add:
419
+					channel.key = change.arg
420
+
421
+				case Remove:
422
+					channel.key = ""
423
+				}
424
+				applied = append(applied, change)
425
+
392 426
 			case InviteOnly, Moderated, NoOutside, OpOnlyTopic, Persistent, Secret:
393 427
 				switch change.op {
394 428
 				case Add:

Loading…
Cancel
Save