Send message to team chat when a member leaves the server #295

This commit is contained in:
Sven Heidemann 2023-08-14 18:44:07 +02:00
parent 51d95c81c1
commit bfe72668dc
4 changed files with 25 additions and 7 deletions

View File

@ -151,6 +151,7 @@
}
},
"base": {
"member_left_message": "{} hat uns leider verlassen :(",
"complaints": {
"title": "Beschwerde einreichen",
"label": "Beschwerde",

View File

@ -87,7 +87,7 @@ class BaseOnMemberJoinEvent(OnMemberJoinABC):
return
self._logger.debug(__name__, f"Add user: {member.id}")
self._users.add_user(User(member.id, 0, server))
self._users.add_user(User(member.id, 0, 0, 0, server))
self._db.save_changes()
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
self._user_joins.add_user_joined_server(UserJoinedServer(user, datetime.now()))

View File

@ -2,6 +2,7 @@ from datetime import datetime
from typing import Union
import discord
from cpl_core.configuration import ConfigurationABC
from cpl_core.database.context import DatabaseContextABC
from cpl_core.logging import LoggerABC
from cpl_discord.events import OnMemberRemoveABC
@ -12,14 +13,16 @@ from bot_core.helper.event_checks import EventChecks
from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC
from bot_data.abc.user_repository_abc import UserRepositoryABC
from bot_data.model.server_config import ServerConfig
class BaseOnMemberRemoveEvent(OnMemberRemoveABC):
def __init__(
self,
config: ConfigurationABC,
logger: LoggerABC,
db: DatabaseContextABC,
messenger: MessageServiceABC,
message_service: MessageServiceABC,
users: UserRepositoryABC,
servers: ServerRepositoryABC,
user_joins: UserJoinedServerRepositoryABC,
@ -27,10 +30,10 @@ class BaseOnMemberRemoveEvent(OnMemberRemoveABC):
):
OnMemberRemoveABC.__init__(self)
self._config = config
self._logger = logger
self._base_helper = base_helper
self._db = db
self._messenger = messenger
self._message_service = message_service
self._users = users
self._servers = servers
self._user_joins = user_joins
@ -38,8 +41,7 @@ class BaseOnMemberRemoveEvent(OnMemberRemoveABC):
async def _remove_user(self, member: Union[discord.User, discord.Member]):
self._logger.debug(__name__, f"Remove user {member}")
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{member.guild.id}")
await self._messenger.send_dm_message(self._t.transform("modules.base.goodbye_message"), member)
await self._message_service.send_dm_message(self._t.transform("modules.base.goodbye_message"), member)
try:
server = self._servers.get_server_by_discord_id(member.guild.id)
@ -56,7 +58,19 @@ class BaseOnMemberRemoveEvent(OnMemberRemoveABC):
except Exception as e:
self._logger.error(__name__, f"Cannot remove user {member.id}", e)
async def _notify_team(self, member: discord.Member):
self._logger.debug(__name__, f"Notify team that a member left")
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{member.guild.id}")
channel = member.guild.get_channel(settings.team_channel_id)
await self._message_service.send_channel_message(
channel,
self._t.transform("modules.base.member_left_message").format(member.mention),
is_persistent=True,
)
self._logger.trace(__name__, f"Notified team that a member left")
@EventChecks.check_is_ready()
async def on_member_remove(self, member: discord.Member):
self._logger.debug(__name__, f"Module {type(self)} started")
await self._remove_user(member)
await self._notify_team(member)

View File

@ -1,6 +1,7 @@
from typing import Optional
import discord
from cpl_core.configuration import ConfigurationABC
from cpl_core.database.context import DatabaseContextABC
from cpl_discord.events import OnMessageABC
from cpl_discord.service import DiscordBotServiceABC
@ -19,6 +20,7 @@ from bot_data.model.user import User
class BaseOnMessageEvent(OnMessageABC):
def __init__(
self,
config: ConfigurationABC,
logger: MessageLogger,
client_utils: ClientUtilsService,
db: DatabaseContextABC,
@ -28,6 +30,7 @@ class BaseOnMessageEvent(OnMessageABC):
servers: ServerRepositoryABC,
):
OnMessageABC.__init__(self)
self._config = config
self._logger = logger
self._client_utils = client_utils
self._bot = bot
@ -63,7 +66,7 @@ class BaseOnMessageEvent(OnMessageABC):
self._logger.error(__name__, f"User not found {dc_user_id}")
return
settings: ServerConfig = se
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
if self._client_utils.is_message_xp_count_by_hour_higher_that_max_message_count_per_hour(
message.created_at, user, settings
):