| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- """Point d'entrée : lance le bot avec `python main.py`."""
- import logging
- import sys
- from logging.handlers import RotatingFileHandler
- import discord
- from bot.config import ConfigError, load_settings
- from bot.discord_bot import ChatBot
- def setup_logging(log_file) -> None:
- formatter = logging.Formatter("[%(asctime)s] %(levelname)s %(name)s : %(message)s", "%Y-%m-%d %H:%M:%S")
- root = logging.getLogger()
- root.setLevel(logging.INFO)
- file_handler = RotatingFileHandler(log_file, maxBytes=5 * 1024 * 1024, backupCount=2, encoding="utf-8")
- file_handler.setFormatter(formatter)
- console_handler = logging.StreamHandler()
- console_handler.setFormatter(formatter)
- root.addHandler(file_handler)
- root.addHandler(console_handler)
- # discord.py et le SDK Anthropic sont bavards : on ne garde que leurs avertissements.
- for noisy in ("discord", "httpx", "anthropic"):
- logging.getLogger(noisy).setLevel(logging.WARNING)
- def main() -> None:
- try:
- settings = load_settings()
- except ConfigError as exc:
- print(f"Erreur de configuration : {exc}", file=sys.stderr)
- sys.exit(1)
- setup_logging(settings.log_file)
- bot = ChatBot(settings)
- try:
- bot.run(settings.discord_token, log_handler=None)
- except discord.LoginFailure:
- logging.critical("Token Discord invalide : vérifie DISCORD_TOKEN dans le .env.")
- sys.exit(1)
- except discord.PrivilegedIntentsRequired:
- logging.critical(
- "L'intent « Message Content » n'est pas activé. Active-le dans le portail développeur "
- "Discord (onglet Bot > Privileged Gateway Intents)."
- )
- sys.exit(1)
- if __name__ == "__main__":
- main()
|