Added auto-role rule add command #54

This commit is contained in:
Sven Heidemann 2022-10-04 22:04:25 +02:00
parent b75777a339
commit eb3bdac162
4 changed files with 90 additions and 17 deletions

View File

@ -73,6 +73,9 @@
"not_found": "auto-role {} nicht gefunden!" "not_found": "auto-role {} nicht gefunden!"
} }
}, },
"error": {
"nothing_found": "Keine auto-role Einträge gefunden."
},
"rule": { "rule": {
"list": { "list": {
"title": "auto-role Regeln:", "title": "auto-role Regeln:",
@ -81,12 +84,24 @@
"emoji": "Emoji", "emoji": "Emoji",
"role": "Rolle" "role": "Rolle"
}, },
"add": {
"success": "Regel {} -> {} für auto-role {} wurde hinzugefügt :D",
"error": { "error": {
"id_not_found": "Kein auto-role Eintrag mit der Id gefunden!" "not_found": "Regel für auto-role {} nicht gefunden!",
"emoji_not_found": "Eomji {} für auto-role Regel {} nicht gefunden!",
"rule_not_found": "Rolle {} für auto-role Regel {} nicht gefunden!",
"already_exists": "Regel für auto-role {} existiert bereits!"
}
},
"remove": {
"success": "Regel für auto-role {} wurde entfernt :D",
"error": {
"not_found": "Regel für auto-role {} nicht gefunden!"
} }
}, },
"error": { "error": {
"nothing_found": "Keine auto-role Einträge gefunden." "id_not_found": "Kein auto-role Eintrag mit der Id gefunden!"
}
} }
}, },
"moderator": { "moderator": {

View File

@ -59,7 +59,7 @@ class AutoRoleRule(TableABC):
`AutoRoleId`, `DiscordEmojiName`, `DiscordRoleId`, `CreatedAt`, `LastModifiedAt` `AutoRoleId`, `DiscordEmojiName`, `DiscordRoleId`, `CreatedAt`, `LastModifiedAt`
) VALUES ( ) VALUES (
{self._auto_role_id}, {self._auto_role_id},
{self._discord_emoji_name}, '{self._discord_emoji_name}',
{self._discord_role_id}, {self._discord_role_id},
'{self._created_at}', '{self._created_at}',
'{self._modified_at}' '{self._modified_at}'
@ -74,12 +74,12 @@ class AutoRoleRule(TableABC):
SET `DiscordEmojiName` = {self._discord_emoji_name}, SET `DiscordEmojiName` = {self._discord_emoji_name},
SET `DiscordRoleId` = {self._discord_role_id}, SET `DiscordRoleId` = {self._discord_role_id},
`LastModifiedAt` = '{self._modified_at}' `LastModifiedAt` = '{self._modified_at}'
WHERE `AutoRoleRuleId` = {self._auto_role_id}; WHERE `AutoRoleRuleId` = {self._auto_role_rule_id};
""") """)
@property @property
def delete_string(self) -> str: def delete_string(self) -> str:
return str(f""" return str(f"""
DELETE FROM `AutoRoleRules` DELETE FROM `AutoRoleRules`
WHERE `AutoRoleRuleId` = {self._auto_role_id}; WHERE `AutoRoleRuleId` = {self._auto_role_rule_id};
""") """)

View File

@ -170,12 +170,12 @@ class AutoRoleRepositoryService(AutoRoleRepositoryABC):
return auto_role_rules return auto_role_rules
def add_auto_role_rule(self, auto_role_rule: AutoRoleRule): def add_auto_role_rule(self, auto_role_rule: AutoRoleRule):
self._logger.trace(__name__, f'Send SQL command: {auto_role_rule.delete_string}') self._logger.trace(__name__, f'Send SQL command: {auto_role_rule.insert_string}')
self._context.cursor.execute(auto_role_rule.delete_string) self._context.cursor.execute(auto_role_rule.insert_string)
def update_auto_role_rule(self, auto_role_rule: AutoRoleRule): def update_auto_role_rule(self, auto_role_rule: AutoRoleRule):
self._logger.trace(__name__, f'Send SQL command: {auto_role_rule.delete_string}') self._logger.trace(__name__, f'Send SQL command: {auto_role_rule.udpate_string}')
self._context.cursor.execute(auto_role_rule.delete_string) self._context.cursor.execute(auto_role_rule.udpate_string)
def delete_auto_role_rule(self, auto_role_rule: AutoRoleRule): def delete_auto_role_rule(self, auto_role_rule: AutoRoleRule):
self._logger.trace(__name__, f'Send SQL command: {auto_role_rule.delete_string}') self._logger.trace(__name__, f'Send SQL command: {auto_role_rule.delete_string}')

View File

@ -17,6 +17,7 @@ from bot_core.logging.command_logger import CommandLogger
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.model.auto_role import AutoRole from bot_data.model.auto_role import AutoRole
from bot_data.model.auto_role_rule import AutoRoleRule
from modules.permission.abc.permission_service_abc import PermissionServiceABC from modules.permission.abc.permission_service_abc import PermissionServiceABC
@ -62,7 +63,7 @@ class AutoRoleGroup(DiscordCommandABC):
if not self._permissions.is_member_moderator(ctx.author): if not self._permissions.is_member_moderator(ctx.author):
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 purge command') self._logger.trace(__name__, f'Finished command auto-role list')
return return
embed = discord.Embed( embed = discord.Embed(
@ -96,7 +97,7 @@ class AutoRoleGroup(DiscordCommandABC):
if not self._permissions.is_member_moderator(ctx.author): if not self._permissions.is_member_moderator(ctx.author):
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 purge command') self._logger.trace(__name__, f'Finished command auto-role add')
return return
message = List(discord.Message, [message async for message in ctx.channel.history(limit=50)]).where(lambda m: m.id == int(message_id)).single_or_default() message = List(discord.Message, [message async for message in ctx.channel.history(limit=50)]).where(lambda m: m.id == int(message_id)).single_or_default()
@ -134,7 +135,7 @@ class AutoRoleGroup(DiscordCommandABC):
if not self._permissions.is_member_moderator(ctx.author): if not self._permissions.is_member_moderator(ctx.author):
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 purge command') self._logger.trace(__name__, f'Finished command auto-role remove')
return return
auto_role_from_db = self._auto_roles.find_auto_role_by_id(auto_role) auto_role_from_db = self._auto_roles.find_auto_role_by_id(auto_role)
@ -167,13 +168,13 @@ class AutoRoleGroup(DiscordCommandABC):
@rule.command(alias='rules') @rule.command(alias='rules')
@commands.guild_only() @commands.guild_only()
async def list(self, ctx: Context, auto_role: int, wait: int = None): async def list(self, ctx: Context, auto_role: int, wait: int = None):
self._logger.debug(__name__, f'Received command auto-role-rule list {ctx}') self._logger.debug(__name__, f'Received command auto-role rule list {ctx}')
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx): if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
return return
if not self._permissions.is_member_moderator(ctx.author): if not self._permissions.is_member_moderator(ctx.author):
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 purge command') self._logger.trace(__name__, f'Finished command auto-role rule list')
return return
embed = discord.Embed( embed = discord.Embed(
@ -184,7 +185,7 @@ class AutoRoleGroup(DiscordCommandABC):
rules = self._auto_roles.get_auto_role_rules_by_auto_role_id(auto_role) rules = self._auto_roles.get_auto_role_rules_by_auto_role_id(auto_role)
if rules.count() < 1: if rules.count() < 1:
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.rule.error.id_not_found')) await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.rule.error.id_not_found'))
self._logger.trace(__name__, f'Finished command auto-role-rule list') self._logger.trace(__name__, f'Finished command auto-role rule list')
return return
auto_role_rule_id = '' auto_role_rule_id = ''
@ -199,9 +200,66 @@ class AutoRoleGroup(DiscordCommandABC):
embed.add_field(name=self._t.transform('modules.auto_role.rule.list.emoji'), value=emoji, inline=True) embed.add_field(name=self._t.transform('modules.auto_role.rule.list.emoji'), value=emoji, inline=True)
embed.add_field(name=self._t.transform('modules.auto_role.rule.list.role'), value=role, inline=True) embed.add_field(name=self._t.transform('modules.auto_role.rule.list.role'), value=role, inline=True)
await self._message_service.send_ctx_msg(ctx, embed, wait_before_delete=wait) await self._message_service.send_ctx_msg(ctx, embed, wait_before_delete=wait)
self._logger.trace(__name__, f'Finished command auto-role-rule list') self._logger.trace(__name__, f'Finished command auto-role rule list')
@list.autocomplete('auto_role') @list.autocomplete('auto_role')
async def list_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]: async def list_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
auto_roles = self._auto_roles.get_auto_roles().select(lambda x: x.auto_role_id) auto_roles = self._auto_roles.get_auto_roles().select(lambda x: x.auto_role_id)
return [app_commands.Choice(name=auto_role, value=auto_role) for auto_role in auto_roles] return [app_commands.Choice(name=auto_role, value=auto_role) for auto_role in auto_roles]
@rule.command()
@commands.guild_only()
async def add(self, ctx: Context, auto_role: int, emoji_name: str, role_id: str):
self._logger.debug(__name__, f'Received command auto-role add {ctx} {auto_role}')
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
return
if not self._permissions.is_member_moderator(ctx.author):
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.no_permission_message'))
self._logger.trace(__name__, f'Finished command auto-role rule add')
return
emoji = discord.utils.get(self._bot.emojis, name=emoji_name)
if emoji is None:
self._logger.debug(__name__, f'auto-role rule add emoji {emoji_name} not found')
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.rule.add.error.emoji_not_found').format(emoji_name, auto_role))
self._logger.trace(__name__, f'Finished command auto-role add')
return
role = ctx.guild.get_role(int(role_id))
if role is None:
self._logger.debug(__name__, f'auto-role rule add role {role_id} not found')
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.rule.add.error.role_not_found').format(role_id, auto_role))
self._logger.trace(__name__, f'Finished command auto-role add')
return
auto_role_from_db = self._auto_roles.get_auto_role_by_id(auto_role)
if auto_role_from_db is None:
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.remove.error.not_found').format(auto_role))
self._logger.trace(__name__, f'Finished command auto-role rule add')
return
if self._auto_roles.get_auto_role_rules_by_auto_role_id(auto_role).where(lambda r: r.emoji_name == emoji.name and int(role_id) == role.id).count() > 0:
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.add.error.already_exists').format(auto_role))
self._logger.trace(__name__, f'Finished command auto-role rule add')
return
self._auto_roles.add_auto_role_rule(AutoRoleRule(auto_role, emoji_name, int(role_id)))
self._db_context.save_changes()
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.auto_role.rule.add.success').format(emoji, role.name, auto_role))
self._logger.trace(__name__, f'Finished command auto-role rule add')
@add.autocomplete('auto_role')
async def add_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
auto_roles = self._auto_roles.get_auto_roles().select(lambda x: x.auto_role_id)
return [app_commands.Choice(name=auto_role, value=auto_role) for auto_role in auto_roles]
@add.autocomplete('emoji_name')
async def add_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
emojis = interaction.guild.emojis
return [app_commands.Choice(name=emoji.name, value=emoji.name) for emoji in emojis]
@add.autocomplete('role_id')
async def rule_add_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
roles = interaction.guild.roles
return [app_commands.Choice(name=role.name, value=str(role.id)) for role in roles]