forked from sh-edraft.de/sh_discord_bot
Added stats edit command #46
This commit is contained in:
parent
7e5706137e
commit
c407c59c1a
@ -209,6 +209,10 @@
|
|||||||
"add": {
|
"add": {
|
||||||
"failed": "Statistik kann nicht hinzugefügt werden :(",
|
"failed": "Statistik kann nicht hinzugefügt werden :(",
|
||||||
"success": "Statistik wurde hinzugefügt :D"
|
"success": "Statistik wurde hinzugefügt :D"
|
||||||
|
},
|
||||||
|
"edit": {
|
||||||
|
"failed": "Statistik kann nicht bearbeitet werden :(",
|
||||||
|
"success": "Statistik wurde gespeichert :D"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -126,12 +126,11 @@ class MessageService(MessageServiceABC):
|
|||||||
return
|
return
|
||||||
|
|
||||||
self._logger.debug(__name__, f'Try to send message\t\t{message}\n\tto: {interaction.channel}')
|
self._logger.debug(__name__, f'Try to send message\t\t{message}\n\tto: {interaction.channel}')
|
||||||
msg = None
|
|
||||||
try:
|
try:
|
||||||
if isinstance(message, discord.Embed):
|
if isinstance(message, discord.Embed):
|
||||||
msg = await interaction.response.send_message(embed=message)
|
await interaction.response.send_message(embed=message)
|
||||||
else:
|
else:
|
||||||
msg = await interaction.response.send_message(message)
|
await interaction.response.send_message(message)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._logger.error(__name__, f'Send message to channel {interaction.channel.id} failed', e)
|
self._logger.error(__name__, f'Send message to channel {interaction.channel.id} failed', e)
|
||||||
else:
|
else:
|
||||||
@ -146,4 +145,4 @@ class MessageService(MessageServiceABC):
|
|||||||
if is_persistent:
|
if is_persistent:
|
||||||
return
|
return
|
||||||
|
|
||||||
await self.delete_message(msg, without_tracking)
|
await self.delete_message(await interaction.original_response(), without_tracking)
|
||||||
|
@ -135,16 +135,42 @@ class StatsGroup(DiscordCommandABC):
|
|||||||
@stats.command()
|
@stats.command()
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
async def add(self, ctx: Context, name: str):
|
async def add(self, ctx: Context, name: str):
|
||||||
self._logger.debug(__name__, f'Received command stats list {ctx}')
|
self._logger.debug(__name__, f'Received command stats add {ctx}: {name}')
|
||||||
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_technician(ctx.author):
|
if not self._permissions.is_member_technician(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 stats list')
|
self._logger.trace(__name__, f'Finished command stats add')
|
||||||
return
|
return
|
||||||
|
|
||||||
form = AddStatisticForm(stats, name, self._message_service, self._logger, self._t)
|
form = AddStatisticForm(stats, name, self._message_service, self._logger, self._t)
|
||||||
self._logger.trace(__name__, f'Finished stats command')
|
self._logger.trace(__name__, f'Finished stats add command')
|
||||||
self._logger.trace(__name__, f'Started stats command form')
|
self._logger.trace(__name__, f'Started stats command form')
|
||||||
await ctx.interaction.response.send_modal(form)
|
await ctx.interaction.response.send_modal(form)
|
||||||
|
|
||||||
|
@stats.command()
|
||||||
|
@commands.guild_only()
|
||||||
|
async def edit(self, ctx: Context, name: str):
|
||||||
|
self._logger.debug(__name__, f'Received command stats edit {ctx}: {name}')
|
||||||
|
if not await self._client_utils.check_if_bot_is_ready_yet_and_respond(ctx):
|
||||||
|
return
|
||||||
|
|
||||||
|
if not self._permissions.is_member_technician(ctx.author):
|
||||||
|
await self._message_service.send_ctx_msg(ctx, self._t.transform('common.no_permission_message'))
|
||||||
|
self._logger.trace(__name__, f'Finished command stats edit')
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
statistic = stats.where(lambda s: s.name == name).single()
|
||||||
|
form = AddStatisticForm(stats, name, self._message_service, self._logger, self._t, code=statistic.code, description=statistic.description)
|
||||||
|
self._logger.trace(__name__, f'Finished stats edit command')
|
||||||
|
self._logger.trace(__name__, f'Started stats command form')
|
||||||
|
await ctx.interaction.response.send_modal(form)
|
||||||
|
except Exception as e:
|
||||||
|
self._logger.error(__name__, f'Cannot view statistic {name}', e)
|
||||||
|
await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.stats.edit.failed'))
|
||||||
|
|
||||||
|
@edit.autocomplete('name')
|
||||||
|
async def edit_autocomplete(self, interaction: discord.Interaction, current: str) -> TList[app_commands.Choice[str]]:
|
||||||
|
return [app_commands.Choice(name=f'{statistic.name}: {statistic.description}', value=statistic.name) for statistic in stats]
|
||||||
|
@ -16,6 +16,14 @@ class Statistic:
|
|||||||
def description(self) -> str:
|
def description(self) -> str:
|
||||||
return self._description
|
return self._description
|
||||||
|
|
||||||
|
@description.setter
|
||||||
|
def description(self, value: str):
|
||||||
|
self._description = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def code(self) -> str:
|
def code(self) -> str:
|
||||||
return self._code
|
return self._code
|
||||||
|
|
||||||
|
@code.setter
|
||||||
|
def code(self, value: str):
|
||||||
|
self._code = value
|
||||||
|
@ -20,6 +20,8 @@ class AddStatisticForm(ui.Modal):
|
|||||||
message_service: MessageServiceABC,
|
message_service: MessageServiceABC,
|
||||||
logger: CommandLogger,
|
logger: CommandLogger,
|
||||||
t: TranslatePipe,
|
t: TranslatePipe,
|
||||||
|
code: str = None,
|
||||||
|
description: str = None,
|
||||||
):
|
):
|
||||||
ui.Modal.__init__(self, title=name)
|
ui.Modal.__init__(self, title=name)
|
||||||
|
|
||||||
@ -29,7 +31,28 @@ class AddStatisticForm(ui.Modal):
|
|||||||
self._logger = logger
|
self._logger = logger
|
||||||
self._t = t
|
self._t = t
|
||||||
|
|
||||||
|
if code is not None:
|
||||||
|
self.code.default = code
|
||||||
|
|
||||||
|
if description is not None:
|
||||||
|
self.description.default = description
|
||||||
|
|
||||||
async def on_submit(self, interaction: discord.Interaction):
|
async def on_submit(self, interaction: discord.Interaction):
|
||||||
|
statistic = self._stats.where(lambda s: s.name == self._name).single_or_default()
|
||||||
|
try:
|
||||||
|
if statistic is None:
|
||||||
self._stats.append(Statistic(self._name, self.description.value, self.code.value))
|
self._stats.append(Statistic(self._name, self.description.value, self.code.value))
|
||||||
await self._message_service.send_interaction_msg(interaction, self._t.transform('modules.stats.add.success'))
|
await self._message_service.send_interaction_msg(interaction, self._t.transform('modules.stats.add.success'))
|
||||||
|
return
|
||||||
|
|
||||||
|
statistic.description = self.description.value
|
||||||
|
statistic.code = self.code.value
|
||||||
|
await self._message_service.send_interaction_msg(interaction, self._t.transform('modules.stats.edit.success'))
|
||||||
|
except Exception as e:
|
||||||
|
self._logger.error(__name__, f'Save statistic {self._name} failed', e)
|
||||||
|
if statistic is None:
|
||||||
|
await self._message_service.send_interaction_msg(interaction, self._t.transform('modules.stats.add.failed'))
|
||||||
|
else:
|
||||||
|
await self._message_service.send_interaction_msg(interaction, self._t.transform('modules.stats.edit.failed'))
|
||||||
|
|
||||||
self._logger.trace(__name__, f'Finished stats command form')
|
self._logger.trace(__name__, f'Finished stats command form')
|
||||||
|
Loading…
Reference in New Issue
Block a user