Selaa lähdekoodia

DRY mode apply code

ParseUserModeChanges and ParseChannelModeChanges already validate
that the modes are modifiable, so there's no need to repeat it here.
tags/v2.4.0-rc1
Shivaram Lingamneni 3 vuotta sitten
vanhempi
commit
c279b2d14c
2 muutettua tiedostoa jossa 16 lisäystä ja 16 poistoa
  1. 13
    15
      irc/modes.go
  2. 3
    1
      irc/modes/modes.go

+ 13
- 15
irc/modes.go Näytä tiedosto

@@ -33,8 +33,7 @@ func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool,
33 33
 	applied := make(modes.ModeChanges, 0)
34 34
 
35 35
 	for _, change := range changes {
36
-		switch change.Mode {
37
-		case modes.Bot, modes.Invisible, modes.WallOps, modes.UserRoleplaying, modes.Operator, modes.LocalOperator, modes.RegisteredOnly, modes.UserNoCTCP:
36
+		if change.Mode != modes.ServerNotice {
38 37
 			switch change.Op {
39 38
 			case modes.Add:
40 39
 				if (change.Mode == modes.Operator || change.Mode == modes.LocalOperator) && !(force && oper != nil) {
@@ -73,8 +72,8 @@ func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool,
73 72
 					}
74 73
 				}
75 74
 			}
76
-
77
-		case modes.ServerNotice:
75
+		} else {
76
+			// server notices are weird
78 77
 			if !client.HasMode(modes.Operator) {
79 78
 				continue
80 79
 			}
@@ -98,8 +97,6 @@ func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool,
98 97
 				applied = append(applied, change)
99 98
 			}
100 99
 		}
101
-
102
-		// can't do anything to TLS mode
103 100
 	}
104 101
 
105 102
 	if len(applied) != 0 {
@@ -271,15 +268,6 @@ func (channel *Channel) ApplyChannelModeChanges(client *Client, isSamode bool, c
271 268
 				applied = append(applied, change)
272 269
 			}
273 270
 
274
-		case modes.InviteOnly, modes.Moderated, modes.NoOutside, modes.OpOnlyTopic, modes.RegisteredOnly, modes.Secret, modes.ChanRoleplaying, modes.NoCTCP, modes.RegisteredOnlySpeak:
275
-			if change.Op == modes.List {
276
-				continue
277
-			}
278
-
279
-			if channel.flags.SetMode(change.Mode, change.Op == modes.Add) {
280
-				applied = append(applied, change)
281
-			}
282
-
283 271
 		case modes.ChannelFounder, modes.ChannelAdmin, modes.ChannelOperator, modes.Halfop, modes.Voice:
284 272
 			if change.Op == modes.List {
285 273
 				continue
@@ -295,6 +283,16 @@ func (channel *Channel) ApplyChannelModeChanges(client *Client, isSamode bool, c
295 283
 			if success {
296 284
 				applied = append(applied, change)
297 285
 			}
286
+
287
+		default:
288
+			// all channel modes with no args, e.g., InviteOnly, Secret
289
+			if change.Op == modes.List {
290
+				continue
291
+			}
292
+
293
+			if channel.flags.SetMode(change.Mode, change.Op == modes.Add) {
294
+				applied = append(applied, change)
295
+			}
298 296
 		}
299 297
 	}
300 298
 

+ 3
- 1
irc/modes/modes.go Näytä tiedosto

@@ -430,8 +430,10 @@ func (a ByCodepoint) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
430 430
 func (a ByCodepoint) Less(i, j int) bool { return a[i] < a[j] }
431 431
 
432 432
 func RplMyInfo() (param1, param2, param3 string) {
433
-	userModes := make(Modes, len(SupportedUserModes))
433
+	userModes := make(Modes, len(SupportedUserModes), len(SupportedUserModes)+1)
434 434
 	copy(userModes, SupportedUserModes)
435
+	// TLS is not in SupportedUserModes because it can't be modified
436
+	userModes = append(userModes, TLS)
435 437
 	sort.Sort(ByCodepoint(userModes))
436 438
 
437 439
 	channelModes := make(Modes, len(SupportedChannelModes)+len(ChannelUserModes))

Loading…
Peruuta
Tallenna