Formatted stuff #405

This commit is contained in:
2023-10-15 11:30:29 +02:00
parent 3a7daf8b42
commit be6361f619
226 changed files with 1083 additions and 3252 deletions

View File

@@ -53,14 +53,10 @@ class BaseModule(ModuleABC):
def __init__(self, dc: DiscordCollectionABC):
ModuleABC.__init__(self, dc, FeatureFlagsEnum.base_module)
def configure_configuration(
self, config: ConfigurationABC, env: ApplicationEnvironmentABC
):
def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC):
pass
def configure_services(
self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC
):
def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
services.add_transient(BaseReactionHandler)
services.add_singleton(EventService)
services.add_transient(UserWarningsService)
@@ -86,27 +82,13 @@ class BaseModule(ModuleABC):
services.add_transient(UnregisterGroup)
services.add_transient(GameServerGroup)
# events
services.add_transient(
DiscordEventTypesEnum.on_command.value, BaseOnCommandEvent
)
services.add_transient(
DiscordEventTypesEnum.on_command_error.value, BaseOnCommandErrorEvent
)
services.add_transient(
DiscordEventTypesEnum.on_member_join.value, BaseOnMemberJoinEvent
)
services.add_transient(
DiscordEventTypesEnum.on_member_remove.value, BaseOnMemberRemoveEvent
)
services.add_transient(
DiscordEventTypesEnum.on_message.value, BaseOnMessageEvent
)
services.add_transient(
DiscordEventTypesEnum.on_message_delete.value, BaseOnMessageDeleteEvent
)
services.add_transient(
DiscordEventTypesEnum.on_raw_reaction_add.value, BaseOnRawReactionAddEvent
)
services.add_transient(DiscordEventTypesEnum.on_command.value, BaseOnCommandEvent)
services.add_transient(DiscordEventTypesEnum.on_command_error.value, BaseOnCommandErrorEvent)
services.add_transient(DiscordEventTypesEnum.on_member_join.value, BaseOnMemberJoinEvent)
services.add_transient(DiscordEventTypesEnum.on_member_remove.value, BaseOnMemberRemoveEvent)
services.add_transient(DiscordEventTypesEnum.on_message.value, BaseOnMessageEvent)
services.add_transient(DiscordEventTypesEnum.on_message_delete.value, BaseOnMessageDeleteEvent)
services.add_transient(DiscordEventTypesEnum.on_raw_reaction_add.value, BaseOnRawReactionAddEvent)
services.add_transient(
DiscordEventTypesEnum.on_raw_reaction_remove.value,
BaseOnRawReactionRemoveEvent,

View File

@@ -46,9 +46,7 @@ class BirthdayWatcher(TaskABC):
if user.birthday.day != today.day or user.birthday.month != today.month:
continue
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{user.server.discord_id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{user.server.discord_id}")
user.xp += settings.xp_for_birthday
self._users.update_user(user)
@@ -58,9 +56,7 @@ class BirthdayWatcher(TaskABC):
member = guild.get_member(user.discord_id)
await self._message_service.send_channel_message(
self._bot.get_channel(settings.notification_chat_id),
self._t.transform("modules.base.user.birthday.has_birthday").format(
member.mention
),
self._t.transform("modules.base.user.birthday.has_birthday").format(member.mention),
is_persistent=True,
)
except Exception as e:

View File

@@ -39,9 +39,7 @@ class AFKCommand(DiscordCommandABC):
@CommandChecks.check_is_ready()
async def afk(self, ctx: Context):
self._logger.debug(__name__, f"Received command afk {ctx}")
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{ctx.guild.id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{ctx.guild.id}")
if ctx.author.voice is None or ctx.author.voice.channel is None:
await self._message_service.send_ctx_msg(
@@ -52,9 +50,7 @@ class AFKCommand(DiscordCommandABC):
return
self._bot.loop.create_task(
self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.base.afk_command_move_message")
)
self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.afk_command_move_message"))
)
channel: VoiceChannel = ctx.guild.get_channel(settings.afk_command_channel_id)
try:
@@ -66,8 +62,6 @@ class AFKCommand(DiscordCommandABC):
f"Cannot move user {ctx.author.id} to channel {ctx.channel.id}",
e,
)
await self._message_service.send_ctx_msg(
ctx, self._t.transform("common.no_permission_message")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("common.no_permission_message"))
self._logger.trace(__name__, f"Finished afk command")

View File

@@ -76,15 +76,9 @@ class GameServerGroup(DiscordCommandABC):
if ctx.guild is None:
return
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{ctx.guild.id}"
)
if not FeatureFlagsSettings.get_flag_from_dict(
settings.feature_flags, FeatureFlagsEnum.game_server
):
await self._message_service.send_ctx_msg(
ctx, self._t.transform("common.feature_not_activated")
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{ctx.guild.id}")
if not FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum.game_server):
await self._message_service.send_ctx_msg(ctx, self._t.transform("common.feature_not_activated"))
return
server = self._servers.get_server_by_discord_id(ctx.guild.id)
@@ -127,22 +121,14 @@ class GameServerGroup(DiscordCommandABC):
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_admin()
async def add(self, ctx: Context, name: str, api_key_id: int):
self._logger.debug(
__name__, f"Received command game-server add {ctx}: {name} {api_key_id}"
)
self._logger.debug(__name__, f"Received command game-server add {ctx}: {name} {api_key_id}")
if ctx.guild is None:
return
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{ctx.guild.id}"
)
if not FeatureFlagsSettings.get_flag_from_dict(
settings.feature_flags, FeatureFlagsEnum.game_server
):
await self._message_service.send_ctx_msg(
ctx, self._t.transform("common.feature_not_activated")
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{ctx.guild.id}")
if not FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum.game_server):
await self._message_service.send_ctx_msg(ctx, self._t.transform("common.feature_not_activated"))
return
server = self._servers.get_server_by_discord_id(ctx.guild.id)
@@ -166,9 +152,7 @@ class GameServerGroup(DiscordCommandABC):
return [
app_commands.Choice(name=f"{key.identifier}: {key.key}", value=key.id)
for key in self._client_utils.get_auto_complete_list(
keys, current, lambda x: x.key
)
for key in self._client_utils.get_auto_complete_list(keys, current, lambda x: x.key)
]
@game_server.command()
@@ -181,38 +165,26 @@ class GameServerGroup(DiscordCommandABC):
if ctx.guild is None:
return
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{ctx.guild.id}"
)
if not FeatureFlagsSettings.get_flag_from_dict(
settings.feature_flags, FeatureFlagsEnum.game_server
):
await self._message_service.send_ctx_msg(
ctx, self._t.transform("common.feature_not_activated")
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{ctx.guild.id}")
if not FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum.game_server):
await self._message_service.send_ctx_msg(ctx, self._t.transform("common.feature_not_activated"))
return
game_server = self._game_servers.get_game_server_by_id(id)
self._game_servers.delete_game_server(game_server)
self._db.save_changes()
await self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.base.game_server.remove.success")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.game_server.remove.success"))
self._logger.trace(__name__, f"Finished command game-server remove")
@remove.autocomplete("id")
async def id_autocomplete(
self, interaction: discord.Interaction, current: str
) -> TList[app_commands.Choice[str]]:
async def id_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
server = self._servers.get_server_by_discord_id(interaction.guild.id)
game_servers = self._game_servers.get_game_servers_by_server_id(server.id)
return [
app_commands.Choice(name=gs.name, value=gs.id)
for gs in self._client_utils.get_auto_complete_list(
game_servers, current, lambda x: x.name
)
for gs in self._client_utils.get_auto_complete_list(game_servers, current, lambda x: x.name)
]
@game_server.command(name="list-members")
@@ -225,30 +197,20 @@ class GameServerGroup(DiscordCommandABC):
if ctx.guild is None:
return
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{ctx.guild.id}"
)
if not FeatureFlagsSettings.get_flag_from_dict(
settings.feature_flags, FeatureFlagsEnum.game_server
):
await self._message_service.send_ctx_msg(
ctx, self._t.transform("common.feature_not_activated")
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{ctx.guild.id}")
if not FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum.game_server):
await self._message_service.send_ctx_msg(ctx, self._t.transform("common.feature_not_activated"))
return
game_server = self._game_servers.get_game_server_by_id(id)
game_idents = self._user_game_idents.get_user_game_idents_by_game_server_id(
game_server.id
)
game_idents = self._user_game_idents.get_user_game_idents_by_game_server_id(game_server.id)
users = ""
for game_ident in game_idents:
users += f"\n{game_ident.user.name}"
embed = discord.Embed(
title=self._t.transform("modules.base.game_server.list_members.title"),
description=self._t.transform(
"modules.base.game_server.list_members.description"
),
description=self._t.transform("modules.base.game_server.list_members.description"),
color=int("ef9d0d", 16),
)
embed.add_field(
@@ -261,15 +223,11 @@ class GameServerGroup(DiscordCommandABC):
self._logger.trace(__name__, f"Finished command game-server remove")
@list_members.autocomplete("id")
async def id_autocomplete(
self, interaction: discord.Interaction, current: str
) -> TList[app_commands.Choice[str]]:
async def id_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
server = self._servers.get_server_by_discord_id(interaction.guild.id)
game_servers = self._game_servers.get_game_servers_by_server_id(server.id)
return [
app_commands.Choice(name=gs.name, value=gs.id)
for gs in self._client_utils.get_auto_complete_list(
game_servers, current, lambda x: x.name
)
for gs in self._client_utils.get_auto_complete_list(game_servers, current, lambda x: x.name)
]

View File

@@ -50,8 +50,6 @@ class HelpCommand(DiscordCommandABC):
self._logger.trace(__name__, f"Finished help command")
@help.autocomplete("persistent_flag")
async def help_autocomplete(
self, interaction: discord.Interaction, current: str
) -> List[app_commands.Choice[str]]:
async def help_autocomplete(self, interaction: discord.Interaction, current: str) -> List[app_commands.Choice[str]]:
flags = ["--stay"]
return [app_commands.Choice(name=key, value=key) for key in flags]

View File

@@ -55,10 +55,7 @@ class InfoCommand(DiscordCommandABC):
)
start_time = self._config.get_configuration("Bot_StartTime")
ontime = round(
(
datetime.now() - datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S.%f")
).total_seconds()
/ 3600,
(datetime.now() - datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S.%f")).total_seconds() / 3600,
2,
)
embed.add_field(

View File

@@ -58,9 +58,7 @@ class MassMoveCommand(DiscordCommandABC):
await self._message_service.send_ctx_msg(
ctx,
self._t.transform("modules.base.mass_move.moved").format(
channel_from.mention, channel_to.mention
),
self._t.transform("modules.base.mass_move.moved").format(channel_from.mention, channel_to.mention),
)
self._logger.trace(__name__, f"Finished mass-move command")

View File

@@ -58,12 +58,8 @@ class PingCommand(DiscordCommandABC):
color=int("ef9d0d", 16),
)
for server in self._settings.ping_urls:
embed.add_field(
name=server, value=f"{self._get_ping(server)} ms", inline=False
)
embed.add_field(name=server, value=f"{self._get_ping(server)} ms", inline=False)
await self._message_service.send_ctx_msg(ctx, embed)
else:
await self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.base.pong")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.pong"))
self._logger.trace(__name__, f"Finished ping command")

