1
0

text_files.py 1.0 KB

123456789101112131415161718192021222324252627282930
  1. """Lecture des fichiers texte (.txt) joints aux messages."""
  2. from __future__ import annotations
  3. TEXT_EXTENSIONS = (".txt",)
  4. # Taille maximale d'un fichier .txt (environ 25 000 tokens, pour limiter le coût d'un message).
  5. TEXT_FILE_MAX_BYTES = 100_000
  6. class TextFileError(Exception):
  7. """Fichier texte illisible ou refusé, avec un message affichable sur Discord."""
  8. def __init__(self, user_message: str):
  9. super().__init__(user_message)
  10. self.user_message = user_message
  11. def decode_text_file(data: bytes) -> str:
  12. """Décode le contenu d'un fichier .txt (UTF-8, sinon Windows-1252)."""
  13. if b"\x00" in data:
  14. raise TextFileError("Ce fichier ne contient pas du texte lisible.")
  15. try:
  16. text = data.decode("utf-8-sig")
  17. except UnicodeDecodeError:
  18. # Fichiers enregistrés par d'anciens éditeurs Windows (Bloc-notes, etc.).
  19. text = data.decode("cp1252", errors="replace")
  20. text = text.replace("\r\n", "\n").strip()
  21. if not text:
  22. raise TextFileError("Ce fichier texte est vide.")
  23. return text