|  |  |  | @@ -23,6 +23,7 @@ from gismo_data.model.user_joined_voice_channel import UserJoinedVoiceChannel | 
		
	
		
			
				|  |  |  |  | from gismo_data.service.user_repository_service import ServerRepositoryABC | 
		
	
		
			
				|  |  |  |  | from gismo_core.abc.events.on_ready_abc import OnReadyABC | 
		
	
		
			
				|  |  |  |  | from gismo_core.abc.module_abc import ModuleABC | 
		
	
		
			
				|  |  |  |  | from modules.base.base_settings import BaseSettings | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | class Database(ModuleABC, OnReadyABC): | 
		
	
	
		
			
				
					
					|  |  |  | @@ -54,7 +55,7 @@ class Database(ModuleABC, OnReadyABC): | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         ModuleABC.__init__( | 
		
	
		
			
				|  |  |  |  |             self, | 
		
	
		
			
				|  |  |  |  |             { OnReadyABC: 0 }, | 
		
	
		
			
				|  |  |  |  |             {OnReadyABC: 0}, | 
		
	
		
			
				|  |  |  |  |             None | 
		
	
		
			
				|  |  |  |  |         ) | 
		
	
		
			
				|  |  |  |  |         self._logger.info(__name__, f'Module {type(self)} loaded') | 
		
	
	
		
			
				
					
					|  |  |  | @@ -63,7 +64,7 @@ class Database(ModuleABC, OnReadyABC): | 
		
	
		
			
				|  |  |  |  |         try: | 
		
	
		
			
				|  |  |  |  |             start_time = self._config.get_configuration('Database_StartTime') | 
		
	
		
			
				|  |  |  |  |             init_time = round((datetime.now() - start_time).total_seconds(), 2) | 
		
	
		
			
				|  |  |  |  |             self._config.add_configuration('Database_InitTime', init_time) | 
		
	
		
			
				|  |  |  |  |             self._config.add_configuration('Database_InitTime', str(init_time)) | 
		
	
		
			
				|  |  |  |  |             self._logger.debug(__name__, f'Database Init time:  {init_time}s') | 
		
	
		
			
				|  |  |  |  |             # print warning if initialisation took too long | 
		
	
		
			
				|  |  |  |  |             if init_time >= 30: | 
		
	
	
		
			
				
					
					|  |  |  | @@ -231,7 +232,6 @@ class Database(ModuleABC, OnReadyABC): | 
		
	
		
			
				|  |  |  |  |             if results is None or len(results) == 0: | 
		
	
		
			
				|  |  |  |  |                 self._logger.error(__name__, f'Table Users is empty!') | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |              | 
		
	
		
			
				|  |  |  |  |             joins = self._user_joins.get_user_joined_servers() | 
		
	
		
			
				|  |  |  |  |             for join in joins: | 
		
	
		
			
				|  |  |  |  |                 join: UserJoinedServer = join | 
		
	
	
		
			
				
					
					|  |  |  | @@ -259,50 +259,46 @@ class Database(ModuleABC, OnReadyABC): | 
		
	
		
			
				|  |  |  |  |                 self._logger.fatal(__name__, f'Server not found in database: {guild.id}') | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |             try:     | 
		
	
		
			
				|  |  |  |  |                 for u in guild.members: | 
		
	
		
			
				|  |  |  |  |                     u: discord.User = u | 
		
	
		
			
				|  |  |  |  |                     if u.bot:  | 
		
	
		
			
				|  |  |  |  |                         self._logger.trace(__name__, f'User {u.id} is ignored, because its a bot') | 
		
	
		
			
				|  |  |  |  |                 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(u.id, server.server_id) | 
		
	
		
			
				|  |  |  |  |                     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: {u.id}') | 
		
	
		
			
				|  |  |  |  |                         self._logger.fatal(__name__, f'User not found in database: {member.id}') | 
		
	
		
			
				|  |  |  |  |                      | 
		
	
		
			
				|  |  |  |  |                     join = self._user_joins_vc.find_active_user_joined_voice_channel_by_user_id(user.user_id) | 
		
	
		
			
				|  |  |  |  |                     if join is None: | 
		
	
		
			
				|  |  |  |  |                         continue | 
		
	
		
			
				|  |  |  |  |                      | 
		
	
		
			
				|  |  |  |  |                     m: discord.Member = u | 
		
	
		
			
				|  |  |  |  |                     self._logger.warn(__name__, f'Active UserJoinedVoiceChannel found in database: {guild.id}:{u.id}@{m.joined_at}') | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |                     self._logger.warn(__name__, f'Active UserJoinedVoiceChannel found in database: {guild.id}:{member.id}@{join.joined_on}') | 
		
	
		
			
				|  |  |  |  |                     join.leaved_on = datetime.now() | 
		
	
		
			
				|  |  |  |  |                     server_st: ServerSettings = self._config.get_configuration(f'DSERVER_{guild.id}') | 
		
	
		
			
				|  |  |  |  |                     settings: BaseSettings = self._config.get_configuration(f'DSERVER_{guild.id}') | 
		
	
		
			
				|  |  |  |  |                      | 
		
	
		
			
				|  |  |  |  |                     if ((join.leaved_on - join.joined_on).total_seconds()/60/60) > server_st.max_voice_state_hours: | 
		
	
		
			
				|  |  |  |  |                         join.leaved_on = join.joined_on + datetime.timedelta(hours=server_st.max_voice_state_hours) | 
		
	
		
			
				|  |  |  |  |                     if ((join.leaved_on - join.joined_on).total_seconds()/60/60) > settings.max_voice_state_hours: | 
		
	
		
			
				|  |  |  |  |                         join.leaved_on = join.joined_on + datetime.timedelta(hours=settings.max_voice_state_hours) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |                     self._user_joins_vc.update_user_joined_voice_channel(join) | 
		
	
		
			
				|  |  |  |  |                     # todo: maybe add XP | 
		
	
		
			
				|  |  |  |  |                     self._db_context.save_changes() | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |                 for u in guild.members: | 
		
	
		
			
				|  |  |  |  |                     if u.bot:  | 
		
	
		
			
				|  |  |  |  |                         self._logger.trace(__name__, f'User {u.id} is ignored, because its a bot') | 
		
	
		
			
				|  |  |  |  |                 for member in guild.members: | 
		
	
		
			
				|  |  |  |  |                     if member.bot: | 
		
	
		
			
				|  |  |  |  |                         self._logger.trace(__name__, f'User {member.id} is ignored, because its a bot') | 
		
	
		
			
				|  |  |  |  |                         continue | 
		
	
		
			
				|  |  |  |  |                      | 
		
	
		
			
				|  |  |  |  |                     m: discord.Member = u | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |                     if m.voice is None: | 
		
	
		
			
				|  |  |  |  |                     if member.voice is None: | 
		
	
		
			
				|  |  |  |  |                         continue | 
		
	
		
			
				|  |  |  |  |                      | 
		
	
		
			
				|  |  |  |  |                     user = self._users.find_user_by_discord_id_and_server_id(u.id, server.server_id) | 
		
	
		
			
				|  |  |  |  |                     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: {u.id}') | 
		
	
		
			
				|  |  |  |  |                         self._logger.fatal(__name__, f'User not found in database: {member.id}') | 
		
	
		
			
				|  |  |  |  |                      | 
		
	
		
			
				|  |  |  |  |                     join = UserJoinedVoiceChannel(user, m.voice.channel.id, datetime.now()) | 
		
	
		
			
				|  |  |  |  |                     join = UserJoinedVoiceChannel(user, member.voice.channel.id, datetime.now()) | 
		
	
		
			
				|  |  |  |  |                     self._user_joins_vc.add_user_joined_voice_channel(join) | 
		
	
		
			
				|  |  |  |  |                     self._db_context.save_changes() | 
		
	
		
			
				|  |  |  |  |                     self._logger.warn(__name__, f'VS {m.voice}') | 
		
	
		
			
				|  |  |  |  |                     self._logger.warn(__name__, f'VS {member.voice}') | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |             except Exception as e: | 
		
	
		
			
				|  |  |  |  |                 self._logger.error(__name__, f'Cannot get UserJoinedVoiceChannel', e) | 
		
	
	
		
			
				
					
					|  |  |  |   |