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