View File

@@ -34,9 +34,7 @@ class PresenceCommand(DiscordCommandABC):
if text == "":
await self._bot.change_presence(activity=None)
await self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.base.presence.removed")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.presence.removed"))
return
if len(text) > 128:
@@ -46,8 +44,6 @@ class PresenceCommand(DiscordCommandABC):
return
await self._bot.change_presence(activity=discord.Game(name=text))
await self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.base.presence.changed")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.presence.changed"))
self._logger.trace(__name__, f"Finished presence command")

View File

@@ -41,20 +41,14 @@ class PurgeCommand(DiscordCommandABC):
@CommandChecks.check_is_member_moderator()
async def purge(self, ctx: Context):
self._logger.debug(__name__, f"Received command purge {ctx}")
server_settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{ctx.guild.id}"
)
server_settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{ctx.guild.id}")
await self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.moderator.purge_message")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.moderator.purge_message"))
await asyncio.sleep(server_settings.message_delete_timer)
try:
await ctx.channel.purge()
except Exception as e:
self._logger.error(__name__, f"Cannot purge channel {ctx.channel.id}", e)
await self._message_service.send_ctx_msg(
ctx, self._t.transform("common.bot_has_no_permission_message")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("common.bot_has_no_permission_message"))
self._logger.trace(__name__, f"Finished purge command")

View File

