lykoss / lykos

Werewolf, the popular detective/social party game (a theme of Mafia)
https://werewolf.chat
Other
127 stars 62 forks source link

KeyError for jester in get_all_players #398

Closed mweinelt closed 4 years ago

mweinelt commented 4 years ago

We played 5p vilgame and when the final vote was cast for lykos this error happened. We didn't have a jester.

Traceback (most recent call last):
  File "/src/decorators.py", line 193, in __call__
    return self.func(*args, **kwargs)
  File "/src/handler.py", line 127, in on_privmsg
    fn.caller(cli, rawnick, ch, message)
  File "/src/decorators.py", line 193, in __call__
    return self.func(*args, **kwargs)
  File "/src/decorators.py", line 339, in caller
    self.func(var, dispatcher, rest)
  File "/src/votes.py", line 196, in vote
    return lynch.caller(wrapper.client, wrapper.source.nick, wrapper.target.name, message)
  File "/src/decorators.py", line 193, in __call__
    return self.func(*args, **kwargs)
  File "/src/decorators.py", line 339, in caller
    self.func(var, dispatcher, rest)
  File "/src/votes.py", line 61, in lynch
    chk_decision(var)
  File "/src/votes.py", line 282, in chk_decision
    if lynch_evt.dispatch(var, votee, voters):
  File "/src/events.py", line 67, in dispatch
    listener(self, *args, **kwargs)
  File "/src/events.py", line 37, in __call__
    self.callback(*args, **kwargs)
  File "/src/decorators.py", line 193, in __call__
    return self.func(*args, **kwargs)
  File "/src/roles/jester.py", line 19, in on_lynch
    if votee in get_all_players(("jester",)):
  File "/src/functions.py", line 38, in get_all_players
    for user in rolemap[role]:
KeyError: 'jester'

Complete error log: https://ww.chat/5v5u Commit: 5097b7b5b085c5b9492ff4eab29261a67b0bea19

Complete log
Traceback (most recent call last):
  File "/src/decorators.py", line 193, in __call__
    return self.func(*args, **kwargs)
  File "/src/handler.py", line 127, in on_privmsg
    fn.caller(cli, rawnick, ch, message)
  File "/src/decorators.py", line 193, in __call__
    return self.func(*args, **kwargs)
  File "/src/decorators.py", line 339, in caller
    self.func(var, dispatcher, rest)
  File "/src/votes.py", line 196, in vote
    return lynch.caller(wrapper.client, wrapper.source.nick, wrapper.target.name, message)
  File "/src/decorators.py", line 193, in __call__
    return self.func(*args, **kwargs)
  File "/src/decorators.py", line 339, in caller
    self.func(var, dispatcher, rest)
  File "/src/votes.py", line 61, in lynch
    chk_decision(var)
  File "/src/votes.py", line 282, in chk_decision
    if lynch_evt.dispatch(var, votee, voters):
  File "/src/events.py", line 67, in dispatch
    listener(self, *args, **kwargs)
  File "/src/events.py", line 37, in __call__
    self.callback(*args, **kwargs)
  File "/src/decorators.py", line 193, in __call__
    return self.func(*args, **kwargs)
  File "/src/roles/jester.py", line 19, in on_lynch
    if votee in get_all_players(("jester",)):
  File "/src/functions.py", line 38, in get_all_players
    for user in rolemap[role]:
KeyError: 'jester'

Local variables in all frames (most recent call last):

Local variables from frame #2 (in on_privmsg):

msg = '!v lykos'
user = User('_moep_', '~moep', 'gateway.moep.name', 'moep', '_moep_', {Channel('#werewolf'): {'v'}})
force_role = None
phase = 'day'
key = 'v'
parts = ['!v', 'lykos']
fn = 
ch = '#werewolf'
roles = {'villager'}
cmds = []
cli = 
have_role_cmd = False
wrapper = 
common_roles = {'villager'}
has_roles = True
chan = '#werewolf'
target = Channel('#werewolf')
notice = False
message = 'lykos'
rawnick = '_moep_!~moep@gateway.moep.name'

Local variables from frame #5 (in vote):

wrapper = 
var = 
message = 'lykos'

Local variables from frame #8 (in lynch):

msg = 'lykos'
wrapper = 
var = 
can_vote_bot = True
voted = BotUser('lykos', '~lykos', 'hackint/user/lykos', 'lykos', 'lykos', {Channel('#werewolf'): {'o'}, Channel('#werewolf-ops'): set()})
votee = BotUser('lykos', '~lykos', 'hackint/user/lykos', 'lykos', 'lykos', {Channel('#werewolf'): {'o'}, Channel('#werewolf-ops'): set()})
message = 'lykos'

Local variables from frame #9 (in chk_decision):

avail = 3
abstaining = False
players = {User('hax404', '~hax404', 'alfred.jerry.hax404.de', 'hax404', 'hax404', {Channel('#werewolf'): {'v'}}), User('_moep_', '~moep', 'gateway.moep.name', 'moep', '_moep_', {Channel('#werewolf'): {'v'}}), User('hexa-', '~hexa-', 'hackint/staff/hexa-', 'hexa-', 'hexa-', {Channel('#werewolf'): {'v'}, Channel('#werewolf-ops'): {'o'}})}
var = 
force = False
lynch_evt = 
behaviour_evt = 
votee = BotUser('lykos', '~lykos', 'hackint/user/lykos', 'lykos', 'lykos', {Channel('#werewolf'): {'o'}, Channel('#werewolf-ops'): set()})
timeout = False
votes = {User('hax404', '~hax404', 'alfred.jerry.hax404.de', 'hax404', 'hax404', {Channel('#werewolf'): {'v'}}), User('_moep_', '~moep', 'gateway.moep.name', 'moep', '_moep_', {Channel('#werewolf'): {'v'}}), User('hexa-', '~hexa-', 'hackint/staff/hexa-', 'hexa-', 'hexa-', {Channel('#werewolf'): {'v'}, Channel('#werewolf-ops'): {'o'}})}
to_vote = [BotUser('lykos', '~lykos', 'hackint/user/lykos', 'lykos', 'lykos', {Channel('#werewolf'): {'o'}, Channel('#werewolf-ops'): set()})]
kill_ties = False
needed = 2
num_lynches = 1
voters = [User('hexa-', '~hexa-', 'hackint/staff/hexa-', 'hexa-', 'hexa-', {Channel('#werewolf'): {'v'}, Channel('#werewolf-ops'): {'o'}}), User('hax404', '~hax404', 'alfred.jerry.hax404.de', 'hax404', 'hax404', {Channel('#werewolf'): {'v'}}), User('_moep_', '~moep', 'gateway.moep.name', 'moep', '_moep_', {Channel('#werewolf'): {'v'}})]

Local variables from frame #10 (in dispatch):

listeners = [, , , ]
listener = 
args = (, BotUser('lykos', '~lykos', 'hackint/user/lykos', 'lykos', 'lykos', {Channel('#werewolf'): {'o'}, Channel('#werewolf-ops'): set()}), [User('hexa-', '~hexa-', 'hackint/staff/hexa-', 'hexa-', 'hexa-', {Channel('#werewolf'): {'v'}, Channel('#werewolf-ops'): {'o'}}), User('hax404', '~hax404', 'alfred.jerry.hax404.de', 'hax404', 'hax404', {Channel('#werewolf'): {'v'}}), User('_moep_', '~moep', 'gateway.moep.name', 'moep', '_moep_', {Channel('#werewolf'): {'v'}})])
kwargs = {}
self = 

Local variables from frame #11 (in __call__):

args = (, , BotUser('lykos', '~lykos', 'hackint/user/lykos', 'lykos', 'lykos', {Channel('#werewolf'): {'o'}, Channel('#werewolf-ops'): set()}), [User('hexa-', '~hexa-', 'hackint/staff/hexa-', 'hexa-', 'hexa-', {Channel('#werewolf'): {'v'}, Channel('#werewolf-ops'): {'o'}}), User('hax404', '~hax404', 'alfred.jerry.hax404.de', 'hax404', 'hax404', {Channel('#werewolf'): {'v'}}), User('_moep_', '~moep', 'gateway.moep.name', 'moep', '_moep_', {Channel('#werewolf'): {'v'}})])
kwargs = {}
self = 

Local variables from frame #13 (in on_lynch):

var = 
votee = BotUser('lykos', '~lykos', 'hackint/user/lykos', 'lykos', 'lykos', {Channel('#werewolf'): {'o'}, Channel('#werewolf-ops'): set()})
evt = 
voters = [User('hexa-', '~hexa-', 'hackint/staff/hexa-', 'hexa-', 'hexa-', {Channel('#werewolf'): {'v'}, Channel('#werewolf-ops'): {'o'}}), User('hax404', '~hax404', 'alfred.jerry.hax404.de', 'hax404', 'hax404', {Channel('#werewolf'): {'v'}}), User('_moep_', '~moep', 'gateway.moep.name', 'moep', '_moep_', {Channel('#werewolf'): {'v'}})]

Local variables from frame #14 (in get_all_players):

rolemap = {'person': UserSet()}
pl = set()
is_dying = 
role = 'jester'
roles = ('jester',)
jacob1 commented 4 years ago

Yeah this is a known issue, apparently we didn't already have a github issue open for it.

It does seem to be vilgame related, sometimes it happens in "default" too, but I've never seen it in any other mode.