1
0

myanimebot.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/usr/bin/env python3
  2. # Copyright Penta & lulu (c) 2018/2022 - Under BSD License - Based on feed2discord.py by Eric Eisenhart
  3. # Compatible for Python 3.7.X
  4. # Library import
  5. import asyncio
  6. import logging
  7. import sys
  8. import urllib.request
  9. import signal
  10. from configparser import ConfigParser
  11. from datetime import datetime
  12. from typing import List, Tuple
  13. import discord.utils
  14. discord.utils.setup_logging = lambda *args, **kwargs: None
  15. import discord
  16. import aiohttp
  17. import feedparser
  18. from aiohttp.web_exceptions import HTTPError, HTTPNotModified
  19. from dateutil.parser import parse as parse_datetime
  20. from html2text import HTML2Text
  21. # Our modules
  22. import myanimebot.anilist as anilist
  23. import myanimebot.globals as globals
  24. import myanimebot.utils as utils
  25. import myanimebot.myanimelist as myanimelist
  26. import myanimebot.commands as commands
  27. from myanimebot.discord import send_embed_wrapper, build_embed, MyAnimeBot
  28. if not sys.version_info[:2] >= (3, 14):
  29. print("ERROR: Requires python 3.14 or newer.")
  30. exit(1)
  31. async def exit_app(signum=None):
  32. globals.logger.debug("Received signal {}".format(signum))
  33. globals.logger.info("Closing all tasks...")
  34. if globals.MAL_ENABLED:
  35. globals.task_feed.cancel()
  36. if globals.ANI_ENABLED:
  37. globals.task_feed_anilist.cancel()
  38. if globals.HEALTHCHECK_ENABLED:
  39. globals.task_healthcheck.cancel()
  40. globals.task_thumbnail.cancel()
  41. globals.task_gameplayed.cancel()
  42. await asyncio.sleep(3)
  43. # Closing all ressources
  44. try:
  45. globals.conn.close()
  46. except Exception:
  47. pass
  48. if globals.client:
  49. await globals.client.close()
  50. globals.logger.critical("Script halted.")
  51. def handle_signal(signum, frame):
  52. loop = asyncio.get_event_loop()
  53. loop.create_task(exit_app(signum))
  54. # Starting main function
  55. if __name__ == "__main__":
  56. # Catch SIGINT signal (Ctrl-C)
  57. signal.signal(signal.SIGINT, handle_signal)
  58. signal.signal(signal.SIGTERM, handle_signal)
  59. # Run the app
  60. try:
  61. globals.client = MyAnimeBot()
  62. globals.client.run(globals.token)
  63. except Exception as e:
  64. globals.logger.error("Encountered exception while running the bot: {}".format(e))