Added logic to set default role #360
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
			
		||||
from abc import ABC, abstractmethod
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from typing import Callable
 | 
			
		||||
from typing import Callable, Union
 | 
			
		||||
 | 
			
		||||
import discord
 | 
			
		||||
from cpl_query.extension import List
 | 
			
		||||
@@ -67,3 +67,7 @@ class ClientUtilsABC(ABC):
 | 
			
		||||
        self, discord_channel_id: int, discord_message_id: int, rule: AutoRoleRule, guild: discord.Guild
 | 
			
		||||
    ):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    @abstractmethod
 | 
			
		||||
    async def check_default_role(self, member: Union[discord.User, discord.Member]):
 | 
			
		||||
        pass
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from typing import Callable
 | 
			
		||||
from typing import Callable, Union
 | 
			
		||||
 | 
			
		||||
import discord
 | 
			
		||||
from cpl_core.configuration import ConfigurationABC
 | 
			
		||||
@@ -218,3 +218,20 @@ class ClientUtilsService(ClientUtilsABC):
 | 
			
		||||
                f"Cannot add reaction {rule.emoji_name} to message: {discord_message_id}",
 | 
			
		||||
                e,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
    async def check_default_role(self, member: Union[discord.User, discord.Member]):
 | 
			
		||||
        try:
 | 
			
		||||
            server = self._servers.get_server_by_discord_id(member.guild.id)
 | 
			
		||||
            settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
 | 
			
		||||
 | 
			
		||||
            if settings.default_role_id is None:
 | 
			
		||||
                return
 | 
			
		||||
 | 
			
		||||
            default_role = member.guild.get_role(settings.default_role_id)
 | 
			
		||||
            if default_role in member.roles:
 | 
			
		||||
                return
 | 
			
		||||
    
 | 
			
		||||
            await member.add_roles(default_role)
 | 
			
		||||
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            self._logger.error(__name__, f"Cannot check for default role for member {member.id}", e)
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ from cpl_core.configuration import ConfigurationABC
 | 
			
		||||
from cpl_core.database.context import DatabaseContextABC
 | 
			
		||||
from cpl_discord.service import DiscordBotServiceABC
 | 
			
		||||
 | 
			
		||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
			
		||||
from bot_core.logging.database_logger import DatabaseLogger
 | 
			
		||||
from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe
 | 
			
		||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
 | 
			
		||||
@@ -44,6 +45,7 @@ class DataIntegrityService:
 | 
			
		||||
        user_joins_vc: UserJoinedVoiceChannelRepositoryABC,
 | 
			
		||||
        user_joined_gs: UserJoinedGameServerRepositoryABC,
 | 
			
		||||
        achievement_service: AchievementService,
 | 
			
		||||
            client_utils: ClientUtilsABC,
 | 
			
		||||
        dtp: DateTimeOffsetPipe,
 | 
			
		||||
    ):
 | 
			
		||||
        self._config = config
 | 
			
		||||
@@ -60,6 +62,7 @@ class DataIntegrityService:
 | 
			
		||||
        self._user_joins_vc = user_joins_vc
 | 
			
		||||
        self._user_joined_gs = user_joined_gs
 | 
			
		||||
        self._achievements = achievement_service
 | 
			
		||||
        self._client_utils = client_utils
 | 
			
		||||
        self._dtp = dtp
 | 
			
		||||
 | 
			
		||||
        self._is_for_shutdown = False
 | 
			
		||||
@@ -382,10 +385,16 @@ class DataIntegrityService:
 | 
			
		||||
 | 
			
		||||
                await self._achievements.validate_achievements_for_user(user)
 | 
			
		||||
 | 
			
		||||
    async def _check_default_role(self):
 | 
			
		||||
        for guild in self._bot.guilds:
 | 
			
		||||
            for member in guild.members:
 | 
			
		||||
                await self._client_utils.check_default_role(member)
 | 
			
		||||
 | 
			
		||||
    async def check_data_integrity(self, is_for_shutdown=False):
 | 
			
		||||
        if is_for_shutdown != self._is_for_shutdown:
 | 
			
		||||
            self._is_for_shutdown = is_for_shutdown
 | 
			
		||||
 | 
			
		||||
        await self._check_default_role()
 | 
			
		||||
        self._check_known_users()
 | 
			
		||||
        self._check_servers()
 | 
			
		||||
        self._check_clients()
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,10 @@ from cpl_core.configuration import ConfigurationABC
 | 
			
		||||
from cpl_core.database.context import DatabaseContextABC
 | 
			
		||||
from cpl_core.logging import LoggerABC
 | 
			
		||||
from cpl_discord.events import OnMemberJoinABC
 | 
			
		||||
from cpl_discord.service import DiscordBotServiceABC
 | 
			
		||||
from cpl_translation import TranslatePipe
 | 
			
		||||
 | 
			
		||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
 | 
			
		||||
from bot_core.abc.message_service_abc import MessageServiceABC
 | 
			
		||||
from bot_core.helper.event_checks import EventChecks
 | 
			
		||||
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
 | 
			
		||||
@@ -28,10 +30,12 @@ class BaseOnMemberJoinEvent(OnMemberJoinABC):
 | 
			
		||||
        messenger: MessageServiceABC,
 | 
			
		||||
        permissions: PermissionServiceABC,
 | 
			
		||||
        db: DatabaseContextABC,
 | 
			
		||||
        bot: DiscordBotServiceABC,
 | 
			
		||||
        known_users: KnownUserRepositoryABC,
 | 
			
		||||
        users: UserRepositoryABC,
 | 
			
		||||
        servers: ServerRepositoryABC,
 | 
			
		||||
        user_joins: UserJoinedServerRepositoryABC,
 | 
			
		||||
            client_utils: ClientUtilsABC,
 | 
			
		||||
        translate: TranslatePipe,
 | 
			
		||||
    ):
 | 
			
		||||
        OnMemberJoinABC.__init__(self)
 | 
			
		||||
@@ -40,10 +44,12 @@ class BaseOnMemberJoinEvent(OnMemberJoinABC):
 | 
			
		||||
        self._messenger = messenger
 | 
			
		||||
        self._permission_service = permissions
 | 
			
		||||
        self._db = db
 | 
			
		||||
        self._bot = bot
 | 
			
		||||
        self._known_users = known_users
 | 
			
		||||
        self._users = users
 | 
			
		||||
        self._servers = servers
 | 
			
		||||
        self._user_joins = user_joins
 | 
			
		||||
        self._client_utils = client_utils
 | 
			
		||||
        self._t = translate
 | 
			
		||||
 | 
			
		||||
    def _check_for_known_user(self, member: Union[discord.User, discord.Member]):
 | 
			
		||||
@@ -98,5 +104,6 @@ class BaseOnMemberJoinEvent(OnMemberJoinABC):
 | 
			
		||||
    @EventChecks.check_is_ready()
 | 
			
		||||
    async def on_member_join(self, member: discord.Member):
 | 
			
		||||
        self._logger.debug(__name__, f"Module {type(self)} started")
 | 
			
		||||
        await self._client_utils.check_default_role(member)
 | 
			
		||||
        self._check_for_known_user(member)
 | 
			
		||||
        await self._add_if_not_exists_user_async(member)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user