0.3 - /level edit (#103) #108
@ -191,7 +191,11 @@
|
||||
"permission_int": "Berechtigungen"
|
||||
},
|
||||
"create": {
|
||||
"created": "Level {} mit Berechtigungen {} wurde erstellt."
|
||||
"created": "Level {} mit Berechtigungen {} wurde erstellt :D"
|
||||
},
|
||||
"edit": {
|
||||
"edited": "Level {} wurde bearbeitet :D",
|
||||
"not_found": "Level {} nicht gefunden!"
|
||||
},
|
||||
"remove": {
|
||||
"success": "Level {} wurde entfernt :D",
|
||||
|
@ -55,6 +55,31 @@ class LevelGroup(DiscordCommandABC):
|
||||
self._level_service = level_service
|
||||
self._level_seeder = level_seeder
|
||||
|
||||
self._colors = [
|
||||
('blue', discord.Colour.blue().to_rgb()),
|
||||
('dark_blue', discord.Colour.dark_blue().to_rgb()),
|
||||
('dark_gold', discord.Colour.dark_gold().to_rgb()),
|
||||
('dark_gray', discord.Colour.dark_gray().to_rgb()),
|
||||
('dark_green', discord.Colour.dark_green().to_rgb()),
|
||||
('dark_grey', discord.Colour.dark_grey().to_rgb()),
|
||||
('dark_magenta', discord.Colour.dark_magenta().to_rgb()),
|
||||
('dark_orange', discord.Colour.dark_orange().to_rgb()),
|
||||
('dark_purple', discord.Colour.dark_purple().to_rgb()),
|
||||
('dark_red', discord.Colour.dark_red().to_rgb()),
|
||||
('dark_teal', discord.Colour.dark_teal().to_rgb()),
|
||||
('default', discord.Colour.default().to_rgb()),
|
||||
('gold', discord.Colour.gold().to_rgb()),
|
||||
('green', discord.Colour.green().to_rgb()),
|
||||
('greyple', discord.Colour.greyple().to_rgb()),
|
||||
('light_grey', discord.Colour.light_grey().to_rgb()),
|
||||
('magenta', discord.Colour.magenta().to_rgb()),
|
||||
('orange', discord.Colour.orange().to_rgb()),
|
||||
('purple', discord.Colour.purple().to_rgb()),
|
||||
('red', discord.Colour.red().to_rgb()),
|
||||
('teal', discord.Colour.teal().to_rgb()),
|
||||
('yellow', discord.Colour.yellow().to_rgb())
|
||||
]
|
||||
|
||||
self._logger.trace(__name__, f'Loaded command service: {type(self).__name__}')
|
||||
|
||||
async def _seed_levels(self, channel: discord.TextChannel):
|
||||
@ -163,33 +188,74 @@ class LevelGroup(DiscordCommandABC):
|
||||
|
||||
@create.autocomplete('color')
|
||||
async def create_color_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||
colors = [
|
||||
('blue', discord.Colour.blue().to_rgb()),
|
||||
('dark_blue', discord.Colour.dark_blue().to_rgb()),
|
||||
('dark_gold', discord.Colour.dark_gold().to_rgb()),
|
||||
('dark_gray', discord.Colour.dark_gray().to_rgb()),
|
||||
('dark_green', discord.Colour.dark_green().to_rgb()),
|
||||
('dark_grey', discord.Colour.dark_grey().to_rgb()),
|
||||
('dark_magenta', discord.Colour.dark_magenta().to_rgb()),
|
||||
('dark_orange', discord.Colour.dark_orange().to_rgb()),
|
||||
('dark_purple', discord.Colour.dark_purple().to_rgb()),
|
||||
('dark_red', discord.Colour.dark_red().to_rgb()),
|
||||
('dark_teal', discord.Colour.dark_teal().to_rgb()),
|
||||
('default', discord.Colour.default().to_rgb()),
|
||||
('gold', discord.Colour.gold().to_rgb()),
|
||||
('green', discord.Colour.green().to_rgb()),
|
||||
('greyple', discord.Colour.greyple().to_rgb()),
|
||||
('light_grey', discord.Colour.light_grey().to_rgb()),
|
||||
('magenta', discord.Colour.magenta().to_rgb()),
|
||||
('orange', discord.Colour.orange().to_rgb()),
|
||||
('purple', discord.Colour.purple().to_rgb()),
|
||||
('red', discord.Colour.red().to_rgb()),
|
||||
('teal', discord.Colour.teal().to_rgb()),
|
||||
('yellow', discord.Colour.yellow().to_rgb())
|
||||
]
|
||||
# value in rg format see:
|
||||
# https://discordpy.readthedocs.io/en/latest/api.html#discord.Colour.to_rgb
|
||||
return [app_commands.Choice(name=self._t.transform(f'common.colors.{color}'), value=f'rgb({code[0]}, {code[1]}, {code[2]})') for color, code in colors]
|
||||
return [app_commands.Choice(name=self._t.transform(f'common.colors.{color}'), value=f'rgb({code[0]}, {code[1]}, {code[2]})') for color, code in self._colors]
|
||||
|
||||
@level.command()
|
||||
@commands.guild_only()
|
||||
async def edit(self, ctx: Context, level: str, name: str = None, color: str = None, min_xp: int = None, permissions: int = None):
|
||||
self._logger.debug(__name__, f'Received command level edit {ctx}')
|
||||
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
|
||||
return
|
||||
self._client_utils.received_command(ctx.guild.id)
|
||||
|
||||
if ctx.guild is None:
|
||||
return
|
||||
|
||||
server = self._servers.get_server_by_discord_id(ctx.guild.id)
|
||||
level_from_db = self._levels.get_levels_by_server_id(server.server_id).where(lambda l: l.name == level).single_or_default()
|
||||
if level_from_db is None:
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.edit.not_found').format(level))
|
||||
return
|
||||
|
||||
guild: Guild = self._bot.guilds.where(lambda g: g == ctx.guild).single()
|
||||
role: Role = guild.roles.where(lambda r: r.name == level_from_db.name).single()
|
||||
|
||||
if name is not None:
|
||||
level_from_db.name = name
|
||||
|
||||
if color is not None:
|
||||
try:
|
||||
level_from_db.color = hex(discord.Colour.from_str(color).value)
|
||||
except Exception as e:
|
||||
self._logger.error(__name__, f'Error parsing color {color}', e)
|
||||
return
|
||||
|
||||
if min_xp is not None:
|
||||
level_from_db.min_xp = min_xp
|
||||
|
||||
if permissions is not None:
|
||||
try:
|
||||
level_from_db.permissions = discord.Permissions(permissions).value
|
||||
except Exception as e:
|
||||
self._logger.error(__name__, f'Error parsing permissions {permissions}', e)
|
||||
edraft marked this conversation as resolved
Outdated
|
||||
return
|
||||
|
||||
try:
|
||||
self._levels.update_level(level_from_db)
|
||||
self._db.save_changes()
|
||||
await role.edit(name=level_from_db.name, permissions=discord.Permissions(level_from_db.permissions), colour=discord.Colour(int(level_from_db.color, 16)))
|
||||
self._logger.info(__name__, f'Saved level {level_from_db.name} with color {level_from_db.color}, min_xp {level_from_db.min_xp} and permissions {level_from_db.permissions}')
|
||||
except Exception as e:
|
||||
self._logger.error(__name__, f'Could not save level {level} with color {color}, min_xp {min_xp} and permissions {permissions}', e)
|
||||
else:
|
||||
edraft marked this conversation as resolved
Ebola-Chan
commented
Auch hier, wenn die Permission nicht geparsed werden kann, soll der Anwender darüber benachrichtigt werden. Auch hier, wenn die Permission nicht geparsed werden kann, soll der Anwender darüber benachrichtigt werden.
|
||||
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.level.edit.edited').format(level))
|
||||
await self._seed_levels(ctx.channel)
|
||||
|
||||
self._logger.trace(__name__, f'Finished command level edit')
|
||||
|
||||
@edit.autocomplete('level')
|
||||
async def edit_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]
|
||||
|
||||
@edit.autocomplete('color')
|
||||
async def edit_color_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||
# value in rg format see:
|
||||
# https://discordpy.readthedocs.io/en/latest/api.html#discord.Colour.to_rgb
|
||||
return [app_commands.Choice(name=self._t.transform(f'common.colors.{color}'), value=f'rgb({code[0]}, {code[1]}, {code[2]})') for color, code in self._colors]
|
||||
|
||||
@level.command()
|
||||
@commands.guild_only()
|
||||
|
Loading…
Reference in New Issue
Block a user
Wenn die Farbe nicht geparsed werden kann, wäre es gut, wenn der Anwender darüber benachrichtigt wird.