Convert get_reveal_role to use Users

This commit is contained in:
skizzerz 2018-01-10 15:18:41 -07:00
parent 7e7d4db1ae
commit c9e1845fbb
10 changed files with 61 additions and 56 deletions

View File

@ -3,7 +3,11 @@ from src.events import Event
from src import settings as var
from src import users
__all__ = ["get_players", "get_all_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", "get_reveal_role"
]
def get_players(roles=None, *, mainroles=None):
if mainroles is None:
@ -77,4 +81,28 @@ def get_main_role(user):
def get_all_roles(user):
return {role for role, users in var.ROLES.items() if user in users}
def get_reveal_role(user):
# FIXME: when amnesiac and clone are split, move this into an event
if var.HIDDEN_AMNESIAC and user in var.ORIGINAL_ROLES["amnesiac"]:
role = "amnesiac"
elif var.HIDDEN_CLONE and user in var.ORIGINAL_ROLES["clone"]:
role = "clone"
else:
role = get_main_role(user)
evt = Event("get_reveal_role", {"role": role})
evt.dispatch(var, user)
role = evt.data["role"]
if var.ROLE_REVEAL != "team":
return role
if role in var.WOLFTEAM_ROLES:
return "wolfteam player"
elif role in var.TRUE_NEUTRAL_ROLES:
return "neutral player"
else:
return "village member"
# vim: set sw=4 expandtab:

View File

@ -4,7 +4,7 @@ import random
from collections import defaultdict, deque
from src.utilities import *
from src.functions import get_players, get_all_players, get_target, get_main_role
from src.functions import get_players, get_all_players, get_target, get_main_role, get_reveal_role
from src import users, channels, debuglog, errlog, plog
from src.decorators import command, event_listener
from src.messages import messages
@ -92,7 +92,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
prots.popleft()
if var.ROLE_REVEAL in ("on", "team"):
role = get_reveal_role(target.nick)
role = get_reveal_role(target)
an = "n" if role.startswith(("a", "e", "i", "o", "u")) else ""
channels.Main.send(messages["dullahan_die_success"].format(user, target, an, role))
else:

View File

@ -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, get_all_players, get_main_role, get_target
from src.functions import get_players, get_all_players, get_main_role, get_reveal_role, get_target
from src.decorators import command, event_listener
from src.messages import messages
from src.events import Event
@ -79,7 +79,7 @@ def on_transition_day_resolve_end(evt, var, victims):
for hlt in VISITED:
if VISITED[hlt] is victim and hlt not in evt.data["bitten"] and hlt not in evt.data["dead"]:
if var.ROLE_REVEAL in ("on", "team"):
evt.data["message"].append(messages["visited_victim"].format(hlt, get_reveal_role(hlt.nick)))
evt.data["message"].append(messages["visited_victim"].format(hlt, get_reveal_role(hlt)))
else:
evt.data["message"].append(messages["visited_victim_noreveal"].format(hlt))
evt.data["bywolves"].add(hlt)

View File

@ -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, get_all_players, get_main_role
from src.functions import get_players, get_all_players, get_main_role, get_reveal_role
from src.decorators import command, event_listener
from src.messages import messages
from src.events import Event
@ -103,9 +103,9 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
if kill1:
if kill2:
if var.ROLE_REVEAL in ("on", "team"):
r1 = get_reveal_role(target1.nick)
r1 = get_reveal_role(target1)
an1 = "n" if r1.startswith(("a", "e", "i", "o", "u")) else ""
r2 = get_reveal_role(target2.nick)
r2 = get_reveal_role(target2)
an2 = "n" if r2.startswith(("a", "e", "i", "o", "u")) else ""
tmsg = messages["mad_scientist_kill"].format(user, target1, an1, r1, target2, an2, r2)
else:
@ -122,7 +122,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
pl = evt.params.refresh_pl(pl)
else:
if var.ROLE_REVEAL in ("on", "team"):
r1 = get_reveal_role(target1.nick)
r1 = get_reveal_role(target1)
an1 = "n" if r1.startswith(("a", "e", "i", "o", "u")) else ""
tmsg = messages["mad_scientist_kill_single"].format(user, target1, an1, r1)
else:
@ -134,7 +134,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
else:
if kill2:
if var.ROLE_REVEAL in ("on", "team"):
r2 = get_reveal_role(target2.nick)
r2 = get_reveal_role(target2)
an2 = "n" if r2.startswith(("a", "e", "i", "o", "u")) else ""
tmsg = messages["mad_scientist_kill_single"].format(user, target2, an2, r2)
else:

