Example #1
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        logging.info("Client initialised")

        self.ds = storage.DataStore(config.PICKLE_DUMP_LOCATION)
        logging.info("Data storage initialised")

        if platform.system() == "Linux":
            self.loop.add_signal_handler(
                signal.SIGTERM, lambda: self.loop.create_task(self.shutdown()))
            logging.info("Signal handler for SIGTERM registered")

        self.loop.create_task(notifications.notification_task(self))
        discordhealthcheck.start(self)
Example #2
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        logging.info("Client initialised")
        logging.info(sys_info())

        if platform.system() != "Windows":
            signals = (
                signal.SIGHUP,
                signal.SIGTERM,
                signal.SIGINT,
                signal.SIGQUIT,
            )
            logging.info("Not on Windows, registering signal handlers")
            for s in signals:
                self.loop.add_signal_handler(
                    s,
                    lambda sig=s: self.loop.create_task(self.shutdown(sig=sig)
                                                        ))

        self.ds = storage.DataStore(
            self.loop,
            config.PICKLE_DUMP_LOCATION,
            user=config.DB_USER,
            password=config.DB_PASS,
            host=config.DB_HOST,
            port=config.DB_PORT,
            database=config.DB_NAME,
        )
        logging.info("Data storage initialised")

        self.notification_task = self.loop.create_task(
            start_notification_loop(self))
        self.healthcheck_server = discordhealthcheck.start(self)

        self.dc_logger: Union[asyncio.Task, None] = None
Example #3
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        logging.info("Client initialised")

        if platform.system() != "Windows":
            signals = (
                signal.SIGHUP,
                signal.SIGTERM,
                signal.SIGINT,
                signal.SIGQUIT,
            )
            logging.info("Not on Windows, registering signal handlers")
            for s in signals:
                self.loop.add_signal_handler(
                    s, lambda sig=s: self.loop.create_task(self.shutdown(sig=sig))
                )

        self.ds = storage.DataStore(config.PICKLE_DUMP_LOCATION)
        logging.info("Data storage initialised")

        self.notification_task = self.loop.create_task(start_notification_loop(self))
        self.healthcheck_server = discordhealthcheck.start(self)
Example #4
0
    def __init__(self,
                 s3_bucket=False,
                 google_api_key=None,
                 db_host=None,
                 db_pass=None,
                 db_port=None,
                 db_user=None,
                 db_name=None,
                 ):
        commands.Bot.__init__(
            self,
            command_prefix=commands.when_mentioned,
            case_insensitive=True,
            owner_id=203285581004931072,
            allowed_mentions=discord.AllowedMentions(
                everyone=False,
                roles=False,
                users=True,
            ),
            intents=get_intents(),
        )
        logger.info("Starting healthcheck server")
        self.healthcheck_server = discordhealthcheck.start(self)
        logger.info("Bot entering setup")
        self.makusu = None
        self.shared = {}
        self.temp_dir_pointer = tempfile.TemporaryDirectory()
        self.shared["temp_dir"] = Path(self.temp_dir_pointer.name)
        self.shared["default_extensions"] = ["base",
                                             "reminders",
                                             "picturecommands",
                                             "serverlogging",
                                             "movement",
                                             "evaluations",
                                             "listeners",
                                             "wikisearch",
                                             "ytsearch",
                                             "fun",
                                             "debugging",
                                             "rolegiver",
                                             "help",
                                             ]
        self.s3_bucket = s3_bucket
        if self.s3_bucket:
            self.s3_bucket_location = S3.get_bucket_location(
                Bucket=self.s3_bucket
            )["LocationConstraint"]
        self.google_api_key = google_api_key
        self.db_host = db_host
        self.db_pass = db_pass
        self.db_port = db_port
        self.db_user = db_user
        self.db_name = db_name
        self.loop.set_debug(True)

        logger.info(
            f"Attempting to connect to postgres database at {self.db_host} "
            f"on port {self.db_port} as user {self.db_user} "
            f"with db_name {self.db_name}"
        )
        for database_connect_attempt in range(DATABASE_CONNECT_MAX_RETRIES):
            try:
                self.db_connection = psycopg2.connect(
                    host=self.db_host,
                    password=self.db_pass,
                    port=self.db_port,
                    user=self.db_user,
                )
            except psycopg2.OperationalError:
                logger.info(
                    "Couldn't connect to mbdb, retrying in a few seconds")
                time.sleep(5)
                continue
            else:
                break
        else:
            raise psycopg2.OperationalError("Couldn't connect after retries")

        num_db_tables = util.get_num_tables(self.db_connection)
        logger.info(f"Started with {num_db_tables} tables")
        if not num_db_tables:
            logger.info("Restoring DB from S3")
            util.restore_db(self.s3_bucket)

        for extension in self.shared["default_extensions"]:
            self.load_extension(f"src.{extension}")