@@ -59,17 +59,13 @@ class RegisterGroup(DiscordCommandABC):
@commands.guild_only()
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def minecraft(
self, ctx: Context, member: discord.Member, game_server: int, name: str
):
async def minecraft(self, ctx: Context, member: discord.Member, game_server: int, name: str):
self._logger.debug(__name__, f"Received command register minecraft {ctx}")
minecraft_id = None
try:
self._logger.debug(__name__, f"Try to get minecraft id for {name}")
response = requests.get(
url=f"https://api.mojang.com/users/profiles/minecraft/{name}"
)
response = requests.get(url=f"https://api.mojang.com/users/profiles/minecraft/{name}")
if len(response.content) == 0:
await self._message_service.send_interaction_msg(
ctx.interaction,
@@ -110,7 +106,5 @@ class RegisterGroup(DiscordCommandABC):
return [
app_commands.Choice(name=gs.name, value=gs.id)
for gs in self._client_utils.get_auto_complete_list(
game_servers, current, lambda x: x.name
)
for gs in self._client_utils.get_auto_complete_list(game_servers, current, lambda x: x.name)
]

View File

@@ -11,9 +11,7 @@ from modules.base.forms.complaint_form import ComplaintForm
class SubmitGroup(DiscordCommandABC):
def __init__(
self, services: ServiceProviderABC, logger: LoggerABC, bot: DiscordBotServiceABC
):
def __init__(self, services: ServiceProviderABC, logger: LoggerABC, bot: DiscordBotServiceABC):
DiscordCommandABC.__init__(self)
self._services = services

View File

@@ -62,9 +62,7 @@ class UnregisterGroup(DiscordCommandABC):
server = self._servers.get_server_by_discord_id(ctx.guild.id)
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
ident = user.game_idents.where(
lambda x: x.game_server.id == game_server
).single()
ident = user.game_idents.where(lambda x: x.game_server.id == game_server).single()
self._user_game_idents.delete_user_game_ident(ident)
self._users.update_user(user)
self._db.save_changes()
@@ -84,7 +82,5 @@ class UnregisterGroup(DiscordCommandABC):
return [
app_commands.Choice(name=gs.name, value=gs.id)
for gs in self._client_utils.get_auto_complete_list(
game_servers, current, lambda x: x.name
)
for gs in self._client_utils.get_auto_complete_list(game_servers, current, lambda x: x.name)
]

View File

@@ -111,9 +111,7 @@ class UserGroup(DiscordCommandABC):
type = "add" if not is_remove else "remove"
await self._message_service.send_interaction_msg(
ctx.interaction,
self._t.transform(f"modules.base.user.{type}.{atr.lower()}").format(
atr, value, member.mention
),
self._t.transform(f"modules.base.user.{type}.{atr.lower()}").format(atr, value, member.mention),
)
@commands.hybrid_group()
@@ -131,9 +129,7 @@ class UserGroup(DiscordCommandABC):
)
date = datetime.date(year, month, day)
server = self._servers.get_server_by_discord_id(ctx.guild.id)
user = self._users.get_user_by_discord_id_and_server_id(
ctx.author.id, server.id
)
user = self._users.get_user_by_discord_id_and_server_id(ctx.author.id, server.id)
user.birthday = date
self._users.update_user(user)
self._db.save_changes()
@@ -141,15 +137,11 @@ class UserGroup(DiscordCommandABC):
ctx.interaction, self._t.transform("modules.base.user.birthday.success")
)
# notify team to prevent multiple entries every day
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{ctx.guild.id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{ctx.guild.id}")
channel = ctx.guild.get_channel(settings.team_channel_id)
await self._message_service.send_channel_message(
channel,
self._t.transform("modules.base.user.birthday.success_team").format(
ctx.author.mention, date
),
self._t.transform("modules.base.user.birthday.success_team").format(ctx.author.mention, date),
is_persistent=True,
)
self._logger.trace(__name__, f"Finished user-info command")
@@ -188,18 +180,12 @@ class UserGroup(DiscordCommandABC):
@user.command()
@commands.guild_only()
@CommandChecks.check_is_ready()
async def info(
self, ctx: Context, member: Optional[discord.Member] = None, *, wait: int = None
):
self._logger.debug(
__name__, f"Received command user-info {ctx}:{member},{wait}"
)
async def info(self, ctx: Context, member: Optional[discord.Member] = None, *, wait: int = None):
self._logger.debug(__name__, f"Received command user-info {ctx}:{member},{wait}")
is_mod = self._permissions.is_member_moderator(ctx.author)
if member is not None and not is_mod:
await self._message_service.send_ctx_msg(
ctx, self._t.transform("common.no_permission_message")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("common.no_permission_message"))
return
if member is None or not isinstance(member, discord.Member):
@@ -209,16 +195,10 @@ class UserGroup(DiscordCommandABC):
user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id)
joins = self._user_joined_servers.get_user_joined_servers_by_user_id(user.id)
embed = discord.Embed(
title=member.name, description=member.name, color=int("ef9d0d", 16)
)
embed = discord.Embed(title=member.name, description=member.name, color=int("ef9d0d", 16))
embed.add_field(
name=self._t.transform("modules.base.user.atr.id"), value=member.id
)
embed.add_field(
name=self._t.transform("modules.base.user.atr.name"), value=member.name
)
embed.add_field(name=self._t.transform("modules.base.user.atr.id"), value=member.id)
embed.add_field(name=self._t.transform("modules.base.user.atr.name"), value=member.name)
embed.add_field(
name=self._t.transform("modules.base.user.atr.discord_join"),
value=self._date.transform(member.created_at),
@@ -229,9 +209,7 @@ class UserGroup(DiscordCommandABC):
value=self._date.transform(member.joined_at),
inline=False,
)
embed.add_field(
name=self._t.transform("modules.base.user.atr.xp"), value=str(user.xp)
)
embed.add_field(name=self._t.transform("modules.base.user.atr.xp"), value=str(user.xp))
embed.add_field(
name=self._t.transform("modules.base.user.atr.ontime"),
value=str(self._client_utils.get_ontime_for_user(user)),
@@ -281,9 +259,7 @@ class UserGroup(DiscordCommandABC):
)
# send to interaction because of sensitive data
await self._message_service.send_interaction_msg(
ctx.interaction, embed, wait_before_delete=wait
)
await self._message_service.send_interaction_msg(ctx.interaction, embed, wait_before_delete=wait)
self._logger.trace(__name__, f"Finished user-info command")
@user.command()
@@ -294,9 +270,7 @@ class UserGroup(DiscordCommandABC):
is_mod = self._permissions.is_member_moderator(ctx.author)
if member is not None and not is_mod:
await self._message_service.send_ctx_msg(
ctx, self._t.transform("common.no_permission_message")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("common.no_permission_message"))
return
if member is None or not isinstance(member, discord.Member):
@@ -320,26 +294,18 @@ class UserGroup(DiscordCommandABC):
await self._message_service.send_interaction_msg(
ctx.interaction,
self._t.transform(f"modules.base.user.get.{atr.lower()}").format(
member.mention, value
),
self._t.transform(f"modules.base.user.get.{atr.lower()}").format(member.mention, value),
)
@get.autocomplete("atr")
async def get_autocomplete(
self, interaction: discord.Interaction, current: str
) -> TList[app_commands.Choice[str]]:
return [
app_commands.Choice(name=value, value=key) for key, value in self._atr_TList
]
async def get_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
return [app_commands.Choice(name=value, value=key) for key, value in self._atr_TList]
@user.command()
@commands.guild_only()
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def set(
self, ctx: Context, atr: str, value: int, member: discord.Member = None
):
async def set(self, ctx: Context, atr: str, value: int, member: discord.Member = None):
self._logger.debug(__name__, f"Received command user-set {atr} {ctx}:{member}")
if member is None or not isinstance(member, discord.Member):
@@ -352,9 +318,7 @@ class UserGroup(DiscordCommandABC):
try:
user.xp = value
except TypeError as te:
self._logger.error(
__name__, f"String value couldn't be converted to int", te
)
self._logger.error(__name__, f"String value couldn't be converted to int", te)
await self._message_service.send_interaction_msg(
ctx.interaction,
self._t.transform("modules.base.user.set.error.type_error"),
@@ -374,15 +338,11 @@ class UserGroup(DiscordCommandABC):
await self._message_service.send_interaction_msg(
ctx.interaction,
self._t.transform(f"modules.base.user.set.{atr.lower()}").format(
member.mention, value
),
self._t.transform(f"modules.base.user.set.{atr.lower()}").format(member.mention, value),
)
@set.autocomplete("atr")
async def set_autocomplete(
self, interaction: discord.Interaction, current: str
) -> TList[app_commands.Choice[str]]:
async def set_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
atr_TList = [("xp", self._atr_dict["xp"])]
return [app_commands.Choice(name=value, value=key) for key, value in atr_TList]
@@ -390,18 +350,12 @@ class UserGroup(DiscordCommandABC):
@commands.guild_only()
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def add(
self, ctx: Context, atr: str, value: int, member: discord.Member = None
):
self._logger.debug(
__name__, f"Received command user-add {atr}-={value} {ctx}:{member}"
)
async def add(self, ctx: Context, atr: str, value: int, member: discord.Member = None):
self._logger.debug(__name__, f"Received command user-add {atr}-={value} {ctx}:{member}")
await self._handle_atr_calc(ctx, atr, value, member)
@add.autocomplete("atr")
async def set_autocomplete(
self, interaction: discord.Interaction, current: str
) -> TList[app_commands.Choice[str]]:
async def set_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
atr_TList = [("xp", self._atr_dict["xp"])]
return [app_commands.Choice(name=value, value=key) for key, value in atr_TList]
@@ -409,18 +363,12 @@ class UserGroup(DiscordCommandABC):
@commands.guild_only()
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def remove(
self, ctx: Context, atr: str, value: int, member: discord.Member = None
):
self._logger.debug(
__name__, f"Received command user-remove {atr}-={value} {ctx}:{member}"
)
async def remove(self, ctx: Context, atr: str, value: int, member: discord.Member = None):
self._logger.debug(__name__, f"Received command user-remove {atr}-={value} {ctx}:{member}")
await self._handle_atr_calc(ctx, atr, value, member, is_remove=True)
@remove.autocomplete("atr")
async def set_autocomplete(
self, interaction: discord.Interaction, current: str
) -> TList[app_commands.Choice[str]]:
async def set_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
atr_TList = [("xp", self._atr_dict["xp"])]
return [app_commands.Choice(name=value, value=key) for key, value in atr_TList]
@@ -429,9 +377,7 @@ class UserGroup(DiscordCommandABC):
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def reset(self, ctx: Context, atr: str, member: discord.Member = None):
self._logger.debug(
__name__, f"Received command user-reset {atr} {ctx}:{member}"
)
self._logger.debug(__name__, f"Received command user-reset {atr} {ctx}:{member}")
if member is None or not isinstance(member, discord.Member):
member = ctx.author
@@ -446,9 +392,7 @@ class UserGroup(DiscordCommandABC):
await self._level.check_level(member)
elif atr == "ontime":
self._user_joined_voice_channel.delete_user_joined_voice_channel_by_user_id(
user.id
)
self._user_joined_voice_channel.delete_user_joined_voice_channel_by_user_id(user.id)
self._db.save_changes()
else:
@@ -460,18 +404,14 @@ class UserGroup(DiscordCommandABC):
await self._message_service.send_interaction_msg(
ctx.interaction,
self._t.transform(f"modules.base.user.reset.{atr.lower()}").format(
atr, member.mention
),
self._t.transform(f"modules.base.user.reset.{atr.lower()}").format(atr, member.mention),
)
@reset.autocomplete("atr")
async def reset_autocomplete(
self, interaction: discord.Interaction, current: str
) -> TList[app_commands.Choice[str]]:
return [
app_commands.Choice(name=value, value=key) for key, value in self._atr_TList
]
return [app_commands.Choice(name=value, value=key) for key, value in self._atr_TList]
@user.group()
@commands.guild_only()
@@ -483,9 +423,7 @@ class UserGroup(DiscordCommandABC):
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def show(self, ctx: Context, member: discord.Member, wait: int = None):
self._logger.debug(
__name__, f"Received command user warning show {ctx}:{member}"
)
self._logger.debug(__name__, f"Received command user warning show {ctx}:{member}")
server = self._servers.find_server_by_discord_id(ctx.guild.id)
user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id)
@@ -515,9 +453,7 @@ class UserGroup(DiscordCommandABC):
value=warnings_description_string,
inline=True,
)
await self._message_service.send_interaction_msg(
ctx.interaction, embed, wait_before_delete=wait
)
await self._message_service.send_interaction_msg(ctx.interaction, embed, wait_before_delete=wait)
self._logger.trace(__name__, f"Finished user warning show command")
@warning.command()
@@ -525,21 +461,13 @@ class UserGroup(DiscordCommandABC):
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def add(self, ctx: Context, member: discord.Member, description: str):
self._logger.debug(
__name__, f"Received command user warning add {ctx}:{member},{description}"
)
self._logger.debug(__name__, f"Received command user warning add {ctx}:{member},{description}")
try:
await self._user_warnings_service.add_warnings_async(
member, description, ctx.author.id
)
await self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.base.warnings.add.success")
)
await self._user_warnings_service.add_warnings_async(member, description, ctx.author.id)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.add.success"))
except Exception as e:
self._logger.error(__name__, f"Adding user warning failed", e)
await self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.base.warnings.add.failed")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.add.failed"))
self._logger.trace(__name__, f"Finished user warning add command")
@warning.command()
@@ -547,17 +475,11 @@ class UserGroup(DiscordCommandABC):
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def remove(self, ctx: Context, warning_id: int):
self._logger.debug(
__name__, f"Received command user warning remove {ctx}:{warning_id}"
)
self._logger.debug(__name__, f"Received command user warning remove {ctx}:{warning_id}")
try:
await self._user_warnings_service.remove_warnings_async(warning_id)
await self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.base.warnings.remove.success")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.remove.success"))
except Exception as e:
self._logger.error(__name__, f"Removing user warning failed", e)
await self._message_service.send_ctx_msg(
ctx, self._t.transform("modules.base.warnings.remove.failed")
)
await self._message_service.send_ctx_msg(ctx, self._t.transform("modules.base.warnings.remove.failed"))
self._logger.trace(__name__, f"Finished user warning remove command")

