Compare commits

..

2 Commits

Author SHA1 Message Date
cf610b770b Added translation for user set command 2022-12-11 21:19:08 +01:00
ec30069ff5 Added user set command 2022-12-11 21:18:51 +01:00
2 changed files with 51 additions and 3 deletions

View File

@ -177,9 +177,15 @@
"footer": "" "footer": ""
}, },
"get": { "get": {
"atr_not_found": "Das Attribut {} konnte nicht gefunden werden :(",
"xp": "{} hat {} xp", "xp": "{} hat {} xp",
"ontime": "{} war insgesamt {} Stunden aktiv in einem Sprachkanal" "ontime": "{} war insgesamt {} Stunden aktiv in einem Sprachkanal"
},
"set": {
"xp": "{} hat nun {} xp"
},
"error": {
"atr_not_found": "Das Attribut {} konnte nicht gefunden werden :(",
"value_type": "Der angegebende Wert konnte nicht für das Attribut interpretiert werden :("
} }
} }
}, },

View File

@ -2,6 +2,7 @@ from typing import Optional, List
import discord import discord
from cpl_core.configuration import ConfigurationABC from cpl_core.configuration import ConfigurationABC
from cpl_core.database.context import DatabaseContextABC
from cpl_discord.command import DiscordCommandABC from cpl_discord.command import DiscordCommandABC
from cpl_discord.service import DiscordBotServiceABC from cpl_discord.service import DiscordBotServiceABC
from cpl_translation import TranslatePipe from cpl_translation import TranslatePipe
@ -32,6 +33,7 @@ class UserGroup(DiscordCommandABC):
client_utils: ClientUtilsServiceABC, client_utils: ClientUtilsServiceABC,
permissions: PermissionServiceABC, permissions: PermissionServiceABC,
servers: ServerRepositoryABC, servers: ServerRepositoryABC,
db: DatabaseContextABC,
users: UserRepositoryABC, users: UserRepositoryABC,
user_joined_servers: UserJoinedServerRepositoryABC, user_joined_servers: UserJoinedServerRepositoryABC,
user_joined_voice_channel: UserJoinedVoiceChannelRepositoryABC, user_joined_voice_channel: UserJoinedVoiceChannelRepositoryABC,
@ -47,6 +49,7 @@ class UserGroup(DiscordCommandABC):
self._client_utils = client_utils self._client_utils = client_utils
self._permissions = permissions self._permissions = permissions
self._servers = servers self._servers = servers
self._db = db
self._users = users self._users = users
self._user_joined_servers = user_joined_servers self._user_joined_servers = user_joined_servers
self._user_joined_voice_channel = user_joined_voice_channel self._user_joined_voice_channel = user_joined_voice_channel
@ -130,7 +133,7 @@ class UserGroup(DiscordCommandABC):
@commands.guild_only() @commands.guild_only()
@CommandChecks.check_is_ready() @CommandChecks.check_is_ready()
async def get(self, ctx: Context, atr: str, member: discord.Member = None): async def get(self, ctx: Context, atr: str, member: discord.Member = None):
self._logger.debug(__name__, f'Received command user-info {ctx}:{member}') self._logger.debug(__name__, f'Received command user-get {ctx}:{member}')
is_mod = self._permissions.is_member_moderator(ctx.author) is_mod = self._permissions.is_member_moderator(ctx.author)
if member is not None and not is_mod: if member is not None and not is_mod:
@ -155,7 +158,7 @@ class UserGroup(DiscordCommandABC):
)) ))
case other: case other:
await self._message_service.send_interaction_msg(ctx.interaction, self._t.transform('modules.base.user.get.atr_not_found').format(atr)) await self._message_service.send_interaction_msg(ctx.interaction, self._t.transform('modules.base.user.error.atr_not_found').format(atr))
return return
await self._message_service.send_interaction_msg( await self._message_service.send_interaction_msg(
@ -167,3 +170,42 @@ class UserGroup(DiscordCommandABC):
async def get_autocomplete(self, interaction: discord.Interaction, current: str) -> List[app_commands.Choice[str]]: async def get_autocomplete(self, interaction: discord.Interaction, current: str) -> List[app_commands.Choice[str]]:
atr_list = ['xp', 'ontime'] atr_list = ['xp', 'ontime']
return [app_commands.Choice(name=atr, value=atr) for atr in atr_list] return [app_commands.Choice(name=atr, value=atr) for atr in atr_list]
@user.command()
@commands.guild_only()
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def set(self, ctx: Context, atr: str, value: str, member: discord.Member = None):
self._logger.debug(__name__, f'Received command user-set {ctx}:{member}')
if member is None or not isinstance(member, discord.Member):
member = ctx.author
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.server_id)
match atr:
case 'xp':
try:
user.xp = int(value)
self._users.update_user(user)
self._db.save_changes()
except Exception as e:
await self._logger.trace(__name__, f'Value couldn\'t be converted to int\n'+e)
await self._message_service.send_interaction_msg(ctx.interaction, self._t.transform('modules.base.user.error.value_type'))
return
case other:
await self._message_service.send_interaction_msg(ctx.interaction, self._t.transform(
'modules.base.user.error.atr_not_found').format(atr))
return
await self._message_service.send_interaction_msg(
ctx.interaction,
self._t.transform(f'modules.base.user.set.{atr}').format(member.mention, value)
)
@set.autocomplete('atr')
async def set_autocomplete(self, interaction: discord.Interaction, current: str) -> List[app_commands.Choice[str]]:
atr_list = ['xp']
return [app_commands.Choice(name=atr, value=atr) for atr in atr_list]