main.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. """Point d'entrée : lance le bot avec `python main.py`."""
  2. import logging
  3. import sys
  4. from logging.handlers import RotatingFileHandler
  5. import discord
  6. from bot.config import ConfigError, load_settings
  7. from bot.discord_bot import ChatBot
  8. def setup_logging(log_file) -> None:
  9. formatter = logging.Formatter("[%(asctime)s] %(levelname)s %(name)s : %(message)s", "%Y-%m-%d %H:%M:%S")
  10. root = logging.getLogger()
  11. root.setLevel(logging.INFO)
  12. file_handler = RotatingFileHandler(log_file, maxBytes=5 * 1024 * 1024, backupCount=2, encoding="utf-8")
  13. file_handler.setFormatter(formatter)
  14. console_handler = logging.StreamHandler()
  15. console_handler.setFormatter(formatter)
  16. root.addHandler(file_handler)
  17. root.addHandler(console_handler)
  18. # discord.py et le SDK Anthropic sont bavards : on ne garde que leurs avertissements.
  19. for noisy in ("discord", "httpx", "anthropic"):
  20. logging.getLogger(noisy).setLevel(logging.WARNING)
  21. def main() -> None:
  22. try:
  23. settings = load_settings()
  24. except ConfigError as exc:
  25. print(f"Erreur de configuration : {exc}", file=sys.stderr)
  26. sys.exit(1)
  27. setup_logging(settings.log_file)
  28. bot = ChatBot(settings)
  29. try:
  30. bot.run(settings.discord_token, log_handler=None)
  31. except discord.LoginFailure:
  32. logging.critical("Token Discord invalide : vérifie DISCORD_TOKEN dans le .env.")
  33. sys.exit(1)
  34. except discord.PrivilegedIntentsRequired:
  35. logging.critical(
  36. "L'intent « Message Content » n'est pas activé. Active-le dans le portail développeur "
  37. "Discord (onglet Bot > Privileged Gateway Intents)."
  38. )
  39. sys.exit(1)
  40. if __name__ == "__main__":
  41. main()