View File

@@ -167,9 +167,7 @@ class BaseOnCommandErrorEvent(OnCommandErrorABC):
)
elif isinstance(error, commands.NotOwner):
await self._messenger.send_ctx_msg(
ctx, self._t.transform("common.errors.not_owner"), without_tracking=True
)
await self._messenger.send_ctx_msg(ctx, self._t.transform("common.errors.not_owner"), without_tracking=True)
elif isinstance(error, commands.MissingPermissions):
await self._messenger.send_ctx_msg(
@@ -261,19 +259,13 @@ class BaseOnCommandErrorEvent(OnCommandErrorABC):
self._t.transform("common.errors.command_error"),
without_tracking=True,
)
message = self._t.transform(
"modules.base.technician_command_error_message"
).format(
message = self._t.transform("modules.base.technician_command_error_message").format(
ctx.command,
ctx.author,
error,
datetime.datetime.now().strftime(
self._time_format_settings.date_time_format
),
datetime.datetime.now().strftime(self._time_format_settings.date_time_format),
uid,
)
for t in self._tech_settings.technician_ids:
member = self._bot.get_user(t)
await self._messenger.send_dm_message(
message, member, without_tracking=True
)
await self._messenger.send_dm_message(message, member, without_tracking=True)

View File

@@ -49,9 +49,7 @@ class BaseOnCommandEvent(OnCommandABC):
self._clients.append_received_command_count(self._bot.user.id, g_id, 1)
self._db.save_changes()
except Exception as e:
self._logger.error(
__name__, f"Cannot edit client {self._bot.user.id}@{g_id}", e
)
self._logger.error(__name__, f"Cannot edit client {self._bot.user.id}@{g_id}", e)
def _handle_message_for_xp(self, message: discord.Message):
dc_user_id = message.author.id
@@ -63,9 +61,7 @@ class BaseOnCommandEvent(OnCommandABC):
user: Optional[User] = None
try:
user = self._users.get_user_by_discord_id_and_server_id(
dc_user_id, server.id
)
user = self._users.get_user_by_discord_id_and_server_id(dc_user_id, server.id)
except Exception as e:
self._logger.error(__name__, f"Cannot get user {dc_user_id}", e)
return
@@ -74,23 +70,17 @@ class BaseOnCommandEvent(OnCommandABC):
self._logger.error(__name__, f"User not found {dc_user_id}")
return
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{message.guild.id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{message.guild.id}")
old_xp = user.xp
user.xp += settings.xp_per_message
self._users.update_user(user)
self._db.save_changes()
self._logger.debug(
__name__, f"User {user} sent message. xp: from {old_xp} to {user.xp}"
)
self._logger.debug(__name__, f"User {user} sent message. xp: from {old_xp} to {user.xp}")
async def on_command(self, ctx: Context):
self._logger.debug(__name__, f"Module {type(self)} started")
self._logger.info(
__name__, f"Received command: {ctx.command} from {ctx.channel}"
)
self._logger.info(__name__, f"Received command: {ctx.command} from {ctx.channel}")
if ctx is None or ctx.guild is None:
return
self._append_received_command_count(ctx.guild.id)

View File

@@ -66,9 +66,7 @@ class BaseOnMemberJoinEvent(OnMemberJoinABC):
except Exception as e:
self._logger.error(__name__, f"Cannot get user {member.id}", e)
async def _add_if_not_exists_user_async(
self, member: Union[discord.User, discord.Member]
):
async def _add_if_not_exists_user_async(self, member: Union[discord.User, discord.Member]):
self._logger.debug(__name__, f"Check if user exists {member}")
await self._messenger.send_dm_message(
self._t.transform("modules.base.welcome_message").format(member.guild.name),
@@ -77,40 +75,28 @@ class BaseOnMemberJoinEvent(OnMemberJoinABC):
try:
server = self._servers.get_server_by_discord_id(member.guild.id)
user = self._users.find_user_by_discord_id_and_server_id(
member.id, server.id
)
user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id)
if user is not None:
self._user_joins.add_user_joined_server(
UserJoinedServer(user, datetime.now())
)
self._user_joins.add_user_joined_server(UserJoinedServer(user, datetime.now()))
self._db.save_changes()
return
self._logger.debug(__name__, f"Add user: {member.id}")
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())
)
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()))
self._db.save_changes()
except Exception as e:
self._logger.error(__name__, f"Cannot get 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}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{member.guild.id}")
channel = member.guild.get_channel(settings.team_channel_id)
await self._messenger.send_channel_message(
channel,
self._t.transform("modules.base.welcome_message_for_team").format(
member.mention
),
self._t.transform("modules.base.welcome_message_for_team").format(member.mention),
is_persistent=True,
)
self._logger.trace(__name__, f"Notified team that a member left")

