diff --git a/protocols/clientbot.py b/protocols/clientbot.py index 4f8e49e..4b897b3 100644 --- a/protocols/clientbot.py +++ b/protocols/clientbot.py @@ -417,9 +417,11 @@ class ClientbotWrapperProtocol(Protocol): log.warning('(%s) handle_352: got wrong string %s for away status', self.irc.name, status[0]) if '*' in status: # Track IRCop status - self.irc.applyModes(uid, [('+o', None)]) - self.irc.callHooks([uid, 'MODE', {'target': uid, 'modes': {('+o', None)}}]) - self.irc.callHooks([uid, 'CLIENT_OPERED', {'text': 'IRC Operator'}]) + if not self.irc.isOper(uid, allowAuthed=False): + # Don't send duplicate oper ups if the target is already oper. + self.irc.applyModes(uid, [('+o', None)]) + self.irc.callHooks([uid, 'MODE', {'target': uid, 'modes': {('+o', None)}}]) + self.irc.callHooks([uid, 'CLIENT_OPERED', {'text': 'IRC Operator'}]) elif self.irc.isOper(uid, allowAuthed=False) and not self.irc.isInternalClient(uid): # Track deopers self.irc.applyModes(uid, [('-o', None)])