Added level down command #27

This commit is contained in:
Sven Heidemann 2022-11-08 18:01:04 +01:00
parent faaadb0009
commit f0f23163e4
2 changed files with 51 additions and 2 deletions

View File

@ -197,6 +197,11 @@
"already_first": "{} hat bereits das erste Level.", "already_first": "{} hat bereits das erste Level.",
"success": "{} wurde auf Level {} runtergesetzt :)", "success": "{} wurde auf Level {} runtergesetzt :)",
"failed": "{} konnte nicht runtergesetzt werden :(" "failed": "{} konnte nicht runtergesetzt werden :("
},
"up": {
"already_last": "{} hat bereits das höchste Level.",
"success": "{} wurde auf Level {} hochgesetzt :)",
"failed": "{} konnte nicht hochgesetzt werden :("
} }
}, },
"database": {}, "database": {},

View File

@ -196,12 +196,15 @@ class LevelGroup(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 command level list') self._logger.trace(__name__, f'Finished command level down')
return return
if ctx.guild is None: if ctx.guild is None:
return return
if member.bot:
return
server = self._servers.get_server_by_discord_id(ctx.guild.id) 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.server_id) user = self._users.get_user_by_discord_id_and_server_id(member.id, server.server_id)
level = self._level_service.get_level(user) level = self._level_service.get_level(user)
@ -209,7 +212,7 @@ class LevelGroup(DiscordCommandABC):
if level == levels.first(): if level == levels.first():
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.down.already_first').format(member.name)) await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.down.already_first').format(member.name))
self._logger.trace(__name__, f'Finished command level list') self._logger.trace(__name__, f'Finished command level down')
return return
try: try:
@ -224,3 +227,44 @@ class LevelGroup(DiscordCommandABC):
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.down.failed').format(member.name)) await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.down.failed').format(member.name))
self._logger.trace(__name__, f'Finished command level down') self._logger.trace(__name__, f'Finished command level down')
@level.command()
@commands.guild_only()
async def up(self, ctx: Context, member: discord.Member):
self._logger.debug(__name__, f'Received command level up {ctx} {member}')
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 level up')
return
if ctx.guild is None:
return
if member.bot:
return
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.server_id)
level = self._level_service.get_level(user)
levels = self._levels.get_levels_by_server_id(server.server_id).order_by(lambda l: l.min_xp)
if level.name == levels.last().name:
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.up.already_last').format(member.name))
self._logger.trace(__name__, f'Finished command level up')
return
try:
new_level = levels.where(lambda l: l.min_xp > level.min_xp).first()
user.xp = new_level.min_xp
self._users.update_user(user)
self._db.save_changes()
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.up.success').format(member.name, new_level.name))
await self._level_service.set_level(user)
except Exception as e:
self._logger.error(__name__, f'Cannot level up {member.name} with level {level.name}', e)
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.up.failed').format(member.name))
self._logger.trace(__name__, f'Finished command level up')