View File

@@ -41,16 +41,12 @@ class BaseOnMemberRemoveEvent(OnMemberRemoveABC):
async def _remove_user(self, member: Union[discord.User, discord.Member]):
self._logger.debug(__name__, f"Remove user {member}")
await self._message_service.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)
user = self._users.find_user_by_discord_id_and_server_id(
member.id, server.id
)
user = self._users.find_user_by_discord_id_and_server_id(member.id, server.id)
if user is None:
self._logger.error(__name__, f"Cannot find user {member}")
return
@@ -64,15 +60,11 @@ class BaseOnMemberRemoveEvent(OnMemberRemoveABC):
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}"
)
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
),
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")

View File

@@ -40,9 +40,7 @@ class BaseOnMessageDeleteEvent(OnMessageDeleteABC):
self._clients.append_deleted_message_count(self._bot.user.id, g_id, 1)
self._db.save_changes()
except Exception as e:
self._logger.error(
__name__, f"Cannot edit client {self._bot.user.id}@{g_id}", e
)
self._logger.error(__name__, f"Cannot edit client {self._bot.user.id}@{g_id}", e)
def _handle_message_delete(self, message: discord.Message):
dc_user_id = message.author.id
@@ -54,9 +52,7 @@ class BaseOnMessageDeleteEvent(OnMessageDeleteABC):
user: Optional[User] = None
try:
user = self._users.find_user_by_discord_id_and_server_id(
dc_user_id, server.id
)
user = self._users.find_user_by_discord_id_and_server_id(dc_user_id, server.id)
except Exception as e:
self._logger.error(__name__, f"Cannot get user {dc_user_id}", e)
return
@@ -65,9 +61,7 @@ class BaseOnMessageDeleteEvent(OnMessageDeleteABC):
self._logger.error(__name__, f"User not found {dc_user_id}")
return
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{message.guild.id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{message.guild.id}")
old_xp = user.xp
user.xp -= settings.xp_per_message
self._users.update_user(user)
@@ -83,9 +77,7 @@ class BaseOnMessageDeleteEvent(OnMessageDeleteABC):
if message is None or message.guild is None:
return
self._logger.info(
__name__, f"Received message: {LogMessageHelper.get_log_string(message)}"
)
self._logger.info(__name__, f"Received message: {LogMessageHelper.get_log_string(message)}")
self._append_deleted_message_count(message.guild.id)
if not message.author.bot:

View File

@@ -45,9 +45,7 @@ class BaseOnMessageEvent(OnMessageABC):
self._clients.append_received_message_count(self._bot.user.id, g_id, 1)
self._db.save_changes()
except Exception as e:
self._logger.error(
__name__, f"Cannot edit client {self._bot.user.id}@{g_id}", e
)
self._logger.error(__name__, f"Cannot edit client {self._bot.user.id}@{g_id}", e)
def _handle_message_for_xp(self, message: discord.Message):
dc_user_id = message.author.id
@@ -59,9 +57,7 @@ class BaseOnMessageEvent(OnMessageABC):
user: Optional[User] = None
try:
user = self._users.find_user_by_discord_id_and_server_id(
dc_user_id, server.id
)
user = self._users.find_user_by_discord_id_and_server_id(dc_user_id, server.id)
except Exception as e:
self._logger.error(__name__, f"Cannot get user {dc_user_id}", e)
return
@@ -70,9 +66,7 @@ class BaseOnMessageEvent(OnMessageABC):
self._logger.error(__name__, f"User not found {dc_user_id}")
return
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{server.discord_id}"
)
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
):
@@ -83,9 +77,7 @@ class BaseOnMessageEvent(OnMessageABC):
self._users.update_user(user)
self._db.save_changes()
self._logger.debug(
__name__, f"User {user} sent message. xp: from {old_xp} to {user.xp}"
)
self._logger.debug(__name__, f"User {user} sent message. xp: from {old_xp} to {user.xp}")
@EventChecks.check_is_ready()
async def on_message(self, message: discord.Message):
@@ -93,9 +85,7 @@ class BaseOnMessageEvent(OnMessageABC):
if message is None or message.guild is None:
return
self._logger.info(
__name__, f"Received message: {LogMessageHelper.get_log_string(message)}"
)
self._logger.info(__name__, f"Received message: {LogMessageHelper.get_log_string(message)}")
self._append_received_message_count(message.guild.id)
if not message.author.bot:

