Added logic to load clients on_ready
This commit is contained in:
		| @@ -1,16 +1,19 @@ | ||||
| import asyncio | ||||
| from datetime import datetime | ||||
| import time | ||||
| from datetime import datetime | ||||
| from typing import Union | ||||
|  | ||||
| import discord | ||||
| from cpl_core.configuration import ConfigurationABC | ||||
| from cpl_core.database.context import DatabaseContextABC | ||||
| from cpl_core.logging import LoggerABC | ||||
|  | ||||
| from discord.ext import commands | ||||
| from gismo_core.abc.bot_service_abc import BotServiceABC | ||||
| from gismo_core.abc.message_service_abc import MessageServiceABC | ||||
| from gismo_core.configuration.server_settings import ServerSettings | ||||
| from gismo_data.abc.client_repository_abc import ClientRepositoryABC | ||||
| from gismo_data.abc.user_repository_abc import UserRepositoryABC | ||||
| from gismo_data.model.client import Client | ||||
| from gismo_data.model.server import Server | ||||
| from gismo_data.model.user import User | ||||
| from gismo_data.service.user_repository_service import ServerRepositoryABC | ||||
| @@ -27,7 +30,8 @@ class Database(ModuleABC, OnReadyABC): | ||||
|         bot: BotServiceABC, | ||||
|         db_context: DatabaseContextABC, | ||||
|         server_repo: ServerRepositoryABC, | ||||
|         user_repo: UserRepositoryABC | ||||
|         user_repo: UserRepositoryABC, | ||||
|         client_repo: ClientRepositoryABC, | ||||
|     ): | ||||
|         self._config = config | ||||
|  | ||||
| @@ -36,6 +40,7 @@ class Database(ModuleABC, OnReadyABC): | ||||
|         self._db_context = db_context | ||||
|         self._servers = server_repo | ||||
|         self._users = user_repo | ||||
|         self._clients = client_repo | ||||
|          | ||||
|         ModuleABC.__init__(self) | ||||
|         self._priorities[OnReadyABC] = 0 | ||||
| @@ -66,12 +71,16 @@ class Database(ModuleABC, OnReadyABC): | ||||
|             try: | ||||
|                 server = self._servers.find_server_by_discord_id(g.id) | ||||
|                 if server is not None: | ||||
|                     return | ||||
|                     break | ||||
|                  | ||||
|                 self._logger.warn(__name__, f'Server not found in database: {g.id}') | ||||
|                 self._logger.debug(__name__, f'Add server: {g.id}') | ||||
|                 self._servers.add_server(Server(g.id)) | ||||
|                 self._db_context.save_changes() | ||||
|  | ||||
|                 server = self._servers.find_server_by_discord_id(g.id) | ||||
|                 if server is None: | ||||
|                     self._logger.fatal(__name__, f'Cannot add server: {g.id}') | ||||
|                  | ||||
|                 self._logger.debug(__name__, f'Added server: {g.id}') | ||||
|             except Exception as e: | ||||
| @@ -80,6 +89,35 @@ class Database(ModuleABC, OnReadyABC): | ||||
|         results = self._servers.get_servers() | ||||
|         if results is None or len(results) == 0: | ||||
|             self._logger.error(__name__, f'Table Servers is empty!') | ||||
|      | ||||
|     def _check_clients(self): | ||||
|         for g in self._bot.guilds: | ||||
|             g: discord.Guild = g | ||||
|             try: | ||||
|                 server: Server = self._servers.find_server_by_discord_id(g.id) | ||||
|                 if server is None: | ||||
|                     self._logger.fatal(__name__, f'Server not found in database: {g.id}') | ||||
|                  | ||||
|                 client = self._clients.find_client_by_server_id(server.server_id) | ||||
|                 if client is not None: | ||||
|                     break | ||||
|  | ||||
|                 self._logger.warn(__name__, f'Client for server {g.id} not found in database: {self._bot.user.id}') | ||||
|                 self._logger.debug(__name__, f'Add client: {self._bot.user.id}') | ||||
|                 self._clients.add_client(Client(self._bot.user.id, 0, 0, 0, 0, 0, server)) | ||||
|                 self._db_context.save_changes() | ||||
|  | ||||
|                 client = self._clients.find_client_by_server_id(server.server_id) | ||||
|                 if client is None: | ||||
|                     self._logger.fatal(__name__, f'Cannot add client {self._bot.user.id} for server {g.id}') | ||||
|                  | ||||
|                 self._logger.debug(__name__, f'Added client: {g.id}') | ||||
|             except Exception as e: | ||||
|                 self._logger.error(__name__, f'Cannot get client', e) | ||||
|                  | ||||
|         results = self._servers.get_servers() | ||||
|         if results is None or len(results) == 0: | ||||
|             self._logger.error(__name__, f'Table Servers is empty!') | ||||
|          | ||||
|     def _check_users(self): | ||||
|         for g in self._bot.guilds: | ||||
| @@ -89,10 +127,13 @@ class Database(ModuleABC, OnReadyABC): | ||||
|                 server = self._servers.find_server_by_discord_id(g.id) | ||||
|                 if server is None: | ||||
|                     self._logger.fatal(__name__, f'Server not found in database: {g.id}') | ||||
|                     break | ||||
|                      | ||||
|                 for u in g.members: | ||||
|                     u: discord.Member = u | ||||
|                     if u.bot:  | ||||
|                         self._logger.trace(__name__, f'User {u.id} is ignored, because its a bot') | ||||
|                         break | ||||
|  | ||||
|                     user = self._users.find_user_by_discord_id(u.id) | ||||
|                     if user is not None: | ||||
|                         break | ||||
| @@ -114,7 +155,8 @@ class Database(ModuleABC, OnReadyABC): | ||||
|         self._logger.debug(__name__, f'Module {type(self)} started') | ||||
|          | ||||
|         self._check_servers() | ||||
|         self._check_clients() | ||||
|         self._check_users() | ||||
|          | ||||
|         self._validate_init_time() | ||||
|         self._logger.trace(__name__, f'Module {type(self)} stopped') | ||||
|         self._logger.trace(__name__, f'Module {type(self)} stopped') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user