Improve PM commands to tell all wolves (+tell who is wolf).

Also remove the nick from the message if it's in PM, regardless.
This commit is contained in:
Vgr E.Barry 2015-02-26 09:23:19 -05:00
parent c75ec4f559
commit 180f64e7b8

View File

@ -1315,14 +1315,35 @@ def stats(cli, nick, chan, rest):
var.LAST_STATS = datetime.now() var.LAST_STATS = datetime.now()
if len(pl) > 1: _nick = nick + ": "
msg = '{0}: \u0002{1}\u0002 players: {2}'.format(nick, if nick == chan:
_nick = ""
if chan == nick and nick in pl and var.get_role(nick) in var.WOLFCHAT_ROLES:
ps = pl[:]
random.shuffle(ps)
for i, player in enumerate(ps):
prole = var.get_role(player)
if prole in var.WOLFCHAT_ROLES:
cursed = ""
if player in var.ROLES["cursed villager"]:
cursed = "cursed "
ps[i] = "\u0002{0}\u0002 ({1}{2})".format(player, cursed, prole)
elif player in var.ROLES["cursed villager"]:
ps[i] = player + " (cursed)"
msg = '\u0002{0}\u0002 players: {1}'.format(len(pl), ", ".join(ps))
elif len(pl) > 1:
msg = '{0}\u0002{1}\u0002 players: {2}'.format(_nick,
len(pl), ", ".join(pl)) len(pl), ", ".join(pl))
else: else:
msg = '{0}: \u00021\u0002 player: {1}'.format(nick, pl[0]) msg = '{0}\u00021\u0002 player: {1}'.format(_nick, pl[0])
if nick == chan: if nick == chan:
pm(cli, nick, msg) if nick in pl and var.get_role(nick) in var.WOLFCHAT_ROLES:
wolfchat(cli, None, msg)
else:
pm(cli, nick, msg)
else: else:
if nick in pl or var.PHASE == "join": if nick in pl or var.PHASE == "join":
cli.msg(chan, msg) cli.msg(chan, msg)
@ -1423,13 +1444,16 @@ def stats(cli, nick, chan, rest):
message.append("\u0002{0}\u0002 {1}".format(count if count else "\u0002no\u0002", var.plural(role))) message.append("\u0002{0}\u0002 {1}".format(count if count else "\u0002no\u0002", var.plural(role)))
else: else:
message.append("\u0002{0}\u0002 {1}".format(count, role)) message.append("\u0002{0}\u0002 {1}".format(count, role))
stats_mssg = "{0}: It is currently {4}. There {3} {1}, and {2}.".format(nick, stats_mssg = "{0}It is currently {4}. There {3} {1}, and {2}.".format(_nick,
", ".join(message[0:-1]), ", ".join(message[0:-1]),
message[-1], message[-1],
vb, vb,
var.PHASE) var.PHASE)
if nick == chan: if nick == chan:
pm(cli, nick, stats_mssg) if nick in pl and var.get_role(nick) in var.WOLFCHAT_ROLES:
wolfchat(cli, None, stats_mssg)
else:
pm(cli, nick, stats_mssg)
else: else:
if nick in pl or var.PHASE == "join": if nick in pl or var.PHASE == "join":
cli.msg(chan, stats_mssg) cli.msg(chan, stats_mssg)
@ -1662,11 +1686,15 @@ def show_votes(cli, nick, chan, rest):
pl = var.list_players() pl = var.list_players()
_nick = nick + ": "
if chan == nick:
_nick = ""
if chan != nick and nick in pl: if chan != nick and nick in pl:
var.LAST_VOTES = datetime.now() var.LAST_VOTES = datetime.now()
if not var.VOTES.values(): if not var.VOTES.values():
msg = nick+ ': No votes yet.' msg = _nick + 'No votes yet.'
if nick in pl: if nick in pl:
var.LAST_VOTES = None # reset var.LAST_VOTES = None # reset
@ -1675,10 +1703,13 @@ def show_votes(cli, nick, chan, rest):
len(var.VOTES[votee]), len(var.VOTES[votee]),
' '.join(var.VOTES[votee])) ' '.join(var.VOTES[votee]))
for votee in var.VOTES.keys()] for votee in var.VOTES.keys()]
msg = '{}: {}'.format(nick, ', '.join(votelist)) msg = '{}{}'.format(_nick, ', '.join(votelist))
if chan == nick: if chan == nick:
pm(cli, nick, msg) if nick in pl and var.get_role(nick) in var.WOLFCHAT_ROLES:
wolfchat(cli, None, msg)
else:
pm(cli, nick, msg)
elif nick not in pl and var.PHASE not in ("none", "join"): elif nick not in pl and var.PHASE not in ("none", "join"):
cli.notice(nick, msg) cli.notice(nick, msg)
else: else:
@ -1692,12 +1723,15 @@ def show_votes(cli, nick, chan, rest):
plural = " has" plural = " has"
else: else:
plural = "s have" plural = "s have"
the_message = ('{}: \u0002{}\u0002 players, \u0002{}\u0002 votes ' the_message = ('{}\u0002{}\u0002 players, \u0002{}\u0002 votes '
'required to lynch, \u0002{}\u0002 players available to ' 'required to lynch, \u0002{}\u0002 players available to '
'vote. \u0002{}\u0002 player{} refrained from voting.').format(nick, len(pl), votesneeded, avail, not_voting, plural) 'vote. \u0002{}\u0002 player{} refrained from voting.').format(_nick, len(pl), votesneeded, avail, not_voting, plural)
if chan == nick: if chan == nick:
pm(cli, nick, the_message) if nick in pl and var.get_role(nick) in var.WOLFCHAT_ROLES:
wolfchat(cli, None, the_message)
else:
pm(cli, nick, the_message)
elif nick not in pl and var.PHASE not in ("none", "join"): elif nick not in pl and var.PHASE not in ("none", "join"):
cli.notice(nick, the_message) cli.notice(nick, the_message)
else: else:
@ -4935,18 +4969,20 @@ def relay(cli, nick, chan, rest):
if var.PHASE not in ("night", "day"): if var.PHASE not in ("night", "day"):
return return
if rest.startswith("\01ACTION"):
rest = rest[7:-1]
wolfchat(cli, nick, "\02{0}\02{1}".format(nick, rest))
else:
wolfchat(cli, nick, "\02{0}\02 says: {1}".format(nick, rest))
def wolfchat(cli, sender, msg):
badguys = var.list_players(var.WOLFCHAT_ROLES) badguys = var.list_players(var.WOLFCHAT_ROLES)
if len(badguys) > 1: if len(badguys) > 1:
if nick in badguys: if sender in badguys:
badguys.remove(nick) # remove self from list badguys.remove(sender)
if rest.startswith("\01ACTION"): mass_privmsg(cli, [guy for guy in badguys
rest = rest[7:-1] if guy in var.PLAYERS], msg)
mass_privmsg(cli, [guy for guy in badguys
if guy in var.PLAYERS], "\02{0}\02{1}".format(nick, rest))
else:
mass_privmsg(cli, [guy for guy in badguys
if guy in var.PLAYERS], "\02{0}\02 says: {1}".format(nick, rest))
def transition_night(cli): def transition_night(cli):
if var.PHASE == "night": if var.PHASE == "night":
@ -6526,6 +6562,9 @@ def listroles(cli, nick, chan, rest):
old = {} old = {}
txt = "" txt = ""
index = 0 index = 0
_nick = nick + ": "
if chan == nick:
_nick = ""
pl = len(var.list_players()) + len(var.DEAD) pl = len(var.list_players()) + len(var.DEAD)
roleindex = var.ROLE_INDEX roleindex = var.ROLE_INDEX
roleguide = var.ROLE_GUIDE roleguide = var.ROLE_GUIDE
@ -6535,7 +6574,7 @@ def listroles(cli, nick, chan, rest):
rest = re.split(" +", rest.strip(), 1) rest = re.split(" +", rest.strip(), 1)
#prepend player count if called without any arguments #prepend player count if called without any arguments
if not len(rest[0]) and pl > 0: if not len(rest[0]) and pl > 0:
txt += " {0}: There {1} \u0002{2}\u0002 playing.".format(nick, "is" if pl == 1 else "are", pl) txt += " {0}There {1} \u0002{2}\u0002 playing.".format(_nick, "is" if pl == 1 else "are", pl)
if var.PHASE in ["night", "day"]: if var.PHASE in ["night", "day"]:
txt += " Using the {0} game mode.".format(var.CURRENT_GAMEMODE) txt += " Using the {0} game mode.".format(var.CURRENT_GAMEMODE)
@ -6552,7 +6591,7 @@ def listroles(cli, nick, chan, rest):
roleguide = getattr(mode, "ROLE_GUIDE") roleguide = getattr(mode, "ROLE_GUIDE")
rest.pop(0) rest.pop(0)
else: else:
txt += " {0}: {1} is not a valid game mode.".format(nick, rest[0]) txt += " {0}{1} is not a valid game mode.".format(_nick, rest[0])
rest = [] rest = []
roleindex = {} roleindex = {}
@ -6589,7 +6628,10 @@ def listroles(cli, nick, chan, rest):
txt = txt[1:] txt = txt[1:]
if chan == nick: if chan == nick:
pm(cli, nick, txt) if nick in var.list_players() and var.get_role(nick) in var.WOLFCHAT_ROLES:
wolfchat(cli, None, txt)
else:
pm(cli, nick, txt)
elif nick not in var.list_players() and var.PHASE not in ("none", "join"): elif nick not in var.list_players() and var.PHASE not in ("none", "join"):
cli.notice(nick, txt) cli.notice(nick, txt)
else: else: