3 Commits

Author SHA1 Message Date
9226a1188e Fixed translation #360 2023-09-24 17:13:19 +02:00
c06cb02cd6 Added logic to set default role #360 2023-09-24 17:05:42 +02:00
20747001b0 Added logic to set default role #360 2023-09-24 17:05:35 +02:00
7 changed files with 42 additions and 4 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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()

View File

@@ -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)

View File

@@ -116,7 +116,7 @@
<div class="content-row">
<div class="content-column">
<div class="content-data-name">{{'view.server.config.bot.login_message_channel_id' | translate}}:</div>
<div class="content-data-name">{{'view.server.config.bot.default_role_id' | translate}}:</div>
<p-dropdown class="content-data-value" [options]="roles ?? []" optionLabel="name" optionValue="id" [(ngModel)]="config.defaultRoleId"
placeholder="{{'view.server.config.bot.default_role_id' | translate}}"></p-dropdown>
</div>

View File

@@ -412,10 +412,10 @@
"admin_roles": "Admin Rollen",
"afk_channels": "AFK Sprachkanäle",
"afk_command_channel_id": "AFK Kanal für den Befehl /afk",
"default_role_id": "Standardrolle des Servers",
"header": "Bot Konfiguration",
"help_voice_channel_id": "Sprachkanal für Hilfsbenachrichtung",
"login_message_channel_id": "Kanal für die Nachricht vom Bot nach Start",
"default_role_id": "Standardrolle des Servers",
"max_message_xp_per_hour": "Maximale XP pro Stunde durch Nachrichten",
"max_voice_state_hours": "Maximale Stunden für eine ontime nach Bot neustart",
"message_delete_timer": "Zeit bis zum löschen einer Botnachricht in sekunden",

View File

@@ -412,6 +412,7 @@
"admin_roles": "Admin Roles",
"afk_channels": "AFK Voicechannel",
"afk_command_channel_id": "AFK Channel for the command /afk",
"default_role_id": "Default role",
"header": "Bot configuration",
"help_voice_channel_id": "Voicechannel für help notifications",
"login_message_channel_id": "Channel for bot message after start",