convert var.SPECTATING_WOLFCHAT to users, prevent !spectate deadchat

This commit is contained in:
jacob1 2017-11-05 20:11:05 -05:00
parent cac3200164
commit 7a003e4cb7
3 changed files with 26 additions and 27 deletions

View File

@ -779,6 +779,7 @@
"already_up_to_date": "Already up-to-date.",
"admin_fleave_deadchat": "You have forced {0} to leave the deadchat.",
"available_mode_setters_help": "Votes to make a specific game mode more likely. Available game mode setters: ",
"spectate_help": "Usage: spectate <wolfchat> [on|off]",
"fspectate_help": "Usage: fspectate <wolfchat|deadchat> [on|off]",
"fspectate_restricted": "You may not spectate while playing.",
"fspectate_deadchat_disabled": "Deadchat is disabled and may not be spectated.",

View File

@ -170,7 +170,10 @@ def relay_wolfchat_command(cli, nick, message, roles, is_wolf_command=False, is_
wcwolves = list_players(wcroles)
wcwolves.remove(nick)
mass_privmsg(cli, wcwolves, message)
mass_privmsg(cli, var.SPECTATING_WOLFCHAT, "[wolfchat] " + message)
for player in var.SPECTATING_WOLFCHAT:
player.queue_message("[wolfchat] " + message)
if var.SPECTATING_WOLFCHAT:
player.send_messages()
@proxy.stub
def chk_nightdone(cli):

View File

@ -924,7 +924,7 @@ def join_player(var, wrapper, who=None, forced=False, *, sanity=True):
# Abandon Hope All Ye Who Enter Here
leave_deadchat(var, wrapper.source)
var.SPECTATING_DEADCHAT.discard(wrapper.source)
var.SPECTATING_WOLFCHAT.discard(wrapper.source.nick)
var.SPECTATING_WOLFCHAT.discard(wrapper.source)
return True
var.ROLES["person"].add(wrapper.source.nick)
var.MAIN_ROLES[wrapper.source] = "person"
@ -2959,11 +2959,6 @@ def return_to_village(var, chan, target, *, show_message):
def rename_player(var, user, prefix):
nick = user.nick
if var.PHASE in var.GAME_PHASES:
if prefix in var.SPECTATING_WOLFCHAT:
var.SPECTATING_WOLFCHAT.remove(prefix)
var.SPECTATING_WOLFCHAT.add(nick)
event = Event("rename_player", {})
event.dispatch(user.client, var, prefix, nick) # FIXME: Need to update all the callbacks
@ -3220,7 +3215,7 @@ def leave(var, what, user, why=None):
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
var.SPECTATING_WOLFCHAT.discard(user.nick) # FIXME: Need to fix this once the variable holds User instances
var.SPECTATING_WOLFCHAT.discard(user)
var.SPECTATING_DEADCHAT.discard(user)
leave_deadchat(var, user)
@ -5128,10 +5123,16 @@ def relay(var, wrapper, message):
if message.startswith("\u0001ACTION"):
message = message[7:-1]
mass_privmsg(wrapper.client, to_msg, "* \u0002{0}\u0002{1}".format(wrapper.source, message))
mass_privmsg(wrapper.client, var.SPECTATING_WOLFCHAT, "* [wolfchat] \u0002{0}\u0002{1}".format(wrapper.source, message))
for player in var.SPECTATING_WOLFCHAT:
player.queue_message("* [wolfchat] \u0002{0}\u0002{1}".format(wrapper.source, message))
if var.SPECTATING_WOLFCHAT:
player.send_messages()
else:
mass_privmsg(wrapper.client, to_msg, "\u0002{0}\u0002 says: {1}".format(wrapper.source, message))
mass_privmsg(wrapper.client, var.SPECTATING_WOLFCHAT, "[wolfchat] \u0002{0}\u0002 says: {1}".format(wrapper.source, message))
for player in var.SPECTATING_WOLFCHAT:
player.queue_message("[wolfchat] \u0002{0}\u0002 says: {1}".format(wrapper.source, message))
if var.SPECTATING_WOLFCHAT:
player.send_messages()
@handle_error
def transition_night(cli):
@ -6908,7 +6909,7 @@ def can_run_restricted_cmd(user):
return True
def spectate_chat(var, wrapper, message, spectate_warning):
def spectate_chat(var, wrapper, message, *, is_fspectate):
if not can_run_restricted_cmd(wrapper.source):
wrapper.pm(messages["fspectate_restricted"])
return
@ -6921,41 +6922,35 @@ def spectate_chat(var, wrapper, message, spectate_warning):
elif len(params) > 1:
on = params[1].lower()
what = params[0].lower()
if what not in ("wolfchat", "deadchat") or on not in ("on", "off"):
wrapper.pm(messages["fspectate_help"])
allowed = ("wolfchat", "deadchat") if is_fspectate else ("wolfchat",)
if what not in allowed or on not in ("on", "off"):
wrapper.pm(messages["fspectate_help" if is_fspectate else "spectate_help"])
return
if on == "off":
if what == "wolfchat":
var.SPECTATING_WOLFCHAT.discard(wrapper.source.nick)
var.SPECTATING_WOLFCHAT.discard(wrapper.source)
else:
var.SPECTATING_DEADCHAT.discard(wrapper.source)
wrapper.pm(messages["fspectate_off"].format(what))
else:
players = []
if what == "wolfchat":
already_spectating = wrapper.source.nick in var.SPECTATING_WOLFCHAT
var.SPECTATING_WOLFCHAT.add(wrapper.source.nick)
already_spectating = wrapper.source in var.SPECTATING_WOLFCHAT
var.SPECTATING_WOLFCHAT.add(wrapper.source)
players = [p for p in get_players() if in_wolflist(p.nick, p.nick)]
if spectate_warning and not already_spectating and var.SPECTATE_NOTICE:
if not is_fspectate and not already_spectating and var.SPECTATE_NOTICE:
spectator = wrapper.source.nick if var.SPECTATE_NOTICE_USER else "Someone"
for player in players:
player.queue_message(messages["fspectate_notice"].format(spectator, what))
if players:
player.send_messages()
elif var.ENABLE_DEADCHAT:
already_spectating = wrapper.source in var.SPECTATING_DEADCHAT
if wrapper.source in var.DEADCHAT_PLAYERS:
wrapper.pm(messages["fspectate_in_deadchat"])
return
var.SPECTATING_DEADCHAT.add(wrapper.source)
players = var.DEADCHAT_PLAYERS
if spectate_warning and not already_spectating and var.SPECTATE_NOTICE:
spectator = wrapper.source.nick if var.SPECTATE_NOTICE_USER else "Someone"
for player in players:
player.queue_message(messages["fspectate_notice"].format(spectator, what))
if players:
player.send_messages()
else:
wrapper.pm(messages["fspectate_deadchat_disabled"])
return
@ -6963,14 +6958,14 @@ def spectate_chat(var, wrapper, message, spectate_warning):
wrapper.pm("People in {0}: {1}".format(what, ", ".join([player.nick for player in players])))
@command("spectate", flag="p", pm=True, phases=("day", "night"))
def fspectate(var, wrapper, message):
def spectate(var, wrapper, message):
"""Spectate wolfchat or deadchat."""
spectate_chat(var, wrapper, message, True)
spectate_chat(var, wrapper, message, is_fspectate=False)
@command("fspectate", flag="F", pm=True, phases=("day", "night"))
def fspectate(var, wrapper, message):
"""Spectate wolfchat or deadchat."""
spectate_chat(var, wrapper, message, False)
spectate_chat(var, wrapper, message, is_fspectate=True)
@command("revealroles", flag="a", pm=True, phases=("day", "night"))
def revealroles(var, wrapper, message):