@@ -316,7 +316,8 @@ def kban(self, irc, msg, args,
316
316
bannedHostmask = irc .state .nickToHostmask (bannedNick )
317
317
except KeyError :
318
318
irc .error (format (_ ('I haven\' t seen %s.' ), bannedNick ), Raise = True )
319
- capability = ircdb .makeChannelCapability (channel , 'op' )
319
+ opcapability = ircdb .makeChannelCapability (channel , 'op' )
320
+ ownercapability = ircdb .makeCapability (channel , 'owner' )
320
321
banmaskstyle = conf .supybot .protocols .irc .banmask
321
322
banmask = banmaskstyle .makeBanmask (bannedHostmask , [o [0 ] for o in optlist ])
322
323
# Check (again) that they're not trying to make us kickban ourself.
@@ -345,18 +346,19 @@ def f():
345
346
schedule .addEvent (f , expiry )
346
347
if bannedNick == msg .nick :
347
348
doBan ()
348
- elif ircdb .checkCapability (msg .prefix , capability ):
349
- if ircdb .checkCapability (bannedHostmask , capability ):
349
+ elif ircdb .checkCapability (msg .prefix , opcapability ):
350
+ if ircdb .checkCapability (bannedHostmask , opcapability ) and \
351
+ not ircdb .checkCapability (msg .prefix , ownercapability ):
350
352
self .log .warning ('%s tried to ban %q, but both have %s' ,
351
- msg .prefix , bannedHostmask , capability )
353
+ msg .prefix , bannedHostmask , opcapability )
352
354
irc .error (format (_ ('%s has %s too, you can\' t ban '
353
- 'him/her/it.' ), bannedNick , capability ))
355
+ 'him/her/it.' ), bannedNick , opcapability ))
354
356
else :
355
357
doBan ()
356
358
else :
357
359
self .log .warning ('%q attempted kban without %s' ,
358
- msg .prefix , capability )
359
- irc .errorNoCapability (capability )
360
+ msg .prefix , opcapability )
361
+ irc .errorNoCapability (opcapability )
360
362
exact ,nick ,user ,host
361
363
kban = wrap (kban ,
362
364
['op' ,
0 commit comments