View File

@@ -21,9 +21,7 @@ class BaseOnScheduledEventUpdateEvent(OnScheduledEventUpdateABC):
self._bot = bot
self._events = events
async def on_scheduled_event_update(
self, before: discord.ScheduledEvent, after: discord.ScheduledEvent
):
async def on_scheduled_event_update(self, before: discord.ScheduledEvent, after: discord.ScheduledEvent):
self._logger.debug(__name__, f"Module {type(self)} started")
# save started event
@@ -35,8 +33,7 @@ class BaseOnScheduledEventUpdateEvent(OnScheduledEventUpdateABC):
self._events.give_xp_for_event_participation(member, active_event)
# delete stopped event
if before.status != after.status and (
after.status.value == EventStatus.cancelled.value
or after.status.value == EventStatus.completed.value
after.status.value == EventStatus.cancelled.value or after.status.value == EventStatus.completed.value
):
event = self._events.get_active_event(after)
if event is None:

View File

@@ -45,14 +45,10 @@ class BaseOnVoiceStateUpdateEvent(OnVoiceStateUpdateABC):
self._logger.info(__name__, f"Module {type(self)} loaded")
def _update_voice_state(
self, joined: bool, dc_user_id: int, channel_id: int, server: Server
):
def _update_voice_state(self, joined: bool, dc_user_id: int, channel_id: int, server: Server):
user: Optional[User] = None
try:
user = self._users.get_user_by_discord_id_and_server_id(
dc_user_id, server.id
)
user = self._users.get_user_by_discord_id_and_server_id(dc_user_id, server.id)
except Exception as e:
self._logger.error(__name__, f"Cannot get user {dc_user_id}", e)
return
@@ -68,13 +64,9 @@ class BaseOnVoiceStateUpdateEvent(OnVoiceStateUpdateABC):
self._db.save_changes()
return
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{server.discord_id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
join = self._user_joins_vc.get_active_user_joined_voice_channel_by_user_id(
user.id
)
join = self._user_joins_vc.get_active_user_joined_voice_channel_by_user_id(user.id)
join.leaved_on = datetime.now()
old_xp = user.xp
@@ -103,9 +95,7 @@ class BaseOnVoiceStateUpdateEvent(OnVoiceStateUpdateABC):
__name__,
f"Detected on_voice_state_update {member.id} from {before} to {after}",
)
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{member.guild.id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{member.guild.id}")
server = self._servers.get_server_by_discord_id(member.guild.id)
try:
@@ -133,36 +123,18 @@ class BaseOnVoiceStateUpdateEvent(OnVoiceStateUpdateABC):
# channel to channel
elif before.channel is not None and after.channel is not None:
# joined
if (
before.channel.id in settings.afk_channel_ids
and after.channel.id not in settings.afk_channel_ids
):
self._logger.trace(
__name__, f"User {member.id} joined {after.channel}"
)
if before.channel.id in settings.afk_channel_ids and after.channel.id not in settings.afk_channel_ids:
self._logger.trace(__name__, f"User {member.id} joined {after.channel}")
self._update_voice_state(True, member.id, after.channel.id, server)
# left
elif (
after.channel.id in settings.afk_channel_ids
and before.channel.id not in settings.afk_channel_ids
):
self._logger.trace(
__name__, f"User {member.id} left {before.channel}"
)
self._update_voice_state(
False, member.id, before.channel.id, server
)
elif after.channel.id in settings.afk_channel_ids and before.channel.id not in settings.afk_channel_ids:
self._logger.trace(__name__, f"User {member.id} left {before.channel}")
self._update_voice_state(False, member.id, before.channel.id, server)
else:
self._logger.trace(
__name__, f"User {member.id} switched to {after.channel}"
)
self._update_voice_state(
False, member.id, before.channel.id, server
)
self._logger.trace(__name__, f"User {member.id} switched to {after.channel}")
self._update_voice_state(False, member.id, before.channel.id, server)
self._update_voice_state(True, member.id, after.channel.id, server)
except Exception as e:
self._logger.error(
__name__, f"Cannot handle voice state for user {member.id}", e
)
self._logger.error(__name__, f"Cannot handle voice state for user {member.id}", e)

View File

@@ -33,15 +33,11 @@ class BaseOnVoiceStateUpdateEventHelpChannel(OnVoiceStateUpdateABC):
async def _notify_team(self, member: discord.Member):
self._logger.debug(__name__, f"Notify team that a member needs help")
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{member.guild.id}"
)
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_joined_help_voice_channel").format(
member.mention
),
self._t.transform("modules.base.member_joined_help_voice_channel").format(member.mention),
is_persistent=True,
)
self._logger.trace(__name__, f"Notified team that a member need help")
@@ -55,9 +51,7 @@ class BaseOnVoiceStateUpdateEventHelpChannel(OnVoiceStateUpdateABC):
):
self._logger.debug(__name__, f"Module {type(self)} started")
server = self._servers.get_server_by_discord_id(member.guild.id)
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{server.discord_id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
if after.channel is None or after.channel.id != settings.help_voice_channel_id:
return

View File

@@ -10,9 +10,7 @@ from bot_data.model.technician_config import TechnicianConfig
class BugReportForm(ui.Modal):
description = ui.TextInput(
label="Report a bug", required=True, style=TextStyle.long
)
description = ui.TextInput(label="Report a bug", required=True, style=TextStyle.long)
def __init__(
self,
@@ -40,14 +38,10 @@ class BugReportForm(ui.Modal):
for t in self._technician_config.technician_ids:
member = self._bot.get_user(t)
await self._message_service.send_dm_message(
self._t.transform("modules.base.bug.message").format(
interaction.user.mention, self.description.value
),
self._t.transform("modules.base.bug.message").format(interaction.user.mention, self.description.value),
member,
without_tracking=True,
)
await self._message_service.send_interaction_msg(
interaction, self._t.transform("modules.base.bug.response")
)
await self._message_service.send_interaction_msg(interaction, self._t.transform("modules.base.bug.response"))
self._logger.trace(__name__, f"Finished bug report form")

View File

@@ -10,9 +10,7 @@ from bot_data.model.server_config import ServerConfig
class ComplaintForm(ui.Modal):
description = ui.TextInput(
label="Complain about something", required=True, style=TextStyle.long
)
description = ui.TextInput(label="Complain about something", required=True, style=TextStyle.long)
def __init__(
self,
@@ -34,9 +32,7 @@ class ComplaintForm(ui.Modal):
async def on_submit(self, interaction: discord.Interaction):
self._logger.debug(__name__, f"Started complaint command form")
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{interaction.guild.id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{interaction.guild.id}")
channel = interaction.guild.get_channel(settings.team_channel_id)
await self._message_service.send_channel_message(
channel,

View File

@@ -38,9 +38,7 @@ class BaseReactionHandler:
guild = self._bot.get_guild(payload.guild_id)
member = guild.get_member(payload.user_id)
if member is None:
self._logger.warn(
__name__, f"User {payload.user_id} in {guild.name} not found - skipping"
)
self._logger.warn(__name__, f"User {payload.user_id} in {guild.name} not found - skipping")
return
try:
@@ -62,12 +60,8 @@ class BaseReactionHandler:
self._logger.debug(__name__, f"Skipping reaction handling")
return
except Exception as e:
self._logger.error(
__name__, f"Getting message for reaction logging failed", e
)
self._logger.info(
__name__, f"{log_msg} to message {payload.message_id}"
)
self._logger.error(__name__, f"Getting message for reaction logging failed", e)
self._logger.info(__name__, f"{log_msg} to message {payload.message_id}")
except Exception as e:
self._logger.error(__name__, f"Reaction logging failed", e)
@@ -76,9 +70,7 @@ class BaseReactionHandler:
server = self._servers.get_server_by_discord_id(guild.id)
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{guild.id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{guild.id}")
if r_type == "add":
if self._client_utils.is_message_xp_count_by_hour_higher_that_max_message_count_per_hour(

View File

@@ -8,9 +8,7 @@ from bot_core.abc.client_utils_abc import ClientUtilsABC
class VoiceChannelTransformer(Transformer):
async def transform(
self, interaction: Interaction, value: str, /
) -> discord.VoiceChannel:
async def transform(self, interaction: Interaction, value: str, /) -> discord.VoiceChannel:
voice_channel = (
List(discord.VoiceChannel, interaction.guild.voice_channels)
.where(lambda x: str(x.id) == value)
@@ -18,24 +16,16 @@ class VoiceChannelTransformer(Transformer):
)
return voice_channel
async def autocomplete(
self, interaction: Interaction, current: str, /
) -> list[Choice[str]]:
async def autocomplete(self, interaction: Interaction, current: str, /) -> list[Choice[str]]:
@ServiceProviderABC.inject
def get_client_utils(client_utils: ClientUtilsABC) -> ClientUtilsABC:
return client_utils
voice_channels = List(discord.Role, interaction.guild.voice_channels).where(
lambda x: len(x.members) > 0
)
voice_channels = List(discord.Role, interaction.guild.voice_channels).where(lambda x: len(x.members) > 0)
return [
app_commands.Choice(
name=f"{vc.name}"
if vc.category is None
else f"{vc.name}: {vc.category.name}",
name=f"{vc.name}" if vc.category is None else f"{vc.name}: {vc.category.name}",
value=vc.name,
)
for vc in get_client_utils().get_auto_complete_list(
voice_channels, current, lambda x: x.name
)
for vc in get_client_utils().get_auto_complete_list(voice_channels, current, lambda x: x.name)
]

View File

@@ -36,9 +36,7 @@ class EventService:
self._active_events.add(event)
def get_active_event(self, event: discord.ScheduledEvent) -> Optional[ActiveEvent]:
return self._active_events.where(
lambda x: x.event.id == event.id
).single_or_default()
return self._active_events.where(lambda x: x.event.id == event.id).single_or_default()
def get_active_event_by_channel_id(self, channel_id: int) -> Optional[ActiveEvent]:
return self._active_events.where(
@@ -51,18 +49,14 @@ class EventService:
self._active_events.remove(event)
def give_xp_for_event_participation(
self, member: discord.Member, active_event: ActiveEvent
):
def give_xp_for_event_participation(self, member: discord.Member, active_event: ActiveEvent):
server = self._servers.get_server_by_discord_id(member.guild.id)
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
if active_event.participants.any(lambda x: x.id == user.id):
self._logger.debug(__name__, f"Module {type(self)} stopped")
return
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{server.discord_id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
user.xp += settings.xp_per_event_participation
self._users.update_user(user)
self._db.save_changes()

View File

@@ -46,92 +46,60 @@ class UserWarningsService:
self._t = t
self._permissions = permissions
async def notify_team(
self, member: discord.Member, description: str, removed=False
):
async def notify_team(self, member: discord.Member, description: str, removed=False):
try:
settings: ServerConfig = self._config.get_configuration(
f"ServerConfig_{member.guild.id}"
)
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{member.guild.id}")
channel = member.guild.get_channel(settings.team_channel_id)
if removed:
translation = self._t.transform(
"modules.base.warnings.team_removed"
).format(description, member.mention)
translation = self._t.transform("modules.base.warnings.team_removed").format(
description, member.mention
)
else:
translation = self._t.transform(
"modules.base.warnings.team_warned"
).format(member.mention, description)
translation = self._t.transform("modules.base.warnings.team_warned").format(member.mention, description)
self._bot.loop.create_task(
self._message_service.send_channel_message(
channel, translation, is_persistent=True
)
self._message_service.send_channel_message(channel, translation, is_persistent=True)
)
except Exception as e:
self._logger.error(
__name__, f"Team notification for user warning failed!", e
)
self._logger.error(__name__, f"Team notification for user warning failed!", e)
async def notify_user(self, member: discord.Member, message: str):
try:
# run as task to keep the interaction alive
self._bot.loop.create_task(
self._message_service.send_dm_message(message, member)
)
self._bot.loop.create_task(self._message_service.send_dm_message(message, member))
except Exception as e:
self._logger.error(
__name__, f"User notification for user warning failed!", e
)
self._logger.error(__name__, f"User notification for user warning failed!", e)
async def check_for_warnings(self, member: discord.Member, user: User):
existing_warnings = self._warnings.get_user_warnings_by_user_id(user.id)
if existing_warnings.count() == 1:
await self.notify_user(
member, self._t.transform("modules.base.warnings.first")
)
await self.notify_user(member, self._t.transform("modules.base.warnings.first"))
elif existing_warnings.count() == 2:
server = self._servers.get_server_by_discord_id(member.guild.id)
user = self._users.get_user_by_discord_id_and_server_id(
member.id, server.id
)
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
level = self._level_service.get_level(user)
levels = self._levels.get_levels_by_server_id(server.id).order_by(
lambda l: l.min_xp
)
levels = self._levels.get_levels_by_server_id(server.id).order_by(lambda l: l.min_xp)
new_level = levels.where(
lambda l: l.min_xp < level.min_xp
).last_or_default()
new_level = levels.where(lambda l: l.min_xp < level.min_xp).last_or_default()
if new_level is not None:
user.xp = new_level.min_xp
self._users.update_user(user)
self._db.save_changes()
await self.notify_user(
member, self._t.transform("modules.base.warnings.second")
)
await self.notify_user(member, self._t.transform("modules.base.warnings.second"))
elif existing_warnings.count() == 3:
server = self._servers.get_server_by_discord_id(member.guild.id)
user = self._users.get_user_by_discord_id_and_server_id(
member.id, server.id
)
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
levels = self._levels.get_levels_by_server_id(server.id)
new_level = (
levels.where(lambda l: l.min_xp > 0)
.order_by(lambda l: l.min_xp)
.last_or_default()
)
new_level = levels.where(lambda l: l.min_xp > 0).order_by(lambda l: l.min_xp).last_or_default()
if new_level is not None:
user.xp = new_level.min_xp
self._users.update_user(user)
self._db.save_changes()
await self.notify_user(
member, self._t.transform("modules.base.warnings.third")
)
await self.notify_user(member, self._t.transform("modules.base.warnings.third"))
elif existing_warnings.count() >= 4:
user.xp = 0
@@ -149,39 +117,29 @@ class UserWarningsService:
await self.notify_user(
member,
self._t.transform("modules.base.warnings.warned").format(
warning.description
),
self._t.transform("modules.base.warnings.warned").format(warning.description),
)
await self.notify_team(member, warning.description)
await self.check_for_warnings(member, user)
def _add_warnings(
self, member: discord.Member, description: str, author_id: int = None
):
def _add_warnings(self, member: discord.Member, description: str, author_id: int = None):
server = self._servers.get_server_by_discord_id(member.guild.id)
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
author = None
if author_id is not None:
author = self._users.get_user_by_discord_id_and_server_id(
author_id, server.id
)
author = self._users.get_user_by_discord_id_and_server_id(author_id, server.id)
warning = UserWarnings(description, user, author)
self._warnings.add_user_warnings(warning)
self._db.save_changes()
return warning
def add_warnings(
self, member: discord.Member, description: str, author_id: int = None
):
def add_warnings(self, member: discord.Member, description: str, author_id: int = None):
warning = self._add_warnings(member, description, author_id)
self._bot.loop.create_task(self._notify_after_add(member, warning))
async def add_warnings_async(
self, member: discord.Member, description: str, author_id: int = None
):
async def add_warnings_async(self, member: discord.Member, description: str, author_id: int = None):
warning = self._add_warnings(member, description, author_id)
await self._notify_after_add(member, warning)
@@ -190,9 +148,7 @@ class UserWarningsService:
member = guild.get_member(warning.user.discord_id)
await self.notify_user(
member,
self._t.transform("modules.base.warnings.removed").format(
warning.description
),
self._t.transform("modules.base.warnings.removed").format(warning.description),
)
await self.notify_team(member, warning.description, removed=True)