diff --git a/bot.py b/bot.py
index bbb66ab..acf0a7c 100755
--- a/bot.py
+++ b/bot.py
@@ -68,18 +68,39 @@ def generer_carte():
if data_canton['capture']:
path = next(e for e in doc.getElementsByTagName('path') if e.getAttribute('id') == code_canton)
couleur = data_canton['capture']
- path.setAttribute('class', f"capture-{couleur}")
+ if data_canton['verrouille']:
+ path.setAttribute('fill', f"url(#verrouille-{couleur})")
+ else:
+ path.setAttribute('class', f"capture-{couleur}")
with open('map.svg', 'w') as f:
doc.writexml(f)
cairosvg.svg2png(url='map.svg', write_to='map.png')
-@bot.command()
-async def carte(ctx: commands.Context):
- with open('map.png', 'rb') as f:
- await ctx.send(file=discord.File(f, filename="battle4suisse.png"), ephemeral=True)
@bot.command()
-async def capture(ctx: commands.Context, canton: CodeCanton, *, couleur: Couleur | None = None):
+async def carte(ctx: commands.Context):
+ rouges = list(canton_code for canton_code, canton in data['cantons'].items()
+ if canton['capture'] == "rouge")
+ rouges_verrouilles = list(canton_code for canton_code, canton in data['cantons'].items()
+ if canton['capture'] == "rouge" and canton['verrouille'])
+ noms_rouges = ", ".join(code_canton + (":lock:" if code_canton in rouges_verrouilles else "") for code_canton in rouges)
+ verts = list(canton_code for canton_code, canton in data['cantons'].items()
+ if canton['capture'] == "vert")
+ verts_verrouilles = list(canton_code for canton_code, canton in data['cantons'].items()
+ if canton['capture'] == "vert" and canton['verrouille'])
+ noms_verts = ", ".join(code_canton + (":lock:" if code_canton in verts_verrouilles else "") for code_canton in verts)
+ libres = list(canton_code for canton_code, canton in data['cantons'].items()
+ if canton['capture'] is None)
+ message = f""":red_circle: Équipe rouge : **{len(rouges)} canton{"s" if len(rouges) > 1 else ""}** (dont **{len(rouges_verrouilles)} verrouillé{"s" if len(rouges_verrouilles) > 1 else ""}**) : {noms_rouges}
+:green_circle: Équipe verte : **{len(verts)} canton{"s" if len(verts) > 1 else ""}** (dont **{len(verts_verrouilles)} verrouillé{"s" if len(verts_verrouilles) > 1 else ""}**) : {noms_verts}
+:white_circle: **{len(libres)} canton{"s" if len(libres) > 1 else ""}** libre{"s" if len(libres) > 1 else ""} : {", ".join(libres)}"""
+ generer_carte()
+ with open('map.png', 'rb') as f:
+ await ctx.send(message, file=discord.File(f, filename="battle4suisse.png"))
+
+
+@bot.command()
+async def capturer(ctx: commands.Context, canton: CodeCanton, *, couleur: Couleur | None = None):
if couleur is None:
author_id = ctx.author.id
for couleur, membres_equipe in data['equipes'].items():
@@ -90,11 +111,11 @@ async def capture(ctx: commands.Context, canton: CodeCanton, *, couleur: Couleur
data['cantons'][canton]['capture'] = couleur
with DATA_FILE.open('w') as data_file:
json.dump(data, data_file, indent=4)
- generer_carte()
+ await ctx.send(f"@everyone L'équipe {couleur} a capturé le canton de **{CANTONS[canton]}** !")
return await carte(ctx)
-@capture.error
+@capturer.error
async def capture_error(ctx, error):
if isinstance(error, commands.BadLiteralArgument):
await ctx.send(f"Canton inconnu : {error.argument}, valeurs possibles : {", ".join(error.literals)}")
@@ -102,6 +123,24 @@ async def capture_error(ctx, error):
await ctx.send(str(error))
+@bot.command()
+async def verrouiller(ctx: commands.Context, canton: CodeCanton, *, couleur: Couleur | None = None):
+ if couleur is None:
+ author_id = ctx.author.id
+ for couleur, membres_equipe in data['equipes'].items():
+ if author_id in membres_equipe:
+ break
+ else:
+ raise commands.BadArgument("Vous n'appartez à aucune équipe. Merci de faire `$equipe [rouge|vert]`.")
+ data['cantons'][canton]['capture'] = couleur
+ data['cantons'][canton]['verrouille'] = True
+ with DATA_FILE.open('w') as data_file:
+ json.dump(data, data_file, indent=4)
+ generer_carte()
+ await ctx.send(f"@everyone L'équipe {couleur} a capturé le canton de **{CANTONS[canton]}** !")
+ return await carte(ctx)
+
+
@bot.command()
async def reset(ctx: commands.Context, canton: CodeCanton):
data['cantons'][canton]['capture'] = None
diff --git a/map_blank.svg b/map_blank.svg
index 6ea28e7..2e1100e 100644
--- a/map_blank.svg
+++ b/map_blank.svg
@@ -51,10 +51,18 @@
.capture-vert
{
- fill:#338000;
+ fill:#33c000;
}
+
+
+
+
+
+
+
+