Initial Release of IGNCore version 2.5
This commit is contained in:
+132
@@ -0,0 +1,132 @@
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
import time
|
||||
|
||||
from conf.config import BotConfig
|
||||
from core.aochat.mmdb_parser import MMDBParser
|
||||
from core.bot_status import BotStatus
|
||||
from core.db import DB
|
||||
from core.dict_object import DictObject
|
||||
from core.functions import merge_dicts
|
||||
from core.logger import Logger
|
||||
from core.registry import Registry
|
||||
from core.upgrade import run_upgrades
|
||||
|
||||
|
||||
def get_config_from_env():
|
||||
config_obj = DictObject()
|
||||
for k, v in os.environ.items():
|
||||
if k.startswith("TYRBOT_"):
|
||||
keys = k[7:].lower().split("_")
|
||||
temp_config = config_obj
|
||||
for key in keys[:-1]:
|
||||
key = key.replace("-", "_")
|
||||
# create key if it doesn't already exist
|
||||
if key not in temp_config:
|
||||
temp_config[key] = DictObject()
|
||||
temp_config = temp_config.get(key)
|
||||
logger.debug("overriding config value from env var '%s'" % k)
|
||||
if v.lower() == "true":
|
||||
v = True
|
||||
elif v.lower() == "false":
|
||||
v = False
|
||||
temp_config[keys[-1].replace("-", "_")] = v
|
||||
return config_obj
|
||||
|
||||
|
||||
try:
|
||||
# load logging configuration
|
||||
import conf.logging_settings
|
||||
|
||||
Registry.logger = Logger("core.registry")
|
||||
bot = "config"
|
||||
if len(sys.argv) > 1:
|
||||
bot = f"{sys.argv[1]}"
|
||||
else:
|
||||
print(
|
||||
"Unknown bot specified. Please edit your ##botname##.start.sh accordingly to the instructions found in the README.")
|
||||
exit(0)
|
||||
logger = Logger("core.bootstrap")
|
||||
logger.info("Starting Tyrbot...")
|
||||
mod = __import__(f'conf.{bot}', fromlist=['BotConfig'])
|
||||
config: BotConfig = getattr(mod, 'BotConfig')
|
||||
if sys.version_info < (3, 9):
|
||||
logger.warning("Versions lower then Python3.9 are not supported.")
|
||||
exit(-1)
|
||||
|
||||
# load config values from env vars
|
||||
env_config = get_config_from_env()
|
||||
if env_config:
|
||||
# converts dicts to lists
|
||||
if "slaves" in env_config and isinstance(env_config.slaves, dict):
|
||||
env_config.slaves = list(env_config.slaves.values())
|
||||
|
||||
if "module_paths" in env_config and isinstance(env_config.module_paths, dict):
|
||||
env_config.module_paths = list(env_config.module_paths.values())
|
||||
|
||||
config = merge_dicts(config, env_config)
|
||||
logger.info("Reading config from env vars")
|
||||
else:
|
||||
exit(-1)
|
||||
# ensure dimension is integer
|
||||
if isinstance(config.server.dimension, str):
|
||||
config.server.dimension = int(config.server.dimension)
|
||||
|
||||
if platform.system() == "Windows":
|
||||
os.system("title %s.%d" % (config.character, config.server.dimension))
|
||||
|
||||
# paths to search for instances: core + module_paths
|
||||
paths = ["core"]
|
||||
paths.extend(config.module_paths)
|
||||
|
||||
# load instances
|
||||
logger.debug("Loading instances")
|
||||
Registry.load_instances(paths)
|
||||
Registry.inject_all()
|
||||
|
||||
# configure database
|
||||
db = Registry.get_instance("db")
|
||||
if config.database.type == "mariadb":
|
||||
if config.database.port in [0, ""]:
|
||||
config.database.port = 3306
|
||||
db.connect_mariadb(config.database.host, config.database.port, config.database.username,
|
||||
config.database.password,
|
||||
config.database.name)
|
||||
if hasattr(config, "shared_db"):
|
||||
if config.shared_db.port in [0, ""]:
|
||||
config.shared_db.port = 3306
|
||||
db.shared = DB()
|
||||
db.shared.connect_mariadb(config.shared_db.host, config.shared_db.port, config.shared_db.username,
|
||||
config.shared_db.password, config.shared_db.name)
|
||||
else:
|
||||
db.shared = db
|
||||
else:
|
||||
raise Exception("Unknown database type '%s'" % config.database.type)
|
||||
|
||||
# run db upgrade scripts
|
||||
run_upgrades()
|
||||
|
||||
# finish initializing bot and modules, and then connect
|
||||
bot = Registry.get_instance("bot")
|
||||
bot.init(config, Registry, MMDBParser("text.mdb"))
|
||||
|
||||
if not bot.connect(config):
|
||||
bot.disconnect()
|
||||
time.sleep(5)
|
||||
exit(3)
|
||||
else:
|
||||
status = bot.run()
|
||||
bot.disconnect()
|
||||
exit(status.value)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
# noinspection PyUnboundLocalVariable
|
||||
if bot:
|
||||
# noinspection PyUnboundLocalVariable
|
||||
bot.status = BotStatus.SHUTDOWN
|
||||
# exit(0)
|
||||
except Exception as e:
|
||||
logger = Logger("bootstrap")
|
||||
logger.error("", e)
|
||||
exit(4)
|
||||
Reference in New Issue
Block a user