2022-10-02 13:13:23 +02:00
|
|
|
from cpl_core.configuration import ConfigurationABC
|
2022-07-14 16:32:46 +02:00
|
|
|
from cpl_core.console import Console
|
|
|
|
from cpl_core.dependency_injection import ServiceProviderABC
|
2022-07-16 19:47:04 +02:00
|
|
|
from cpl_core.logging import LoggerABC
|
|
|
|
from cpl_discord.application import DiscordBotApplicationABC
|
|
|
|
from cpl_discord.configuration import DiscordBotSettings
|
|
|
|
from cpl_discord.service import DiscordBotServiceABC, DiscordBotService
|
|
|
|
from cpl_translation import TranslatePipe, TranslationServiceABC, TranslationSettings
|
2022-07-14 16:32:46 +02:00
|
|
|
|
2022-10-13 19:57:56 +02:00
|
|
|
from bot_api.api_thread import ApiThread
|
|
|
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
|
|
|
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
|
|
|
|
2022-07-14 16:32:46 +02:00
|
|
|
|
2022-07-16 19:47:04 +02:00
|
|
|
class Application(DiscordBotApplicationABC):
|
2022-07-14 16:32:46 +02:00
|
|
|
|
|
|
|
def __init__(self, config: ConfigurationABC, services: ServiceProviderABC):
|
2022-07-16 19:47:04 +02:00
|
|
|
DiscordBotApplicationABC.__init__(self, config, services)
|
|
|
|
|
2022-10-02 12:14:44 +02:00
|
|
|
self._services = services
|
2022-10-13 19:57:56 +02:00
|
|
|
self._config = config
|
2022-10-02 12:14:44 +02:00
|
|
|
|
2022-07-16 19:47:04 +02:00
|
|
|
# cpl-core
|
|
|
|
self._logger: LoggerABC = services.get_service(LoggerABC)
|
|
|
|
# cpl-discord
|
|
|
|
self._bot: DiscordBotServiceABC = services.get_service(DiscordBotServiceABC)
|
|
|
|
self._bot_settings: DiscordBotSettings = config.get_configuration(DiscordBotSettings)
|
|
|
|
# cpl-translation
|
|
|
|
self._translation: TranslationServiceABC = services.get_service(TranslationServiceABC)
|
2022-10-03 12:42:42 +02:00
|
|
|
self._t: TranslatePipe = services.get_service(TranslatePipe)
|
2022-07-14 16:32:46 +02:00
|
|
|
|
2022-10-13 19:57:56 +02:00
|
|
|
self._feature_flags: FeatureFlagsSettings = config.get_configuration(FeatureFlagsSettings)
|
|
|
|
|
|
|
|
# api
|
|
|
|
if self._feature_flags.get_flag(FeatureFlagsEnum.api_module):
|
|
|
|
self._api: ApiThread = services.get_service(ApiThread)
|
|
|
|
|
2022-10-02 13:25:29 +02:00
|
|
|
self._is_stopping = False
|
|
|
|
|
2022-07-14 16:32:46 +02:00
|
|
|
async def configure(self):
|
2022-07-16 19:47:04 +02:00
|
|
|
self._translation.load_by_settings(self._configuration.get_configuration(TranslationSettings))
|
2022-07-14 16:32:46 +02:00
|
|
|
|
|
|
|
async def main(self):
|
2022-07-16 19:47:04 +02:00
|
|
|
try:
|
2022-10-03 12:42:42 +02:00
|
|
|
self._logger.debug(__name__, f'Starting...')
|
2022-10-13 19:57:56 +02:00
|
|
|
|
2023-01-12 09:36:33 +01:00
|
|
|
if self._feature_flags.get_flag(FeatureFlagsEnum.api_module) and \
|
|
|
|
self._feature_flags.get_flag(FeatureFlagsEnum.api_only) and \
|
|
|
|
self._environment.environment_name == 'development':
|
2022-10-16 21:36:08 +02:00
|
|
|
self._api.start()
|
2022-10-14 07:16:12 +02:00
|
|
|
self._api.join()
|
2022-10-13 19:57:56 +02:00
|
|
|
return
|
|
|
|
|
2022-07-16 19:47:04 +02:00
|
|
|
self._logger.trace(__name__, f'Try to start {DiscordBotService.__name__}')
|
|
|
|
await self._bot.start_async()
|
2022-10-02 12:14:44 +02:00
|
|
|
await self._bot.stop_async()
|
2022-07-16 19:47:04 +02:00
|
|
|
except Exception as e:
|
|
|
|
self._logger.error(__name__, 'Start failed', e)
|
|
|
|
|
|
|
|
async def stop_async(self):
|
2022-10-02 13:25:29 +02:00
|
|
|
if self._is_stopping:
|
|
|
|
return
|
|
|
|
|
|
|
|
self._is_stopping = True
|
2022-07-16 19:47:04 +02:00
|
|
|
try:
|
|
|
|
self._logger.trace(__name__, f'Try to stop {DiscordBotService.__name__}')
|
|
|
|
await self._bot.close()
|
|
|
|
self._logger.trace(__name__, f'Stopped {DiscordBotService.__name__}')
|
|
|
|
except Exception as e:
|
|
|
|
self._logger.error(__name__, 'stop failed', e)
|
|
|
|
|
|
|
|
Console.write_line()
|
2022-07-19 11:58:33 +02:00
|
|
|
|
|
|
|
def is_restart(self):
|
2022-10-13 19:57:56 +02:00
|
|
|
return True if self._configuration.get_configuration('IS_RESTART') == 'true' else False #
|