remove village elder role

This commit is contained in:
jacob1 2015-06-09 01:39:16 -04:00
parent 255a3562c8
commit 47b18d3655
2 changed files with 21 additions and 46 deletions

View File

@ -154,7 +154,6 @@ ROLE_GUIDE = {# village roles
"guardian angel" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), "guardian angel" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ),
"bodyguard" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ), "bodyguard" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ),
"detective" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), "detective" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ),
"village elder" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ),
"time lord" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), "time lord" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ),
"matchmaker" : ( 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), "matchmaker" : ( 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ),
"mad scientist" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ), "mad scientist" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ),
@ -206,11 +205,11 @@ WOLFTEAM_ROLES = WOLFCHAT_ROLES + ["minion", "cultist"]
# These roles never win as a team, only ever individually (either instead of or in addition to the regular winners) # These roles never win as a team, only ever individually (either instead of or in addition to the regular winners)
TRUE_NEUTRAL_ROLES = ["crazed shaman", "fool", "jester", "monster", "clone", "piper"] TRUE_NEUTRAL_ROLES = ["crazed shaman", "fool", "jester", "monster", "clone", "piper"]
# These are the roles that will NOT be used for when amnesiac turns, everything else is fair game! (var.DEFAULT_ROLE is also appended if not in this list) # These are the roles that will NOT be used for when amnesiac turns, everything else is fair game! (var.DEFAULT_ROLE is also appended if not in this list)
AMNESIAC_BLACKLIST = ["monster", "minion", "matchmaker", "clone", "doctor", "villager", "cultist", "piper", "village elder"] AMNESIAC_BLACKLIST = ["monster", "minion", "matchmaker", "clone", "doctor", "villager", "cultist", "piper"]
# These roles are seen as wolf by the seer/oracle # These roles are seen as wolf by the seer/oracle
SEEN_WOLF = WOLF_ROLES + ["monster", "mad scientist"] SEEN_WOLF = WOLF_ROLES + ["monster", "mad scientist"]
# These are seen as the default role (or villager) when seen by seer (this overrides SEEN_WOLF) # These are seen as the default role (or villager) when seen by seer (this overrides SEEN_WOLF)
SEEN_DEFAULT = ["traitor", "hag", "sorcerer", "village elder", "time lord", "villager", "cultist", "minion", SEEN_DEFAULT = ["traitor", "hag", "sorcerer", "time lord", "villager", "cultist", "minion",
"vengeful ghost", "lycan", "clone", "fool", "jester", "werekitten", "warlock", "piper"] "vengeful ghost", "lycan", "clone", "fool", "jester", "werekitten", "warlock", "piper"]
# The roles in here are considered templates and will be applied on TOP of other roles. The restrictions are a list of roles that they CANNOT be applied to # The roles in here are considered templates and will be applied on TOP of other roles. The restrictions are a list of roles that they CANNOT be applied to
@ -758,7 +757,7 @@ class RandomMode(GameMode):
def __init__(self): def __init__(self):
self.AMNESIAC_NIGHTS = 1 self.AMNESIAC_NIGHTS = 1
self.IGNORE_NO_WOLF = True self.IGNORE_NO_WOLF = True
self.AMNESIAC_BLACKLIST = ["cultist", "village elder"] self.AMNESIAC_BLACKLIST = ["cultist"]
self.LOVER_WINS_WITH_FOOL = True self.LOVER_WINS_WITH_FOOL = True
self.MAD_SCIENTIST_SKIPS_DEAD_PLAYERS = 0 # always make it happen self.MAD_SCIENTIST_SKIPS_DEAD_PLAYERS = 0 # always make it happen
self.ALPHA_WOLF_NIGHTS = 2 self.ALPHA_WOLF_NIGHTS = 2
@ -964,7 +963,6 @@ class CharmingMode(GameMode):
"shaman" : ( 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 ), "shaman" : ( 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 ),
"detective" : ( 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), "detective" : ( 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ),
"bodyguard" : ( 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 2 , 2 , 2 , 2 ), "bodyguard" : ( 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 2 , 2 , 2 , 2 ),
"village elder" : ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ),
# wolf roles # wolf roles
"wolf" : ( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 ), "wolf" : ( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 ),
"traitor" : ( 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ), "traitor" : ( 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ),

View File

