|
@@ -23,7 +23,9 @@ var (
|
23
|
23
|
)
|
24
|
24
|
|
25
|
25
|
// ApplyUserModeChanges applies the given changes, and returns the applied changes.
|
26
|
|
-func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool) modes.ModeChanges {
|
|
26
|
+// `oper` is the operclass of the client gaining +o, when applicable (this is just
|
|
27
|
+// to confirm that the client actually has a valid operclass)
|
|
28
|
+func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool, oper *Oper) modes.ModeChanges {
|
27
|
29
|
applied := make(modes.ModeChanges, 0)
|
28
|
30
|
|
29
|
31
|
for _, change := range changes {
|
|
@@ -31,7 +33,7 @@ func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool)
|
31
|
33
|
case modes.Bot, modes.Invisible, modes.WallOps, modes.UserRoleplaying, modes.Operator, modes.LocalOperator, modes.RegisteredOnly:
|
32
|
34
|
switch change.Op {
|
33
|
35
|
case modes.Add:
|
34
|
|
- if !force && (change.Mode == modes.Operator || change.Mode == modes.LocalOperator) {
|
|
36
|
+ if (change.Mode == modes.Operator || change.Mode == modes.LocalOperator) && !(force && oper != nil) {
|
35
|
37
|
continue
|
36
|
38
|
}
|
37
|
39
|
|