Added user joined game server validation checks on start #181
This commit is contained in:
parent
9a8f8a13f6
commit
ce1cdd4017
@ -50,15 +50,15 @@ class QueryABC(ObjectType):
|
|||||||
sort.from_dict(kwargs["sort"])
|
sort.from_dict(kwargs["sort"])
|
||||||
kwargs["sort"] = sort
|
kwargs["sort"] = sort
|
||||||
|
|
||||||
collection = get_collection(*args)
|
collection: List = get_collection(*args)
|
||||||
user = Route.get_user()
|
user = Route.get_user()
|
||||||
|
|
||||||
if user == "system" or user.auth_role == AuthRoleEnum.admin:
|
if user == "system" or user.auth_role == AuthRoleEnum.admin:
|
||||||
return self._resolve_collection(collection, *args, **kwargs)
|
return self._resolve_collection(collection, *args, **kwargs)
|
||||||
|
|
||||||
for x in collection:
|
for x in collection.to_list():
|
||||||
if not self._can_user_see_element(user, x):
|
if not self._can_user_see_element(user, x):
|
||||||
return List()
|
collection.remove(x)
|
||||||
|
|
||||||
return self._resolve_collection(collection, *args, **kwargs)
|
return self._resolve_collection(collection, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ from bot_core.logging.database_logger import DatabaseLogger
|
|||||||
from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
|
from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
|
||||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
||||||
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
|
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
|
||||||
|
from bot_data.abc.user_joined_game_server_repository_abc import UserJoinedGameServerRepositoryABC
|
||||||
from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC
|
from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC
|
||||||
from bot_data.abc.user_joined_voice_channel_repository_abc import (
|
from bot_data.abc.user_joined_voice_channel_repository_abc import (
|
||||||
UserJoinedVoiceChannelRepositoryABC,
|
UserJoinedVoiceChannelRepositoryABC,
|
||||||
@ -41,6 +42,7 @@ class DatabaseOnReadyEvent(OnReadyABC):
|
|||||||
known_users: KnownUserRepositoryABC,
|
known_users: KnownUserRepositoryABC,
|
||||||
user_joins: UserJoinedServerRepositoryABC,
|
user_joins: UserJoinedServerRepositoryABC,
|
||||||
user_joins_vc: UserJoinedVoiceChannelRepositoryABC,
|
user_joins_vc: UserJoinedVoiceChannelRepositoryABC,
|
||||||
|
user_joined_gs: UserJoinedGameServerRepositoryABC,
|
||||||
dtp: DateTimeOffsetPipe,
|
dtp: DateTimeOffsetPipe,
|
||||||
):
|
):
|
||||||
self._config = config
|
self._config = config
|
||||||
@ -55,6 +57,7 @@ class DatabaseOnReadyEvent(OnReadyABC):
|
|||||||
self._known_users = known_users
|
self._known_users = known_users
|
||||||
self._user_joins = user_joins
|
self._user_joins = user_joins
|
||||||
self._user_joins_vc = user_joins_vc
|
self._user_joins_vc = user_joins_vc
|
||||||
|
self._user_joined_gs = user_joined_gs
|
||||||
self._dtp = dtp
|
self._dtp = dtp
|
||||||
|
|
||||||
OnReadyABC.__init__(self)
|
OnReadyABC.__init__(self)
|
||||||
@ -327,6 +330,48 @@ class DatabaseOnReadyEvent(OnReadyABC):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._logger.error(__name__, f"Cannot get UserJoinedVoiceChannel", e)
|
self._logger.error(__name__, f"Cannot get UserJoinedVoiceChannel", e)
|
||||||
|
|
||||||
|
def _check_user_joined_gs(self):
|
||||||
|
self._logger.debug(__name__, f"Start checking UserJoinedVoiceChannel table")
|
||||||
|
for guild in self._bot.guilds:
|
||||||
|
guild: discord.Guild = guild
|
||||||
|
|
||||||
|
server = self._servers.find_server_by_discord_id(guild.id)
|
||||||
|
if server is None:
|
||||||
|
self._logger.fatal(__name__, f"Server not found in database: {guild.id}")
|
||||||
|
|
||||||
|
try:
|
||||||
|
for member in guild.members:
|
||||||
|
if member.bot:
|
||||||
|
self._logger.trace(__name__, f"User {member.id} is ignored, because its a bot")
|
||||||
|
continue
|
||||||
|
|
||||||
|
user = self._users.find_user_by_discord_id_and_server_id(member.id, server.server_id)
|
||||||
|
if user is None:
|
||||||
|
self._logger.fatal(__name__, f"User not found in database: {member.id}")
|
||||||
|
|
||||||
|
joins = self._user_joined_gs.find_active_user_joined_game_servers_by_user_id(user.user_id)
|
||||||
|
if joins is None or len(joins) == 0:
|
||||||
|
continue
|
||||||
|
|
||||||
|
for join in joins:
|
||||||
|
self._logger.warn(
|
||||||
|
__name__,
|
||||||
|
f"Active UserJoinedGameServer found in database: {guild.id}:{member.id}@{join.joined_on}",
|
||||||
|
)
|
||||||
|
join.leaved_on = datetime.now()
|
||||||
|
settings: BaseServerSettings = self._config.get_configuration(f"BaseServerSettings_{guild.id}")
|
||||||
|
|
||||||
|
if (
|
||||||
|
(join.leaved_on - join.joined_on).total_seconds() / 60 / 60
|
||||||
|
) > settings.max_voice_state_hours:
|
||||||
|
join.leaved_on = join.joined_on + timedelta(hours=settings.max_voice_state_hours)
|
||||||
|
|
||||||
|
self._user_joined_gs.update_user_joined_game_server(join)
|
||||||
|
# todo: maybe add XP
|
||||||
|
self._db_context.save_changes()
|
||||||
|
except Exception as e:
|
||||||
|
self._logger.error(__name__, f"Cannot get UserJoinedVoiceChannel", e)
|
||||||
|
|
||||||
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")
|
||||||
|
|
||||||
@ -338,6 +383,7 @@ class DatabaseOnReadyEvent(OnReadyABC):
|
|||||||
self._check_users()
|
self._check_users()
|
||||||
self._check_user_joins()
|
self._check_user_joins()
|
||||||
self._check_user_joins_vc()
|
self._check_user_joins_vc()
|
||||||
|
self._check_user_joined_gs()
|
||||||
|
|
||||||
self._validate_init_time()
|
self._validate_init_time()
|
||||||
self._logger.trace(__name__, f"Module {type(self)} stopped")
|
self._logger.trace(__name__, f"Module {type(self)} stopped")
|
||||||
|
Loading…
Reference in New Issue
Block a user