fix(modmail): button custom_id mismatch causing interaction timeout
All checks were successful
deploy / deploy (push) Successful in 21s
All checks were successful
deploy / deploy (push) Successful in 21s
- PersistentQuickOpen expects custom_id='modmail_quick_open'
- Panel button had custom_id='modmail_quick_open:{key}' (mismatch)
- Discord couldn't find the handler -> 3s timeout
- Added error logging on CategorySelect callback
This commit is contained in:
parent
4d2be145aa
commit
9312be91fd
1 changed files with 25 additions and 19 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
import contextlib
|
import contextlib
|
||||||
|
import logging
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
from discord import app_commands
|
from discord import app_commands
|
||||||
|
|
@ -27,26 +28,31 @@ class CategorySelect(discord.ui.Select):
|
||||||
)
|
)
|
||||||
|
|
||||||
async def callback(self, interaction: discord.Interaction):
|
async def callback(self, interaction: discord.Interaction):
|
||||||
category_key = self.values[0]
|
try:
|
||||||
categories = cfg.get_categories()
|
category_key = self.values[0]
|
||||||
cat = categories.get(category_key, {})
|
categories = cfg.get_categories()
|
||||||
data = cfg.get_config()
|
cat = categories.get(category_key, {})
|
||||||
guild = interaction.client.get_guild(data.get("guild_id"))
|
data = cfg.get_config()
|
||||||
if not guild:
|
guild = interaction.client.get_guild(data.get("guild_id"))
|
||||||
await interaction.response.send_message("Erreur: serveur introuvable.", ephemeral=True)
|
if not guild:
|
||||||
return
|
await interaction.response.send_message("Erreur: serveur introuvable.", ephemeral=True)
|
||||||
|
return
|
||||||
|
|
||||||
user = interaction.user
|
user = interaction.user
|
||||||
existing = cfg.get_ticket_by_user(user.id)
|
existing = cfg.get_ticket_by_user(user.id)
|
||||||
if existing:
|
if existing:
|
||||||
ch = guild.get_channel(existing["channel_id"])
|
ch = guild.get_channel(existing["channel_id"])
|
||||||
await interaction.response.send_message(
|
await interaction.response.send_message(
|
||||||
f"Tu as deja un ticket ouvert: {ch.mention if ch else 'inconnu'}",
|
f"Tu as deja un ticket ouvert: {ch.mention if ch else 'inconnu'}",
|
||||||
ephemeral=True,
|
ephemeral=True,
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
await interaction.response.send_modal(TicketModal(category_key, cat.get("name", category_key)))
|
await interaction.response.send_modal(TicketModal(category_key, cat.get("name", category_key)))
|
||||||
|
except Exception as e:
|
||||||
|
logging.getLogger("vision").error(f"CategorySelect callback error: {e}", exc_info=True)
|
||||||
|
if not interaction.response.is_done():
|
||||||
|
await interaction.response.send_message(f"Erreur interne: `{e}`", ephemeral=True)
|
||||||
|
|
||||||
|
|
||||||
class TicketModal(discord.ui.Modal, title="Nouveau Ticket"):
|
class TicketModal(discord.ui.Modal, title="Nouveau Ticket"):
|
||||||
|
|
@ -444,7 +450,7 @@ class ModMail(commands.Cog):
|
||||||
open_button = discord.ui.Button(
|
open_button = discord.ui.Button(
|
||||||
label=f"Ouvrir — {cat['name']}",
|
label=f"Ouvrir — {cat['name']}",
|
||||||
style=discord.ButtonStyle.primary,
|
style=discord.ButtonStyle.primary,
|
||||||
custom_id=f"modmail_quick_open:{key}",
|
custom_id="modmail_quick_open",
|
||||||
)
|
)
|
||||||
container.add_item(discord.ui.ActionRow(open_button))
|
container.add_item(discord.ui.ActionRow(open_button))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue