1
0

globals.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import logging
  2. import os
  3. import socket
  4. from configparser import ConfigParser
  5. import pytz
  6. import feedparser
  7. import mariadb
  8. import pytz
  9. import discord
  10. class ImproperlyConfigured(Exception): pass
  11. BASE_DIR = os.path.dirname(os.path.abspath(__file__))
  12. HOME_DIR = os.path.expanduser("~")
  13. DEFAULT_CONFIG_PATHS = [
  14. os.path.join("myanimebot.conf"),
  15. os.path.join(BASE_DIR, "myanimebot.conf"),
  16. os.path.join("/etc/myanimebot/myanimebot.conf"),
  17. os.path.join(HOME_DIR, "myanimebot.conf")
  18. ]
  19. def get_config():
  20. config = ConfigParser()
  21. config_paths = []
  22. for path in DEFAULT_CONFIG_PATHS:
  23. if os.path.isfile(path):
  24. config_paths.append(path)
  25. break
  26. else: raise ImproperlyConfigured("No configuration file found")
  27. config.read(config_paths)
  28. return config
  29. # Loading configuration
  30. try:
  31. config=get_config()
  32. except Exception as e:
  33. print ("Cannot read configuration: " + str(e))
  34. exit (1)
  35. def get_env_var(name, default=None):
  36. return os.getenv(name, default)
  37. CONFIG=config["MYANIMEBOT"]
  38. logLevel = get_env_var("MYANIMEBOT_LOGLEVEL", CONFIG.get("logLevel", "INFO"))
  39. dbHost = get_env_var("MYANIMEBOT_DBHOST", CONFIG.get("mariadb.host", "127.0.0.1"))
  40. dbUser = get_env_var("MYANIMEBOT_DBUSER", CONFIG.get("mariadb.user", "myanimebot"))
  41. dbPassword = get_env_var("MYANIMEBOT_DBPASSWORD", CONFIG.get("mariadb.password"))
  42. dbName = get_env_var("MYANIMEBOT_DBNAME", CONFIG.get("mariadb.name", "myanimebot"))
  43. dbSSLenabled = get_env_var("MYANIMEBOT_DBSSL", CONFIG.getboolean("mariadb.ssl", False))
  44. dbSSLca = get_env_var("MYANIMEBOT_DBSSLCACERT", CONFIG.get("mariadb.ssl.ca"))
  45. dbSSLcert = get_env_var("MYANIMEBOT_DBSSLCERT", CONFIG.get("mariadb.ssl.cert"))
  46. dbSSLkey = get_env_var("MYANIMEBOT_DBSSLKEY", CONFIG.get("mariadb.ssl.key"))
  47. logPath = get_env_var("MYANIMEBOT_LOGPATH", CONFIG.get("logPath", "myanimebot.log"))
  48. timezone = pytz.timezone(get_env_var("MYANIMEBOT_TIMEZONE", CONFIG.get("timezone", "utc")))
  49. secondMax = int(get_env_var("MYANIMEBOT_SECOND_MAX", CONFIG.getint("secondMax", 7200)))
  50. token = get_env_var("MYANIMEBOT_TOKEN", CONFIG.get("token"))
  51. prefix = get_env_var("MYANIMEBOT_PREFIX", CONFIG.get("prefix", "!mab"))
  52. MYANIMELIST_SECONDS_BETWEEN_REQUESTS = int(get_env_var("MYANIMEBOT_MAL_REQUESTS", CONFIG.getint("myanimelist_seconds_between_requests", 2)))
  53. MYANIMELIST_RETRY_FETCH = int(get_env_var("MYANIMELIST_RETRY_FETCH", CONFIG.getint("myanimelist_retry_fetch", 3)))
  54. iconBot = get_env_var("MYANIMEBOT_ICONBOT", CONFIG.get("iconBot", "http://myanimebot.pentou.eu/rsc/bot_avatar.jpg"))
  55. ANILIST_SECONDS_BETWEEN_FETCHES = int(get_env_var("MYANIMEBOT_ANILIST_FETCHES", CONFIG.getint("anilist_seconds_between_fetches", 60)))
  56. MAL_ICON_URL = get_env_var("MYANIMEBOT_MAL_ICON", CONFIG.get("iconMAL", "https://cdn.myanimelist.net/img/sp/icon/apple-touch-icon-256.png"))
  57. ANILIST_ICON_URL = get_env_var("MYANIMEBOT_ANILIST_ICON", CONFIG.get("iconAniList", "https://anilist.co/img/icons/android-chrome-512x512.png"))
  58. MAL_ENABLED = get_env_var("MYANIMEBOT_MAL_ENABLED", CONFIG.getboolean("mal_enabled", True))
  59. ANI_ENABLED = get_env_var("MYANIMEBOT_ANI_ENABLED", CONFIG.getboolean("ani_enabled", True))
  60. HEALTHCHECK_ENABLED = get_env_var("MYANIMEBOT_HEALTHCHECK_ENABLED", CONFIG.getboolean("healthcheck_enabled", False))
  61. HEALTHCHECK_PORT = int(get_env_var("MYANIMEBOT_HEALTHCHECK_PORT", CONFIG.getint("healthcheck_port", 15200)))
  62. HEALTHCHECK_IP = get_env_var("MYANIMEBOT_HEALTHCHECK_IP", CONFIG.get("healthcheck_ip", "0.0.0.0"))
  63. SERVICE_ANILIST = "ani"
  64. SERVICE_MAL = "mal"
  65. MAL_URL = "https://myanimelist.net/"
  66. MAL_PROFILE_URL = "https://myanimelist.net/profile/"
  67. ANILIST_PROFILE_URL = "https://anilist.co/user/"
  68. DB_USER_NAME = "mal_user" # Nom de la colonne pour les noms d'utilisateur dans la table t_users
  69. # Log configuration
  70. log_format='%(asctime)-13s : %(name)-25s : %(levelname)-8s : %(message)s'
  71. logging.basicConfig(handlers=[logging.FileHandler(logPath, 'a', 'utf-8')], format=log_format, level=logLevel)
  72. console = logging.StreamHandler()
  73. console.setLevel(logging.INFO)
  74. console.setFormatter(logging.Formatter(log_format))
  75. logger = logging.getLogger("myanimebot")
  76. logger.setLevel(logLevel)
  77. logging.getLogger('').addHandler(console)
  78. # Adapt Discord logs to script logger format
  79. discord_logger = logging.getLogger("discord")
  80. discord_logger.handlers.clear()
  81. discord_logger.propagate = True
  82. # Script version
  83. VERSION = "1.0.0a"
  84. logger.info("Booting MyAnimeBot " + VERSION + "...")
  85. logger.debug("DEBUG log: OK")
  86. # feedparser.PREFERRED_XML_PARSERS.remove("drv_libxml2")
  87. # Initialization of the database
  88. try:
  89. # Main database connection
  90. if (dbSSLenabled) :
  91. conn = mariadb.connect(host=dbHost, user=dbUser, password=dbPassword, database=dbName, ssl_ca=dbSSLca, ssl_cert=dbSSLcert, ssl_key=dbSSLkey)
  92. else :
  93. conn = mariadb.connect(host=dbHost, user=dbUser, password=dbPassword, database=dbName)
  94. except Exception as e:
  95. logger.critical("Can't connect to the database: " + str(e))
  96. quit()
  97. # Initialization of the Discord client
  98. client = None
  99. task_feed = None
  100. task_feed_anilist = None
  101. task_gameplayed = None
  102. task_thumbnail = None
  103. task_healthcheck = None