2022-07-14 16:32:46 +02:00
|
|
|
import asyncio
|
2022-10-03 13:39:09 +02:00
|
|
|
import traceback
|
2022-07-16 19:47:04 +02:00
|
|
|
from typing import Optional
|
2022-07-14 16:32:46 +02:00
|
|
|
|
|
|
|
from cpl_core.application import ApplicationBuilder
|
2022-07-19 11:58:33 +02:00
|
|
|
from cpl_core.console import Console
|
2022-07-14 16:32:46 +02:00
|
|
|
|
|
|
|
from bot.application import Application
|
|
|
|
from bot.startup import Startup
|
2022-07-16 23:23:07 +02:00
|
|
|
from bot.startup_discord_extension import StartupDiscordExtension
|
|
|
|
from bot.startup_migration_extension import StartupMigrationExtension
|
2022-10-03 00:28:22 +02:00
|
|
|
from bot.startup_module_extension import StartupModuleExtension
|
2022-10-02 02:54:08 +02:00
|
|
|
from bot.startup_settings_extension import StartupSettingsExtension
|
2022-10-16 10:11:21 +02:00
|
|
|
from bot_api.app_api_extension import AppApiExtension
|
2022-11-13 11:56:42 +01:00
|
|
|
from bot_core.core_extension.core_extension import CoreExtension
|
2022-07-16 23:23:07 +02:00
|
|
|
from modules.boot_log.boot_log_extension import BootLogExtension
|
|
|
|
from modules.database.database_extension import DatabaseExtension
|
2022-07-14 16:32:46 +02:00
|
|
|
|
|
|
|
|
2022-07-19 11:58:33 +02:00
|
|
|
class Program:
|
2022-07-16 19:47:04 +02:00
|
|
|
|
|
|
|
def __init__(self):
|
2022-07-19 11:58:33 +02:00
|
|
|
self.app: Optional[Application] = None
|
2022-07-16 19:47:04 +02:00
|
|
|
|
2022-07-19 11:58:33 +02:00
|
|
|
async def start(self):
|
2022-10-03 01:05:34 +02:00
|
|
|
# discord extension has to be loaded before modules (modules depends on discord stuff)
|
2022-10-02 02:54:08 +02:00
|
|
|
app_builder = ApplicationBuilder(Application) \
|
|
|
|
.use_extension(StartupSettingsExtension) \
|
|
|
|
.use_extension(StartupDiscordExtension) \
|
2022-10-03 00:28:22 +02:00
|
|
|
.use_extension(StartupModuleExtension) \
|
2022-10-02 02:54:08 +02:00
|
|
|
.use_extension(StartupMigrationExtension) \
|
|
|
|
.use_extension(BootLogExtension) \
|
|
|
|
.use_extension(DatabaseExtension) \
|
2022-10-16 10:11:21 +02:00
|
|
|
.use_extension(AppApiExtension) \
|
2022-11-13 11:56:42 +01:00
|
|
|
.use_extension(CoreExtension) \
|
2022-10-02 02:54:08 +02:00
|
|
|
.use_startup(Startup)
|
2022-07-19 11:58:33 +02:00
|
|
|
self.app: Application = await app_builder.build_async()
|
|
|
|
await self.app.run_async()
|
2022-07-16 19:47:04 +02:00
|
|
|
|
|
|
|
async def stop(self):
|
2022-09-30 17:03:44 +02:00
|
|
|
if self.app is None:
|
|
|
|
return
|
2022-07-19 11:58:33 +02:00
|
|
|
await self.app.stop_async()
|
2022-07-14 16:32:46 +02:00
|
|
|
|
|
|
|
|
2022-07-19 11:58:33 +02:00
|
|
|
def main():
|
|
|
|
program = Program()
|
2022-07-16 19:47:04 +02:00
|
|
|
try:
|
2022-07-19 11:58:33 +02:00
|
|
|
asyncio.run(program.start())
|
2022-07-16 19:47:04 +02:00
|
|
|
except KeyboardInterrupt:
|
2022-07-19 11:58:33 +02:00
|
|
|
asyncio.run(program.stop())
|
|
|
|
except Exception as e:
|
2022-10-03 13:39:09 +02:00
|
|
|
Console.error(f'[ ERROR ] [ {__name__} ]: Cannot start the bot', f'{e} -> {traceback.format_exc()}')
|
2022-07-19 11:58:33 +02:00
|
|
|
finally:
|
|
|
|
try:
|
|
|
|
asyncio.run(program.stop())
|
|
|
|
except Exception as e:
|
2022-10-03 13:39:09 +02:00
|
|
|
Console.error(f'[ ERROR ] [ {__name__} ]: Cannot stop the bot', f'{e} -> {traceback.format_exc()}')
|
2022-07-19 11:58:33 +02:00
|
|
|
|
|
|
|
if program.app is not None and program.app.is_restart():
|
|
|
|
del program
|
|
|
|
main()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|
2022-07-16 19:47:04 +02:00
|
|
|
|
|
|
|
# ((
|
|
|
|
# ( `)
|
|
|
|
# ; / ,
|
|
|
|
# / \/
|
|
|
|
# / |
|
|
|
|
# / ~/
|
|
|
|
# / ) ) ~ edraft
|
|
|
|
# ___// | /
|
|
|
|
# `--' \_~-,
|