diff --git a/messages/en.json b/messages/en.json index 5067a5d..370783a 100644 --- a/messages/en.json +++ b/messages/en.json @@ -783,7 +783,7 @@ "cat_land": "The cat lands on its \u0002feet\u0002.", "vengeful_role": "You are a \u0002vengeful ghost\u0002 who is against the \u0002{0}\u0002.", "show_role": "You are a{0} \u0002{1}\u0002.", - "original_wolves": "Original wolves: ", + "original_wolves": "Original wolves: {0}", "turncoat_side": "Current side: \u0002{0}\u0002.", "assassin_role_info": "You are an \u0002assassin\u0002{0}.", "assassin_targeting": " and targeting {0}", diff --git a/src/roles/minion.py b/src/roles/minion.py new file mode 100644 index 0000000..3c85a20 --- /dev/null +++ b/src/roles/minion.py @@ -0,0 +1,48 @@ +import re +import random +import itertools +import math +from collections import defaultdict + +import botconfig +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.containers import UserList, UserSet, UserDict, DefaultUserDict +from src.messages import messages +from src.events import Event + +def wolf_list(var): + wolves = [wolf.nick for wolf in get_all_players(var.WOLF_ROLES)] + random.shuffle(wolves) + return messages["wolves_list"].format(", ".join(wolves)) + +@event_listener("transition_night_end", priority=2) +def on_transition_night_end(evt, var): + if var.FIRST_NIGHT or var.ALWAYS_PM_ROLE: + for minion in get_all_players(("minion",)): + if minion.prefers_simple(): + to_send = "minion_simple" + else: + to_send = "minion_notify" + minion.send(messages[to_send]) + minion.send(wolf_list(var)) + +@event_listener("exchange_roles") +def on_exchange(evt, var, actor, target, actor_role, target_role): + if actor_role == "minion": + evt.data["target_messages"].append(wolf_list(var)) + elif target_role == "minion": + evt.data["actor_messages"].append(wolf_list(var)) + +@event_listener("myrole") +def on_myrole(evt, var, user): + if user in get_all_players(("minion",)): + wolves = [] + for wolfrole in var.WOLF_ROLES: + for player in var.ORIGINAL_ROLES[wolfrole]: + wolves.append(player.nick) + evt.data["messages"].append(messages["original_wolves"].format(", ".join(wolves))) + +# vim: set sw=4 expandtab: diff --git a/src/wolfgame.py b/src/wolfgame.py index 7e8dca5..e96f125 100644 --- a/src/wolfgame.py +++ b/src/wolfgame.py @@ -3843,10 +3843,6 @@ def check_exchange(cli, actor, nick): if player in get_roles("cursed villager"): # FIXME pl[i] = player + " (cursed)" pm(cli, actor, messages["players_list"].format(", ".join(pl))) - elif nick_role == "minion": - wolves = list_players(var.WOLF_ROLES) - random.shuffle(wolves) - pm(cli, actor, messages["wolves_list"].format(", ".join(wolves))) elif nick_role == "turncoat": var.TURNCOATS[actor] = ("none", -1) @@ -3861,10 +3857,6 @@ def check_exchange(cli, actor, nick): if player in get_roles("cursed villager"): # FIXME pl[i] = player + " (cursed)" pm(cli, nick, messages["players_list"].format(", ".join(pl))) - elif actor_role == "minion": - wolves = list_players(var.WOLF_ROLES) - random.shuffle(wolves) - pm(cli, nick, messages["wolves_list"].format(", ".join(wolves))) elif actor_role == "turncoat": var.TURNCOATS[nick] = ("none", -1) @@ -4758,15 +4750,6 @@ def transition_night(): clone.send(messages["clone_notify"]) clone.send(messages["players_list"].format(", ".join(p.nick for p in pl))) - for minion in get_all_players(("minion",)): - wolves = get_players(var.WOLF_ROLES) - random.shuffle(wolves) - if minion.prefers_simple(): - minion.send(messages["minion_simple"]) - else: - minion.send(messages["minion_notify"]) - minion.send(messages["wolves_list"].format(", ".join(p.nick for p in wolves))) - for g in var.GUNNERS: if g not in ps: continue @@ -5869,14 +5852,6 @@ def myrole(var, wrapper, message): # FIXME: Need to fix !swap once this gets con if role == "clone" and wrapper.source.nick in var.CLONED: wrapper.pm(messages["clone_target"].format(var.CLONED[wrapper.source.nick])) - # Give minion the wolf list they would have recieved night one - if role == "minion": - wolves = [] - for wolfrole in var.WOLF_ROLES: - for player in var.ORIGINAL_ROLES[wolfrole]: - wolves.append(player.nick) - wrapper.pm(messages["original_wolves"] + ", ".join(wolves)) - # Remind turncoats of their side if role == "turncoat": wrapper.pm(messages["turncoat_side"].format(var.TURNCOATS.get(wrapper.source.nick, "none")[0]))