A-0.3 - Basismodul #36
@ -29,7 +29,6 @@ class KnownUser(TableABC):
|
|||||||
CREATE TABLE IF NOT EXISTS `KnownUsers` (
|
CREATE TABLE IF NOT EXISTS `KnownUsers` (
|
||||||
`KnownUserId` BIGINT NOT NULL AUTO_INCREMENT,
|
`KnownUserId` BIGINT NOT NULL AUTO_INCREMENT,
|
||||||
`DiscordId` BIGINT NOT NULL,
|
`DiscordId` BIGINT NOT NULL,
|
||||||
`ServerId` BIGINT,
|
|
||||||
`CreatedAt` DATETIME(6),
|
`CreatedAt` DATETIME(6),
|
||||||
`LastModifiedAt` DATETIME(6),
|
`LastModifiedAt` DATETIME(6),
|
||||||
PRIMARY KEY(`KnownUserId`)
|
PRIMARY KEY(`KnownUserId`)
|
||||||
|
@ -2,13 +2,13 @@ from typing import Optional
|
|||||||
from cpl_core.database.context import DatabaseContextABC
|
from cpl_core.database.context import DatabaseContextABC
|
||||||
from cpl_core.logging import LoggerABC
|
from cpl_core.logging import LoggerABC
|
||||||
from cpl_query.extension import List
|
from cpl_query.extension import List
|
||||||
|
from gismo_data.abc.known_user_repository_abc import KnownUserRepositoryABC
|
||||||
|
|
||||||
from gismo_data.abc.server_repository_abc import ServerRepositoryABC
|
from gismo_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
from gismo_data.abc.user_repository_abc import UserRepositoryABC
|
|
||||||
from gismo_data.model.known_user import KnownUser
|
from gismo_data.model.known_user import KnownUser
|
||||||
|
|
||||||
|
|
||||||
class KnownUserRepositoryService(UserRepositoryABC):
|
class KnownUserRepositoryService(KnownUserRepositoryABC):
|
||||||
|
|
||||||
def __init__(self, logger: LoggerABC, db_context: DatabaseContextABC, servers: ServerRepositoryABC):
|
def __init__(self, logger: LoggerABC, db_context: DatabaseContextABC, servers: ServerRepositoryABC):
|
||||||
self._logger = logger
|
self._logger = logger
|
||||||
@ -16,7 +16,7 @@ class KnownUserRepositoryService(UserRepositoryABC):
|
|||||||
|
|
||||||
self._servers = servers
|
self._servers = servers
|
||||||
|
|
||||||
UserRepositoryABC.__init__(self)
|
KnownUserRepositoryABC.__init__(self)
|
||||||
|
|
||||||
def get_users(self) -> List[KnownUser]:
|
def get_users(self) -> List[KnownUser]:
|
||||||
users = List(KnownUser)
|
users = List(KnownUser)
|
||||||
|
@ -1,19 +1,15 @@
|
|||||||
import asyncio
|
|
||||||
import time
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
from cpl_core.configuration import ConfigurationABC
|
from cpl_core.configuration import ConfigurationABC
|
||||||
from cpl_core.database.context import DatabaseContextABC
|
from cpl_core.database.context import DatabaseContextABC
|
||||||
from cpl_core.logging import LoggerABC
|
from cpl_core.logging import LoggerABC
|
||||||
from discord.ext import commands
|
|
||||||
from gismo_core.abc.bot_service_abc import BotServiceABC
|
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.client_repository_abc import ClientRepositoryABC
|
||||||
|
from gismo_data.abc.known_user_repository_abc import KnownUserRepositoryABC
|
||||||
from gismo_data.abc.user_repository_abc import UserRepositoryABC
|
from gismo_data.abc.user_repository_abc import UserRepositoryABC
|
||||||
from gismo_data.model.client import Client
|
from gismo_data.model.client import Client
|
||||||
|
from gismo_data.model.known_user import KnownUser
|
||||||
from gismo_data.model.server import Server
|
from gismo_data.model.server import Server
|
||||||
from gismo_data.model.user import User
|
from gismo_data.model.user import User
|
||||||
from gismo_data.service.user_repository_service import ServerRepositoryABC
|
from gismo_data.service.user_repository_service import ServerRepositoryABC
|
||||||
@ -32,6 +28,7 @@ class Database(ModuleABC, OnReadyABC):
|
|||||||
server_repo: ServerRepositoryABC,
|
server_repo: ServerRepositoryABC,
|
||||||
user_repo: UserRepositoryABC,
|
user_repo: UserRepositoryABC,
|
||||||
client_repo: ClientRepositoryABC,
|
client_repo: ClientRepositoryABC,
|
||||||
|
known_users: KnownUserRepositoryABC
|
||||||
):
|
):
|
||||||
self._config = config
|
self._config = config
|
||||||
|
|
||||||
@ -41,6 +38,7 @@ class Database(ModuleABC, OnReadyABC):
|
|||||||
self._servers = server_repo
|
self._servers = server_repo
|
||||||
self._users = user_repo
|
self._users = user_repo
|
||||||
self._clients = client_repo
|
self._clients = client_repo
|
||||||
|
self._known_users = known_users
|
||||||
|
|
||||||
ModuleABC.__init__(self)
|
ModuleABC.__init__(self)
|
||||||
self._priorities[OnReadyABC] = 0
|
self._priorities[OnReadyABC] = 0
|
||||||
@ -65,7 +63,38 @@ class Database(ModuleABC, OnReadyABC):
|
|||||||
self._logger.error(__name__, 'Database init time calculation failed', e)
|
self._logger.error(__name__, 'Database init time calculation failed', e)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def _check_known_users(self):
|
||||||
|
self._logger.debug(__name__, f'Start checking KnownUsers table')
|
||||||
|
for u in self._bot.users:
|
||||||
|
u: discord.User = u
|
||||||
|
try:
|
||||||
|
if u.bot:
|
||||||
|
self._logger.trace(__name__, f'User {u.id} is ignored, because its a bot')
|
||||||
|
break
|
||||||
|
|
||||||
|
user = self._known_users.find_user_by_discord_id(u.id)
|
||||||
|
if user is not None:
|
||||||
|
break
|
||||||
|
|
||||||
|
self._logger.warn(__name__, f'Unknown user: {u.id}')
|
||||||
|
self._logger.debug(__name__, f'Add user: {u.id}')
|
||||||
|
self._known_users.add_user(KnownUser(u.id))
|
||||||
|
self._db_context.save_changes()
|
||||||
|
|
||||||
|
user = self._known_users.find_user_by_discord_id(u.id)
|
||||||
|
if user is None:
|
||||||
|
self._logger.fatal(__name__, f'Cannot add user: {u.id}')
|
||||||
|
|
||||||
|
self._logger.debug(__name__, f'Added user: {u.id}')
|
||||||
|
except Exception as e:
|
||||||
|
self._logger.error(__name__, f'Cannot get user', 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_servers(self):
|
def _check_servers(self):
|
||||||
|
self._logger.debug(__name__, f'Start checking Servers table')
|
||||||
for g in self._bot.guilds:
|
for g in self._bot.guilds:
|
||||||
g: discord.Guild = g
|
g: discord.Guild = g
|
||||||
try:
|
try:
|
||||||
@ -91,6 +120,7 @@ class Database(ModuleABC, OnReadyABC):
|
|||||||
self._logger.error(__name__, f'Table Servers is empty!')
|
self._logger.error(__name__, f'Table Servers is empty!')
|
||||||
|
|
||||||
def _check_clients(self):
|
def _check_clients(self):
|
||||||
|
self._logger.debug(__name__, f'Start checking Clients table')
|
||||||
for g in self._bot.guilds:
|
for g in self._bot.guilds:
|
||||||
g: discord.Guild = g
|
g: discord.Guild = g
|
||||||
try:
|
try:
|
||||||
@ -120,6 +150,7 @@ class Database(ModuleABC, OnReadyABC):
|
|||||||
self._logger.error(__name__, f'Table Servers is empty!')
|
self._logger.error(__name__, f'Table Servers is empty!')
|
||||||
|
|
||||||
def _check_users(self):
|
def _check_users(self):
|
||||||
|
self._logger.debug(__name__, f'Start checking Users table')
|
||||||
for g in self._bot.guilds:
|
for g in self._bot.guilds:
|
||||||
g: discord.Guild = g
|
g: discord.Guild = g
|
||||||
|
|
||||||
@ -154,6 +185,7 @@ class Database(ModuleABC, OnReadyABC):
|
|||||||
async def on_ready(self):
|
async def on_ready(self):
|
||||||
self._logger.debug(__name__, f'Module {type(self)} started')
|
self._logger.debug(__name__, f'Module {type(self)} started')
|
||||||
|
|
||||||
|
self._check_known_users()
|
||||||
self._check_servers()
|
self._check_servers()
|
||||||
self._check_clients()
|
self._check_clients()
|
||||||
self._check_users()
|
self._check_users()
|
||||||
|
Reference in New Issue
Block a user