Reviewed-on: sh-edraft.de/kd_discord_bot#101 Reviewed-by: Ebola-Chan <nick.jungmann@gmail.com> Closes #26
This commit is contained in:
commit
27ccdbd980
@ -62,7 +62,7 @@
|
||||
"gold": "Gold",
|
||||
"green": "Grün",
|
||||
"greyple": "Graugrün",
|
||||
"light_gray": "Hellgrau",
|
||||
"light_grey": "Hellgrau",
|
||||
"magenta": "Magenta",
|
||||
"orange": "Orange",
|
||||
"purple": "Violett",
|
||||
@ -175,6 +175,9 @@
|
||||
},
|
||||
"level": {
|
||||
"new_level_message": "<@{}> ist nun Level {}",
|
||||
"seeding_started": "Levelsystem wird neu geladen.",
|
||||
"seeding_failed": "Levelsystem konnte nicht neu geladen werden.",
|
||||
"seeding_finished": "Levelsystem wurde Erfolgreich neu geladen.",
|
||||
"error": {
|
||||
"nothing_found": "Keine Level Einträge gefunden.",
|
||||
"level_with_name_already_exists": "Ein Level mit dem Namen {} existiert bereits!",
|
||||
@ -188,10 +191,13 @@
|
||||
"permission_int": "Berechtigungen"
|
||||
},
|
||||
"create": {
|
||||
"created": "Level {} mit Berechtigungen {} wurde erstellt.",
|
||||
"seeding_started": "Levelsystem wird neu geladen.",
|
||||
"seeding_failed": "Levelsystem konnte nicht neu geladen werden.",
|
||||
"seeding_finished": "Levelsystem wurde Erfolgreich neu geladen."
|
||||
"created": "Level {} mit Berechtigungen {} wurde erstellt."
|
||||
},
|
||||
"remove": {
|
||||
"success": "Level {} wurde entfernt :D",
|
||||
"error": {
|
||||
"not_found": "Level {} nicht gefunden!"
|
||||
}
|
||||
},
|
||||
"down": {
|
||||
"already_first": "{} hat bereits das erste Level.",
|
||||
@ -202,6 +208,12 @@
|
||||
"already_last": "{} hat bereits das höchste Level.",
|
||||
"success": "{} wurde auf Level {} hochgesetzt :)",
|
||||
"failed": "{} konnte nicht hochgesetzt werden :("
|
||||
},
|
||||
"set": {
|
||||
"already_level": "{} hat bereits das Level {} :/",
|
||||
"success": "{} ist nun Level {} :)",
|
||||
"failed": "Das Level von {} konnte nicht auf {} gesetzt werden :(",
|
||||
"not_found": "Das Level {} konnte nicht gefunden werden :("
|
||||
}
|
||||
},
|
||||
"database": {},
|
||||
|
@ -57,6 +57,16 @@ class LevelGroup(DiscordCommandABC):
|
||||
|
||||
self._logger.trace(__name__, f'Loaded command service: {type(self).__name__}')
|
||||
|
||||
async def _seed_levels(self, channel: discord.TextChannel):
|
||||
# send message to ctx.channel because send_ctx_msg resolves ctx
|
||||
try:
|
||||
await self._message_service.send_channel_message(channel, self._t.transform('modules.level.seeding_started'))
|
||||
await self._level_seeder.seed()
|
||||
await self._message_service.send_channel_message(channel, self._t.transform('modules.level.seeding_finished'))
|
||||
except Exception as e:
|
||||
self._logger.error(__name__, f'Level seeding failed', e)
|
||||
await self._message_service.send_channel_message(channel, self._t.transform('modules.level.seeding_failed'))
|
||||
|
||||
@commands.hybrid_group()
|
||||
@commands.guild_only()
|
||||
async def level(self, ctx: Context):
|
||||
@ -146,15 +156,7 @@ class LevelGroup(DiscordCommandABC):
|
||||
self._logger.error(__name__, f'Could not save level {name} with color {color}, min_xp {min_xp} and permissions {permissions}', e)
|
||||
else:
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.create.created').format(name, permissions))
|
||||
|
||||
# send message to ctx.channel because send_ctx_msg resolves ctx
|
||||
try:
|
||||
await self._message_service.send_channel_message(ctx.channel, self._t.transform('modules.level.create.seeding_started'))
|
||||
await self._level_seeder.seed()
|
||||
await self._message_service.send_channel_message(ctx.channel, self._t.transform('modules.level.create.seeding_finished'))
|
||||
except Exception as e:
|
||||
self._logger.error(__name__, f'Level seeding failed', e)
|
||||
await self._message_service.send_channel_message(ctx.channel, self._t.transform('modules.level.create.seeding_failed'))
|
||||
await self._seed_levels(ctx.channel)
|
||||
|
||||
self._logger.trace(__name__, f'Finished command level create')
|
||||
|
||||
@ -316,3 +318,54 @@ class LevelGroup(DiscordCommandABC):
|
||||
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')
|
||||
|
||||
@level.command()
|
||||
@commands.guild_only()
|
||||
async def set(self, ctx: Context, member: discord.Member, level: str):
|
||||
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)
|
||||
current_level = self._level_service.get_level(user)
|
||||
new_level = self._levels.get_levels_by_server_id(server.server_id).where(lambda l: l.name == level).single_or_default()
|
||||
|
||||
if new_level is None:
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.set.not_found').format(level))
|
||||
self._logger.trace(__name__, f'Finished command level set')
|
||||
return
|
||||
|
||||
if current_level.name == level:
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.set.already_level').format(member.name, level))
|
||||
self._logger.trace(__name__, f'Finished command level set')
|
||||
return
|
||||
|
||||
try:
|
||||
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.set.success').format(member.name, new_level.name))
|
||||
await self._level_service.set_level(user)
|
||||
except Exception as e:
|
||||
self._logger.error(__name__, f'Cannot set level {level} for {member.name}', e)
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.set.failed').format(member.name))
|
||||
|
||||
self._logger.trace(__name__, f'Finished command level set')
|
||||
|
||||
@set.autocomplete('level')
|
||||
async def set_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||
server = self._servers.get_server_by_discord_id(interaction.guild.id)
|
||||
levels = self._levels.get_levels_by_server_id(server.server_id).select(lambda l: l.name)
|
||||
return [app_commands.Choice(name=level, value=level) for level in levels]
|
||||
|
@ -1,7 +1,6 @@
|
||||
import discord
|
||||
from cpl_discord.container import Guild, Role
|
||||
from cpl_discord.container import Guild
|
||||
from cpl_discord.service import DiscordBotServiceABC
|
||||
from cpl_query.extension import List
|
||||
from discord import Permissions, Colour
|
||||
|
||||
from bot_core.logging.database_logger import DatabaseLogger
|
||||
@ -34,7 +33,7 @@ class LevelSeeder(DataSeederABC):
|
||||
self._logger.debug(__name__, f'Created role {level.name}')
|
||||
|
||||
levels = self._levels.find_levels_by_server_id(server.server_id)
|
||||
if levels is None or levels.where(lambda l: l == level).first_or_default() is None:
|
||||
if levels is None or levels.where(lambda l: l.name == level.name).first_or_default() is None:
|
||||
self._levels.add_level(level)
|
||||
self._logger.debug(__name__, f'Saved level {level.name}')
|
||||
except discord.errors.Forbidden as e:
|
||||
|
Loading…
Reference in New Issue
Block a user