Nouveaux défis

This commit is contained in:
Emmy D'Anello 2025-03-15 10:29:34 +01:00
parent 0f82a8aa7a
commit 61f8215a4a
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
2 changed files with 82 additions and 22 deletions

18
bot.py
View File

@ -37,7 +37,7 @@ CANTONS = {
"SH": "Schaffhouse",
"SO": "Soleure",
"SZ": "Schwytz",
"TH": "Thurgovie",
"TG": "Thurgovie",
"TI": "Tessin",
"UR": "Uri",
"VD": "Vaud",
@ -49,7 +49,7 @@ CANTONS = {
EQUIPES = ["rouge", "vert"]
CodeCanton = Literal["AG", "AI", "AR", "BE", "BL", "BS", "FR", "GE", "GL", "GR", "JU", "LU", "NE",
"NW", "OW", "SG", "SH", "SO", "SZ", "TH", "TI", "UR", "VD", "VS", "ZG", "ZH"]
"NW", "OW", "SG", "SH", "SO", "SZ", "TG", "TI", "UR", "VD", "VS", "ZG", "ZH"]
Couleur = Literal["rouge", "vert"]
@ -97,7 +97,7 @@ def generer_carte():
cairosvg.svg2png(url='map.svg', write_to='map.png')
@bot.command()
@bot.command(brief="Affche la carte des cantons capturés.")
async def carte(ctx: commands.Context):
rouges = list(canton_code for canton_code, canton in data['cantons'].items()
if canton['capture'] == "rouge")
@ -119,7 +119,7 @@ async def carte(ctx: commands.Context):
await ctx.send(message, file=discord.File(f, filename="battle4suisse.png"))
@bot.command()
@bot.command(brief=f"Capture un canton pour son équipe : {prefix}capturer CODE_CANTON [EQUIPE]")
async def capturer(ctx: commands.Context, canton: CodeCanton, *, couleur: Couleur | None = None):
if couleur is None:
author_id = ctx.author.id
@ -143,7 +143,7 @@ async def capture_error(ctx, error):
await ctx.send(str(error))
@bot.command()
@bot.command(brief=f"Verrouille un canton sur la carte pour son équipe : {prefix}verrouiller CODE_CANTON [EQUIPE]")
async def verrouiller(ctx: commands.Context, canton: CodeCanton, *, couleur: Couleur | None = None):
if couleur is None:
author_id = ctx.author.id
@ -161,7 +161,7 @@ async def verrouiller(ctx: commands.Context, canton: CodeCanton, *, couleur: Cou
return await carte(ctx)
@bot.command()
@bot.command(brief=f"Réinitialise l'état de capture d'un canton : {prefix}reset CODE_CANTON")
async def reset(ctx: commands.Context, canton: CodeCanton):
data['cantons'][canton]['capture'] = None
data['cantons'][canton]['verrouille'] = False
@ -171,7 +171,7 @@ async def reset(ctx: commands.Context, canton: CodeCanton):
return await carte(ctx)
@bot.command()
@bot.command(brief=f"Rejoindre une équipe : {prefix}equipe EQUIPE")
async def equipe(ctx: commands.Context, couleur: Couleur):
author_id = ctx.author.id
for membres_equipe in data['equipes'].values():
@ -183,12 +183,12 @@ async def equipe(ctx: commands.Context, couleur: Couleur):
await ctx.send(f"Équipe {couleur} rejointe")
@bot.command()
@bot.command(brief=f"Affiche la liste des noms des défis : {prefix}defis [capture | vol]")
async def defis(ctx: commands.Context, *, type_defi: Literal['capture', 'vol'] = "capture"):
await ctx.send(f"Liste des défis de {type_defi} :\n" + "\n".join(f"* {defi['id']} : {defi['nom']}" for defi in DEFIS[type_defi]))
@bot.command()
@bot.command(brief=f"Affiche la description des défis")
async def description(ctx: commands.Context, type_defi: Literal['capture', 'vol'] = "capture", id_defi: int | None = None):
defis = DEFIS[type_defi]
embeds = []

View File

@ -39,7 +39,7 @@
{
"id": 7,
"nom": "Marcher sur l'eau",
"description": "Traverse un cours d'eau d'une rive à l'autre.\n\nLa distance traversée doit être d'au moins un mètre.\nIl n'est pas possible d'emprunter une structure existante pour le traverser, en particulier d'utiliser un pont.",
"description": "Traverse un cours d'eau d'une rive à l'autre.\n\nLa distance traversée doit être d'au moins un mètre.\nIl n'est pas possible d'emprunter une structure existante pour le traverser, en particulier d'utiliser un pont.\n\nSi le cours d'eau fait la frontière entre 2 cantons, les deux cantons sont capturés.",
"bonus": 1
},
{
@ -191,15 +191,57 @@
"nom": "Promotion culturelle",
"description": "Prends un flyer dans un lieu culturel, et en fais-en la promotion dans un lieu culturel similaire d'un autre canton.\n\nEn cas de succès du défi, les deux cantons sont capturés.",
"bonus": 1
},
{
"id": 33,
"nom": "Placement de produit",
"description": "Filme une pub de parfum.",
"bonus": 0
},
{
"id": 34,
"nom": "Polyglote",
"description": "Trouve une personne qui parle français, une personne qui parle allemand, une personne qui parle italien.\n\nCes trois personnes ne sont pas nécessairement distinctes.",
"bonus": 1
},
{
"id": 35,
"nom": "Cabotage",
"description": "Dans le même canton, prends un train et descend au prochain arrêt sans changer de canton.",
"bonus": 0
},
{
"id": 36,
"nom": "Cadeau !",
"description": "Offre un cadeau à quelqu'un⋅e.",
"bonus": 0
},
{
"id": 37,
"nom": "Culture",
"description": "Trouve « Astérix chez les Helvètes » ou un livre sur le Nicaragua.",
"bonus": 0
},
{
"id": 38,
"nom": "Mairiephilie",
"description": "Dessine l'administration municipale d'une commune de ton canton devant elle.",
"bonus": 0
},
{
"id": 39,
"nom": "Sing'in the rain",
"description": "Chante « Sing'in the rain » sous la pluie ou sous la neige. S'il neige, remplace « rain » par « snow ».",
"bonus": 0
},
{
"id": 40,
"nom": "Touch the ~~grass~~ snow",
"description": "Touche de la neige naturelle.",
"bonus": 1
}
],
"vol": [
{
"id": 1,
"nom": "Au sommet :mountain:",
"description": "Photographie le plus de sommets en 15 minutes.",
"bonus": 0
},
{
"id": 2,
"nom": "Chocolat :chocolate_bar:",
@ -224,12 +266,6 @@
"description": "Fais dire à un⋅e passant⋅e le mot de ton choix le plus rapidement possible, sans donner le mot ni sa définition exacte.",
"bonus": 0
},
{
"id": 6,
"nom": "Au plus profond",
"description": "Rends-toi à la plus basse altitude possible en 15 minutes.",
"bonus": 0
},
{
"id": 7,
"nom": "Luxe :money_with_wings:",
@ -259,6 +295,30 @@
"nom": "Fuis ! :person_running:",
"description": "Quitte ton canton le plus rapidement possible.",
"bonus": 0
},
{
"id": 12,
"nom": "Château-fort :european_castle:",
"description": "Trouver la façade la plus imposante en 15 minutes.",
"bonus": 0
},
{
"id": 13,
"nom": "Cinéphile :cinema:",
"description": "Trouve un cinéma le plus rapidement possible.",
"bonus": 0
},
{
"id": 14,
"nom": "Fièr⋅e :rainbow_flag:",
"description": "Trouve un drapeau du parapluie LGBT le plus rapidement possible.\n\nIl ne peut pas être sur toi, ni fabriqué, ni sur un écran.",
"bonus": 0
},
{
"id": 15,
"nom": "Panneaux",
"description": "Trouve le plus le panneaux de signalisation possible en 15 minutes, qui ne sont pas des panneaux indiquant des directions.",
"bonus": 0
}
]
}