Browse Source

fix #514

Also ensure that people can remove their own persistent modes via CS AMODE
tags/v1.1.0-rc1
Shivaram Lingamneni 5 years ago
parent
commit
0835ad6af5
2 changed files with 4 additions and 1 deletions
  1. 1
    1
      irc/channel.go
  2. 3
    0
      irc/modes.go

+ 1
- 1
irc/channel.go View File

@@ -395,7 +395,7 @@ func channelUserModeHasPrivsOver(clientMode modes.Mode, targetMode modes.Mode) b
395 395
 		return targetMode != modes.ChannelFounder && targetMode != modes.ChannelAdmin
396 396
 	case modes.Halfop:
397 397
 		// halfops cannot kick other halfops
398
-		return targetMode != modes.ChannelFounder && targetMode != modes.ChannelAdmin && targetMode != modes.Halfop
398
+		return targetMode == modes.Voice || targetMode == modes.Mode(0)
399 399
 	default:
400 400
 		// voice and unprivileged cannot kick anyone
401 401
 		return false

+ 3
- 0
irc/modes.go View File

@@ -277,6 +277,9 @@ func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes
277 277
 		hasPrivs = true
278 278
 	} else if channelUserModeHasPrivsOver(clientMode, targetModeNow) && channelUserModeHasPrivsOver(clientMode, targetModeAfter) {
279 279
 		hasPrivs = true
280
+	} else if change.Op == modes.Remove && account == change.Arg {
281
+		// you can always de-op yourself
282
+		hasPrivs = true
280 283
 	}
281 284
 	if !hasPrivs {
282 285
 		return nil, errInsufficientPrivs

Loading…
Cancel
Save