View File

@ -7,7 +7,7 @@ import botconfig
import src.settings as var
from src.utilities import *
from src import debuglog, errlog, plog, users, channels
from src.functions import get_players, get_all_players, get_main_role
from src.functions import get_players, get_all_players, get_main_role, get_reveal_role
from src.decorators import cmd, event_listener
from src.messages import messages
from src.events import Event
@ -291,7 +291,7 @@ def on_chk_decision_lynch5(evt, cli, var, voters):
return
prots.popleft()
if var.ROLE_REVEAL in ("on", "team"):
r1 = get_reveal_role(target)
r1 = get_reveal_role(users._get(target)) # FIXME
an1 = "n" if r1.startswith(("a", "e", "i", "o", "u")) else ""
tmsg = messages["totem_desperation"].format(votee, target, an1, r1)
else:
@ -491,7 +491,7 @@ def on_transition_day_resolve6(evt, var, victim):
prots.popleft()
evt.data["dead"].append(loser)
if var.ROLE_REVEAL in ("on", "team"):
role = get_reveal_role(loser.nick)
role = get_reveal_role(loser)
an = "n" if role.startswith(("a", "e", "i", "o", "u")) else ""
evt.data["message"].append(messages["totem_death"].format(victim, loser, an, role))
else:

View File

@ -8,6 +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, get_all_players, get_main_role, get_reveal_role, get_target
from src.decorators import command, event_listener
from src.messages import messages
from src.events import Event

View File

@ -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, get_all_players, get_main_role, get_target
from src.functions import get_players, get_all_players, get_main_role, get_reveal_role, get_target
from src.decorators import command, event_listener
from src.messages import messages
from src.events import Event
@ -209,7 +209,7 @@ def on_del_player(evt, var, user, mainrole, allroles, death_triggers):
comma = ","
for e in entranced_alive:
if var.ROLE_REVEAL in ("on", "team"):
role = get_reveal_role(e.nick)
role = get_reveal_role(e)
an = "n" if role.startswith(("a", "e", "i", "o", "u")) else ""
msg.append("\u0002{0}\u0002, a{1} \u0002{2}\u0002".format(e, an, role))
else:
@ -249,7 +249,7 @@ def on_transition_day_resolve_end(evt, var, victims):
for succubus in VISITED:
if VISITED[succubus] is victim and succubus not in evt.data["bitten"] and succubus not in evt.data["dead"]:
if var.ROLE_REVEAL in ("on", "team"):
evt.data["message"].append(messages["visited_victim"].format(succubus, get_reveal_role(succubus.nick)))
evt.data["message"].append(messages["visited_victim"].format(succubus, get_reveal_role(succubus)))
else:
evt.data["message"].append(messages["visited_victim_noreveal"].format(succubus))
evt.data["bywolves"].add(succubus)

View File

@ -13,7 +13,7 @@ from src.messages import messages
from src.events import Event
@event_listener("get_reveal_role")
def on_get_reveal_role(evt, var, nick):
def on_get_reveal_role(evt, var, user):
# in team reveal, show traitor as wolfteam, otherwise team stats won't sync with how
# they're revealed upon death. Team stats should show traitor as wolfteam or else
# the stats are wrong in that they'll report one less wolf than actually exists,

View File

