Ajout de la sélection de tags pour les posts dans les forums lors du transfert de messages. Mise à jour de la classe TransferReasonModal pour inclure les tags sélectionnés et ajout d'une nouvelle classe ForumTagSelect pour gérer la sélection des tags. Amélioration de l'interaction utilisateur avec des messages contextuels pour la sélection des tags.
This commit is contained in:
@@ -1719,11 +1719,12 @@ class TransferReasonModal(Modal, title="Raison du transfert"):
|
|||||||
style=discord.TextStyle.paragraph
|
style=discord.TextStyle.paragraph
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, message: discord.Message, bot, target_channel):
|
def __init__(self, message: discord.Message, bot, target_channel, selected_tags=None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.message = message
|
self.message = message
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
self.target_channel = target_channel
|
self.target_channel = target_channel
|
||||||
|
self.selected_tags = selected_tags or []
|
||||||
|
|
||||||
async def on_submit(self, interaction: discord.Interaction):
|
async def on_submit(self, interaction: discord.Interaction):
|
||||||
await interaction.response.defer(ephemeral=True)
|
await interaction.response.defer(ephemeral=True)
|
||||||
@@ -1773,10 +1774,15 @@ class TransferReasonModal(Modal, title="Raison du transfert"):
|
|||||||
content=full_content,
|
content=full_content,
|
||||||
embeds=embeds[:10] if embeds else [],
|
embeds=embeds[:10] if embeds else [],
|
||||||
files=files_to_send,
|
files=files_to_send,
|
||||||
|
applied_tags=self.selected_tags,
|
||||||
reason=f"Transfert depuis {source_channel.name} par {interaction.user.name}"
|
reason=f"Transfert depuis {source_channel.name} par {interaction.user.name}"
|
||||||
)
|
)
|
||||||
transferred_message = thread.message
|
transferred_message = thread.message
|
||||||
|
|
||||||
|
if self.selected_tags:
|
||||||
|
tag_names = ", ".join([tag.name for tag in self.selected_tags])
|
||||||
|
logging.info(f"Post créé avec les tags: {tag_names}")
|
||||||
|
|
||||||
except discord.HTTPException as e:
|
except discord.HTTPException as e:
|
||||||
logging.error(f"Erreur lors de la création du post dans le forum: {e}")
|
logging.error(f"Erreur lors de la création du post dans le forum: {e}")
|
||||||
await interaction.followup.send(f"❌ Erreur lors de la création du post: {str(e)}", ephemeral=True)
|
await interaction.followup.send(f"❌ Erreur lors de la création du post: {str(e)}", ephemeral=True)
|
||||||
@@ -1862,6 +1868,42 @@ class TransferReasonModal(Modal, title="Raison du transfert"):
|
|||||||
|
|
||||||
await send_to_moderation_log_channel(self.bot, log_embed)
|
await send_to_moderation_log_channel(self.bot, log_embed)
|
||||||
|
|
||||||
|
class ForumTagSelect(Select):
|
||||||
|
def __init__(self, message: discord.Message, bot, target_channel: ForumChannel):
|
||||||
|
options = []
|
||||||
|
for tag in target_channel.available_tags[:25]:
|
||||||
|
options.append(discord.SelectOption(
|
||||||
|
label=tag.name,
|
||||||
|
value=str(tag.id),
|
||||||
|
emoji=tag.emoji if tag.emoji else None
|
||||||
|
))
|
||||||
|
|
||||||
|
super().__init__(
|
||||||
|
placeholder="Sélectionnez un ou plusieurs tags...",
|
||||||
|
options=options,
|
||||||
|
min_values=1,
|
||||||
|
max_values=min(5, len(options))
|
||||||
|
)
|
||||||
|
self.message = message
|
||||||
|
self.bot = bot
|
||||||
|
self.target_channel = target_channel
|
||||||
|
|
||||||
|
async def callback(self, interaction: discord.Interaction):
|
||||||
|
selected_tags = []
|
||||||
|
for tag_id_str in self.values:
|
||||||
|
tag_id = int(tag_id_str)
|
||||||
|
tag = discord.utils.get(self.target_channel.available_tags, id=tag_id)
|
||||||
|
if tag:
|
||||||
|
selected_tags.append(tag)
|
||||||
|
|
||||||
|
modal = TransferReasonModal(self.message, self.bot, self.target_channel, selected_tags)
|
||||||
|
await interaction.response.send_modal(modal)
|
||||||
|
|
||||||
|
class ForumTagView(View):
|
||||||
|
def __init__(self, message: discord.Message, bot, target_channel: ForumChannel):
|
||||||
|
super().__init__(timeout=180)
|
||||||
|
self.add_item(ForumTagSelect(message, bot, target_channel))
|
||||||
|
|
||||||
class TransferChannelSelect(ChannelSelect):
|
class TransferChannelSelect(ChannelSelect):
|
||||||
def __init__(self, message: discord.Message, bot):
|
def __init__(self, message: discord.Message, bot):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
@@ -1881,6 +1923,10 @@ class TransferChannelSelect(ChannelSelect):
|
|||||||
await interaction.response.send_message("❌ Impossible de récupérer le canal sélectionné.", ephemeral=True)
|
await interaction.response.send_message("❌ Impossible de récupérer le canal sélectionné.", ephemeral=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if isinstance(target_channel, ForumChannel) and target_channel.available_tags:
|
||||||
|
view = ForumTagView(self.message, self.bot, target_channel)
|
||||||
|
await interaction.response.send_message("🏷️ Sélectionnez un ou plusieurs tags pour ce post :", view=view, ephemeral=True)
|
||||||
|
else:
|
||||||
modal = TransferReasonModal(self.message, self.bot, target_channel)
|
modal = TransferReasonModal(self.message, self.bot, target_channel)
|
||||||
await interaction.response.send_modal(modal)
|
await interaction.response.send_modal(modal)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user