@ -1258,7 +1258,7 @@ def stats(cli, nick, chan, rest):
continue continue
amnrole = var.get_role(amn) amnrole = var.get_role(amn)
if amnrole in ("village elder", "time lord"): if amnrole == "time lord":
amnrole = "villager" amnrole = "villager"
elif amnrole == "vengeful ghost": elif amnrole == "vengeful ghost":
amnrole = var.DEFAULT_ROLE amnrole = var.DEFAULT_ROLE
@ -1275,7 +1275,7 @@ def stats(cli, nick, chan, rest):
vb = "are" vb = "are"
for role in rs: for role in rs:
# only show actual roles # only show actual roles
if role in ("village elder", "time lord", "vengeful ghost") or role in var.TEMPLATE_RESTRICTIONS.keys(): if role in ("time lord", "vengeful ghost") or role in var.TEMPLATE_RESTRICTIONS.keys():
continue continue
count = len(var.ROLES[role]) count = len(var.ROLES[role])
if role == "traitor" and var.HIDDEN_TRAITOR: if role == "traitor" and var.HIDDEN_TRAITOR:
@ -1288,9 +1288,8 @@ def stats(cli, nick, chan, rest):
count += len(var.ROLES["traitor"]) count += len(var.ROLES["traitor"])
count += bitten_roles["traitor"] count += bitten_roles["traitor"]
if var.DEFAULT_ROLE == "villager": if var.DEFAULT_ROLE == "villager":
count += len(var.ROLES["village elder"] + var.ROLES["time lord"] + var.ROLES["vengeful ghost"]) count += len(var.ROLES["time lord"] + var.ROLES["vengeful ghost"])
count -= len([p for p in var.CURED_LYCANS if p in var.ROLES["villager"]]) count -= len([p for p in var.CURED_LYCANS if p in var.ROLES["villager"]])
count += bitten_roles["village elder"]
count += bitten_roles["time lord"] count += bitten_roles["time lord"]
count += bitten_roles["vengeful ghost"] count += bitten_roles["vengeful ghost"]
else: else:
@ -1298,10 +1297,9 @@ def stats(cli, nick, chan, rest):
count += bitten_roles["vengeful ghost"] count += bitten_roles["vengeful ghost"]
count += bitten_roles[var.DEFAULT_ROLE] count += bitten_roles[var.DEFAULT_ROLE]
elif role == "villager": elif role == "villager":
count += len(var.ROLES["village elder"] + var.ROLES["time lord"]) count += len(var.ROLES["time lord"])
count -= len([p for p in var.CURED_LYCANS if p in var.ROLES["villager"]]) count -= len([p for p in var.CURED_LYCANS if p in var.ROLES["villager"]])
count += bitten_roles["villager"] count += bitten_roles["villager"]
count += bitten_roles["village elder"]
count += bitten_roles["time lord"] count += bitten_roles["time lord"]
elif role == "wolf": elif role == "wolf":
count -= sum(bitten_roles.values()) count -= sum(bitten_roles.values())
@ -2068,7 +2066,7 @@ def del_player(cli, nick, forced_death = False, devoice = True, end_game = True,
sayrole = nickrole sayrole = nickrole
debuglog("{0} (clone) CLONE DEAD PLAYER: {1} ({2})".format(clone, target, sayrole)) debuglog("{0} (clone) CLONE DEAD PLAYER: {1} ({2})".format(clone, target, sayrole))
# if cloning time lord or vengeful ghost, say they are villager instead # if cloning time lord or vengeful ghost, say they are villager instead
if sayrole in ("time lord", "village elder"): if sayrole == "time lord":
sayrole = "villager" sayrole = "villager"
elif sayrole == "vengeful ghost": elif sayrole == "vengeful ghost":
sayrole = var.DEFAULT_ROLE sayrole = var.DEFAULT_ROLE
@ -2690,9 +2688,6 @@ def on_nick(cli, oldnick, nick):
if prefix in var.TOBESILENCED: if prefix in var.TOBESILENCED:
var.TOBESILENCED.remove(prefix) var.TOBESILENCED.remove(prefix)
var.TOBESILENCED.append(nick) var.TOBESILENCED.append(nick)
if prefix in var.DYING:
var.DYING.remove(prefix)
var.DYING.append(nick)
if prefix in var.REVEALED_MAYORS: if prefix in var.REVEALED_MAYORS:
var.REVEALED_MAYORS.remove(prefix) var.REVEALED_MAYORS.remove(prefix)
var.REVEALED_MAYORS.append(nick) var.REVEALED_MAYORS.append(nick)
@ -3157,8 +3152,7 @@ def transition_day(cli, gameid=0):
if target == "villagers": if target == "villagers":
victim = var.OTHER_KILLS[ghost] victim = var.OTHER_KILLS[ghost]
killers[victim].append(ghost) killers[victim].append(ghost)
if victim not in var.DYING: # wolf ghost killing ghost will take precedence over everything except elder wolfghostvictims.append(victim)
wolfghostvictims.append(victim)
for k, d in var.OTHER_KILLS.items(): for k, d in var.OTHER_KILLS.items():
victims.append(d) victims.append(d)
@ -3170,11 +3164,6 @@ def transition_day(cli, gameid=0):
onlybywolves.discard(d) onlybywolves.discard(d)
killers[d].append(k) killers[d].append(k)
# handle elder and other auto-deaths
for d in var.DYING:
victims.append(d)
onlybywolves.discard(d)
victims_set = set(victims) # remove duplicates victims_set = set(victims) # remove duplicates
victims_set.discard(None) # in the event that ever happens victims_set.discard(None) # in the event that ever happens
vappend = [] vappend = []
@ -3186,9 +3175,6 @@ def transition_day(cli, gameid=0):
# we re-add them to onlybywolves to indicate that the other kill attempts were guarded against (and the wolf kill is what went through) # we re-add them to onlybywolves to indicate that the other kill attempts were guarded against (and the wolf kill is what went through)
# If protections >= kills, we keep track of which protection message to show (prot totem > GA > bodyguard) # If protections >= kills, we keep track of which protection message to show (prot totem > GA > bodyguard)
for v in victims_set: for v in victims_set:
if v in var.DYING:
# this person is dying no matter what
continue
numkills = victims.count(v) numkills = victims.count(v)
numtotems = var.PROTECTED.count(v) numtotems = var.PROTECTED.count(v)
if numtotems >= numkills: if numtotems >= numkills:
@ -3410,7 +3396,7 @@ def transition_day(cli, gameid=0):
novictmsg = False novictmsg = False
for victim in vlist: for victim in vlist:
if victim in var.ROLES["harlot"] and var.HVISITED.get(victim) and victim not in var.DYING and victim not in dead and victim in onlybywolves: if victim in var.ROLES["harlot"] and var.HVISITED.get(victim) and victim not in dead and victim in onlybywolves:
message.append("The wolves' selected victim was a harlot, who was not at home last night.") message.append("The wolves' selected victim was a harlot, who was not at home last night.")
novictmsg = False novictmsg = False
elif protected.get(victim) == "totem": elif protected.get(victim) == "totem":
@ -3982,13 +3968,13 @@ def check_exchange(cli, actor, nick):
actor_rev_role = actor_role actor_rev_role = actor_role
if actor_role == "vengeful ghost": if actor_role == "vengeful ghost":
actor_rev_role = var.DEFAULT_ROLE actor_rev_role = var.DEFAULT_ROLE
elif actor_role in ("village elder", "time lord"): elif actor_role == "time lord":
actor_rev_role = "villager" actor_rev_role = "villager"
nick_rev_role = nick_role nick_rev_role = nick_role
if nick_role == "vengeful ghost": if nick_role == "vengeful ghost":
nick_rev_role = var.DEFAULT_ROLE nick_rev_role = var.DEFAULT_ROLE
elif actor_role in ("village elder", "time lord"): elif actor_role == "time lord":
nick_rev_role = "villager" nick_rev_role = "villager"
# don't say who, since misdirection/luck totem may have switched it # don't say who, since misdirection/luck totem may have switched it
@ -4023,7 +4009,7 @@ def check_exchange(cli, actor, nick):
pm(cli, actor, "Players: " + ", ".join(pl)) pm(cli, actor, "Players: " + ", ".join(pl))
if actor_role == "wolf mystic": if actor_role == "wolf mystic":
# # of special villagers = # of players - # of villagers - # of wolves - # of neutrals # # of special villagers = # of players - # of villagers - # of wolves - # of neutrals
numvills = len(ps) - len(var.list_players(var.WOLFTEAM_ROLES)) - len(var.list_players(("villager", "vengeful ghost", "time lord", "amnesiac", "village elder", "lycan"))) - len(var.list_players(var.TRUE_NEUTRAL_ROLES)) numvills = len(ps) - len(var.list_players(var.WOLFTEAM_ROLES)) - len(var.list_players(("villager", "vengeful ghost", "time lord", "amnesiac", "lycan"))) - len(var.list_players(var.TRUE_NEUTRAL_ROLES))
pm(cli, actor, "There are \u0002{0}\u0002 special villager{1} still alive.".format(numvills, "s" if numvills != 1 else "")) pm(cli, actor, "There are \u0002{0}\u0002 special villager{1} still alive.".format(numvills, "s" if numvills != 1 else ""))
if var.DISEASED_WOLVES: if var.DISEASED_WOLVES:
pm(cli, actor, 'You are feeling ill tonight, and are unable to kill anyone.') pm(cli, actor, 'You are feeling ill tonight, and are unable to kill anyone.')
@ -4064,7 +4050,7 @@ def check_exchange(cli, actor, nick):
pm(cli, nick, "Players: " + ", ".join(pl)) pm(cli, nick, "Players: " + ", ".join(pl))
if nick_role == "wolf mystic": if nick_role == "wolf mystic":
# # of special villagers = # of players - # of villagers - # of wolves - # of neutrals # # of special villagers = # of players - # of villagers - # of wolves - # of neutrals
numvills = len(ps) - len(var.list_players(var.WOLFTEAM_ROLES)) - len(var.list_players(("villager", "vengeful ghost", "time lord", "amnesiac", "village elder", "lycan"))) - len(var.list_players(var.TRUE_NEUTRAL_ROLES)) numvills = len(ps) - len(var.list_players(var.WOLFTEAM_ROLES)) - len(var.list_players(("villager", "vengeful ghost", "time lord", "amnesiac", "lycan"))) - len(var.list_players(var.TRUE_NEUTRAL_ROLES))
pm(cli, nick, "There are \u0002{0}\u0002 special villager{1} still alive.".format(numvills, "s" if numvills != 1 else "")) pm(cli, nick, "There are \u0002{0}\u0002 special villager{1} still alive.".format(numvills, "s" if numvills != 1 else ""))
if var.DISEASED_WOLVES: if var.DISEASED_WOLVES:
pm(cli, nick, 'You are feeling ill tonight, and are unable to kill anyone.') pm(cli, nick, 'You are feeling ill tonight, and are unable to kill anyone.')
@ -5186,7 +5172,6 @@ def transition_night(cli):
var.CHARMERS = set() # pipers who have charmed var.CHARMERS = set() # pipers who have charmed
var.HVISITED = {} var.HVISITED = {}
var.ASLEEP = [] var.ASLEEP = []
var.DYING = []
var.PROTECTED = [] var.PROTECTED = []
var.DESPERATE = [] var.DESPERATE = []
var.REVEALED = [] var.REVEALED = []
@ -5274,7 +5259,7 @@ def transition_night(cli):
# no need for a/an since newrole is either wolf or fallen angel # no need for a/an since newrole is either wolf or fallen angel
pm(cli, wolf, "\u0002{0}\u0002 is now a \u0002{1}\u0002!".format(chump, newrole)) pm(cli, wolf, "\u0002{0}\u0002 is now a \u0002{1}\u0002!".format(chump, newrole))
# convert amnesiac and kill village elder if necessary # convert amnesiac
if var.NIGHT_COUNT == var.AMNESIAC_NIGHTS: if var.NIGHT_COUNT == var.AMNESIAC_NIGHTS:
amns = copy.copy(var.ROLES["amnesiac"]) amns = copy.copy(var.ROLES["amnesiac"])
for amn in amns: for amn in amns:
@ -5285,7 +5270,7 @@ def transition_night(cli):
if var.FIRST_NIGHT: # we don't need to tell them twice if they remember right away if var.FIRST_NIGHT: # we don't need to tell them twice if they remember right away
continue continue
showrole = amnrole showrole = amnrole
if showrole in ("village elder", "time lord"): if showrole == "time lord":
showrole = "villager" showrole = "villager"
elif showrole == "vengeful ghost": elif showrole == "vengeful ghost":
showrole = var.DEFAULT_ROLE showrole = var.DEFAULT_ROLE
@ -5299,13 +5284,6 @@ def transition_night(cli):
pm(cli, wolf, "\u0002{0}\u0002 is now a \u0002{1}\u0002!".format(amn, showrole)) pm(cli, wolf, "\u0002{0}\u0002 is now a \u0002{1}\u0002!".format(amn, showrole))
debuglog("{0} REMEMBER: {1} as {2}".format(amn, amnrole, showrole)) debuglog("{0} REMEMBER: {1} as {2}".format(amn, amnrole, showrole))
numwolves = len(var.list_players(var.WOLF_ROLES))
if var.NIGHT_COUNT >= numwolves + 1:
if "village elder" in var.ROLES:
for elder in var.ROLES["village elder"]:
var.DYING.append(elder)
debuglog(elder, "ELDER DEATH")
if var.FIRST_NIGHT and chk_win(cli, end_game=False): # prevent game from ending as soon as it begins (useful for the random game mode) if var.FIRST_NIGHT and chk_win(cli, end_game=False): # prevent game from ending as soon as it begins (useful for the random game mode)
start(cli, botconfig.NICK, botconfig.CHANNEL, restart=var.CURRENT_GAMEMODE.name) start(cli, botconfig.NICK, botconfig.CHANNEL, restart=var.CURRENT_GAMEMODE.name)
return return
@ -5399,7 +5377,7 @@ def transition_night(cli):
if role == "wolf mystic": if role == "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 # 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 # # of special villagers = # of players - # of villagers - # of wolves - # of neutrals
numvills = len(ps) - len(var.list_players(var.WOLFTEAM_ROLES)) - len(var.list_players(("villager", "vengeful ghost", "time lord", "amnesiac", "village elder", "lycan"))) - len(var.list_players(var.TRUE_NEUTRAL_ROLES)) numvills = len(ps) - len(var.list_players(var.WOLFTEAM_ROLES)) - len(var.list_players(("villager", "vengeful ghost", "time lord", "amnesiac", "lycan"))) - len(var.list_players(var.TRUE_NEUTRAL_ROLES))
pm(cli, wolf, "There are \u0002{0}\u0002 special villager{1} still alive.".format(numvills, "s" if numvills != 1 else "")) pm(cli, wolf, "There are \u0002{0}\u0002 special villager{1} still alive.".format(numvills, "s" if numvills != 1 else ""))
if wolf in var.WOLF_GUNNERS.keys() and var.WOLF_GUNNERS[wolf] > 0: if wolf in var.WOLF_GUNNERS.keys() and var.WOLF_GUNNERS[wolf] > 0:
pm(cli, wolf, "You have a \u0002gun\u0002 with {0} bullet{1}.".format(var.WOLF_GUNNERS[wolf], "s" if var.WOLF_GUNNERS[wolf] > 1 else "")) pm(cli, wolf, "You have a \u0002gun\u0002 with {0} bullet{1}.".format(var.WOLF_GUNNERS[wolf], "s" if var.WOLF_GUNNERS[wolf] > 1 else ""))
@ -5788,7 +5766,7 @@ def transition_night(cli):
pm(cli, minion, "Wolves: " + ", ".join(wolves)) pm(cli, minion, "Wolves: " + ", ".join(wolves))
villagers = copy.copy(var.ROLES["villager"]) villagers = copy.copy(var.ROLES["villager"])
villagers += var.ROLES["time lord"] + var.ROLES["village elder"] villagers += var.ROLES["time lord"]
if var.DEFAULT_ROLE == "villager": if var.DEFAULT_ROLE == "villager":
villagers += var.ROLES["vengeful ghost"] + var.ROLES["amnesiac"] villagers += var.ROLES["vengeful ghost"] + var.ROLES["amnesiac"]
for villager in villagers: for villager in villagers:
@ -6008,7 +5986,6 @@ def start(cli, nick, chan, forced = False, restart = ""):
var.REVEALED = [] var.REVEALED = []
var.ASLEEP = [] var.ASLEEP = []
var.PROTECTED = [] var.PROTECTED = []
var.DYING = []
var.JESTERS = [] var.JESTERS = []
var.AMNESIACS = [] var.AMNESIACS = []
var.NIGHT_COUNT = 0 var.NIGHT_COUNT = 0
@ -6974,9 +6951,9 @@ def myrole(cli, nick, chan, rest):
return return
role = var.get_role(nick) role = var.get_role(nick)
if role in ("time lord", "village elder", "amnesiac"): if role == "time lord":
role = var.DEFAULT_ROLE role = "villager"
elif role == "vengeful ghost": elif role in ("amnesiac", "vengeful ghost"):
role = var.DEFAULT_ROLE role = var.DEFAULT_ROLE
an = "n" if role.startswith(("a", "e", "i", "o", "u")) else "" an = "n" if role.startswith(("a", "e", "i", "o", "u")) else ""
pm(cli, nick, "You are a{0} \u0002{1}\u0002.".format(an, role)) pm(cli, nick, "You are a{0} \u0002{1}\u0002.".format(an, role))