@ -12,7 +12,7 @@ __all__ = ["pm", "is_fake_nick", "mass_mode", "mass_privmsg", "reply",
"is_user_simple", "is_user_notice", "in_wolflist",
"relay_wolfchat_command", "irc_lower", "irc_equals", "match_hostmask",
"is_owner", "is_admin", "plural", "singular", "list_players",
"get_role", "get_roles", "get_reveal_role", "change_role", "role_order", "break_long_message",
"get_role", "get_roles", "change_role", "role_order", "break_long_message",
"complete_match", "complete_one_match", "get_victim", "get_nick", "InvalidModeException"]
# message either privmsg or notice, depending on user settings
def pm(cli, target, message):
@ -314,30 +314,6 @@ def get_roles(*roles, rolemap=None):
all_roles.append(rolemap[role])
return [u.nick for u in itertools.chain(*all_roles)]
def get_reveal_role(nick):
# FIXME: make the arg a user instead of a nick
from src import users
if var.HIDDEN_AMNESIAC and nick in var.ORIGINAL_ROLES["amnesiac"]:
role = "amnesiac"
elif var.HIDDEN_CLONE and nick in var.ORIGINAL_ROLES["clone"]:
role = "clone"
else:
role = get_role(nick)
evt = Event("get_reveal_role", {"role": role})
evt.dispatch(var, users._get(nick))
role = evt.data["role"]
if var.ROLE_REVEAL != "team":
return role
if role in var.WOLFTEAM_ROLES:
return "wolfteam player"
elif role in var.TRUE_NEUTRAL_ROLES:
return "neutral player"
else:
return "village member"
# TODO: move this to functions.py
def change_role(user, oldrole, newrole, set_final=True):
var.ROLES[oldrole].remove(user)

View File

@ -49,7 +49,7 @@ import src.settings as var
from src.utilities import *
from src import db, events, dispatcher, channels, users, hooks, logger, debuglog, errlog, plog
from src.decorators import command, cmd, hook, handle_error, event_listener, COMMANDS
from src.functions import get_players, get_all_players, get_participants, get_main_role, get_all_roles
from src.functions import get_players, get_all_players, get_participants, get_main_role, get_all_roles, get_reveal_role
from src.messages import messages
from src.warnings import *
from src.context import IRCContext
@ -1091,7 +1091,7 @@ def fleave(var, wrapper, message):
msg = [messages["fquit_success"].format(wrapper.source, target)]
if get_main_role(target) != "person" and var.ROLE_REVEAL in ("on", "team"):
msg.append(messages["fquit_goodbye"].format(get_reveal_role(target.nick)))
msg.append(messages["fquit_goodbye"].format(get_reveal_role(target)))
if var.PHASE == "join":
player_count = len(list_players()) - 1
to_say = "new_player_count"
@ -1881,7 +1881,7 @@ def chk_decision(cli, force="", end_game=True, deadlist=[]):
var.JESTERS.add(votee)
if var.ROLE_REVEAL in ("on", "team"):
rrole = get_reveal_role(votee)
rrole = get_reveal_role(users._get(votee)) # FIXME
an = "n" if rrole.startswith(("a", "e", "i", "o", "u")) else ""
lmsg = random.choice(messages["lynch_reveal"]).format(votee, an, rrole)
else:
@ -2381,7 +2381,7 @@ def del_player(player, *, devoice=True, end_game=True, death_triggers=True, kill
pl = set(get_players()).difference(deadlist)
if player is not None and (player is original or player in pl):
mainrole = get_main_role(player)
revealrole = get_reveal_role(player.nick) # FIXME
revealrole = get_reveal_role(player)
allroles = get_all_roles(player)
del var.MAIN_ROLES[player]
for r in allroles:
@ -2465,7 +2465,7 @@ def del_player(player, *, devoice=True, end_game=True, death_triggers=True, kill
continue
var.LOVERS[lover.nick].remove(player.nick)
if var.ROLE_REVEAL in ("on", "team"):
role = get_reveal_role(lover.nick)
role = get_reveal_role(lover)
an = "n" if role.startswith(("a", "e", "i", "o", "u")) else ""
message = messages["lover_suicide"].format(lover, an, role)
else:
@ -2510,7 +2510,7 @@ def del_player(player, *, devoice=True, end_game=True, death_triggers=True, kill
prots.popleft()
if len(prots) == 0:
if var.ROLE_REVEAL in ("on", "team"):
role = get_reveal_role(target.nick)
role = get_reveal_role(target)
an = "n" if role.startswith(("a", "e", "i", "o", "u")) else ""
message = messages["assassin_success"].format(player, target, an, role)
else:
@ -2749,7 +2749,7 @@ def reaper(cli, gameid):
if nck not in list_players():
continue
if var.ROLE_REVEAL in ("on", "team"):
cli.msg(chan, messages["idle_death"].format(nck, get_reveal_role(nck)))
cli.msg(chan, messages["idle_death"].format(nck, get_reveal_role(users._get(nck)))) # FIXME
else:
cli.msg(chan, (messages["idle_death_no_reveal"]).format(nck))
user = users._get(nck) # FIXME
@ -2770,7 +2770,7 @@ def reaper(cli, gameid):
mass_privmsg(cli, msg_targets, messages["player_idle_warning"].format(chan), privmsg=True)
for dcedplayer, (timeofdc, what) in list(var.DISCONNECTED.items()):
mainrole = get_main_role(dcedplayer)
revealrole = get_reveal_role(dcedplayer.nick) # FIXME
revealrole = get_reveal_role(dcedplayer)
if what in ("quit", "badnick") and (datetime.now() - timeofdc) > timedelta(seconds=var.QUIT_GRACE_TIME):
if mainrole != "person" and var.ROLE_REVEAL in ("on", "team"):
channels.Main.send(messages["quit_death"].format(dcedplayer, revealrole))
@ -3166,7 +3166,7 @@ def leave(var, what, user, why=None):
population = ""
killplayer = False
channels.Main.send(msg.format(user, get_reveal_role(user.nick)) + population) # FIXME: Need to fix this once get_reveal_role() accepts User instances
channels.Main.send(msg.format(user, get_reveal_role(user)) + population)
var.SPECTATING_WOLFCHAT.discard(user)
var.SPECTATING_DEADCHAT.discard(user)
leave_deadchat(var, user)
@ -3206,7 +3206,7 @@ def leave_game(cli, nick, chan, rest):
return
if get_role(nick) != "person" and var.ROLE_REVEAL in ("on", "team"):
role = get_reveal_role(nick)
role = get_reveal_role(users._get(nick)) # FIXME
an = "n" if role.startswith(("a", "e", "i", "o", "u")) else ""
if var.DYNQUIT_DURING_GAME:
lmsg = random.choice(messages["quit"]).format(nick, an, role)
@ -3592,7 +3592,7 @@ def transition_day(cli, gameid=0):
revt.data["novictmsg"] = False
elif victim not in revt.data["dead"]: # not already dead via some other means
if var.ROLE_REVEAL in ("on", "team"):
role = get_reveal_role(victim.nick)
role = get_reveal_role(victim)
an = "n" if role.startswith(("a", "e", "i", "o", "u")) else ""
revt.data["message"].append(messages["death"].format(victim, an, role))
else:
@ -3653,7 +3653,7 @@ def transition_day(cli, gameid=0):
if woflset:
deadwolf = random.choice(tuple(woflset))
if var.ROLE_REVEAL in ("on", "team"):
message.append(messages["gunner_killed_wolf_overnight"].format(victim, deadwolf, get_reveal_role(deadwolf.nick)))
message.append(messages["gunner_killed_wolf_overnight"].format(victim, deadwolf, get_reveal_role(deadwolf)))
else:
message.append(messages["gunner_killed_wolf_overnight_no_reveal"].format(victim, deadwolf))
dead.append(deadwolf)
@ -4210,7 +4210,7 @@ def shoot(var, wrapper, message):
wolfvictim = victim in list_players(var.WOLF_ROLES)
realrole = get_role(victim)
victimrole = get_reveal_role(victim)
victimrole = get_reveal_role(users._get(victim)) # FIXME
alwaysmiss = (realrole == "werekitten")
@ -4251,7 +4251,7 @@ def shoot(var, wrapper, message):
wrapper.send(messages["gunner_miss"].format(wrapper.source.nick))
else:
if var.ROLE_REVEAL in ("on", "team"):
wrapper.send(messages["gunner_suicide"].format(wrapper.source.nick, get_reveal_role(wrapper.source.nick)))
wrapper.send(messages["gunner_suicide"].format(wrapper.source.nick, get_reveal_role(wrapper.source)))
else:
wrapper.send(messages["gunner_suicide_no_reveal"].format(wrapper.source.nick))
if not del_player(wrapper.source, killer_role="villager"): # blame explosion on villager's shoddy gun construction or something