Explorar o código

.env entre guillemets : marche aussi sous Docker

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Johnounet hai 17 horas
pai
achega
06666ae85f
Modificáronse 3 ficheiros con 9 adicións e 1 borrados
  1. 2 0
      CHANGELOG.md
  2. 2 0
      README.md
  3. 5 1
      bot/config.py

+ 2 - 0
CHANGELOG.md

@@ -16,6 +16,8 @@ Les versions les plus récentes sont en haut. Chaque entrée commence par un ré
 
 ### Corrections
 
+- **Un `.env` entre guillemets marche aussi sous Docker.** `docker run --env-file` garde les guillemets que le bot retire en local : `DISCORD_TOKEN="abc"` donnait « Token Discord invalide » sous Docker. Le bot retire maintenant lui-même une paire de guillemets autour d'une valeur. Le README précise que `--env-file` ne retire pas les commentaires en fin de ligne, et que le `.env` est prioritaire sur une variable passée en ligne de commande.
+
 - **« Réflexion : off » n'est plus affiché à tort.** Sur un modèle dont la réflexion ne peut pas être coupée (Opus 5.5), `THINKING=off` laissait la réflexion active alors que le journal de démarrage affichait « off ». Il indique maintenant « impossible à couper sur ce modèle (règle EFFORT) ».
 
 - **Documentation des réglages alignée.** `.env.exemple` et le README précisent qu'un `THINKING` vide ou absent vaut `off` (l'exemple propose `on`) ; le README indique que `xhigh` et `max` nécessitent `THINKING=on` ; la phrase sur `MAX_TOKENS` parle du plus grand des deux plafonds de mémoire, comme la vérification ; le tableau du README reprend les valeurs proposées de `.env.exemple` pour `MAX_TOKENS` (6000) et `API_TIMEOUT` (90).

+ 2 - 0
README.md

@@ -140,6 +140,8 @@ docker run -d --name chatbot \
   <compte>/chatbot-maisonnette:latest
 ```
 
+`--env-file` ne lit pas le `.env` comme le bot : il ne retire pas les commentaires en fin de ligne. Écris donc les valeurs sans guillemets et mets les commentaires sur leur propre ligne. Hors Docker, le fichier `.env` est prioritaire : une variable passée en ligne de commande (`MEMORY=on python main.py`) est ignorée si le `.env` la définit aussi.
+
 Pour une personnalité personnelle, monte le fichier dans le conteneur et indique son chemin dans `PERSONALITY_FILE`.
 
 ## Coûts et logs

+ 5 - 1
bot/config.py

@@ -36,7 +36,11 @@ def _get_str(name: str, default: str | None = None, required: bool = False) -> s
         if required:
             raise ConfigError(f"La variable {name} est obligatoire mais absente du fichier .env.")
         return default
-    return value.strip()
+    value = value.strip()
+    # docker run --env-file garde les guillemets que python-dotenv retire : DISCORD_TOKEN="abc".
+    if len(value) >= 2 and value[0] == value[-1] and value[0] in "\"'":
+        value = value[1:-1].strip()
+    return value or default
 
 
 def _get_int(name: str, default: int | None = None, required: bool = False, minimum: int | None = None,