1
0

globals.py 5.0 KB

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