From 305db9f7540bea1f671007a2b1eea7cdd6c9fd87 Mon Sep 17 00:00:00 2001 From: James Lu Date: Sat, 26 Mar 2016 18:14:53 -0700 Subject: [PATCH] utils: also don't crash in applyModes for bad mode targets --- utils.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/utils.py b/utils.py index 025bfe3..70d001d 100644 --- a/utils.py +++ b/utils.py @@ -285,12 +285,18 @@ def applyModes(irc, target, changedmodes): The target can be either a channel or a user; this is handled automatically.""" usermodes = not isChannel(target) log.debug('(%s) Using usermodes for this query? %s', irc.name, usermodes) - if usermodes: - old_modelist = irc.users[target].modes - supported_modes = irc.umodes - else: - old_modelist = irc.channels[target].modes - supported_modes = irc.cmodes + + try: + if usermodes: + old_modelist = irc.users[target].modes + supported_modes = irc.umodes + else: + old_modelist = irc.channels[target].modes + supported_modes = irc.cmodes + except KeyError: + log.warning('(%s) Possible desync? Mode target %s is unknown.', irc.name, target) + return + modelist = set(old_modelist) log.debug('(%s) Applying modes %r on %s (initial modelist: %s)', irc.name, changedmodes, target, modelist) for mode in changedmodes: