diff --git a/src/functions.py b/src/functions.py index dfccaba..8d1ba0a 100644 --- a/src/functions.py +++ b/src/functions.py @@ -3,7 +3,7 @@ from src.events import Event from src import settings as var from src import users -__all__ = ["get_players", "get_participants", "get_target", "get_main_role", "get_all_roles"] +__all__ = ["get_players", "get_all_players", "get_participants", "get_target", "get_main_role", "get_all_roles"] def get_players(roles=None, *, mainroles=None): if mainroles is None: @@ -21,6 +21,16 @@ def get_players(roles=None, *, mainroles=None): return list(pl) return [p for p in var.ALL_PLAYERS if p in pl] +def get_all_players(roles=None): + if roles is None: + roles = var.ROLES + pl = set() + for role in roles: + for nick in var.ROLES[role]: + pl.add(users._get(nick)) # FIXME + + return pl + def get_participants(): """List all players who are still able to participate in the game.""" evt = Event("get_participants", {"players": get_players()}) diff --git a/src/roles/angel.py b/src/roles/angel.py index 6dc20be..468143c 100644 --- a/src/roles/angel.py +++ b/src/roles/angel.py @@ -8,7 +8,7 @@ import botconfig import src.settings as var from src.utilities import * from src import users, debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import cmd, event_listener from src.messages import messages from src.events import Event @@ -229,7 +229,7 @@ def on_transition_night_begin(evt, cli, var): def on_transition_night_end(evt, var): # the messages for angel and guardian angel are different enough to merit individual loops ps = get_players() - for bg in get_players(("bodyguard",)): + for bg in get_all_players(("bodyguard",)): pl = ps[:] random.shuffle(pl) pl.remove(bg) @@ -243,7 +243,7 @@ def on_transition_night_end(evt, var): to_send = "bodyguard_simple" bg.send(messages[to_send].format(warning), "Players: " + ", ".join(p.nick for p in pl), sep="\n") - for gangel in get_players(("guardian angel",)): + for gangel in get_all_players(("guardian angel",)): pl = ps[:] random.shuffle(pl) gself = messages["guardian_self_notification"] diff --git a/src/roles/blessed.py b/src/roles/blessed.py index 817d4cd..31de486 100644 --- a/src/roles/blessed.py +++ b/src/roles/blessed.py @@ -8,7 +8,7 @@ import botconfig import src.settings as var from src.utilities import * from src import users, debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import cmd, event_listener from src.messages import messages from src.events import Event @@ -44,12 +44,11 @@ def on_transition_day_resolve(evt, cli, var, victim): @event_listener("transition_night_end", priority=5) def on_transition_night_end(evt, var): if var.FIRST_NIGHT or var.ALWAYS_PM_ROLE: - for blessed in var.ROLES["blessed villager"]: # FIXME - user = users._get(blessed) # FIXME + for blessed in get_all_players(("blessed villager",)): to_send = "blessed_notify" - if user.prefers_simple(): + if blessed.prefers_simple(): to_send = "blessed_simple" - user.send(messages[to_send]) + blessed.send(messages[to_send]) @event_listener("desperation_totem") def on_desperation(evt, cli, var, votee, target, prot): diff --git a/src/roles/detective.py b/src/roles/detective.py index 9e8cf19..8431b3b 100644 --- a/src/roles/detective.py +++ b/src/roles/detective.py @@ -5,7 +5,7 @@ import random import src.settings as var from src.utilities import * from src import debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import cmd, event_listener from src.messages import messages from src.events import Event @@ -67,7 +67,7 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers): @event_listener("get_special") def on_get_special(evt, var): - evt.data["special"].update(get_players(("detective",))) + evt.data["special"].update(get_all_players(("detective",))) @event_listener("exchange_roles") def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role): @@ -79,7 +79,7 @@ def on_exchange(evt, cli, var, actor, nick, actor_role, nick_role): @event_listener("transition_night_end", priority=2) def on_transition_night_end(evt, var): ps = get_players() - for dttv in get_players(("detective",)): + for dttv in get_all_players(("detective",)): pl = ps[:] random.shuffle(pl) pl.remove(dttv) diff --git a/src/roles/doomsayer.py b/src/roles/doomsayer.py index 084e9d5..543beb3 100644 --- a/src/roles/doomsayer.py +++ b/src/roles/doomsayer.py @@ -4,7 +4,7 @@ import random import src.settings as var from src.utilities import * from src import debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import cmd, event_listener from src.messages import messages from src.events import Event @@ -104,7 +104,7 @@ def on_doctor_immunize(evt, cli, var, doctor, target): @event_listener("get_special") def on_get_special(evt, var): - evt.data["special"].update(get_players(("doomsayer",))) + evt.data["special"].update(get_all_players(("doomsayer",))) @event_listener("chk_nightdone") def on_chk_nightdone(evt, cli, var): diff --git a/src/roles/dullahan.py b/src/roles/dullahan.py index 12d1da5..c028f81 100644 --- a/src/roles/dullahan.py +++ b/src/roles/dullahan.py @@ -4,7 +4,7 @@ import random from collections import defaultdict, deque from src.utilities import * -from src.functions import get_players, get_target +from src.functions import get_players, get_all_players, get_target from src import users, debuglog, errlog, plog from src.decorators import command, event_listener from src.messages import messages @@ -131,7 +131,7 @@ def on_swap(evt, var, old_user, user): @event_listener("get_special") def on_get_special(evt, var): - evt.data["special"].update(get_players(("dullahan",))) + evt.data["special"].update(get_all_players(("dullahan",))) @event_listener("transition_day", priority=2) def on_transition_day(evt, cli, var): @@ -163,7 +163,7 @@ def on_chk_nightdone(evt, cli, var): @event_listener("transition_night_end", priority=2) def on_transition_night_end(evt, var): - for dullahan in get_players(("dullahan",)): + for dullahan in get_all_players(("dullahan",)): targets = list(TARGETS[dullahan]) for target in targets[:]: if target.nick in var.DEAD: diff --git a/src/roles/harlot.py b/src/roles/harlot.py index 77a67a4..c402552 100644 --- a/src/roles/harlot.py +++ b/src/roles/harlot.py @@ -8,7 +8,7 @@ import botconfig import src.settings as var from src.utilities import * from src import channels, users, debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import cmd, event_listener from src.messages import messages from src.events import Event @@ -123,7 +123,7 @@ def on_exchange_roles(evt, cli, var, actor, nick, actor_role, nick_role): @event_listener("transition_night_end", priority=2) def on_transition_night_end(evt, var): - for harlot in get_players(("harlot",)): + for harlot in get_all_players(("harlot",)): pl = get_players() random.shuffle(pl) pl.remove(harlot) @@ -138,7 +138,7 @@ def on_begin_day(evt, var): @event_listener("get_special") def on_get_special(evt, var): - evt.data["special"].update(get_players(("harlot",))) + evt.data["special"].update(get_all_players(("harlot",))) @event_listener("del_player") def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers): diff --git a/src/roles/hunter.py b/src/roles/hunter.py index b873eeb..42238bc 100644 --- a/src/roles/hunter.py +++ b/src/roles/hunter.py @@ -5,7 +5,7 @@ from collections import defaultdict import src.settings as var from src.utilities import * from src import users, debuglog, errlog, plog -from src.functions import get_players, get_target +from src.functions import get_players, get_all_players, get_target from src.decorators import command, event_listener from src.messages import messages from src.events import Event @@ -102,7 +102,7 @@ def on_acted(evt, var, nick, sender): @event_listener("get_special") def on_get_special(evt, var): - evt.data["special"].update(get_players(("hunter",))) + evt.data["special"].update(get_all_players(("hunter",))) @event_listener("transition_day", priority=2) def on_transition_day(evt, cli, var): @@ -133,7 +133,7 @@ def on_chk_nightdone(evt, cli, var): @event_listener("transition_night_end", priority=2) def on_transition_night_end(evt, var): ps = get_players() - for hunter in get_players(("hunter",)): + for hunter in get_all_players(("hunter",)): if hunter in HUNTERS: continue # already killed pl = ps[:] diff --git a/src/roles/madscientist.py b/src/roles/madscientist.py index 9cb1931..63c3bc1 100644 --- a/src/roles/madscientist.py +++ b/src/roles/madscientist.py @@ -8,7 +8,7 @@ import botconfig import src.settings as var from src.utilities import * from src import channels, users, debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import command, event_listener from src.messages import messages from src.events import Event @@ -152,7 +152,7 @@ def on_del_player(evt, cli, var, nick, mainrole, allroles, death_triggers): @event_listener("transition_night_end", priority=2) def on_transition_night_end(evt, var): - for ms in get_players(("mad scientist",)): + for ms in get_all_players(("mad scientist",)): pl = list_players() target1, target2 = _get_targets(var, pl, ms.nick) # FIXME: Need to update _get_targets to accept users diff --git a/src/roles/mystic.py b/src/roles/mystic.py index a836aa6..7a15380 100644 --- a/src/roles/mystic.py +++ b/src/roles/mystic.py @@ -4,7 +4,7 @@ import random import src.settings as var from src.utilities import * from src import debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import cmd, event_listener from src.messages import messages from src.events import Event @@ -51,12 +51,12 @@ def on_transition_night_end(evt, var): neutral = set(get_players(var.TRUE_NEUTRAL_ROLES)) special = evt2.data["special"] - for wolf in get_players(("wolf mystic",)): + for wolf in get_all_players(("wolf mystic",)): # if adding this info to !myrole, you will need to save off this count so that they can't get updated info until the next night # # of special villagers = # of players - # of villagers - # of wolves - # of neutrals numvills = len(special & (pl - wolves - neutral)) wolf.send(messages["wolf_mystic_info"].format("are" if numvills != 1 else "is", numvills, "s" if numvills != 1 else "")) - for mystic in get_players(("mystic",)): + for mystic in get_all_players(("mystic",)): to_send = "mystic_notify" if mystic.prefers_simple(): to_send = "mystic_simple" @@ -67,6 +67,6 @@ def on_transition_night_end(evt, var): @event_listener("get_special") def on_get_special(evt, var): # mystics count as special even though they don't have any commands - evt.data["special"].update(get_players(("mystic",))) + evt.data["special"].update(get_all_players(("mystic",))) # vim: set sw=4 expandtab: diff --git a/src/roles/succubus.py b/src/roles/succubus.py index 1a740b6..ea3d078 100644 --- a/src/roles/succubus.py +++ b/src/roles/succubus.py @@ -8,7 +8,7 @@ import botconfig import src.settings as var from src.utilities import * from src import channels, users, debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import cmd, event_listener from src.messages import messages from src.events import Event @@ -268,7 +268,7 @@ def on_targeted_command(evt, cli, var, cmd, actor, orig_target, tags): @event_listener("transition_night_end", priority=2) def on_transition_night_end(evt, var): - succubi = get_players(("succubus",)) + succubi = get_all_players(("succubus",)) for succubus in succubi: pl = get_players() random.shuffle(pl) @@ -299,7 +299,7 @@ def on_transition_day(evt, cli, var): @event_listener("get_special") def on_get_special(evt, var): - evt.data["special"].update(get_players(("succubus",))) + evt.data["special"].update(get_all_players(("succubus",))) @event_listener("vg_kill") def on_vg_kill(evt, var, ghost, target): diff --git a/src/roles/vigilante.py b/src/roles/vigilante.py index 5da7e9a..18f529d 100644 --- a/src/roles/vigilante.py +++ b/src/roles/vigilante.py @@ -5,7 +5,7 @@ from collections import defaultdict import src.settings as var from src.utilities import * from src import debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import cmd, event_listener from src.messages import messages from src.events import Event @@ -94,7 +94,7 @@ def on_acted(evt, var, nick, sender): @event_listener("get_special") def on_get_special(evt, var): - evt.data["special"].update(get_players(("vigilante",))) + evt.data["special"].update(get_all_players(("vigilante",))) @event_listener("transition_day", priority=2) def on_transition_day(evt, cli, var): @@ -125,7 +125,7 @@ def on_chk_nightdone(evt, cli, var): @event_listener("transition_night_end", priority=2) def on_transition_night_end(evt, var): ps = get_players() - for vigilante in get_players(("vigilante",)): + for vigilante in get_all_players(("vigilante",)): pl = ps[:] random.shuffle(pl) pl.remove(vigilante) diff --git a/src/roles/wildchild.py b/src/roles/wildchild.py index d6cd5fc..04dcb32 100644 --- a/src/roles/wildchild.py +++ b/src/roles/wildchild.py @@ -4,7 +4,7 @@ import re import src.settings as var from src.utilities import * from src import users, debuglog, errlog, plog -from src.functions import get_players +from src.functions import get_players, get_all_players from src.decorators import cmd, event_listener from src.messages import messages from src.events import Event @@ -139,7 +139,7 @@ def on_transition_day_begin(evt, cli, var): @event_listener("transition_night_end", priority=2) def on_transition_night_end(evt, var): - for child in get_players(("wild child",)): + for child in get_all_players(("wild child",)): to_send = "child_notify" if child.prefers_simple(): to_send = "child_simple"