main.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import logging, os
  2. from os.path import exists
  3. def missing_config():
  4. logging.basicConfig(level=logging.DEBUG)
  5. if not exists("local_settings.py"):
  6. logging.error("Settings file not found.")
  7. logging.info("Copying local_settings_example.py to local_settings.py")
  8. try:
  9. os.rename("local_settings_example.py", "local_settings.py")
  10. except FileNotFoundError:
  11. logging.info("local_settings_example.py not found, creating local_settings.py")
  12. with open("local_settings.py", "w") as settings_file:
  13. settings_file.writelines(
  14. [
  15. "import logging",
  16. "LOG_LEVEL = logging.INFO # Options: CRITICAL, ERROR, WARNING, INFO, and DEBUG",
  17. "",
  18. "DATABASE_NAME = \"\"",
  19. "DATABASE_USER = \"\"",
  20. "DATABASE_HOST = \"\"",
  21. "DATABASE_PASSWORD = \"\"",
  22. "",
  23. "DISCORD_TOKEN = \"\"",
  24. "COMMAND_PREFIX = \"\"",
  25. ]
  26. )
  27. logging.error("Settings undefined.")
  28. logging.info("Configure the settings:")
  29. logging.info("")
  30. logging.info(" edit local_settings.py")
  31. logging.info("")
  32. quit()
  33. # Import settings
  34. try:
  35. import local_settings as settings # Environment dependant settings stored in local_settings.py, untracked by .gitinore
  36. except ModuleNotFoundError:
  37. missing_config()
  38. # Set loglevel
  39. try:
  40. logging.basicConfig(level=settings.LOG_LEVEL)
  41. except AttributeError:
  42. missing_config()
  43. # Define database pool
  44. import asyncpg
  45. async def create_db_pool():
  46. try:
  47. bot.pg = await asyncpg.create_pool(
  48. database=settings.DATABASE_NAME,
  49. user=settings.DATABASE_USER,
  50. host=settings.DATABASE_HOST,
  51. password=settings.DATABASE_PASSWORD,
  52. )
  53. except AttributeError:
  54. missing_config()
  55. # Create robot
  56. import discord
  57. from discord.ext import commands
  58. try:
  59. bot = commands.Bot(
  60. command_prefix = settings.COMMAND_PREFIX,
  61. description = "Charlie's Angels bot",
  62. intents = discord.Intents.default(), # Required: Guilds
  63. case_insensitive = True,
  64. )
  65. except AttributeError:
  66. missing_config()
  67. # Create database pool
  68. bot.loop.run_until_complete(create_db_pool())
  69. # Create database tables if they do not exist
  70. from query.initialise_database import init_db
  71. bot.loop.run_until_complete(init_db(bot.pg))
  72. # Load extensions
  73. default_extensions = [
  74. "commands.general",
  75. "commands.games",
  76. "events.general"
  77. ]
  78. for ext in default_extensions:
  79. bot.load_extension(ext)
  80. # Run robot
  81. try:
  82. bot.run(settings.DISCORD_TOKEN)
  83. except AttributeError:
  84. missing_config()
  85. except discord.errors.LoginFailure:
  86. logging.error("Invalid discord token.")
  87. logging.info("Correct the DISCORD_TOKEN in local_settings.py")
  88. logging.info("")
  89. logging.info(" edit local_settings.py")
  90. logging.info("")
  91. quit()