Made number of policies to win parametrable
This commit is contained in:
parent
54a4e6cade
commit
42619ac83d
|
|
@ -225,6 +225,18 @@ class Game:
|
||||||
def get_enacted_policies(self) -> List[Policy]:
|
def get_enacted_policies(self) -> List[Policy]:
|
||||||
return [Policy(policy_str) for policy_str in self.config["enacted"]]
|
return [Policy(policy_str) for policy_str in self.config["enacted"]]
|
||||||
|
|
||||||
|
@game_started
|
||||||
|
def get_nb_policies_to_victory(self, faction: Policy) -> int:
|
||||||
|
if faction == Policy.LIBERAL:
|
||||||
|
return self.config["nb_policies_to_victory"][Policy.LIBERAL.value]
|
||||||
|
else:
|
||||||
|
return self.config["nb_policies_to_victory"][Policy.FASCIST.value]
|
||||||
|
|
||||||
|
@game_started
|
||||||
|
@save_on_success
|
||||||
|
async def set_nb_policies_to_victory(self, faction: Policy, value: int):
|
||||||
|
self.config["nb_policies_to_victory"][faction.value] = value
|
||||||
|
|
||||||
@save_on_success
|
@save_on_success
|
||||||
async def start(self, player_role: discord.Role, bot_user_id: int):
|
async def start(self, player_role: discord.Role, bot_user_id: int):
|
||||||
if self.is_started():
|
if self.is_started():
|
||||||
|
|
@ -245,6 +257,10 @@ class Game:
|
||||||
self.config["drawn"] = None
|
self.config["drawn"] = None
|
||||||
self.config["enacted"] = []
|
self.config["enacted"] = []
|
||||||
self.config["chaos"] = 0
|
self.config["chaos"] = 0
|
||||||
|
self.config["nb_policies_to_victory"] = {
|
||||||
|
Policy.LIBERAL.value: 5,
|
||||||
|
Policy.FASCIST.value: 6,
|
||||||
|
}
|
||||||
|
|
||||||
gm_role = await self.guild.create_role(name = "GM", hoist = True, mentionable = True, permissions = self.guild.default_role.permissions)
|
gm_role = await self.guild.create_role(name = "GM", hoist = True, mentionable = True, permissions = self.guild.default_role.permissions)
|
||||||
self.config["gm_role"] = gm_role.id
|
self.config["gm_role"] = gm_role.id
|
||||||
|
|
@ -539,13 +555,13 @@ class Game:
|
||||||
message_content = [
|
message_content = [
|
||||||
f"{self.get_player_role().mention} A **{last_enacted.name}** policy {last_enacted.square_emoji()} has been enacted!",
|
f"{self.get_player_role().mention} A **{last_enacted.name}** policy {last_enacted.square_emoji()} has been enacted!",
|
||||||
f"In total, **{enacted_count[Policy.LIBERAL]} {Policy.LIBERAL.name}** policies and **{enacted_count[Policy.FASCIST]} {Policy.FASCIST.name}** policies have been enacted",
|
f"In total, **{enacted_count[Policy.LIBERAL]} {Policy.LIBERAL.name}** policies and **{enacted_count[Policy.FASCIST]} {Policy.FASCIST.name}** policies have been enacted",
|
||||||
" ".join([Policy.LIBERAL.square_emoji()] * enacted_count[Policy.LIBERAL] + [":black_small_square:"] * (5 - enacted_count[Policy.LIBERAL])),
|
" ".join([Policy.LIBERAL.square_emoji()] * enacted_count[Policy.LIBERAL] + [":black_small_square:"] * (self.get_nb_policies_to_victory(Policy.LIBERAL) - enacted_count[Policy.LIBERAL])),
|
||||||
" ".join([Policy.FASCIST.square_emoji()] * enacted_count[Policy.FASCIST] + [":black_small_square:"] * (6 - enacted_count[Policy.FASCIST])),
|
" ".join([Policy.FASCIST.square_emoji()] * enacted_count[Policy.FASCIST] + [":black_small_square:"] * (self.get_nb_policies_to_victory(Policy.FASCIST) - enacted_count[Policy.FASCIST])),
|
||||||
]
|
]
|
||||||
if last_enacted == Policy.FASCIST:
|
if last_enacted == Policy.FASCIST:
|
||||||
if enacted_count[Policy.FASCIST] == 3:
|
if enacted_count[Policy.FASCIST] == self.get_nb_policies_to_victory(Policy.FASCIST) // 2:
|
||||||
message_content.append("Be careful about who you elect as chancellor!")
|
message_content.append("Be careful about who you elect as chancellor!")
|
||||||
elif enacted_count[Policy.FASCIST] == 5:
|
elif enacted_count[Policy.FASCIST] == self.get_nb_policies_to_victory(Policy.FASCIST) - 1:
|
||||||
message_content.append(":person_gesturing_no: Veto power unlocked :person_gesturing_no:")
|
message_content.append(":person_gesturing_no: Veto power unlocked :person_gesturing_no:")
|
||||||
await self.get_announcements_channel().send("\n".join(message_content), allowed_mentions = discord.AllowedMentions(roles = True))
|
await self.get_announcements_channel().send("\n".join(message_content), allowed_mentions = discord.AllowedMentions(roles = True))
|
||||||
|
|
||||||
|
|
|
||||||
11
SecretBot.py
11
SecretBot.py
|
|
@ -417,6 +417,17 @@ class SecretBot(commands.Cog):
|
||||||
else:
|
else:
|
||||||
await ctx.reply(":warning: You should do this in a channel that is hidden from the players!")
|
await ctx.reply(":warning: You should do this in a channel that is hidden from the players!")
|
||||||
|
|
||||||
|
@commands.command("NbToWin", help = "Set the number of policies needed for a win for each faction")
|
||||||
|
async def set_nb_policies_to_win(self, ctx: commands.Context, nb_liberals: int, nb_fascist: int):
|
||||||
|
game = await self.get_running_game_or_error_message(ctx)
|
||||||
|
await self.check_is_administrator_or_gm(ctx)
|
||||||
|
if nb_liberals > 1 and nb_fascist > 1:
|
||||||
|
await game.set_nb_policies_to_victory(Policy.LIBERAL, nb_liberals)
|
||||||
|
await game.set_nb_policies_to_victory(Policy.FASCIST, nb_fascist)
|
||||||
|
await ctx.reply(f":white_check_mark: Game ends on {nb_liberals} {Policy.LIBERAL.name} policies or {nb_fascist} {Policy.FASCIST.name} policies")
|
||||||
|
else:
|
||||||
|
await ctx.reply(":x: Number of policies required to win must be greater than 1")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
argparser = argparse.ArgumentParser(description = "Secret Hitler helper bot", formatter_class = argparse.ArgumentDefaultsHelpFormatter)
|
argparser = argparse.ArgumentParser(description = "Secret Hitler helper bot", formatter_class = argparse.ArgumentDefaultsHelpFormatter)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue